UNPKG

adui

Version:

<div> <img src="https://wxa.wxs.qq.com/mpweb/delivery/legacy/wxadtouch/upload/t1/od834zef_52939fc6.png" style="margin:40px 0 0 -8px; background-color: #fcfcfc; box-shadow: none;" /> </div>

358 lines (293 loc) 45.2 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports["default"] = void 0; var _react = _interopRequireWildcard(require("react")); var _propTypes = _interopRequireDefault(require("prop-types")); var _classnames = _interopRequireDefault(require("classnames")); var _Handle = _interopRequireDefault(require("rc-slider/lib/Handle")); var _Range = _interopRequireDefault(require("rc-slider/lib/Range")); var _Slider = _interopRequireDefault(require("rc-slider/lib/Slider")); var _numericInput = _interopRequireDefault(require("../numeric-input")); var _tooltip = _interopRequireDefault(require("../tooltip")); require("./style"); var _excluded = ["className", "defaultValue", "inputVisible", "marks", "max", "min", "onAfterChange", "onBeforeChange", "onChange", "range", "step", "style", "tipFormatter", "tooltipProps", "value"], _excluded2 = ["dragging", "index", "value"]; function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); } function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; } 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 _objectSpread(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 _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); } function _defineProperty(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; } 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 _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); } 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 _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 _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 _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; } 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; } 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; } var noop = function noop() {}; var prefix = "adui-slider"; var Slider = function Slider(_ref) { var _classNames; var className = _ref.className, defaultValue = _ref.defaultValue, inputVisible = _ref.inputVisible, marks = _ref.marks, max = _ref.max, min = _ref.min, onAfterChange = _ref.onAfterChange, onBeforeChange = _ref.onBeforeChange, onChange = _ref.onChange, range = _ref.range, step = _ref.step, style = _ref.style, tipFormatter = _ref.tipFormatter, tooltipProps = _ref.tooltipProps, valueProp = _ref.value, otherProps = _objectWithoutProperties(_ref, _excluded); var tooltipLeft = (0, _react.useRef)(null); var tooltipRight = (0, _react.useRef)(null); var tooltipCombined = (0, _react.useRef)(null); var _useState = (0, _react.useState)("separated"), _useState2 = _slicedToArray(_useState, 2), rangeTooltipCombinedStatus = _useState2[0], setRangeTooltipCombinedStatus = _useState2[1]; var _useState3 = (0, _react.useState)(false), _useState4 = _slicedToArray(_useState3, 2), active = _useState4[0], setActive = _useState4[1]; var _useState5 = (0, _react.useState)([]), _useState6 = _slicedToArray(_useState5, 2), tooltipVisibleArray = _useState6[0], setTooltipVisibleArray = _useState6[1]; var _useState7 = (0, _react.useState)(function () { var val; if (valueProp !== null) { val = typeof valueProp === "string" ? Number(valueProp) : valueProp; } else if (defaultValue !== null) { val = typeof defaultValue === "string" ? Number(defaultValue) : defaultValue; } if (val === undefined) { return val; } return range ? val : Number(val); }), _useState8 = _slicedToArray(_useState7, 2), value = _useState8[0], setValue = _useState8[1]; if (valueProp !== null && valueProp !== undefined && (_typeof(valueProp) === "object" || !isNaN(valueProp)) && (typeof valueProp === "string" ? Number(valueProp) : valueProp) !== value) { setValue(range ? valueProp : Number(valueProp)); } (0, _react.useEffect)(function () { if (range && Array.isArray(value) && (tooltipVisibleArray[0] || active) && tooltipLeft.current && tooltipRight.current) { var rectLeft = tooltipLeft.current.getBoundingClientRect(); var rectRight = tooltipRight.current.getBoundingClientRect(); if (rectLeft.left === rectRight.left) { setRangeTooltipCombinedStatus("overlapped"); } else if (rectLeft.left + rectLeft.width > rectRight.left) { setRangeTooltipCombinedStatus("combined"); if (tooltipCombined.current) { tooltipCombined.current.style.left = "calc(".concat(value[0], "% - ").concat(rectLeft.width / 2, "px)"); tooltipCombined.current.style.width = "calc(".concat(value[1] - value[0], "% + ").concat(rectLeft.width, "px)"); } } else { setRangeTooltipCombinedStatus("separated"); } } }, [value, range, active, tooltipVisibleArray]); var valuePropsObject = {}; var numericInputPropsObject = {}; if (defaultValue !== null) { valuePropsObject.defaultValue = defaultValue; } if (value !== null) { valuePropsObject.value = value; } if (defaultValue !== null && !Array.isArray(defaultValue)) { numericInputPropsObject.defaultValue = defaultValue; } if (value !== null && !Array.isArray(value)) { numericInputPropsObject.value = value; } var classSet = (0, _classnames["default"])(className, "".concat(prefix, "-wrapper"), (_classNames = {}, _defineProperty(_classNames, "".concat(prefix, "-active"), active), _defineProperty(_classNames, "".concat(prefix, "-hasMarks"), marks && Object.keys(marks).length), _classNames)); var stepString = step ? step.toString() : "1"; var precision = 0; if (stepString.includes(".")) { precision = stepString.length - stepString.indexOf(".") - 1; } var setTooltipVisible = function setTooltipVisible(bool) { if (bool) { setTooltipVisibleArray({ 0: true, 1: true }); } else if (!active) { setTooltipVisibleArray({ 0: false, 1: false }); } }; var handleWithTooltip = function handleWithTooltip(_ref2) { var dragging = _ref2.dragging, index = _ref2.index, val = _ref2.value, restProps = _objectWithoutProperties(_ref2, _excluded2); if (tipFormatter) { if (range) { return _react["default"].createElement(_Handle["default"], _extends({ value: val, onMouseEnter: function onMouseEnter() { return setTooltipVisible(true); }, onMouseLeave: function onMouseLeave() { return setTooltipVisible(false); } }, restProps)); } return _react["default"].createElement(_tooltip["default"], { key: index, popup: tipFormatter(val), placement: tooltipProps && tooltipProps.placement || "top", visible: tooltipVisibleArray[index] || active }, _react["default"].createElement(_Handle["default"], _extends({ value: val, onMouseEnter: function onMouseEnter() { return setTooltipVisible(true); }, onMouseLeave: function onMouseLeave() { return setTooltipVisible(false); } }, restProps))); } return _react["default"].createElement(_Handle["default"], _extends({ key: index, value: val }, restProps)); }; var handleBeforeChange = function handleBeforeChange(val) { setActive(true); document.documentElement.style.cursor = "pointer"; if (onBeforeChange) { onBeforeChange(val); } }; var handleAfterChange = function handleAfterChange(val) { setActive(false); setTooltipVisibleArray({ 0: false, 1: false }); document.documentElement.style.cursor = ""; if (onAfterChange) { onAfterChange(val); } }; var checkValueIsValid = function checkValueIsValid(val) { return val !== value && val !== null && val !== undefined && min !== undefined && max !== undefined && val >= min && val <= max; }; var handleChange = function handleChange(val) { var newValue = range ? val : Number(val); if (range || checkValueIsValid(newValue)) { if (valueProp === null) { setValue(newValue); } if (onChange) { onChange(newValue); } } }; var sliderProps = _objectSpread(_objectSpread({ handle: function handle(info) { return handleWithTooltip(info); }, marks: marks, min: min, max: max, onAfterChange: handleAfterChange, onBeforeChange: handleBeforeChange, onChange: handleChange, prefixCls: prefix, step: step }, valuePropsObject), otherProps); var slider = range ? _react["default"].createElement(_Range["default"], sliderProps) : _react["default"].createElement(_Slider["default"], sliderProps); return _react["default"].createElement("div", { className: classSet, style: style }, tipFormatter && range && Array.isArray(value) && _react["default"].createElement("div", { className: (0, _classnames["default"])("adui-slider-range-tooltip-wrapper", { "adui-slider-range-tooltip-wrapper-visible": tooltipVisibleArray[0] || active, "adui-slider-range-tooltip-wrapper-combined": rangeTooltipCombinedStatus === "combined", "adui-slider-range-tooltip-wrapper-overlapped": rangeTooltipCombinedStatus === "overlapped" }) }, _react["default"].createElement("div", { className: "adui-slider-range-tooltip adui-slider-range-tooltip-left", style: { left: "".concat(value[0], "%") }, ref: tooltipLeft }, tipFormatter(value[0])), _react["default"].createElement("div", { className: "adui-slider-range-tooltip adui-slider-range-tooltip-right", style: { left: "".concat(value[1], "%") }, ref: tooltipRight }, tipFormatter(value[1])), _react["default"].createElement("div", { className: "adui-slider-range-tooltip-combined", ref: tooltipCombined }, tipFormatter(value[0]), " - ", tipFormatter(value[1]))), slider, inputVisible && !range && _react["default"].createElement(_numericInput["default"], _extends({ placeholder: "", precision: precision, onChange: function onChange(val) { handleChange(typeof val === "string" ? 0 : val); }, step: step, style: { marginLeft: "12px", width: "56px", height: "22px" } }, numericInputPropsObject, otherProps))); }; Slider.propTypes = { className: _propTypes["default"].string, defaultValue: _propTypes["default"].any, inputVisible: _propTypes["default"].bool, marks: _propTypes["default"].any, max: _propTypes["default"].number, min: _propTypes["default"].number, onAfterChange: _propTypes["default"].func, onBeforeChange: _propTypes["default"].func, onChange: _propTypes["default"].func, range: _propTypes["default"].bool, step: _propTypes["default"].number, style: _propTypes["default"].object, tipFormatter: _propTypes["default"].func, tooltipProps: _propTypes["default"].object, value: _propTypes["default"].any }; Slider.defaultProps = { className: undefined, defaultValue: null, inputVisible: true, marks: {}, max: 100, min: 0, onAfterChange: noop, onBeforeChange: noop, onChange: noop, range: false, step: 1, style: {}, tipFormatter: null, tooltipProps: {}, value: null }; var _default = Slider; exports["default"] = _default; //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJub29wIiwicHJlZml4IiwiU2xpZGVyIiwiY2xhc3NOYW1lIiwiZGVmYXVsdFZhbHVlIiwiaW5wdXRWaXNpYmxlIiwibWFya3MiLCJtYXgiLCJtaW4iLCJvbkFmdGVyQ2hhbmdlIiwib25CZWZvcmVDaGFuZ2UiLCJvbkNoYW5nZSIsInJhbmdlIiwic3RlcCIsInN0eWxlIiwidGlwRm9ybWF0dGVyIiwidG9vbHRpcFByb3BzIiwidmFsdWVQcm9wIiwidmFsdWUiLCJvdGhlclByb3BzIiwidG9vbHRpcExlZnQiLCJ1c2VSZWYiLCJ0b29sdGlwUmlnaHQiLCJ0b29sdGlwQ29tYmluZWQiLCJ1c2VTdGF0ZSIsInJhbmdlVG9vbHRpcENvbWJpbmVkU3RhdHVzIiwic2V0UmFuZ2VUb29sdGlwQ29tYmluZWRTdGF0dXMiLCJhY3RpdmUiLCJzZXRBY3RpdmUiLCJ0b29sdGlwVmlzaWJsZUFycmF5Iiwic2V0VG9vbHRpcFZpc2libGVBcnJheSIsInZhbCIsIk51bWJlciIsInVuZGVmaW5lZCIsInNldFZhbHVlIiwiaXNOYU4iLCJ1c2VFZmZlY3QiLCJBcnJheSIsImlzQXJyYXkiLCJjdXJyZW50IiwicmVjdExlZnQiLCJnZXRCb3VuZGluZ0NsaWVudFJlY3QiLCJyZWN0UmlnaHQiLCJsZWZ0Iiwid2lkdGgiLCJ2YWx1ZVByb3BzT2JqZWN0IiwibnVtZXJpY0lucHV0UHJvcHNPYmplY3QiLCJjbGFzc1NldCIsImNsYXNzTmFtZXMiLCJPYmplY3QiLCJrZXlzIiwibGVuZ3RoIiwic3RlcFN0cmluZyIsInRvU3RyaW5nIiwicHJlY2lzaW9uIiwiaW5jbHVkZXMiLCJpbmRleE9mIiwic2V0VG9vbHRpcFZpc2libGUiLCJib29sIiwiaGFuZGxlV2l0aFRvb2x0aXAiLCJkcmFnZ2luZyIsImluZGV4IiwicmVzdFByb3BzIiwicGxhY2VtZW50IiwiaGFuZGxlQmVmb3JlQ2hhbmdlIiwiZG9jdW1lbnQiLCJkb2N1bWVudEVsZW1lbnQiLCJjdXJzb3IiLCJoYW5kbGVBZnRlckNoYW5nZSIsImNoZWNrVmFsdWVJc1ZhbGlkIiwiaGFuZGxlQ2hhbmdlIiwibmV3VmFsdWUiLCJzbGlkZXJQcm9wcyIsImhhbmRsZSIsImluZm8iLCJwcmVmaXhDbHMiLCJzbGlkZXIiLCJtYXJnaW5MZWZ0IiwiaGVpZ2h0IiwicHJvcFR5cGVzIiwiUHJvcFR5cGVzIiwic3RyaW5nIiwiYW55IiwibnVtYmVyIiwiZnVuYyIsIm9iamVjdCIsImRlZmF1bHRQcm9wcyJdLCJzb3VyY2VzIjpbIi4uLy4uL2NvbXBvbmVudHMvc2xpZGVyL1NsaWRlci50c3giXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFJlYWN0LCB7IHVzZUVmZmVjdCwgdXNlUmVmLCB1c2VTdGF0ZSB9IGZyb20gXCJyZWFjdFwiXG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCJcbmltcG9ydCBjbGFzc05hbWVzIGZyb20gXCJjbGFzc25hbWVzXCJcbmltcG9ydCBSY0hhbmRsZSBmcm9tIFwicmMtc2xpZGVyL2xpYi9IYW5kbGVcIlxuaW1wb3J0IFJjUmFuZ2UgZnJvbSBcInJjLXNsaWRlci9saWIvUmFuZ2VcIlxuaW1wb3J0IFJjU2xpZGVyIGZyb20gXCJyYy1zbGlkZXIvbGliL1NsaWRlclwiXG5pbXBvcnQgTnVtZXJpY0lucHV0IGZyb20gXCIuLi9udW1lcmljLWlucHV0XCJcbmltcG9ydCBUb29sdGlwLCB7IElUb29sdGlwUHJvcHMgfSBmcm9tIFwiLi4vdG9vbHRpcFwiXG5pbXBvcnQgXCIuL3N0eWxlXCJcblxuY29uc3Qgbm9vcCA9ICgpID0+IHt9XG5cbmNvbnN0IHByZWZpeCA9IFwiYWR1aS1zbGlkZXJcIlxuXG5pbnRlcmZhY2UgSUhhbmRsZUdlbmVyYXRvckluZm8ge1xuICBba2V5OiBzdHJpbmddOiBhbnlcbiAgZHJhZ2dpbmc6IGJvb2xlYW5cbiAgaW5kZXg6IG51bWJlclxuICB2YWx1ZTogbnVtYmVyXG59XG5cbmludGVyZmFjZSBJVmFsdWUge1xuICBkZWZhdWx0VmFsdWU/OiBTbGlkZXJWYWx1ZVxuICB2YWx1ZT86IFNsaWRlclZhbHVlXG59XG5cbmludGVyZmFjZSBJTnVtZXJpY0lucHV0VmFsdWUge1xuICBkZWZhdWx0VmFsdWU/OiBudW1iZXIgfCB1bmRlZmluZWQgfCBudWxsXG4gIHZhbHVlPzogbnVtYmVyIHwgdW5kZWZpbmVkIHwgbnVsbFxufVxuXG5leHBvcnQgaW50ZXJmYWNlIElTbGlkZXJNYXJrcyB7XG4gIFtrZXk6IG51bWJlcl06XG4gICAgfCBSZWFjdC5SZWFjdE5vZGVcbiAgICB8IHtcbiAgICAgICAgc3R5bGU6IFJlYWN0LkNTU1Byb3BlcnRpZXNcbiAgICAgICAgbGFiZWw6IFJlYWN0LlJlYWN0Tm9kZVxuICAgICAgfVxufVxuXG5leHBvcnQgdHlwZSBTbGlkZXJWYWx1ZSA9IG51bWJlciB8IFtudW1iZXIsIG51bWJlcl0gfCB1bmRlZmluZWQgfCBudWxsXG5cbmV4cG9ydCB0eXBlIENoYW5nZUhhbmRsZXIgPSAodmFsdWU6IFNsaWRlclZhbHVlKSA9PiB2b2lkXG5cbmV4cG9ydCBpbnRlcmZhY2UgSVNsaWRlclByb3BzIHtcbiAgW2tleTogc3RyaW5nXTogYW55XG4gIC8qKlxuICAgKiDpmYTliqDnsbvlkI1cbiAgICovXG4gIGNsYXNzTmFtZT86IHN0cmluZ1xuICAvKipcbiAgICog5Yid5aeL55qE6buY6K6k5YC8XG4gICAqL1xuICBkZWZhdWx0VmFsdWU/OiBTbGlkZXJWYWx1ZVxuICAvKipcbiAgICog5piv5ZCm5pSv5oyB6L6T5YWl5qGG77yM5q2kIHByb3Ag5LiO5Y+M5ruR5Z2X5qih5byP5LqS5palXG4gICAqL1xuICBpbnB1dFZpc2libGU/OiBib29sZWFuXG4gIC8qKlxuICAgKiDliLvluqbmoIforrDvvIzkvovlpoLvvJp7MjU6IFwiMjUlXCIsIDUwOiBcIjUw4oSDXCJ9XG4gICAqL1xuICBtYXJrcz86IElTbGlkZXJNYXJrc1xuICAvKipcbiAgICog5pyA5aSn5YC8XG4gICAqL1xuICBtYXg/OiBudW1iZXJcbiAgLyoqXG4gICAqIOacgOWwj+WAvFxuICAgKi9cbiAgbWluPzogbnVtYmVyXG4gIC8qKlxuICAgKiDlnKggYG9ubW91c2V1cGAg5pe26Kem5Y+R55qEIGhhbmRsZXJcbiAgICovXG4gIG9uQWZ0ZXJDaGFuZ2U/OiBDaGFuZ2VIYW5kbGVyXG4gIC8qKlxuICAgKiDlnKggYG9ubW91c2Vkb3duYCDml7bop6blj5HnmoQgaGFuZGxlclxuICAgKi9cbiAgb25CZWZvcmVDaGFuZ2U/OiBDaGFuZ2VIYW5kbGVyXG4gIC8qKlxuICAgKiDlnKjlgLzlj5HnlJ/lj5jljJbml7bop6blj5HnmoQgaGFuZGxlclxuICAgKi9cbiAgb25DaGFuZ2U/OiBDaGFuZ2VIYW5kbGVyXG4gIC8qKlxuICAgKiDlj4zmu5HlnZfmqKHlvI9cbiAgICovXG4gIHJhbmdlPzogYm9vbGVhblxuICAvKipcbiAgICog5q2l6ZW/77yM5b+F6aG75aSn5LqOIDBcbiAgICovXG4gIHN0ZXA/OiBudW1iZXJcbiAgLyoqXG4gICAqIOmZhOWKoOagt+W8j1xuICAgKi9cbiAgc3R5bGU/OiBSZWFjdC5DU1NQcm9wZXJ0aWVzXG4gIC8qKlxuICAgKiDlr7nkuo4gVG9vbHRpcCDlhoXlrrnov5vooYznvJbovpHvvIzlpoLvvJp0aXBGb3JtYXR0ZXI9e3ZhbHVlID0+IGAke3ZhbHVlfeWFg2B9XG4gICAqL1xuICB0aXBGb3JtYXR0ZXI/OiBudWxsIHwgKCh2YWx1ZTogbnVtYmVyKSA9PiBSZWFjdC5SZWFjdE5vZGUpXG4gIC8qKlxuICAgKiDlvIDlkK8gdGlwRm9ybWF0dGVyIOWQju+8jOWvueS6jiBUb29sdGlwIOeahCBwcm9wc1xuICAgKi9cbiAgdG9vbHRpcFByb3BzPzogSVRvb2x0aXBQcm9wc1xuICAvKipcbiAgICog6K6+572u5b2T5YmN55qE5YC8XG4gICAqL1xuICB2YWx1ZT86IFNsaWRlclZhbHVlXG59XG5cbi8qKlxuICog5ruR5Yqo5p2h55So5LqO5Lul5ouW5ou955qE5pa55byP77yM5pu05Lq65oCn5YyW5Zyw5a6M5oiQ6L6T5YWl5pWw5o2u44CB6YCJ5oup5pWw5o2u5Yy66Ze0562J55uu55qE44CCXG4gKi9cbmNvbnN0IFNsaWRlcjogUmVhY3QuRkM8SVNsaWRlclByb3BzPiA9ICh7XG4gIGNsYXNzTmFtZSxcbiAgZGVmYXVsdFZhbHVlLFxuICBpbnB1dFZpc2libGUsXG4gIG1hcmtzLFxuICBtYXgsXG4gIG1pbixcbiAgb25BZnRlckNoYW5nZSxcbiAgb25CZWZvcmVDaGFuZ2UsXG4gIG9uQ2hhbmdlLFxuICByYW5nZSxcbiAgc3RlcCxcbiAgc3R5bGUsXG4gIHRpcEZvcm1hdHRlcixcbiAgdG9vbHRpcFByb3BzLFxuICB2YWx1ZTogdmFsdWVQcm9wLFxuICAuLi5vdGhlclByb3BzXG59OiBJU2xpZGVyUHJvcHMpID0+IHtcbiAgY29uc3QgdG9vbHRpcExlZnQgPSB1c2VSZWY8SFRNTERpdkVsZW1lbnQ+KG51bGwpXG4gIGNvbnN0IHRvb2x0aXBSaWdodCA9IHVzZVJlZjxIVE1MRGl2RWxlbWVudD4obnVsbClcbiAgY29uc3QgdG9vbHRpcENvbWJpbmVkID0gdXNlUmVmPEhUTUxEaXZFbGVtZW50PihudWxsKVxuICBjb25zdCBbcmFuZ2VUb29sdGlwQ29tYmluZWRTdGF0dXMsIHNldFJhbmdlVG9vbHRpcENvbWJpbmVkU3RhdHVzXSA9IHVzZVN0YXRlPFxuICAgIFwiY29tYmluZWRcIiB8IFwic2VwYXJhdGVkXCIgfCBcIm92ZXJsYXBwZWRcIlxuICA+KFwic2VwYXJhdGVkXCIpXG4gIGNvbnN0IFthY3RpdmUsIHNldEFjdGl2ZV0gPSB1c2VTdGF0ZShmYWxzZSlcbiAgY29uc3QgW3Rvb2x0aXBWaXNpYmxlQXJyYXksIHNldFRvb2x0aXBWaXNpYmxlQXJyYXldID0gdXNlU3RhdGU8e1xuICAgIFtpbmRleDogbnVtYmVyXTogYm9vbGVhblxuICB9PihbXSlcbiAgLyoqXG4gICAqIOWIneWni+WMliBTbGlkZXIg55qE5YC8XG4gICAqIDEuIOS8mOWFiOWIpOaWrSBQcm9wIHZhbHVl77yM5aaC5p6c5a2Y5ZyoIFByb3AgdmFsdWXvvIzliJkgU2xpZGVyIOWujOWFqOS6pOeUseWklumDqOaOp+WItu+8jOWGhemDqOeKtuaAgeaXoOaViO+8m1xuICAgKiAyLiDlho3liKTmlq0gUHJvcCBkZWZhdWx0VmFsdWXvvIzlpoLmnpzlrZjlnKjpu5jorqTlgLzvvIzliJkgU2xpZGVyIOWAvOS4uuatpOm7mOiupOWAvOOAglxuICAgKi9cbiAgY29uc3QgW3ZhbHVlLCBzZXRWYWx1ZV0gPSB1c2VTdGF0ZSgoKTogU2xpZGVyVmFsdWUgPT4ge1xuICAgIGxldCB2YWxcbiAgICBpZiAodmFsdWVQcm9wICE9PSBudWxsKSB7XG4gICAgICB2YWwgPSB0eXBlb2YgdmFsdWVQcm9wID09PSBcInN0cmluZ1wiID8gTnVtYmVyKHZhbHVlUHJvcCkgOiB2YWx1ZVByb3BcbiAgICB9IGVsc2UgaWYgKGRlZmF1bHRWYWx1ZSAhPT0gbnVsbCkge1xuICAgICAgdmFsID1cbiAgICAgICAgdHlwZW9mIGRlZmF1bHRWYWx1ZSA9PT0gXCJzdHJpbmdcIiA/IE51bWJlcihkZWZhdWx0VmFsdWUpIDogZGVmYXVsdFZhbHVlXG4gICAgfVxuICAgIGlmICh2YWwgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIHZhbFxuICAgIH1cbiAgICByZXR1cm4gcmFuZ2UgPyB2YWwgOiBOdW1iZXIodmFsKVxuICB9KVxuXG4gIC8vIOebuOW9k+S6jueUn+WRveWRqOacnyBnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHNcbiAgaWYgKFxuICAgIHZhbHVlUHJvcCAhPT0gbnVsbCAmJlxuICAgIHZhbHVlUHJvcCAhPT0gdW5kZWZpbmVkICYmXG4gICAgKHR5cGVvZiB2YWx1ZVByb3AgPT09IFwib2JqZWN0XCIgfHwgIWlzTmFOKHZhbHVlUHJvcCkpICYmXG4gICAgKHR5cGVvZiB2YWx1ZVByb3AgPT09IFwic3RyaW5nXCIgPyBOdW1iZXIodmFsdWVQcm9wKSA6IHZhbHVlUHJvcCkgIT09IHZhbHVlXG4gICkge1xuICAgIHNldFZhbHVlKHJhbmdlID8gdmFsdWVQcm9wIDogTnVtYmVyKHZhbHVlUHJvcCkpXG4gIH1cblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIC8vIOi/memHjOWBmuWPjOa7keWdl+aooeW8j+aXtueahCB0b29sdGlwIOiuvuiuoVxuICAgIGlmIChcbiAgICAgIHJhbmdlICYmXG4gICAgICBBcnJheS5pc0FycmF5KHZhbHVlKSAmJlxuICAgICAgKHRvb2x0aXBWaXNpYmxlQXJyYXlbMF0gfHwgYWN0aXZlKSAmJlxuICAgICAgdG9vbHRpcExlZnQuY3VycmVudCAmJlxuICAgICAgdG9vbHRpcFJpZ2h0LmN1cnJlbnRcbiAgICApIHtcbiAgICAgIGNvbnN0IHJlY3RMZWZ0ID0gdG9vbHRpcExlZnQuY3VycmVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKVxuICAgICAgY29uc3QgcmVjdFJpZ2h0ID0gdG9vbHRpcFJpZ2h0LmN1cnJlbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KClcbiAgICAgIC8vIOWIpOaWreS4pOS4qiB0b29sdGlwIOaYr+WQpuWcqOS9jee9ruS4iuWtmOWcqOmHjeWPoFxuICAgICAgaWYgKHJlY3RMZWZ0LmxlZnQgPT09IHJlY3RSaWdodC5sZWZ0KSB7XG4gICAgICAgIHNldFJhbmdlVG9vbHRpcENvbWJpbmVkU3RhdHVzKFwib3ZlcmxhcHBlZFwiKVxuICAgICAgfSBlbHNlIGlmIChyZWN0TGVmdC5sZWZ0ICsgcmVjdExlZnQud2lkdGggPiByZWN0UmlnaHQubGVmdCkge1xuICAgICAgICBzZXRSYW5nZVRvb2x0aXBDb21iaW5lZFN0YXR1cyhcImNvbWJpbmVkXCIpXG5cbiAgICAgICAgaWYgKHRvb2x0aXBDb21iaW5lZC5jdXJyZW50KSB7XG4gICAgICAgICAgdG9vbHRpcENvbWJpbmVkLmN1cnJlbnQuc3R5bGUubGVmdCA9IGBjYWxjKCR7dmFsdWVbMF19JSAtICR7XG4gICAgICAgICAgICByZWN0TGVmdC53aWR0aCAvIDJcbiAgICAgICAgICB9cHgpYFxuXG4gICAgICAgICAgdG9vbHRpcENvbWJpbmVkLmN1cnJlbnQuc3R5bGUud2lkdGggPSBgY2FsYygke1xuICAgICAgICAgICAgdmFsdWVbMV0gLSB2YWx1ZVswXVxuICAgICAgICAgIH0lICsgJHtyZWN0TGVmdC53aWR0aH1weClgXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHNldFJhbmdlVG9vbHRpcENvbWJpbmVkU3RhdHVzKFwic2VwYXJhdGVkXCIpXG4gICAgICB9XG4gICAgfVxuICB9LCBbdmFsdWUsIHJhbmdlLCBhY3RpdmUsIHRvb2x0aXBWaXNpYmxlQXJyYXldKVxuXG4gIGNvbnN0IHZhbHVlUHJvcHNPYmplY3Q6IElWYWx1ZSA9IHt9XG4gIGNvbnN0IG51bWVyaWNJbnB1dFByb3BzT2JqZWN0OiBJTnVtZXJpY0lucHV0VmFsdWUgPSB7fVxuXG4gIGlmIChkZWZhdWx0VmFsdWUgIT09IG51bGwpIHtcbiAgICB2YWx1ZVByb3BzT2JqZWN0LmRlZmF1bHRWYWx1ZSA9IGRlZmF1bHRWYWx1ZVxuICB9XG4gIGlmICh2YWx1ZSAhPT0gbnVsbCkge1xuICAgIHZhbHVlUHJvcHNPYmplY3QudmFsdWUgPSB2YWx1ZVxuICB9XG5cbiAgaWYgKGRlZmF1bHRWYWx1ZSAhPT0gbnVsbCAmJiAhQXJyYXkuaXNBcnJheShkZWZhdWx0VmFsdWUpKSB7XG4gICAgbnVtZXJpY0lucHV0UHJvcHNPYmplY3QuZGVmYXVsdFZhbHVlID0gZGVmYXVsdFZhbHVlXG4gIH1cbiAgaWYgKHZhbHVlICE9PSBudWxsICYmICFBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgIG51bWVyaWNJbnB1dFByb3BzT2JqZWN0LnZhbHVlID0gdmFsdWVcbiAgfVxuXG4gIGNvbnN0IGNsYXNzU2V0ID0gY2xhc3NOYW1lcyhjbGFzc05hbWUsIGAke3ByZWZpeH0td3JhcHBlcmAsIHtcbiAgICBbYCR7cHJlZml4fS1hY3RpdmVgXTogYWN0aXZlLFxuICAgIFtgJHtwcmVmaXh9LWhhc01hcmtzYF06IG1hcmtzICYmIE9iamVjdC5rZXlzKG1hcmtzKS5sZW5ndGgsXG4gIH0pXG5cbiAgY29uc3Qgc3RlcFN0cmluZyA9IHN0ZXAgPyBzdGVwLnRvU3RyaW5nKCkgOiBcIjFcIlxuICBsZXQgcHJlY2lzaW9uID0gMFxuICBpZiAoc3RlcFN0cmluZy5pbmNsdWRlcyhcIi5cIikpIHtcbiAgICBwcmVjaXNpb24gPSBzdGVwU3RyaW5nLmxlbmd0aCAtIHN0ZXBTdHJpbmcuaW5kZXhPZihcIi5cIikgLSAxXG4gIH1cblxuICBjb25zdCBzZXRUb29sdGlwVmlzaWJsZSA9IChib29sOiBib29sZWFuKSA9PiB7XG4gICAgaWYgKGJvb2wpIHtcbiAgICAgIHNldFRvb2x0aXBWaXNpYmxlQXJyYXkoe1xuICAgICAgICAwOiB0cnVlLFxuICAgICAgICAxOiB0cnVlLFxuICAgICAgfSlcbiAgICB9IGVsc2UgaWYgKCFhY3RpdmUpIHtcbiAgICAgIHNldFRvb2x0aXBWaXNpYmxlQXJyYXkoe1xuICAgICAgICAwOiBmYWxzZSxcbiAgICAgICAgMTogZmFsc2UsXG4gICAgICB9KVxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IGhhbmRsZVdpdGhUb29sdGlwID0gKHtcbiAgICBkcmFnZ2luZyxcbiAgICBpbmRleCxcbiAgICB2YWx1ZTogdmFsLFxuICAgIC4uLnJlc3RQcm9wc1xuICB9OiBJSGFuZGxlR2VuZXJhdG9ySW5mbykgPT4ge1xuICAgIGlmICh0aXBGb3JtYXR0ZXIpIHtcbiAgICAgIGlmIChyYW5nZSkge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgIDxSY0hhbmRsZVxuICAgICAgICAgICAgdmFsdWU9e3ZhbH1cbiAgICAgICAgICAgIG9uTW91c2VFbnRlcj17KCkgPT4gc2V0VG9vbHRpcFZpc2libGUodHJ1ZSl9XG4gICAgICAgICAgICBvbk1vdXNlTGVhdmU9eygpID0+IHNldFRvb2x0aXBWaXNpYmxlKGZhbHNlKX1cbiAgICAgICAgICAgIHsuLi5yZXN0UHJvcHN9XG4gICAgICAgICAgLz5cbiAgICAgICAgKVxuICAgICAgfVxuICAgICAgcmV0dXJuIChcbiAgICAgICAgPFRvb2x0aXBcbiAgICAgICAgICBrZXk9e2luZGV4fVxuICAgICAgICAgIHBvcHVwPXt0aXBGb3JtYXR0ZXIodmFsKX1cbiAgICAgICAgICBwbGFjZW1lbnQ9eyh0b29sdGlwUHJvcHMgJiYgdG9vbHRpcFByb3BzLnBsYWNlbWVudCkgfHwgXCJ0b3BcIn1cbiAgICAgICAgICB2aXNpYmxlPXt0b29sdGlwVmlzaWJsZUFycmF5W2luZGV4XSB8fCBhY3RpdmV9XG4gICAgICAgID5cbiAgICAgICAgICA8UmNIYW5kbGVcbiAgICAgICAgICAgIHZhbHVlPXt2YWx9XG4gICAgICAgICAgICBvbk1vdXNlRW50ZXI9eygpID0+IHNldFRvb2x0aXBWaXNpYmxlKHRydWUpfVxuICAgICAgICAgICAgb25Nb3VzZUxlYXZlPXsoKSA9PiBzZXRUb29sdGlwVmlzaWJsZShmYWxzZSl9XG4gICAgICAgICAgICB7Li4ucmVzdFByb3BzfVxuICAgICAgICAgIC8+XG4gICAgICAgIDwvVG9vbHRpcD5cbiAgICAgIClcbiAgICB9XG5cbiAgICByZXR1cm4gPFJjSGFuZGxlIGtleT17aW5kZXh9IHZhbHVlPXt2YWx9IHsuLi5yZXN0UHJvcHN9IC8+XG4gIH1cblxuICBjb25zdCBoYW5kbGVCZWZvcmVDaGFuZ2UgPSAodmFsOiBTbGlkZXJWYWx1ZSkgPT4ge1xuICAgIHNldEFjdGl2ZSh0cnVlKVxuICAgIC8vIOaLluaLveW8gOWni++8jOatpOaXtuS/neivgei/h+eoi+S4rem8oOagh+enu+WKqOWIsOWTqumHjOaJi+WKv+mDveS4jeWPmFxuICAgIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zdHlsZS5jdXJzb3IgPSBcInBvaW50ZXJcIlxuICAgIGlmIChvbkJlZm9yZUNoYW5nZSkge1xuICAgICAgb25CZWZvcmVDaGFuZ2UodmFsKVxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IGhhbmRsZUFmdGVyQ2hhbmdlID0gKHZhbDogU2xpZGVyVmFsdWUpID0+IHtcbiAgICBzZXRBY3RpdmUoZmFsc2UpXG4gICAgc2V0VG9vbHRpcFZpc2libGVBcnJheSh7XG4gICAgICAwOiBmYWxzZSxcbiAgICAgIDE6IGZhbHNlLFxuICAgIH0pXG4gICAgLy8g5ouW5ou957uT5p2f77yM5qC35byP6YeN572uXG4gICAgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlLmN1cnNvciA9IFwiXCJcbiAgICBpZiAob25BZnRlckNoYW5nZSkge1xuICAgICAgb25BZnRlckNoYW5nZSh2YWwpXG4gICAgfVxuICB9XG5cbiAgY29uc3QgY2hlY2tWYWx1ZUlzVmFsaWQgPSAodmFsOiBTbGlkZXJWYWx1ZSkgPT4ge1xuICAgIHJldHVybiAoXG4gICAgICB2YWwgIT09IHZhbHVlICYmXG4gICAgICB2YWwgIT09IG51bGwgJiZcbiAgICAgIHZhbCAhPT0gdW5kZWZpbmVkICYmXG4gICAgICBtaW4gIT09IHVuZGVmaW5lZCAmJlxuICAgICAgbWF4ICE9PSB1bmRlZmluZWQgJiZcbiAgICAgIHZhbCA+PSBtaW4gJiZcbiAgICAgIHZhbCA8PSBtYXhcbiAgICApXG4gIH1cblxuICBjb25zdCBoYW5kbGVDaGFuZ2UgPSAodmFsOiBTbGlkZXJWYWx1ZSkgPT4ge1xuICAgIGNvbnN0IG5ld1ZhbHVlID0gcmFuZ2UgPyB2YWwgOiBOdW1iZXIodmFsKVxuICAgIGlmIChyYW5nZSB8fCBjaGVja1ZhbHVlSXNWYWxpZChuZXdWYWx1ZSkpIHtcbiAgICAgIGlmICh2YWx1ZVByb3AgPT09IG51bGwpIHtcbiAgICAgICAgc2V0VmFsdWUobmV3VmFsdWUpXG4gICAgICB9XG4gICAgICBpZiAob25DaGFuZ2UpIHtcbiAgICAgICAgb25DaGFuZ2UobmV3VmFsdWUpXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgY29uc3Qgc2xpZGVyUHJvcHMgPSB7XG4gICAgaGFuZGxlOiAoaW5mbzogSUhhbmRsZUdlbmVyYXRvckluZm8pID0+IGhhbmRsZVdpdGhUb29sdGlwKGluZm8pLFxuICAgIG1hcmtzLFxuICAgIG1pbixcbiAgICBtYXgsXG4gICAgb25BZnRlckNoYW5nZTogaGFuZGxlQWZ0ZXJDaGFuZ2UsXG4gICAgb25CZWZvcmVDaGFuZ2U6IGhhbmRsZUJlZm9yZUNoYW5nZSxcbiAgICBvbkNoYW5nZTogaGFuZGxlQ2hhbmdlLFxuICAgIHByZWZpeENsczogcHJlZml4LFxuICAgIHN0ZXAsXG4gICAgLi4udmFsdWVQcm9wc09iamVjdCxcbiAgICAuLi5vdGhlclByb3BzLFxuICB9XG5cbiAgY29uc3Qgc2xpZGVyID0gcmFuZ2UgPyAoXG4gICAgPFJjUmFuZ2Ugey4uLnNsaWRlclByb3BzfSAvPlxuICApIDogKFxuICAgIDxSY1NsaWRlciB7Li4uc2xpZGVyUHJvcHN9IC8+XG4gIClcblxuICByZXR1cm4gKFxuICAgIDxkaXYgY2xhc3NOYW1lPXtjbGFzc1NldH0gc3R5bGU9e3N0eWxlfT5cbiAgICAgIHt0aXBGb3JtYXR0ZXIgJiYgcmFuZ2UgJiYgQXJyYXkuaXNBcnJheSh2YWx1ZSkgJiYgKFxuICAgICAgICA8ZGl2XG4gICAgICAgICAgY2xhc3NOYW1lPXtjbGFzc05hbWVzKFwiYWR1aS1zbGlkZXItcmFuZ2UtdG9vbHRpcC13cmFwcGVyXCIsIHtcbiAgICAgICAgICAgIFwiYWR1aS1zbGlkZXItcmFuZ2UtdG9vbHRpcC13cmFwcGVyLXZpc2libGVcIjpcbiAgICAgICAgICAgICAgdG9vbHRpcFZpc2libGVBcnJheVswXSB8fCBhY3RpdmUsXG4gICAgICAgICAgICBcImFkdWktc2xpZGVyLXJhbmdlLXRvb2x0aXAtd3JhcHBlci1jb21iaW5lZFwiOlxuICAgICAgICAgICAgICByYW5nZVRvb2x0aXBDb21iaW5lZFN0YXR1cyA9PT0gXCJjb21iaW5lZFwiLFxuICAgICAgICAgICAgXCJhZHVpLXNsaWRlci1yYW5nZS10b29sdGlwLXdyYXBwZXItb3ZlcmxhcHBlZFwiOlxuICAgICAgICAgICAgICByYW5nZVRvb2x0aXBDb21iaW5lZFN0YXR1cyA9PT0gXCJvdmVybGFwcGVkXCIsXG4gICAgICAgICAgfSl9XG4gICAgICAgID5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBjbGFzc05hbWU9XCJhZHVpLXNsaWRlci1yYW5nZS10b29sdGlwIGFkdWktc2xpZGVyLXJhbmdlLXRvb2x0aXAtbGVmdFwiXG4gICAgICAgICAgICBzdHlsZT17e1xuICAgICAgICAgICAgICBsZWZ0OiBgJHt2YWx1ZVswXX0lYCxcbiAgICAgICAgICAgIH19XG4gICAgICAgICAgICByZWY9e3Rvb2x0aXBMZWZ0fVxuICAgICAgICAgID5cbiAgICAgICAgICAgIHt0aXBGb3JtYXR0ZXIodmFsdWVbMF0pfVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzTmFtZT1cImFkdWktc2xpZGVyLXJhbmdlLXRvb2x0aXAgYWR1aS1zbGlkZXItcmFuZ2UtdG9vbHRpcC1yaWdodFwiXG4gICAgICAgICAgICBzdHlsZT17e1xuICAgICAgICAgICAgICBsZWZ0OiBgJHt2YWx1ZVsxXX0lYCxcbiAgICAgICAgICAgIH19XG4gICAgICAgICAgICByZWY9e3Rvb2x0aXBSaWdodH1cbiAgICAgICAgICA+XG4gICAgICAgICAgICB7dGlwRm9ybWF0dGVyKHZhbHVlWzFdKX1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBjbGFzc05hbWU9XCJhZHVpLXNsaWRlci1yYW5nZS10b29sdGlwLWNvbWJpbmVkXCJcbiAgICAgICAgICAgIHJlZj17dG9vbHRpcENvbWJpbmVkfVxuICAgICAgICAgID5cbiAgICAgICAgICAgIHt0aXBGb3JtYXR0ZXIodmFsdWVbMF0pfSAtIHt0aXBGb3JtYXR0ZXIodmFsdWVbMV0pfVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICl9XG4gICAgICB7c2xpZGVyfVxuICAgICAge2lucHV0VmlzaWJsZSAmJiAhcmFuZ2UgJiYgKFxuICAgICAgICA8TnVtZXJpY0lucHV0XG4gICAgICAgICAgcGxhY2Vob2xkZXI9XCJcIlxuICAgICAgICAgIHByZWNpc2lvbj17cHJlY2lzaW9ufVxuICAgICAgICAgIG9uQ2hhbmdlPXsodmFsKSA9PiB7XG4gICAgICAgICAgICBoYW5kbGVDaGFuZ2UodHlwZW9mIHZhbCA9PT0gXCJzdHJpbmdcIiA/IDAgOiB2YWwpXG4gICAgICAgICAgfX1cbiAgICAgICAgICBzdGVwPXtzdGVwfVxuICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICBtYXJnaW5MZWZ0OiBcIjEycHhcIixcbiAgICAgICAgICAgIHdpZHRoOiBcIjU2cHhcIixcbiAgICAgICAgICAgIGhlaWdodDogXCIyMnB4XCIsXG4gICAgICAgICAgfX1cbiAgICAgICAgICB7Li4ubnVtZXJpY0lucHV0UHJvcHNPYmplY3R9XG4gICAgICAgICAgey4uLm90aGVyUHJvcHN9XG4gICAgICAgIC8+XG4gICAgICApfVxuICAgIDwvZGl2PlxuICApXG59XG5cblNsaWRlci5wcm9wVHlwZXMgPSB7XG4gIC8qKlxuICAgKiDpmYTliqDnsbvlkI1cbiAgICovXG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqXG4gICAqIOWIneWni+eahOm7mOiupOWAvFxuICAgKi9cbiAgZGVmYXVsdFZhbHVlOiBQcm9wVHlwZXMuYW55LFxuICAvKipcbiAgICog5piv5ZCm5pSv5oyB6L6T5YWl5qGG77yM5q2kIHByb3Ag5LiO5Y+M5ruR5Z2X5qih5byP5LqS5palXG4gICAqL1xuICBpbnB1dFZpc2libGU6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICog5Yi75bqm5qCH6K6w77yM5L6L5aaC77yaezI1OiBcIjI1JVwiLCA1MDogXCI1MOKEg1wifVxuICAgKi9cbiAgbWFya3M6IFByb3BUeXBlcy5hbnksXG4gIC8qKlxuICAgKiDmnIDlpKflgLxcbiAgICovXG4gIG1heDogUHJvcFR5cGVzLm51bWJlcixcbiAgLyoqXG4gICAqIOacgOWwj+WAvFxuICAgKi9cbiAgbWluOiBQcm9wVHlwZXMubnVtYmVyLFxuICAvKipcbiAgICog5ZyoIGBvbm1vdXNldXBgIOaXtuinpuWPkeeahCBoYW5kbGVyXG4gICAqL1xuICBvbkFmdGVyQ2hhbmdlOiBQcm9wVHlwZXMuZnVuYyxcbiAgLyoqXG4gICAqIOWcqCBgb25tb3VzZWRvd25gIOaXtuinpuWPkeeahCBoYW5kbGVyXG4gICAqL1xuICBvbkJlZm9yZUNoYW5nZTogUHJvcFR5cGVzLmZ1bmMsXG4gIC8qKlxuICAgKiDlnKjlgLzlj5HnlJ/lj5jljJbml7bop6blj5HnmoQgaGFuZGxlclxuICAgKi9cbiAgb25DaGFuZ2U6IFByb3BUeXBlcy5mdW5jLFxuICAvKipcbiAgICog5Y+M5ruR5Z2X5qih5byPXG4gICAqL1xuICByYW5nZTogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiDmraXplb/vvIzlv4XpobvlpKfkuo4gMFxuICAgKi9cbiAgc3RlcDogUHJvcFR5cGVzLm51bWJlcixcbiAgLyoqXG4gICAqIOmZhOWKoOagt+W8j1xuICAgKi9cbiAgc3R5bGU6IFByb3BUeXBlcy5vYmplY3QsXG4gIC8qKlxuICAgKiDlr7nkuo4gVG9vbHRpcCDlhoXlrrnov5vooYznvJbovpHvvIzlpoLvvJp0aXBGb3JtYXR0ZXI9e3ZhbHVlID0+IGAke3ZhbHVlfeWFg2B9XG4gICAqL1xuICB0aXBGb3JtYXR0ZXI6IFByb3BUeXBlcy5mdW5jLFxuICAvKipcbiAgICog5byA5ZCvIHRpcEZvcm1hdHRlciDlkI7vvIzlr7nkuo4gVG9vbHRpcCDnmoQgcHJvcHNcbiAgICovXG4gIHRvb2x0aXBQcm9wczogUHJvcFR5cGVzLm9iamVjdCxcbiAgLyoqXG4gICAqIOiuvue9ruW9k+WJjeeahOWAvFxuICAgKi9cbiAgdmFsdWU6IFByb3BUeXBlcy5hbnksXG59XG5cblNsaWRlci5kZWZhdWx0UHJvcHMgPSB7XG4gIGNsYXNzTmFtZTogdW5kZWZpbmVkLFxuICBkZWZhdWx0VmFsdWU6IG51bGwsXG4gIGlucHV0VmlzaWJsZTogdHJ1ZSxcbiAgbWFya3M6IHt9LFxuICBtYXg6IDEwMCxcbiAgbWluOiAwLFxuICBvbkFmdGVyQ2hhbmdlOiBub29wLFxuICBvbkJlZm9yZUNoYW5nZTogbm9vcCxcbiAgb25DaGFuZ2U6IG5vb3AsXG4gIHJhbmdlOiBmYWxzZSxcbiAgc3RlcDogMSxcbiAgc3R5bGU6IHt9LFxuICB0aXBGb3JtYXR0ZXI6IG51bGwsXG4gIHRvb2x0aXBQcm9wczoge30sXG4gIHZhbHVlOiBudWxsLFxufVxuXG5leHBvcnQgZGVmYXVsdCBTbGlkZXJcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUFBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBRUEsSUFBTUEsSUFBSSxHQUFHLFNBQVBBLElBQU8sR0FBTSxDQUFFLENBQXJCOztBQUVBLElBQU1DLE1BQU0sR0FBRyxhQUFmOztBQW1HQSxJQUFNQyxNQUE4QixHQUFHLFNBQWpDQSxNQUFpQyxPQWlCbkI7RUFBQTs7RUFBQSxJQWhCbEJDLFNBZ0JrQixRQWhCbEJBLFNBZ0JrQjtFQUFBLElBZmxCQyxZQWVrQixRQWZsQkEsWUFla0I7RUFBQSxJQWRsQkMsWUFja0IsUUFkbEJBLFlBY2tCO0VBQUEsSUFibEJDLEtBYWtCLFFBYmxCQSxLQWFrQjtFQUFBLElBWmxCQyxHQVlrQixRQVpsQkEsR0FZa0I7RUFBQSxJQVhsQkMsR0FXa0IsUUFYbEJBLEdBV2tCO0VBQUEsSUFWbEJDLGFBVWtCLFFBVmxCQSxhQVVrQjtFQUFBLElBVGxCQyxjQVNrQixRQVRsQkEsY0FTa0I7RUFBQSxJQVJsQkMsUUFRa0IsUUFSbEJBLFFBUWtCO0VBQUEsSUFQbEJDLEtBT2tCLFFBUGxCQSxLQU9rQjtFQUFBLElBTmxCQyxJQU1rQixRQU5sQkEsSUFNa0I7RUFBQSxJQUxsQkMsS0FLa0IsUUFMbEJBLEtBS2tCO0VBQUEsSUFKbEJDLFlBSWtCLFFBSmxCQSxZQUlrQjtFQUFBLElBSGxCQyxZQUdrQixRQUhsQkEsWUFHa0I7RUFBQSxJQUZYQyxTQUVXLFFBRmxCQyxLQUVrQjtFQUFBLElBRGZDLFVBQ2U7O0VBQ2xCLElBQU1DLFdBQVcsR0FBRyxJQUFBQyxhQUFBLEVBQXVCLElBQXZCLENBQXBCO0VBQ0EsSUFBTUMsWUFBWSxHQUFHLElBQUFELGFBQUEs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