/******/ (() => { // webpackBootstrap /******/ "use strict"; /******/ var __webpack_modules__ = ({ /***/ 5619: /***/ ((__unused_webpack_module, __unused_webpack___webpack_exports__, __webpack_require__) => { // EXTERNAL MODULE: ./node_modules/react/jsx-runtime.js var jsx_runtime = __webpack_require__(4848); // EXTERNAL MODULE: ./node_modules/react-dom/client.js var client = __webpack_require__(5338); // EXTERNAL MODULE: ./node_modules/recharts/es6/component/ResponsiveContainer.js + 2 modules var ResponsiveContainer = __webpack_require__(1012); // EXTERNAL MODULE: ./node_modules/recharts/es6/chart/PieChart.js + 44 modules var PieChart = __webpack_require__(9416); // EXTERNAL MODULE: ./node_modules/recharts/es6/polar/Pie.js + 63 modules var Pie = __webpack_require__(2012); // EXTERNAL MODULE: ./node_modules/@ramsey-design-system/heading/dist/Heading.esm.js var Heading_esm = __webpack_require__(1266); ;// ./src/rplus-forms/modules/WeddingBudgetCalculator/utils/formats.ts const parseIfString = (amount) => { if (typeof amount === 'string') { return parseInt(amount, 10) || 0; } return amount; }; const centsFromDollars = (amount) => { const amountDollars = parseFloat(`${amount}`) || 0; return Math.round(amountDollars * 100); }; const isValid = (token) => { return /^[-\$]?[\d\,]*\.?\d*$/.test(token); }; const dollarsFromCents = (amount, format = false) => { const amountCents = parseIfString(amount) / 100; return format ? amountCents.toFixed(2) : amountCents; }; const formatCents = (amount, { currency = '', showCents = true, showPositiveSign = false } = {}) => { const amountDollars = dollarsFromCents(amount); const chars = Math.round(amountDollars * 100) .toString() .replace('-', '') .split(''); const cents = chars.splice(-2, 2); const dollars = chars.map((t, i) => (chars.length - i) % 3 === 0 && i !== 0 ? `,${t}` : t); const positiveSign = showPositiveSign && amountDollars > 0 ? '+' : ''; const sign = amountDollars < 0 ? '-' : positiveSign; const dollarsString = dollars.length ? dollars.join('') : '0'; const centsString = cents.length === 2 ? cents.join('') : `0${cents.join('')}`; return `${sign}${currency}${dollarsString}${showCents ? `.${centsString}` : ''}`; }; const parseCents = (rawValue, fallback = NaN) => { const tokenString = rawValue || ''; const isNegative = tokenString.startsWith('-'); let dollars = parseFloat(tokenString.replace(/[^\d.]/g, '')); if (isNaN(dollars)) return fallback; const cents = centsFromDollars(dollars); return isNegative ? -cents : cents; }; // Constrain a value between a minimum and a maximum const clamp = (value, min = 0, max = 100) => { return Math.max(min, Math.min(max, value)); }; ;// ./src/rplus-forms/modules/WeddingBudgetCalculator/CalculatorComponents/BudgetPieChart.tsx const DEFAULT_CHART_DATA = { name: 'Default', value: 100, fill: '#D5D9DB' }; const BudgetPieChart = (props) => { const { data } = props; const totalAmount = data.reduce((sum, item) => sum + item.value, 0); const expenseData = totalAmount > 0 ? data : [DEFAULT_CHART_DATA]; return ((0,jsx_runtime.jsxs)("div", { className: "relative h-[268px] w-[268px] md:h-[300px] md:w-[300px] pointer-events-none", children: [(0,jsx_runtime.jsx)(ResponsiveContainer/* ResponsiveContainer */.u, { width: "100%", height: "100%", children: (0,jsx_runtime.jsx)(PieChart/* PieChart */.r, { children: (0,jsx_runtime.jsx)(Pie/* Pie */.Fq, { data: expenseData, dataKey: "value", innerRadius: 100, outerRadius: "100%", stroke: "" }) }) }), (0,jsx_runtime.jsxs)("div", { className: "absolute top-1/2 left-1/2 -translate-x-1/2 -translate-y-1/2 text-center", children: [(0,jsx_runtime.jsx)(Heading_esm/* default */.A, { level: "3", size: "small", className: "text-4 mb-4", color: "alternate", children: "Total Expenses" }), (0,jsx_runtime.jsx)("span", { className: "font-semibold text-5", children: formatCents(totalAmount, { currency: '$' }) })] })] })); }; /* harmony default export */ const CalculatorComponents_BudgetPieChart = (BudgetPieChart); ;// ./src/rplus-forms/modules/WeddingBudgetCalculator/CalculatorComponents/BudgetDifference.tsx const BudgetDifference = ({ difference }) => { const isPositive = difference > 0; const isNegative = difference < 0; return ((0,jsx_runtime.jsxs)("div", { className: "w-full flex-col sm:flex-row flex items-center justify-between", children: [(0,jsx_runtime.jsx)(Heading_esm/* default */.A, { level: "2", size: "xsmall", className: "flex-1 text-[#69757A] whitespace-nowrap text-6", children: "Budget Difference" }), (0,jsx_runtime.jsx)("div", { className: `flex-1 flex-shrink-0 text-right font-semibold text-[24px] ${isPositive ? 'text-[#35BD59]' : isNegative ? 'text-[#E64B40]' : ''} md:min-w-[132px]`, "data-testid": "budget-difference", children: formatCents(difference, { currency: '$', showPositiveSign: true }) })] })); }; /* harmony default export */ const CalculatorComponents_BudgetDifference = (BudgetDifference); // EXTERNAL MODULE: ./node_modules/classnames/index.js var classnames = __webpack_require__(6942); var classnames_default = /*#__PURE__*/__webpack_require__.n(classnames); ;// ./src/rplus-forms/modules/WeddingBudgetCalculator/CalculatorComponents/BudgetGroup.tsx const BudgetGroup = (props) => { return ((0,jsx_runtime.jsxs)("div", { className: classnames_default()('', props.className), children: [(0,jsx_runtime.jsx)(Heading_esm/* default */.A, { level: "2", size: "xsmall", className: "mb-1 text-[#69757A]", children: props.headingText }), (0,jsx_runtime.jsx)("div", { children: props.children })] })); }; /* harmony default export */ const CalculatorComponents_BudgetGroup = (BudgetGroup); // EXTERNAL MODULE: ./node_modules/react/index.js var react = __webpack_require__(6540); ;// ./src/rplus-forms/modules/WeddingBudgetCalculator/components/Indicator.tsx const Indicator = (props) => { const { className, color, ...otherProps } = props; return ((0,jsx_runtime.jsx)("div", { ...otherProps, style: color ? { backgroundColor: color } : undefined, className: classnames_default()('w-[8px] h-[8px] sm:w-[16px] sm:h-[16px] rounded-full mr-1', className), "data-testid": "indicator" })); }; /* harmony default export */ const components_Indicator = (Indicator); // EXTERNAL MODULE: ./node_modules/@ramsey-design-system/button/dist/Button.esm.js + 1 modules var Button_esm = __webpack_require__(9438); // EXTERNAL MODULE: ./node_modules/@ramsey-design-system/icons/dist/InformationOutlinedIcon.esm.js var InformationOutlinedIcon_esm = __webpack_require__(7173); // EXTERNAL MODULE: ./node_modules/@ramsey-design-system/icons/dist/DollarSignIcon.esm.js var DollarSignIcon_esm = __webpack_require__(3314); // EXTERNAL MODULE: ./node_modules/@ramsey-design-system/input/dist/Input.esm.js var Input_esm = __webpack_require__(7434); // EXTERNAL MODULE: ./node_modules/@ramsey-design-system/tooltip/dist/Tooltip.esm.js + 8 modules var Tooltip_esm = __webpack_require__(709); ;// ./src/rplus-forms/modules/WeddingBudgetCalculator/CalculatorComponents/BudgetItem.tsx // RDS // Utils const BudgetItem = (props) => { const [count, setCount] = (0,react.useState)(0); const constrainedValue = clamp(props.value, 0, 99999999); const blurHandler = (e) => { if (!props.onBlur) return; const parsedValue = props.isCurrency ? parseCents(e.target.value, 0) : parseInt(e.target.value, 10) || 0; const updatedValue = clamp(parsedValue, 0, 99999999); props.onBlur(updatedValue); setCount(count + 1); }; return ((0,jsx_runtime.jsxs)("div", { className: "flex flex-wrap gap-md items-center py-1 border-t border-[#E8ECED]", children: [(0,jsx_runtime.jsxs)("label", { className: "flex-1 inline-flex truncate items-center w-full font-normal text-3 md:text-4", children: [props.color ? ((0,jsx_runtime.jsx)(components_Indicator, { color: props.color, className: "w-4 h-4 rounded-full bg-[#f2f2f2]" })) : null, (0,jsx_runtime.jsx)("span", { className: "truncate", children: props.label }), props.tooltipText ? ((0,jsx_runtime.jsxs)(Tooltip_esm/* default */.A, { children: [(0,jsx_runtime.jsx)(Tooltip_esm/* default */.A.Trigger, { children: (0,jsx_runtime.jsx)(Button_esm/* default */.A, { iconOnly: true, appearance: "subtle", size: "small", icon: InformationOutlinedIcon_esm/* InformationOutlinedIcon */.w, "aria-label": "Tooltip" }) }), (0,jsx_runtime.jsx)(Tooltip_esm/* default */.A.Content, { children: props.tooltipText })] })) : null] }), (0,jsx_runtime.jsx)(Input_esm/* default */.A, { maxLength: 10, className: "max-w-20 [&>input]:text-right", "data-testid": `budget_item_input_${props.itemKey}`, defaultValue: props.isCurrency ? formatCents(constrainedValue) : constrainedValue.toString(), icon: props.isCurrency ? DollarSignIcon_esm/* DollarSignIcon */.z : undefined, onBlur: blurHandler, size: "md", disabled: props.disabled }, `${props.isCurrency ? formatCents(constrainedValue) : constrainedValue}-${count}`)] })); }; /* harmony default export */ const CalculatorComponents_BudgetItem = (BudgetItem); ;// ./src/rplus-forms/modules/WeddingBudgetCalculator/constants.ts const BudgetItemColors = { budget: undefined, numberOfGuests: undefined, venue: '#0062B9', eventRentals: '#00B2F6', food: '#8EC638', beverage: '#F6A200', cake: '#EA3921', photographer: '#581845', videographer: '#900C3F', flowers: '#1200DD', decor: '#8B008B', entertainment: '#B300D0', dress: '#006990', groom: '#52741F', hair: '#FFE45E', rings: '#E3B409', planner: '#3BEBF5', officiant: '#003561', transportation: '#69757A', rehearsalDinner: '#ED3D9F', invitations: '#B3E65C', favors: '#D8C7FF', marriageLicense: '#EBF4FA', hotel: '#FA7C69', other: '#00B6C7', miscellaneous: '#000000' }; const BudgetItemLabels = { budget: 'Your Wedding Budget', numberOfGuests: 'Number of Guests', venue: 'Venue(s)', eventRentals: 'Event Rentals', food: 'Food/Catering', beverage: 'Alcohol and Beverage', cake: 'Wedding Cake', photographer: 'Photographer', videographer: 'Videographer', entertainment: 'Entertainment', decor: 'Lighting and Decor', flowers: 'Flowers', dress: 'Wedding Dress and Accessories', groom: "Groom's Attire", hair: 'Hair and Makeup', rings: 'Wedding Rings', planner: 'Wedding Planner', officiant: 'Officiant', transportation: 'Transportation', rehearsalDinner: 'Rehearsal Dinner', invitations: 'Invitations and Other Stationery', favors: 'Gifts and Favors', marriageLicense: 'Marriage License', hotel: 'Hotel Accommodations', other: 'Other', miscellaneous: 'Miscellaneous' }; /* eslint-disable */ const BudgetItemToolTipText = { budget: undefined, numberOfGuests: 'Enter the number of guests attending your wedding.', venue: 'Ceremony and reception', eventRentals: 'Tables, chairs, tents, dishes, linens, etc. (if not included with venue)', food: 'Divide this total by your number of guests to get the cost per person.', beverage: undefined, cake: undefined, photographer: undefined, videographer: undefined, flowers: 'Bouquets, boutonnieres, etc.', entertainment: 'DJ, band, ceremony musician, live painter, etc.', decor: 'Centerpieces, wedding arch, drapery, etc.', dress: undefined, groom: undefined, hair: undefined, rings: undefined, planner: undefined, officiant: undefined, transportation: 'To and from the venue', rehearsalDinner: undefined, invitations: 'Save the dates, formal invites, thank-you cards, etc.', favors: undefined, marriageLicense: undefined, hotel: undefined, other: 'Guestbook, ring-bearer pillow, signage, etc.', miscellaneous: 'Go ahead and plan for the unexpected wedding expenses that are bound to pop up.' }; ;// ./src/rplus-forms/modules/WeddingBudgetCalculator/utils/calculatedFields.ts const EXPENSE_PERCENTAGES = { venue: 0.2, eventRentals: 0.04, food: 0.15, beverage: 0.05, cake: 0.02, photographer: 0.05, videographer: 0.04, flowers: 0.08, decor: 0.02, entertainment: 0.07, dress: 0.04, groom: 0.01, hair: 0.01, rings: 0.04, planner: 0.06, officiant: 0.01, transportation: 0.02, rehearsalDinner: 0.03, invitations: 0.01, favors: 0.01, marriageLicense: 0.005, hotel: 0.02, other: 0.01, miscellaneous: 0.005 }; const calculateExpenses = (budget, manualAdjustments, currentExpenses) => { const expenses = {}; let remainingBudget = budget; let remainingPercentage = 0; for (const [key, percentage] of Object.entries(EXPENSE_PERCENTAGES)) { if (manualAdjustments.has(key)) { expenses[key] = currentExpenses[key]; remainingBudget -= currentExpenses[key]; } else { remainingPercentage += percentage; } } for (const [key, percentage] of Object.entries(EXPENSE_PERCENTAGES)) { if (!manualAdjustments.has(key)) { expenses[key] = remainingBudget * (percentage / remainingPercentage); } } return expenses; }; ;// ./src/rplus-forms/modules/WeddingBudgetCalculator/useBudgetData.ts const useBudgetData = () => { const [budgetValues, setBudgetValue] = (0,react.useState)({ income: { budget: 0, numberOfGuests: 100 }, expenses: { venue: 0, eventRentals: 0, food: 0, beverage: 0, cake: 0, photographer: 0, videographer: 0, flowers: 0, decor: 0, entertainment: 0, dress: 0, groom: 0, hair: 0, rings: 0, planner: 0, officiant: 0, transportation: 0, rehearsalDinner: 0, invitations: 0, favors: 0, marriageLicense: 0, hotel: 0, other: 0, miscellaneous: 0 } }); const [manualAdjustments, setManualAdjustments] = (0,react.useState)(new Set()); const updateBudgetItem = (itemType, itemKey) => (value) => { if (itemType === 'income' && itemKey === 'budget') { const calculatedExpenses = calculateExpenses(value, manualAdjustments, budgetValues.expenses); setBudgetValue({ income: { ...budgetValues.income, budget: value }, expenses: calculatedExpenses }); } else if (itemType === 'income' && itemKey === 'numberOfGuests') { setBudgetValue({ ...budgetValues, income: { ...budgetValues.income, numberOfGuests: value } }); } else { setManualAdjustments((prev) => new Set(prev).add(itemKey)); setBudgetValue({ ...budgetValues, [itemType]: { ...budgetValues[itemType], [itemKey]: value } }); } }; const getExpenses = () => { const totalExpenses = Object.values(budgetValues.expenses).reduce((total, current) => { return total + current; }, 0); return totalExpenses; }; const getDifference = () => { const { budget } = budgetValues.income; const totalExpenses = getExpenses(); const difference = budget - totalExpenses; return difference; }; const getChartData = () => { return Object.entries(budgetValues.expenses).map(([key, value]) => ({ name: BudgetItemLabels[key], value: value, fill: BudgetItemColors[key] })); }; return { budgetValues, updateBudgetItem, getExpenses, getDifference, getChartData }; }; /* harmony default export */ const WeddingBudgetCalculator_useBudgetData = (useBudgetData); ;// ./src/rplus-forms/modules/WeddingBudgetCalculator/WeddingBudgetCalculator.tsx // Components // Utils function WeddingBudgetCalculator() { const { budgetValues, updateBudgetItem, getExpenses, getDifference, getChartData } = WeddingBudgetCalculator_useBudgetData(); return ((0,jsx_runtime.jsx)("div", { className: "flex border-box", children: (0,jsx_runtime.jsxs)("div", { className: "w-full max-w-full h-full flex flex-col p-2 md:p-6", children: [(0,jsx_runtime.jsxs)("div", { className: "w-full grid grid-cols-1 md:grid-cols-2 gap-2xl sm:mb-4", "data-testid": "top-section", children: [(0,jsx_runtime.jsx)("div", { className: "flex flex-col md:order-last", children: (0,jsx_runtime.jsx)("div", { className: "flex h-auto justify-center md:h-[300px] mb-2", children: (0,jsx_runtime.jsx)(CalculatorComponents_BudgetPieChart, { totalAmount: getExpenses(), data: getChartData() }) }) }), (0,jsx_runtime.jsxs)("div", { className: "flex flex-col justify-around", children: [(0,jsx_runtime.jsxs)(CalculatorComponents_BudgetGroup, { headingText: "Budget", className: "mb-2", children: [(0,jsx_runtime.jsx)(CalculatorComponents_BudgetItem, { itemKey: "budget", label: BudgetItemLabels['budget'], value: budgetValues.income.budget, onBlur: updateBudgetItem('income', 'budget'), color: BudgetItemColors['budget'], tooltipText: BudgetItemToolTipText['budget'], isCurrency: true }), (0,jsx_runtime.jsx)(CalculatorComponents_BudgetItem, { itemKey: "guests", label: BudgetItemLabels['numberOfGuests'], value: budgetValues.income.numberOfGuests, onBlur: updateBudgetItem('income', 'numberOfGuests'), color: BudgetItemColors['numberOfGuests'], tooltipText: BudgetItemToolTipText['numberOfGuests'], isCurrency: false }), (0,jsx_runtime.jsx)("div", { className: "flex box-border border-t border-[#E8ECED]" })] }), (0,jsx_runtime.jsx)("div", { className: "flex box-border mb-4", children: (0,jsx_runtime.jsx)(CalculatorComponents_BudgetDifference, { difference: getDifference() }) }), (0,jsx_runtime.jsx)("p", { className: "text-2 md:pt-2 md:mb-[-16px] md:text-2 text-[#4B4F54] bottom-0", children: "* The numbers below are just average amounts to guide you\u2014adjust them to fit your budget." })] })] }), (0,jsx_runtime.jsx)(CalculatorComponents_BudgetGroup, { headingText: "Expenses", className: "w-full flex flex-col pt-2 md:pt-0 mb-2", "data-testid": "bottom-section", children: (0,jsx_runtime.jsxs)("div", { className: "grid grid-cols-1 md:grid-cols-2 md:gap-2xl", children: [(0,jsx_runtime.jsx)("div", { children: Object.keys(EXPENSE_PERCENTAGES) .slice(0, Math.ceil(Object.keys(EXPENSE_PERCENTAGES).length / 2)) .map((key) => ((0,jsx_runtime.jsx)(CalculatorComponents_BudgetItem, { itemKey: key, label: BudgetItemLabels[key], value: budgetValues.expenses[key], onBlur: updateBudgetItem('expenses', key), color: BudgetItemColors[key], tooltipText: BudgetItemToolTipText[key], isCurrency: true }, key))) }), (0,jsx_runtime.jsx)("div", { children: Object.keys(EXPENSE_PERCENTAGES) .slice(Math.ceil(Object.keys(EXPENSE_PERCENTAGES).length / 2)) .map((key) => ((0,jsx_runtime.jsx)(CalculatorComponents_BudgetItem, { itemKey: key, label: BudgetItemLabels[key], value: budgetValues.expenses[key], onBlur: updateBudgetItem('expenses', key), color: BudgetItemColors[key], tooltipText: BudgetItemToolTipText[key], isCurrency: true }, key))) })] }) })] }) })); } ;// ./src/rplus-forms/modules/WeddingBudgetCalculator/index.tsx const rootElement = document.getElementById('wedding-budget-calculator-root'); if (rootElement) { (0,client.createRoot)(rootElement).render((0,jsx_runtime.jsx)(WeddingBudgetCalculator, {})); } /***/ }) /******/ }); /************************************************************************/ /******/ // The module cache /******/ var __webpack_module_cache__ = {}; /******/ /******/ // The require function /******/ function __webpack_require__(moduleId) { /******/ // Check if module is in cache /******/ var cachedModule = __webpack_module_cache__[moduleId]; /******/ if (cachedModule !== undefined) { /******/ return cachedModule.exports; /******/ } /******/ // Create a new module (and put it into the cache) /******/ var module = __webpack_module_cache__[moduleId] = { /******/ // no module.id needed /******/ // no module.loaded needed /******/ exports: {} /******/ }; /******/ /******/ // Execute the module function /******/ __webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__); /******/ /******/ // Return the exports of the module /******/ return module.exports; /******/ } /******/ /******/ // expose the modules object (__webpack_modules__) /******/ __webpack_require__.m = __webpack_modules__; /******/ /************************************************************************/ /******/ /* webpack/runtime/chunk loaded */ /******/ (() => { /******/ var deferred = []; /******/ __webpack_require__.O = (result, chunkIds, fn, priority) => { /******/ if(chunkIds) { /******/ priority = priority || 0; /******/ for(var i = deferred.length; i > 0 && deferred[i - 1][2] > priority; i--) deferred[i] = deferred[i - 1]; /******/ deferred[i] = [chunkIds, fn, priority]; /******/ return; /******/ } /******/ var notFulfilled = Infinity; /******/ for (var i = 0; i < deferred.length; i++) { /******/ var [chunkIds, fn, priority] = deferred[i]; /******/ var fulfilled = true; /******/ for (var j = 0; j < chunkIds.length; j++) { /******/ if ((priority & 1 === 0 || notFulfilled >= priority) && Object.keys(__webpack_require__.O).every((key) => (__webpack_require__.O[key](chunkIds[j])))) { /******/ chunkIds.splice(j--, 1); /******/ } else { /******/ fulfilled = false; /******/ if(priority < notFulfilled) notFulfilled = priority; /******/ } /******/ } /******/ if(fulfilled) { /******/ deferred.splice(i--, 1) /******/ var r = fn(); /******/ if (r !== undefined) result = r; /******/ } /******/ } /******/ return result; /******/ }; /******/ })(); /******/ /******/ /* webpack/runtime/compat get default export */ /******/ (() => { /******/ // getDefaultExport function for compatibility with non-harmony modules /******/ __webpack_require__.n = (module) => { /******/ var getter = module && module.__esModule ? /******/ () => (module['default']) : /******/ () => (module); /******/ __webpack_require__.d(getter, { a: getter }); /******/ return getter; /******/ }; /******/ })(); /******/ /******/ /* webpack/runtime/create fake namespace object */ /******/ (() => { /******/ var getProto = Object.getPrototypeOf ? (obj) => (Object.getPrototypeOf(obj)) : (obj) => (obj.__proto__); /******/ var leafPrototypes; /******/ // create a fake namespace object /******/ // mode & 1: value is a module id, require it /******/ // mode & 2: merge all properties of value into the ns /******/ // mode & 4: return value when already ns object /******/ // mode & 16: return value when it's Promise-like /******/ // mode & 8|1: behave like require /******/ __webpack_require__.t = function(value, mode) { /******/ if(mode & 1) value = this(value); /******/ if(mode & 8) return value; /******/ if(typeof value === 'object' && value) { /******/ if((mode & 4) && value.__esModule) return value; /******/ if((mode & 16) && typeof value.then === 'function') return value; /******/ } /******/ var ns = Object.create(null); /******/ __webpack_require__.r(ns); /******/ var def = {}; /******/ leafPrototypes = leafPrototypes || [null, getProto({}), getProto([]), getProto(getProto)]; /******/ for(var current = mode & 2 && value; (typeof current == 'object' || typeof current == 'function') && !~leafPrototypes.indexOf(current); current = getProto(current)) { /******/ Object.getOwnPropertyNames(current).forEach((key) => (def[key] = () => (value[key]))); /******/ } /******/ def['default'] = () => (value); /******/ __webpack_require__.d(ns, def); /******/ return ns; /******/ }; /******/ })(); /******/ /******/ /* webpack/runtime/define property getters */ /******/ (() => { /******/ // define getter functions for harmony exports /******/ __webpack_require__.d = (exports, definition) => { /******/ for(var key in definition) { /******/ if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) { /******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] }); /******/ } /******/ } /******/ }; /******/ })(); /******/ /******/ /* webpack/runtime/hasOwnProperty shorthand */ /******/ (() => { /******/ __webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop)) /******/ })(); /******/ /******/ /* webpack/runtime/make namespace object */ /******/ (() => { /******/ // define __esModule on exports /******/ __webpack_require__.r = (exports) => { /******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) { /******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); /******/ } /******/ Object.defineProperty(exports, '__esModule', { value: true }); /******/ }; /******/ })(); /******/ /******/ /* webpack/runtime/jsonp chunk loading */ /******/ (() => { /******/ // no baseURI /******/ /******/ // object to store loaded and loading chunks /******/ // undefined = chunk not loaded, null = chunk preloaded/prefetched /******/ // [resolve, reject, Promise] = chunk loading, 0 = chunk loaded /******/ var installedChunks = { /******/ 314: 0, /******/ 886: 0 /******/ }; /******/ /******/ // no chunk on demand loading /******/ /******/ // no prefetching /******/ /******/ // no preloaded /******/ /******/ // no HMR /******/ /******/ // no HMR manifest /******/ /******/ __webpack_require__.O.j = (chunkId) => (installedChunks[chunkId] === 0); /******/ /******/ // install a JSONP callback for chunk loading /******/ var webpackJsonpCallback = (parentChunkLoadingFunction, data) => { /******/ var [chunkIds, moreModules, runtime] = data; /******/ // add "moreModules" to the modules object, /******/ // then flag all "chunkIds" as loaded and fire callback /******/ var moduleId, chunkId, i = 0; /******/ if(chunkIds.some((id) => (installedChunks[id] !== 0))) { /******/ for(moduleId in moreModules) { /******/ if(__webpack_require__.o(moreModules, moduleId)) { /******/ __webpack_require__.m[moduleId] = moreModules[moduleId]; /******/ } /******/ } /******/ if(runtime) var result = runtime(__webpack_require__); /******/ } /******/ if(parentChunkLoadingFunction) parentChunkLoadingFunction(data); /******/ for(;i < chunkIds.length; i++) { /******/ chunkId = chunkIds[i]; /******/ if(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) { /******/ installedChunks[chunkId][0](); /******/ } /******/ installedChunks[chunkId] = 0; /******/ } /******/ return __webpack_require__.O(result); /******/ } /******/ /******/ var chunkLoadingGlobal = self["webpackChunkramsey_plus_forms"] = self["webpackChunkramsey_plus_forms"] || []; /******/ chunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0)); /******/ chunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal)); /******/ })(); /******/ /************************************************************************/ /******/ /******/ // startup /******/ // Load entry module and return exports /******/ // This entry module depends on other loaded chunks and execution need to be delayed /******/ var __webpack_exports__ = __webpack_require__.O(undefined, [279,86,886], () => (__webpack_require__(5619))) /******/ __webpack_exports__ = __webpack_require__.O(__webpack_exports__); /******/ /******/ })() ; //# sourceMappingURL=data:application/json;charset=utf-8;base64,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O1dBQzNCO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7O1dBRUE7V0FDQTtXQUNBLDRHOzs7OztVRWpEQTtVQUNBO1VBQ0E7VUFDQTtVQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmFtc2V5LXBsdXMtZm9ybXMvLi9zcmMvcnBsdXMtZm9ybXMvbW9kdWxlcy9XZWRkaW5nQnVkZ2V0Q2FsY3VsYXRvci91dGlscy9mb3JtYXRzLnRzIiwid2VicGFjazovL3JhbXNleS1wbHVzLWZvcm1zLy4vc3JjL3JwbHVzLWZvcm1zL21vZHVsZXMvV2VkZGluZ0J1ZGdldENhbGN1bGF0b3IvQ2FsY3VsYXRvckNvbXBvbmVudHMvQnVkZ2V0UGllQ2hhcnQudHN4Iiwid2VicGFjazovL3JhbXNleS1wbHVzLWZvcm1zLy4vc3JjL3JwbHVzLWZvcm1zL21vZHVsZXMvV2VkZGluZ0J1ZGdldENhbGN1bGF0b3IvQ2FsY3VsYXRvckNvbXBvbmVudHMvQnVkZ2V0RGlmZmVyZW5jZS50c3giLCJ3ZWJwYWNrOi8vcmFtc2V5LXBsdXMtZm9ybXMvLi9zcmMvcnBsdXMtZm9ybXMvbW9kdWxlcy9XZWRkaW5nQnVkZ2V0Q2FsY3VsYXRvci9DYWxjdWxhdG9yQ29tcG9uZW50cy9CdWRnZXRHcm91cC50c3giLCJ3ZWJwYWNrOi8vcmFtc2V5LXBsdXMtZm9ybXMvLi9zcmMvcnBsdXMtZm9ybXMvbW9kdWxlcy9XZWRkaW5nQnVkZ2V0Q2FsY3VsYXRvci9jb21wb25lbnRzL0luZGljYXRvci50c3giLCJ3ZWJwYWNrOi8vcmFtc2V5LXBsdXMtZm9ybXMvLi9zcmMvcnBsdXMtZm9ybXMvbW9kdWxlcy9XZWRkaW5nQnVkZ2V0Q2FsY3VsYXRvci9DYWxjdWxhdG9yQ29tcG9uZW50cy9CdWRnZXRJdGVtLnRzeCIsIndlYnBhY2s6Ly9yYW1zZXktcGx1cy1mb3Jtcy8uL3NyYy9ycGx1cy1mb3Jtcy9tb2R1bGVzL1dlZGRpbmdCdWRnZXRDYWxjdWxhdG9yL2NvbnN0YW50cy50cyIsIndlYnBhY2s6Ly9yYW1zZXktcGx1cy1mb3Jtcy8uL3NyYy9ycGx1cy1mb3Jtcy9tb2R1bGVzL1dlZGRpbmdCdWRnZXRDYWxjdWxhdG9yL3V0aWxzL2NhbGN1bGF0ZWRGaWVsZHMudHMiLCJ3ZWJwYWNrOi8vcmFtc2V5LXBsdXMtZm9ybXMvLi9zcmMvcnBsdXMtZm9ybXMvbW9kdWxlcy9XZWRkaW5nQnVkZ2V0Q2FsY3VsYXRvci91c2VCdWRnZXREYXRhLnRzIiwid2VicGFjazovL3JhbXNleS1wbHVzLWZvcm1zLy4vc3JjL3JwbHVzLWZvcm1zL21vZHVsZXMvV2VkZGluZ0J1ZGdldENhbGN1bGF0b3IvV2VkZGluZ0J1ZGdldENhbGN1bGF0b3IudHN4Iiwid2VicGFjazovL3JhbXNleS1wbHVzLWZvcm1zLy4vc3JjL3JwbHVzLWZvcm1zL21vZHVsZXMvV2VkZGluZ0J1ZGdldENhbGN1bGF0b3IvaW5kZXgudHN4Iiwid2VicGFjazovL3JhbXNleS1wbHVzLWZvcm1zL3dlYnBhY2svYm9vdHN0cmFwIiwid2VicGFjazovL3JhbXNleS1wbHVzLWZvcm1zL3dlYnBhY2svcnVudGltZS9jaHVuayBsb2FkZWQiLCJ3ZWJwYWNrOi8vcmFtc2V5LXBsdXMtZm9ybXMvd2VicGFjay9ydW50aW1lL2NvbXBhdCBnZXQgZGVmYXVsdCBleHBvcnQiLCJ3ZWJwYWNrOi8vcmFtc2V5LXBsdXMtZm9ybXMvd2VicGFjay9ydW50aW1lL2NyZWF0ZSBmYWtlIG5hbWVzcGFjZSBvYmplY3QiLCJ3ZWJwYWNrOi8vcmFtc2V5LXBsdXMtZm9ybXMvd2VicGFjay9ydW50aW1lL2RlZmluZSBwcm9wZXJ0eSBnZXR0ZXJzIiwid2VicGFjazovL3JhbXNleS1wbHVzLWZvcm1zL3dlYnBhY2svcnVudGltZS9oYXNPd25Qcm9wZXJ0eSBzaG9ydGhhbmQiLCJ3ZWJwYWNrOi8vcmFtc2V5LXBsdXMtZm9ybXMvd2VicGFjay9ydW50aW1lL21ha2UgbmFtZXNwYWNlIG9iamVjdCIsIndlYnBhY2s6Ly9yYW1zZXktcGx1cy1mb3Jtcy93ZWJwYWNrL3J1bnRpbWUvanNvbnAgY2h1bmsgbG9hZGluZyIsIndlYnBhY2s6Ly9yYW1zZXktcGx1cy1mb3Jtcy93ZWJwYWNrL2JlZm9yZS1zdGFydHVwIiwid2VicGFjazovL3JhbXNleS1wbHVzLWZvcm1zL3dlYnBhY2svc3RhcnR1cCIsIndlYnBhY2s6Ly9yYW1zZXktcGx1cy1mb3Jtcy93ZWJwYWNrL2FmdGVyLXN0YXJ0dXAiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGNvbnN0IHBhcnNlSWZTdHJpbmcgPSAoYW1vdW50OiBzdHJpbmcgfCBudW1iZXIpID0+IHtcbiAgaWYgKHR5cGVvZiBhbW91bnQgPT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIHBhcnNlSW50KGFtb3VudCwgMTApIHx8IDA7XG4gIH1cblxuICByZXR1cm4gYW1vdW50O1xufTtcblxuZXhwb3J0IGNvbnN0IGNlbnRzRnJvbURvbGxhcnMgPSAoYW1vdW50OiBzdHJpbmcgfCBudW1iZXIpID0+IHtcbiAgY29uc3QgYW1vdW50RG9sbGFycyA9IHBhcnNlRmxvYXQoYCR7YW1vdW50fWApIHx8IDA7XG4gIHJldHVybiBNYXRoLnJvdW5kKGFtb3VudERvbGxhcnMgKiAxMDApO1xufTtcblxuZXhwb3J0IGNvbnN0IGlzVmFsaWQgPSAodG9rZW46IHN0cmluZykgPT4ge1xuICByZXR1cm4gL15bLVxcJF0/W1xcZFxcLF0qXFwuP1xcZCokLy50ZXN0KHRva2VuKTtcbn07XG5cbmV4cG9ydCBjb25zdCBkb2xsYXJzRnJvbUNlbnRzID0gKGFtb3VudDogc3RyaW5nIHwgbnVtYmVyLCBmb3JtYXQgPSBmYWxzZSkgPT4ge1xuICBjb25zdCBhbW91bnRDZW50cyA9IHBhcnNlSWZTdHJpbmcoYW1vdW50KSAvIDEwMDtcbiAgcmV0dXJuIGZvcm1hdCA/IGFtb3VudENlbnRzLnRvRml4ZWQoMikgOiBhbW91bnRDZW50cztcbn07XG5cbmV4cG9ydCBjb25zdCBmb3JtYXRDZW50cyA9IChcbiAgYW1vdW50OiBzdHJpbmcgfCBudW1iZXIsXG4gIHsgY3VycmVuY3kgPSAnJywgc2hvd0NlbnRzID0gdHJ1ZSwgc2hvd1Bvc2l0aXZlU2lnbiA9IGZhbHNlIH0gPSB7fVxuKSA9PiB7XG4gIGNvbnN0IGFtb3VudERvbGxhcnMgPSBkb2xsYXJzRnJvbUNlbnRzKGFtb3VudCkgYXMgbnVtYmVyO1xuICBjb25zdCBjaGFycyA9IE1hdGgucm91bmQoYW1vdW50RG9sbGFycyAqIDEwMClcbiAgICAudG9TdHJpbmcoKVxuICAgIC5yZXBsYWNlKCctJywgJycpXG4gICAgLnNwbGl0KCcnKTtcbiAgY29uc3QgY2VudHMgPSBjaGFycy5zcGxpY2UoLTIsIDIpO1xuXG4gIGNvbnN0IGRvbGxhcnMgPSBjaGFycy5tYXAoKHQsIGkpID0+XG4gICAgKGNoYXJzLmxlbmd0aCAtIGkpICUgMyA9PT0gMCAmJiBpICE9PSAwID8gYCwke3R9YCA6IHRcbiAgKTtcbiAgY29uc3QgcG9zaXRpdmVTaWduID0gc2hvd1Bvc2l0aXZlU2lnbiAmJiBhbW91bnREb2xsYXJzID4gMCA/ICcrJyA6ICcnO1xuICBjb25zdCBzaWduID0gYW1vdW50RG9sbGFycyA8IDAgPyAnLScgOiBwb3NpdGl2ZVNpZ247XG5cbiAgY29uc3QgZG9sbGFyc1N0cmluZyA9IGRvbGxhcnMubGVuZ3RoID8gZG9sbGFycy5qb2luKCcnKSA6ICcwJztcbiAgY29uc3QgY2VudHNTdHJpbmcgPVxuICAgIGNlbnRzLmxlbmd0aCA9PT0gMiA/IGNlbnRzLmpvaW4oJycpIDogYDAke2NlbnRzLmpvaW4oJycpfWA7XG5cbiAgcmV0dXJuIGAke3NpZ259JHtjdXJyZW5jeX0ke2RvbGxhcnNTdHJpbmd9JHtcbiAgICBzaG93Q2VudHMgPyBgLiR7Y2VudHNTdHJpbmd9YCA6ICcnXG4gIH1gO1xufTtcblxuZXhwb3J0IGNvbnN0IHBhcnNlQ2VudHMgPSAocmF3VmFsdWU6IHN0cmluZywgZmFsbGJhY2sgPSBOYU4pID0+IHtcbiAgY29uc3QgdG9rZW5TdHJpbmcgPSByYXdWYWx1ZSB8fCAnJztcbiAgY29uc3QgaXNOZWdhdGl2ZSA9IHRva2VuU3RyaW5nLnN0YXJ0c1dpdGgoJy0nKTtcbiAgbGV0IGRvbGxhcnMgPSBwYXJzZUZsb2F0KHRva2VuU3RyaW5nLnJlcGxhY2UoL1teXFxkLl0vZywgJycpKTtcbiAgaWYgKGlzTmFOKGRvbGxhcnMpKSByZXR1cm4gZmFsbGJhY2s7XG5cbiAgY29uc3QgY2VudHMgPSBjZW50c0Zyb21Eb2xsYXJzKGRvbGxhcnMpO1xuICByZXR1cm4gaXNOZWdhdGl2ZSA/IC1jZW50cyA6IGNlbnRzO1xufTtcblxuLy8gQ29uc3RyYWluIGEgdmFsdWUgYmV0d2VlbiBhIG1pbmltdW0gYW5kIGEgbWF4aW11bVxuZXhwb3J0IGNvbnN0IGNsYW1wID0gKHZhbHVlOiBudW1iZXIsIG1pbiA9IDAsIG1heCA9IDEwMCkgPT4ge1xuICByZXR1cm4gTWF0aC5tYXgobWluLCBNYXRoLm1pbihtYXgsIHZhbHVlKSk7XG59O1xuIiwiaW1wb3J0IHsgUGllQ2hhcnQsIFBpZSwgUmVzcG9uc2l2ZUNvbnRhaW5lciB9IGZyb20gJ3JlY2hhcnRzJztcblxuaW1wb3J0IEhlYWRpbmcgZnJvbSAnQHJhbXNleS1kZXNpZ24tc3lzdGVtL2hlYWRpbmcnO1xuaW1wb3J0IHsgZm9ybWF0Q2VudHMgfSBmcm9tICcuLi91dGlscy9mb3JtYXRzJztcblxudHlwZSBCdWRnZXRQaWVDaGFydFByb3BzID0ge1xuICB0b3RhbEFtb3VudDogbnVtYmVyO1xuICBkYXRhOiB7XG4gICAgbmFtZTogc3RyaW5nO1xuICAgIHZhbHVlOiBudW1iZXI7XG4gICAgZmlsbDogc3RyaW5nO1xuICB9W107XG59O1xuXG5jb25zdCBERUZBVUxUX0NIQVJUX0RBVEEgPSB7XG4gIG5hbWU6ICdEZWZhdWx0JyxcbiAgdmFsdWU6IDEwMCxcbiAgZmlsbDogJyNENUQ5REInXG59O1xuXG5jb25zdCBCdWRnZXRQaWVDaGFydCA9IChwcm9wczogQnVkZ2V0UGllQ2hhcnRQcm9wcykgPT4ge1xuICBjb25zdCB7IGRhdGEgfSA9IHByb3BzO1xuICBjb25zdCB0b3RhbEFtb3VudCA9IGRhdGEucmVkdWNlKChzdW0sIGl0ZW0pID0+IHN1bSArIGl0ZW0udmFsdWUsIDApO1xuICBjb25zdCBleHBlbnNlRGF0YSA9IHRvdGFsQW1vdW50ID4gMCA/IGRhdGEgOiBbREVGQVVMVF9DSEFSVF9EQVRBXTtcblxuICByZXR1cm4gKFxuICAgIDxkaXYgY2xhc3NOYW1lPVwicmVsYXRpdmUgaC1bMjY4cHhdIHctWzI2OHB4XSBtZDpoLVszMDBweF0gbWQ6dy1bMzAwcHhdIHBvaW50ZXItZXZlbnRzLW5vbmVcIj5cbiAgICAgIDxSZXNwb25zaXZlQ29udGFpbmVyIHdpZHRoPVwiMTAwJVwiIGhlaWdodD1cIjEwMCVcIj5cbiAgICAgICAgPFBpZUNoYXJ0PlxuICAgICAgICAgIDxQaWVcbiAgICAgICAgICAgIGRhdGE9e2V4cGVuc2VEYXRhfVxuICAgICAgICAgICAgZGF0YUtleT1cInZhbHVlXCJcbiAgICAgICAgICAgIGlubmVyUmFkaXVzPXsxMDB9XG4gICAgICAgICAgICBvdXRlclJhZGl1cz1cIjEwMCVcIlxuICAgICAgICAgICAgc3Ryb2tlPVwiXCJcbiAgICAgICAgICAvPlxuICAgICAgICA8L1BpZUNoYXJ0PlxuICAgICAgPC9SZXNwb25zaXZlQ29udGFpbmVyPlxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJhYnNvbHV0ZSB0b3AtMS8yIGxlZnQtMS8yIC10cmFuc2xhdGUteC0xLzIgLXRyYW5zbGF0ZS15LTEvMiB0ZXh0LWNlbnRlclwiPlxuICAgICAgICA8SGVhZGluZ1xuICAgICAgICAgIGxldmVsPVwiM1wiXG4gICAgICAgICAgc2l6ZT1cInNtYWxsXCJcbiAgICAgICAgICBjbGFzc05hbWU9XCJ0ZXh0LTQgbWItNFwiXG4gICAgICAgICAgY29sb3I9XCJhbHRlcm5hdGVcIlxuICAgICAgICA+XG4gICAgICAgICAgVG90YWwgRXhwZW5zZXNcbiAgICAgICAgPC9IZWFkaW5nPlxuICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJmb250LXNlbWlib2xkIHRleHQtNVwiPlxuICAgICAgICAgIHtmb3JtYXRDZW50cyh0b3RhbEFtb3VudCwgeyBjdXJyZW5jeTogJyQnIH0pfVxuICAgICAgICA8L3NwYW4+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgKTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IEJ1ZGdldFBpZUNoYXJ0O1xuIiwiaW1wb3J0IEhlYWRpbmcgZnJvbSAnQHJhbXNleS1kZXNpZ24tc3lzdGVtL2hlYWRpbmcnO1xuaW1wb3J0IHsgZm9ybWF0Q2VudHMgfSBmcm9tICcuLi91dGlscy9mb3JtYXRzJztcblxudHlwZSBCdWRnZXREaWZmZXJlbmNlUHJvcHMgPSB7XG4gIGRpZmZlcmVuY2U6IG51bWJlcjtcbn07XG5cbmNvbnN0IEJ1ZGdldERpZmZlcmVuY2UgPSAoeyBkaWZmZXJlbmNlIH06IEJ1ZGdldERpZmZlcmVuY2VQcm9wcykgPT4ge1xuICBjb25zdCBpc1Bvc2l0aXZlID0gZGlmZmVyZW5jZSA+IDA7XG4gIGNvbnN0IGlzTmVnYXRpdmUgPSBkaWZmZXJlbmNlIDwgMDtcblxuICByZXR1cm4gKFxuICAgIDxkaXYgY2xhc3NOYW1lPVwidy1mdWxsIGZsZXgtY29sIHNtOmZsZXgtcm93IGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktYmV0d2VlblwiPlxuICAgICAgPEhlYWRpbmdcbiAgICAgICAgbGV2ZWw9XCIyXCJcbiAgICAgICAgc2l6ZT1cInhzbWFsbFwiXG4gICAgICAgIGNsYXNzTmFtZT1cImZsZXgtMSB0ZXh0LVsjNjk3NTdBXSB3aGl0ZXNwYWNlLW5vd3JhcCB0ZXh0LTZcIlxuICAgICAgPlxuICAgICAgICBCdWRnZXQgRGlmZmVyZW5jZVxuICAgICAgPC9IZWFkaW5nPlxuICAgICAgPGRpdlxuICAgICAgICBjbGFzc05hbWU9e2BmbGV4LTEgZmxleC1zaHJpbmstMCB0ZXh0LXJpZ2h0IGZvbnQtc2VtaWJvbGQgdGV4dC1bMjRweF0gJHtcbiAgICAgICAgICBpc1Bvc2l0aXZlID8gJ3RleHQtWyMzNUJENTldJyA6IGlzTmVnYXRpdmUgPyAndGV4dC1bI0U2NEI0MF0nIDogJydcbiAgICAgICAgfSBtZDptaW4tdy1bMTMycHhdYH1cbiAgICAgICAgZGF0YS10ZXN0aWQ9XCJidWRnZXQtZGlmZmVyZW5jZVwiXG4gICAgICA+XG4gICAgICAgIHtmb3JtYXRDZW50cyhkaWZmZXJlbmNlLCB7IGN1cnJlbmN5OiAnJCcsIHNob3dQb3NpdGl2ZVNpZ246IHRydWUgfSl9XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgKTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IEJ1ZGdldERpZmZlcmVuY2U7XG4iLCJpbXBvcnQgSGVhZGluZyBmcm9tICdAcmFtc2V5LWRlc2lnbi1zeXN0ZW0vaGVhZGluZyc7XG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJztcblxudHlwZSBCdWRnZXRHcm91cFByb3BzID0ge1xuICBoZWFkaW5nVGV4dDogc3RyaW5nO1xuICBjbGFzc05hbWU/OiBzdHJpbmc7XG59ICYgUmVhY3QuQ29tcG9uZW50UHJvcHM8J2Rpdic+O1xuXG5jb25zdCBCdWRnZXRHcm91cCA9IChwcm9wczogQnVkZ2V0R3JvdXBQcm9wcykgPT4ge1xuICByZXR1cm4gKFxuICAgIDxkaXYgY2xhc3NOYW1lPXtjbGFzc05hbWVzKCcnLCBwcm9wcy5jbGFzc05hbWUpfT5cbiAgICAgIDxIZWFkaW5nIGxldmVsPVwiMlwiIHNpemU9XCJ4c21hbGxcIiBjbGFzc05hbWU9XCJtYi0xIHRleHQtWyM2OTc1N0FdXCI+XG4gICAgICAgIHtwcm9wcy5oZWFkaW5nVGV4dH1cbiAgICAgIDwvSGVhZGluZz5cbiAgICAgIDxkaXY+e3Byb3BzLmNoaWxkcmVufTwvZGl2PlxuICAgIDwvZGl2PlxuICApO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgQnVkZ2V0R3JvdXA7XG4iLCJpbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJztcblxudHlwZSBJbmRpY2F0b3JQcm9wcyA9IFJlYWN0LkNvbXBvbmVudFByb3BzPCdkaXYnPiAmIHtcbiAgY29sb3I/OiBzdHJpbmc7XG59O1xuXG5jb25zdCBJbmRpY2F0b3IgPSAocHJvcHM6IEluZGljYXRvclByb3BzKSA9PiB7XG4gIGNvbnN0IHsgY2xhc3NOYW1lLCBjb2xvciwgLi4ub3RoZXJQcm9wcyB9ID0gcHJvcHM7XG4gIHJldHVybiAoXG4gICAgPGRpdlxuICAgICAgey4uLm90aGVyUHJvcHN9XG4gICAgICBzdHlsZT17Y29sb3IgPyB7IGJhY2tncm91bmRDb2xvcjogY29sb3IgfSA6IHVuZGVmaW5lZH1cbiAgICAgIGNsYXNzTmFtZT17Y2xhc3NOYW1lcyhcbiAgICAgICAgJ3ctWzhweF0gaC1bOHB4XSBzbTp3LVsxNnB4XSBzbTpoLVsxNnB4XSByb3VuZGVkLWZ1bGwgbXItMScsXG4gICAgICAgIGNsYXNzTmFtZVxuICAgICAgKX1cbiAgICAgIGRhdGEtdGVzdGlkPVwiaW5kaWNhdG9yXCJcbiAgICAvPlxuICApO1xufTtcbmV4cG9ydCBkZWZhdWx0IEluZGljYXRvcjtcbiIsImltcG9ydCB7IHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnO1xuXG5pbXBvcnQgSW5kaWNhdG9yIGZyb20gJy4uL2NvbXBvbmVudHMvSW5kaWNhdG9yJztcblxuLy8gUkRTXG5pbXBvcnQgQnV0dG9uIGZyb20gJ0ByYW1zZXktZGVzaWduLXN5c3RlbS9idXR0b24nO1xuaW1wb3J0IHtcbiAgSW5mb3JtYXRpb25PdXRsaW5lZEljb24sXG4gIERvbGxhclNpZ25JY29uXG59IGZyb20gJ0ByYW1zZXktZGVzaWduLXN5c3RlbS9pY29ucyc7XG5pbXBvcnQgSW5wdXQgZnJvbSAnQHJhbXNleS1kZXNpZ24tc3lzdGVtL2lucHV0JztcbmltcG9ydCBUb29sdGlwIGZyb20gJ0ByYW1zZXktZGVzaWduLXN5c3RlbS90b29sdGlwJztcblxuLy8gVXRpbHNcbmltcG9ydCB7IGNsYW1wLCBmb3JtYXRDZW50cywgcGFyc2VDZW50cyB9IGZyb20gJy4uL3V0aWxzL2Zvcm1hdHMnO1xuXG50eXBlIEJ1ZGdldEl0ZW1Qcm9wcyA9IHtcbiAgaXRlbUtleTogc3RyaW5nO1xuICBsYWJlbDogc3RyaW5nO1xuICB2YWx1ZTogbnVtYmVyO1xuICBvbkJsdXI/OiAoYW1vdW50OiBudW1iZXIpID0+IHZvaWQ7XG4gIGNvbG9yPzogc3RyaW5nO1xuICB0b29sdGlwVGV4dD86IHN0cmluZztcbiAgaXNDdXJyZW5jeT86IGJvb2xlYW47XG4gIGRpc2FibGVkPzogYm9vbGVhbjtcbn07XG5cbmNvbnN0IEJ1ZGdldEl0ZW0gPSAocHJvcHM6IEJ1ZGdldEl0ZW1Qcm9wcykgPT4ge1xuICBjb25zdCBbY291bnQsIHNldENvdW50XSA9IHVzZVN0YXRlKDApO1xuICBjb25zdCBjb25zdHJhaW5lZFZhbHVlID0gY2xhbXAocHJvcHMudmFsdWUsIDAsIDk5OTk5OTk5KTtcblxuICBjb25zdCBibHVySGFuZGxlciA9IChlOiBSZWFjdC5Gb2N1c0V2ZW50PEhUTUxJbnB1dEVsZW1lbnQ+KSA9PiB7XG4gICAgaWYgKCFwcm9wcy5vbkJsdXIpIHJldHVybjtcblxuICAgIGNvbnN0IHBhcnNlZFZhbHVlID0gcHJvcHMuaXNDdXJyZW5jeVxuICAgICAgPyBwYXJzZUNlbnRzKGUudGFyZ2V0LnZhbHVlLCAwKVxuICAgICAgOiBwYXJzZUludChlLnRhcmdldC52YWx1ZSwgMTApIHx8IDA7XG4gICAgY29uc3QgdXBkYXRlZFZhbHVlID0gY2xhbXAocGFyc2VkVmFsdWUsIDAsIDk5OTk5OTk5KTtcbiAgICBwcm9wcy5vbkJsdXIodXBkYXRlZFZhbHVlKTtcbiAgICBzZXRDb3VudChjb3VudCArIDEpO1xuICB9O1xuXG4gIHJldHVybiAoXG4gICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGZsZXgtd3JhcCBnYXAtbWQgaXRlbXMtY2VudGVyIHB5LTEgYm9yZGVyLXQgYm9yZGVyLVsjRThFQ0VEXVwiPlxuICAgICAgPGxhYmVsIGNsYXNzTmFtZT1cImZsZXgtMSBpbmxpbmUtZmxleCB0cnVuY2F0ZSBpdGVtcy1jZW50ZXIgdy1mdWxsIGZvbnQtbm9ybWFsIHRleHQtMyBtZDp0ZXh0LTRcIj5cbiAgICAgICAge3Byb3BzLmNvbG9yID8gKFxuICAgICAgICAgIDxJbmRpY2F0b3JcbiAgICAgICAgICAgIGNvbG9yPXtwcm9wcy5jb2xvcn1cbiAgICAgICAgICAgIGNsYXNzTmFtZT1cInctNCBoLTQgcm91bmRlZC1mdWxsIGJnLVsjZjJmMmYyXVwiXG4gICAgICAgICAgLz5cbiAgICAgICAgKSA6IG51bGx9XG4gICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInRydW5jYXRlXCI+e3Byb3BzLmxhYmVsfTwvc3Bhbj5cbiAgICAgICAge3Byb3BzLnRvb2x0aXBUZXh0ID8gKFxuICAgICAgICAgIDxUb29sdGlwPlxuICAgICAgICAgICAgPFRvb2x0aXAuVHJpZ2dlcj5cbiAgICAgICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgICAgIGljb25Pbmx5XG4gICAgICAgICAgICAgICAgYXBwZWFyYW5jZT1cInN1YnRsZVwiXG4gICAgICAgICAgICAgICAgc2l6ZT1cInNtYWxsXCJcbiAgICAgICAgICAgICAgICBpY29uPXtJbmZvcm1hdGlvbk91dGxpbmVkSWNvbn1cbiAgICAgICAgICAgICAgICBhcmlhLWxhYmVsPVwiVG9vbHRpcFwiXG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8L1Rvb2x0aXAuVHJpZ2dlcj5cbiAgICAgICAgICAgIDxUb29sdGlwLkNvbnRlbnQ+e3Byb3BzLnRvb2x0aXBUZXh0fTwvVG9vbHRpcC5Db250ZW50PlxuICAgICAgICAgIDwvVG9vbHRpcD5cbiAgICAgICAgKSA6IG51bGx9XG4gICAgICA8L2xhYmVsPlxuICAgICAgPElucHV0XG4gICAgICAgIG1heExlbmd0aD17MTB9XG4gICAgICAgIGNsYXNzTmFtZT1cIm1heC13LTIwIFsmPmlucHV0XTp0ZXh0LXJpZ2h0XCJcbiAgICAgICAgZGF0YS10ZXN0aWQ9e2BidWRnZXRfaXRlbV9pbnB1dF8ke3Byb3BzLml0ZW1LZXl9YH0gLy8gVXNlIGl0ZW1LZXkgZHluYW1pY2FsbHlcbiAgICAgICAgZGVmYXVsdFZhbHVlPXtcbiAgICAgICAgICBwcm9wcy5pc0N1cnJlbmN5XG4gICAgICAgICAgICA/IGZvcm1hdENlbnRzKGNvbnN0cmFpbmVkVmFsdWUpXG4gICAgICAgICAgICA6IGNvbnN0cmFpbmVkVmFsdWUudG9TdHJpbmcoKVxuICAgICAgICB9XG4gICAgICAgIGtleT17YCR7cHJvcHMuaXNDdXJyZW5jeSA/IGZvcm1hdENlbnRzKGNvbnN0cmFpbmVkVmFsdWUpIDogY29uc3RyYWluZWRWYWx1ZX0tJHtjb3VudH1gfVxuICAgICAgICBpY29uPXtwcm9wcy5pc0N1cnJlbmN5ID8gRG9sbGFyU2lnbkljb24gOiB1bmRlZmluZWR9XG4gICAgICAgIG9uQmx1cj17Ymx1ckhhbmRsZXJ9XG4gICAgICAgIHNpemU9XCJtZFwiXG4gICAgICAgIGRpc2FibGVkPXtwcm9wcy5kaXNhYmxlZH1cbiAgICAgIC8+XG4gICAgPC9kaXY+XG4gICk7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBCdWRnZXRJdGVtO1xuIiwiZXhwb3J0IGNvbnN0IEJ1ZGdldEl0ZW1Db2xvcnMgPSB7XG4gIGJ1ZGdldDogdW5kZWZpbmVkLFxuICBudW1iZXJPZkd1ZXN0czogdW5kZWZpbmVkLFxuICB2ZW51ZTogJyMwMDYyQjknLFxuICBldmVudFJlbnRhbHM6ICcjMDBCMkY2JyxcbiAgZm9vZDogJyM4RUM2MzgnLFxuICBiZXZlcmFnZTogJyNGNkEyMDAnLFxuICBjYWtlOiAnI0VBMzkyMScsXG4gIHBob3RvZ3JhcGhlcjogJyM1ODE4NDUnLFxuICB2aWRlb2dyYXBoZXI6ICcjOTAwQzNGJyxcbiAgZmxvd2VyczogJyMxMjAwREQnLFxuICBkZWNvcjogJyM4QjAwOEInLFxuICBlbnRlcnRhaW5tZW50OiAnI0IzMDBEMCcsXG4gIGRyZXNzOiAnIzAwNjk5MCcsXG4gIGdyb29tOiAnIzUyNzQxRicsXG4gIGhhaXI6ICcjRkZFNDVFJyxcbiAgcmluZ3M6ICcjRTNCNDA5JyxcbiAgcGxhbm5lcjogJyMzQkVCRjUnLFxuICBvZmZpY2lhbnQ6ICcjMDAzNTYxJyxcbiAgdHJhbnNwb3J0YXRpb246ICcjNjk3NTdBJyxcbiAgcmVoZWFyc2FsRGlubmVyOiAnI0VEM0Q5RicsXG4gIGludml0YXRpb25zOiAnI0IzRTY1QycsXG4gIGZhdm9yczogJyNEOEM3RkYnLFxuICBtYXJyaWFnZUxpY2Vuc2U6ICcjRUJGNEZBJyxcbiAgaG90ZWw6ICcjRkE3QzY5JyxcbiAgb3RoZXI6ICcjMDBCNkM3JyxcbiAgbWlzY2VsbGFuZW91czogJyMwMDAwMDAnXG59O1xuXG5leHBvcnQgY29uc3QgQnVkZ2V0SXRlbUxhYmVscyA9IHtcbiAgYnVkZ2V0OiAnWW91ciBXZWRkaW5nIEJ1ZGdldCcsXG4gIG51bWJlck9mR3Vlc3RzOiAnTnVtYmVyIG9mIEd1ZXN0cycsXG4gIHZlbnVlOiAnVmVudWUocyknLFxuICBldmVudFJlbnRhbHM6ICdFdmVudCBSZW50YWxzJyxcbiAgZm9vZDogJ0Zvb2QvQ2F0ZXJpbmcnLFxuICBiZXZlcmFnZTogJ0FsY29ob2wgYW5kIEJldmVyYWdlJyxcbiAgY2FrZTogJ1dlZGRpbmcgQ2FrZScsXG4gIHBob3RvZ3JhcGhlcjogJ1Bob3RvZ3JhcGhlcicsXG4gIHZpZGVvZ3JhcGhlcjogJ1ZpZGVvZ3JhcGhlcicsXG4gIGVudGVydGFpbm1lbnQ6ICdFbnRlcnRhaW5tZW50JyxcbiAgZGVjb3I6ICdMaWdodGluZyBhbmQgRGVjb3InLFxuICBmbG93ZXJzOiAnRmxvd2VycycsXG4gIGRyZXNzOiAnV2VkZGluZyBEcmVzcyBhbmQgQWNjZXNzb3JpZXMnLFxuICBncm9vbTogXCJHcm9vbSdzIEF0dGlyZVwiLFxuICBoYWlyOiAnSGFpciBhbmQgTWFrZXVwJyxcbiAgcmluZ3M6ICdXZWRkaW5nIFJpbmdzJyxcbiAgcGxhbm5lcjogJ1dlZGRpbmcgUGxhbm5lcicsXG4gIG9mZmljaWFudDogJ09mZmljaWFudCcsXG4gIHRyYW5zcG9ydGF0aW9uOiAnVHJhbnNwb3J0YXRpb24nLFxuICByZWhlYXJzYWxEaW5uZXI6ICdSZWhlYXJzYWwgRGlubmVyJyxcbiAgaW52aXRhdGlvbnM6ICdJbnZpdGF0aW9ucyBhbmQgT3RoZXIgU3RhdGlvbmVyeScsXG4gIGZhdm9yczogJ0dpZnRzIGFuZCBGYXZvcnMnLFxuICBtYXJyaWFnZUxpY2Vuc2U6ICdNYXJyaWFnZSBMaWNlbnNlJyxcbiAgaG90ZWw6ICdIb3RlbCBBY2NvbW1vZGF0aW9ucycsXG4gIG90aGVyOiAnT3RoZXInLFxuICBtaXNjZWxsYW5lb3VzOiAnTWlzY2VsbGFuZW91cydcbn07XG5cbi8qIGVzbGludC1kaXNhYmxlICovXG5leHBvcnQgY29uc3QgQnVkZ2V0SXRlbVRvb2xUaXBUZXh0ID0ge1xuICBidWRnZXQ6IHVuZGVmaW5lZCxcbiAgbnVtYmVyT2ZHdWVzdHM6ICdFbnRlciB0aGUgbnVtYmVyIG9mIGd1ZXN0cyBhdHRlbmRpbmcgeW91ciB3ZWRkaW5nLicsXG4gIHZlbnVlOiAnQ2VyZW1vbnkgYW5kIHJlY2VwdGlvbicsXG4gIGV2ZW50UmVudGFsczpcbiAgICAnVGFibGVzLCBjaGFpcnMsIHRlbnRzLCBkaXNoZXMsIGxpbmVucywgZXRjLiAoaWYgbm90IGluY2x1ZGVkIHdpdGggdmVudWUpJyxcbiAgZm9vZDogJ0RpdmlkZSB0aGlzIHRvdGFsIGJ5IHlvdXIgbnVtYmVyIG9mIGd1ZXN0cyB0byBnZXQgdGhlIGNvc3QgcGVyIHBlcnNvbi4nLFxuICBiZXZlcmFnZTogdW5kZWZpbmVkLFxuICBjYWtlOiB1bmRlZmluZWQsXG4gIHBob3RvZ3JhcGhlcjogdW5kZWZpbmVkLFxuICB2aWRlb2dyYXBoZXI6IHVuZGVmaW5lZCxcbiAgZmxvd2VyczogJ0JvdXF1ZXRzLCBib3V0b25uaWVyZXMsIGV0Yy4nLFxuICBlbnRlcnRhaW5tZW50OiAnREosIGJhbmQsIGNlcmVtb255IG11c2ljaWFuLCBsaXZlIHBhaW50ZXIsIGV0Yy4nLFxuICBkZWNvcjogJ0NlbnRlcnBpZWNlcywgd2VkZGluZyBhcmNoLCBkcmFwZXJ5LCBldGMuJyxcbiAgZHJlc3M6IHVuZGVmaW5lZCxcbiAgZ3Jvb206IHVuZGVmaW5lZCxcbiAgaGFpcjogdW5kZWZpbmVkLFxuICByaW5nczogdW5kZWZpbmVkLFxuICBwbGFubmVyOiB1bmRlZmluZWQsXG4gIG9mZmljaWFudDogdW5kZWZpbmVkLFxuICB0cmFuc3BvcnRhdGlvbjogJ1RvIGFuZCBmcm9tIHRoZSB2ZW51ZScsXG4gIHJlaGVhcnNhbERpbm5lcjogdW5kZWZpbmVkLFxuICBpbnZpdGF0aW9uczogJ1NhdmUgdGhlIGRhdGVzLCBmb3JtYWwgaW52aXRlcywgdGhhbmsteW91IGNhcmRzLCBldGMuJyxcbiAgZmF2b3JzOiB1bmRlZmluZWQsXG4gIG1hcnJpYWdlTGljZW5zZTogdW5kZWZpbmVkLFxuICBob3RlbDogdW5kZWZpbmVkLFxuICBvdGhlcjogJ0d1ZXN0Ym9vaywgcmluZy1iZWFyZXIgcGlsbG93LCBzaWduYWdlLCBldGMuJyxcbiAgbWlzY2VsbGFuZW91czpcbiAgICAnR28gYWhlYWQgYW5kIHBsYW4gZm9yIHRoZSB1bmV4cGVjdGVkIHdlZGRpbmcgZXhwZW5zZXMgdGhhdCBhcmUgYm91bmQgdG8gcG9wIHVwLidcbn07XG4iLCJpbXBvcnQgeyBCdWRnZXRWYWx1ZXMgfSBmcm9tICcuLi90eXBlcyc7XG5cbmV4cG9ydCBjb25zdCBFWFBFTlNFX1BFUkNFTlRBR0VTOiBSZWNvcmQ8XG4gIGtleW9mIEJ1ZGdldFZhbHVlc1snZXhwZW5zZXMnXSxcbiAgbnVtYmVyXG4+ID0ge1xuICB2ZW51ZTogMC4yLFxuICBldmVudFJlbnRhbHM6IDAuMDQsXG4gIGZvb2Q6IDAuMTUsXG4gIGJldmVyYWdlOiAwLjA1LFxuICBjYWtlOiAwLjAyLFxuICBwaG90b2dyYXBoZXI6IDAuMDUsXG4gIHZpZGVvZ3JhcGhlcjogMC4wNCxcbiAgZmxvd2VyczogMC4wOCxcbiAgZGVjb3I6IDAuMDIsXG4gIGVudGVydGFpbm1lbnQ6IDAuMDcsXG4gIGRyZXNzOiAwLjA0LFxuICBncm9vbTogMC4wMSxcbiAgaGFpcjogMC4wMSxcbiAgcmluZ3M6IDAuMDQsXG4gIHBsYW5uZXI6IDAuMDYsXG4gIG9mZmljaWFudDogMC4wMSxcbiAgdHJhbnNwb3J0YXRpb246IDAuMDIsXG4gIHJlaGVhcnNhbERpbm5lcjogMC4wMyxcbiAgaW52aXRhdGlvbnM6IDAuMDEsXG4gIGZhdm9yczogMC4wMSxcbiAgbWFycmlhZ2VMaWNlbnNlOiAwLjAwNSxcbiAgaG90ZWw6IDAuMDIsXG4gIG90aGVyOiAwLjAxLFxuICBtaXNjZWxsYW5lb3VzOiAwLjAwNVxufTtcblxuZXhwb3J0IGNvbnN0IGNhbGN1bGF0ZUV4cGVuc2VzID0gKFxuICBidWRnZXQ6IG51bWJlcixcbiAgbWFudWFsQWRqdXN0bWVudHM6IFNldDxzdHJpbmc+LFxuICBjdXJyZW50RXhwZW5zZXM6IEJ1ZGdldFZhbHVlc1snZXhwZW5zZXMnXVxuKTogQnVkZ2V0VmFsdWVzWydleHBlbnNlcyddID0+IHtcbiAgY29uc3QgZXhwZW5zZXM6IFBhcnRpYWw8QnVkZ2V0VmFsdWVzWydleHBlbnNlcyddPiA9IHt9O1xuICBsZXQgcmVtYWluaW5nQnVkZ2V0ID0gYnVkZ2V0O1xuICBsZXQgcmVtYWluaW5nUGVyY2VudGFnZSA9IDA7XG5cbiAgZm9yIChjb25zdCBba2V5LCBwZXJjZW50YWdlXSBvZiBPYmplY3QuZW50cmllcyhFWFBFTlNFX1BFUkNFTlRBR0VTKSkge1xuICAgIGlmIChtYW51YWxBZGp1c3RtZW50cy5oYXMoa2V5KSkge1xuICAgICAgZXhwZW5zZXNba2V5IGFzIGtleW9mIEJ1ZGdldFZhbHVlc1snZXhwZW5zZXMnXV0gPVxuICAgICAgICBjdXJyZW50RXhwZW5zZXNba2V5IGFzIGtleW9mIEJ1ZGdldFZhbHVlc1snZXhwZW5zZXMnXV07XG4gICAgICByZW1haW5pbmdCdWRnZXQgLT0gY3VycmVudEV4cGVuc2VzW2tleSBhcyBrZXlvZiBCdWRnZXRWYWx1ZXNbJ2V4cGVuc2VzJ11dO1xuICAgIH0gZWxzZSB7XG4gICAgICByZW1haW5pbmdQZXJjZW50YWdlICs9IHBlcmNlbnRhZ2U7XG4gICAgfVxuICB9XG5cbiAgZm9yIChjb25zdCBba2V5LCBwZXJjZW50YWdlXSBvZiBPYmplY3QuZW50cmllcyhFWFBFTlNFX1BFUkNFTlRBR0VTKSkge1xuICAgIGlmICghbWFudWFsQWRqdXN0bWVudHMuaGFzKGtleSkpIHtcbiAgICAgIGV4cGVuc2VzW2tleSBhcyBrZXlvZiBCdWRnZXRWYWx1ZXNbJ2V4cGVuc2VzJ11dID1cbiAgICAgICAgcmVtYWluaW5nQnVkZ2V0ICogKHBlcmNlbnRhZ2UgLyByZW1haW5pbmdQZXJjZW50YWdlKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZXhwZW5zZXMgYXMgQnVkZ2V0VmFsdWVzWydleHBlbnNlcyddO1xufTtcbiIsImltcG9ydCB7IHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgQnVkZ2V0SXRlbUNvbG9ycywgQnVkZ2V0SXRlbUxhYmVscyB9IGZyb20gJy4vY29uc3RhbnRzJztcbmltcG9ydCB7IEJ1ZGdldEV4cGVuc2VJZCwgQnVkZ2V0VmFsdWVzIH0gZnJvbSAnLi90eXBlcyc7XG5pbXBvcnQgeyBjYWxjdWxhdGVFeHBlbnNlcyB9IGZyb20gJy4vdXRpbHMvY2FsY3VsYXRlZEZpZWxkcyc7XG5cbmNvbnN0IHVzZUJ1ZGdldERhdGEgPSAoKSA9PiB7XG4gIGNvbnN0IFtidWRnZXRWYWx1ZXMsIHNldEJ1ZGdldFZhbHVlXSA9IHVzZVN0YXRlPEJ1ZGdldFZhbHVlcz4oe1xuICAgIGluY29tZToge1xuICAgICAgYnVkZ2V0OiAwLFxuICAgICAgbnVtYmVyT2ZHdWVzdHM6IDEwMFxuICAgIH0sXG4gICAgZXhwZW5zZXM6IHtcbiAgICAgIHZlbnVlOiAwLFxuICAgICAgZXZlbnRSZW50YWxzOiAwLFxuICAgICAgZm9vZDogMCxcbiAgICAgIGJldmVyYWdlOiAwLFxuICAgICAgY2FrZTogMCxcbiAgICAgIHBob3RvZ3JhcGhlcjogMCxcbiAgICAgIHZpZGVvZ3JhcGhlcjogMCxcbiAgICAgIGZsb3dlcnM6IDAsXG4gICAgICBkZWNvcjogMCxcbiAgICAgIGVudGVydGFpbm1lbnQ6IDAsXG4gICAgICBkcmVzczogMCxcbiAgICAgIGdyb29tOiAwLFxuICAgICAgaGFpcjogMCxcbiAgICAgIHJpbmdzOiAwLFxuICAgICAgcGxhbm5lcjogMCxcbiAgICAgIG9mZmljaWFudDogMCxcbiAgICAgIHRyYW5zcG9ydGF0aW9uOiAwLFxuICAgICAgcmVoZWFyc2FsRGlubmVyOiAwLFxuICAgICAgaW52aXRhdGlvbnM6IDAsXG4gICAgICBmYXZvcnM6IDAsXG4gICAgICBtYXJyaWFnZUxpY2Vuc2U6IDAsXG4gICAgICBob3RlbDogMCxcbiAgICAgIG90aGVyOiAwLFxuICAgICAgbWlzY2VsbGFuZW91czogMFxuICAgIH1cbiAgfSk7XG5cbiAgY29uc3QgW21hbnVhbEFkanVzdG1lbnRzLCBzZXRNYW51YWxBZGp1c3RtZW50c10gPSB1c2VTdGF0ZTxTZXQ8c3RyaW5nPj4oXG4gICAgbmV3IFNldCgpXG4gICk7XG5cbiAgY29uc3QgdXBkYXRlQnVkZ2V0SXRlbSA9XG4gICAgKGl0ZW1UeXBlOiAnaW5jb21lJyB8ICdleHBlbnNlcycsIGl0ZW1LZXk6IHN0cmluZykgPT4gKHZhbHVlOiBudW1iZXIpID0+IHtcbiAgICAgIGlmIChpdGVtVHlwZSA9PT0gJ2luY29tZScgJiYgaXRlbUtleSA9PT0gJ2J1ZGdldCcpIHtcbiAgICAgICAgY29uc3QgY2FsY3VsYXRlZEV4cGVuc2VzID0gY2FsY3VsYXRlRXhwZW5zZXMoXG4gICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgbWFudWFsQWRqdXN0bWVudHMsXG4gICAgICAgICAgYnVkZ2V0VmFsdWVzLmV4cGVuc2VzXG4gICAgICAgICk7XG5cbiAgICAgICAgc2V0QnVkZ2V0VmFsdWUoe1xuICAgICAgICAgIGluY29tZToge1xuICAgICAgICAgICAgLi4uYnVkZ2V0VmFsdWVzLmluY29tZSxcbiAgICAgICAgICAgIGJ1ZGdldDogdmFsdWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIGV4cGVuc2VzOiBjYWxjdWxhdGVkRXhwZW5zZXNcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2UgaWYgKGl0ZW1UeXBlID09PSAnaW5jb21lJyAmJiBpdGVtS2V5ID09PSAnbnVtYmVyT2ZHdWVzdHMnKSB7XG4gICAgICAgIHNldEJ1ZGdldFZhbHVlKHtcbiAgICAgICAgICAuLi5idWRnZXRWYWx1ZXMsXG4gICAgICAgICAgaW5jb21lOiB7XG4gICAgICAgICAgICAuLi5idWRnZXRWYWx1ZXMuaW5jb21lLFxuICAgICAgICAgICAgbnVtYmVyT2ZHdWVzdHM6IHZhbHVlXG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHNldE1hbnVhbEFkanVzdG1lbnRzKChwcmV2KSA9PiBuZXcgU2V0KHByZXYpLmFkZChpdGVtS2V5KSk7XG4gICAgICAgIHNldEJ1ZGdldFZhbHVlKHtcbiAgICAgICAgICAuLi5idWRnZXRWYWx1ZXMsXG4gICAgICAgICAgW2l0ZW1UeXBlXToge1xuICAgICAgICAgICAgLi4uYnVkZ2V0VmFsdWVzW2l0ZW1UeXBlXSxcbiAgICAgICAgICAgIFtpdGVtS2V5XTogdmFsdWVcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH07XG5cbiAgY29uc3QgZ2V0RXhwZW5zZXMgPSAoKSA9PiB7XG4gICAgY29uc3QgdG90YWxFeHBlbnNlcyA9IE9iamVjdC52YWx1ZXMoYnVkZ2V0VmFsdWVzLmV4cGVuc2VzKS5yZWR1Y2UoXG4gICAgICAodG90YWwsIGN1cnJlbnQpID0+IHtcbiAgICAgICAgcmV0dXJuIHRvdGFsICsgY3VycmVudDtcbiAgICAgIH0sXG4gICAgICAwXG4gICAgKTtcblxuICAgIHJldHVybiB0b3RhbEV4cGVuc2VzO1xuICB9O1xuXG4gIGNvbnN0IGdldERpZmZlcmVuY2UgPSAoKSA9PiB7XG4gICAgY29uc3QgeyBidWRnZXQgfSA9IGJ1ZGdldFZhbHVlcy5pbmNvbWU7XG4gICAgY29uc3QgdG90YWxFeHBlbnNlcyA9IGdldEV4cGVuc2VzKCk7XG4gICAgY29uc3QgZGlmZmVyZW5jZSA9IGJ1ZGdldCAtIHRvdGFsRXhwZW5zZXM7XG4gICAgcmV0dXJuIGRpZmZlcmVuY2U7XG4gIH07XG5cbiAgY29uc3QgZ2V0Q2hhcnREYXRhID0gKCkgPT4ge1xuICAgIHJldHVybiBPYmplY3QuZW50cmllcyhidWRnZXRWYWx1ZXMuZXhwZW5zZXMpLm1hcCgoW2tleSwgdmFsdWVdKSA9PiAoe1xuICAgICAgbmFtZTogQnVkZ2V0SXRlbUxhYmVsc1trZXkgYXMgQnVkZ2V0RXhwZW5zZUlkXSxcbiAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgIGZpbGw6IEJ1ZGdldEl0ZW1Db2xvcnNba2V5IGFzIEJ1ZGdldEV4cGVuc2VJZF1cbiAgICB9KSk7XG4gIH07XG5cbiAgcmV0dXJuIHtcbiAgICBidWRnZXRWYWx1ZXMsXG4gICAgdXBkYXRlQnVkZ2V0SXRlbSxcbiAgICBnZXRFeHBlbnNlcyxcbiAgICBnZXREaWZmZXJlbmNlLFxuICAgIGdldENoYXJ0RGF0YVxuICB9O1xufTtcblxuZXhwb3J0IGRlZmF1bHQgdXNlQnVkZ2V0RGF0YTtcbiIsIi8vIENvbXBvbmVudHNcbmltcG9ydCBCdWRnZXRQaWVDaGFydCBmcm9tICcuL0NhbGN1bGF0b3JDb21wb25lbnRzL0J1ZGdldFBpZUNoYXJ0JztcbmltcG9ydCBCdWRnZXREaWZmZXJlbmNlIGZyb20gJy4vQ2FsY3VsYXRvckNvbXBvbmVudHMvQnVkZ2V0RGlmZmVyZW5jZSc7XG5pbXBvcnQgQnVkZ2V0R3JvdXAgZnJvbSAnLi9DYWxjdWxhdG9yQ29tcG9uZW50cy9CdWRnZXRHcm91cCc7XG5pbXBvcnQgQnVkZ2V0SXRlbSBmcm9tICcuL0NhbGN1bGF0b3JDb21wb25lbnRzL0J1ZGdldEl0ZW0nO1xuXG4vLyBVdGlsc1xuaW1wb3J0IHtcbiAgQnVkZ2V0SXRlbUNvbG9ycyxcbiAgQnVkZ2V0SXRlbUxhYmVscyxcbiAgQnVkZ2V0SXRlbVRvb2xUaXBUZXh0XG59IGZyb20gJy4vY29uc3RhbnRzJztcbmltcG9ydCB1c2VCdWRnZXREYXRhIGZyb20gJy4vdXNlQnVkZ2V0RGF0YSc7XG5pbXBvcnQgeyBCdWRnZXRFeHBlbnNlSWQgfSBmcm9tICcuL3R5cGVzJztcbmltcG9ydCB7IEVYUEVOU0VfUEVSQ0VOVEFHRVMgfSBmcm9tICcuL3V0aWxzL2NhbGN1bGF0ZWRGaWVsZHMnO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBXZWRkaW5nQnVkZ2V0Q2FsY3VsYXRvcigpIHtcbiAgY29uc3Qge1xuICAgIGJ1ZGdldFZhbHVlcyxcbiAgICB1cGRhdGVCdWRnZXRJdGVtLFxuICAgIGdldEV4cGVuc2VzLFxuICAgIGdldERpZmZlcmVuY2UsXG4gICAgZ2V0Q2hhcnREYXRhXG4gIH0gPSB1c2VCdWRnZXREYXRhKCk7XG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggYm9yZGVyLWJveFwiPlxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJ3LWZ1bGwgbWF4LXctZnVsbCBoLWZ1bGwgZmxleCBmbGV4LWNvbCBwLTIgbWQ6cC02XCI+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICBjbGFzc05hbWU9XCJ3LWZ1bGwgZ3JpZCBncmlkLWNvbHMtMSBtZDpncmlkLWNvbHMtMiBnYXAtMnhsIHNtOm1iLTRcIlxuICAgICAgICAgIGRhdGEtdGVzdGlkPVwidG9wLXNlY3Rpb25cIlxuICAgICAgICA+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGZsZXgtY29sIG1kOm9yZGVyLWxhc3RcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBoLWF1dG8ganVzdGlmeS1jZW50ZXIgbWQ6aC1bMzAwcHhdIG1iLTJcIj5cbiAgICAgICAgICAgICAgPEJ1ZGdldFBpZUNoYXJ0XG4gICAgICAgICAgICAgICAgdG90YWxBbW91bnQ9e2dldEV4cGVuc2VzKCl9XG4gICAgICAgICAgICAgICAgZGF0YT17Z2V0Q2hhcnREYXRhKCl9XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggZmxleC1jb2wganVzdGlmeS1hcm91bmRcIj5cbiAgICAgICAgICAgIDxCdWRnZXRHcm91cCBoZWFkaW5nVGV4dD1cIkJ1ZGdldFwiIGNsYXNzTmFtZT1cIm1iLTJcIj5cbiAgICAgICAgICAgICAgPEJ1ZGdldEl0ZW1cbiAgICAgICAgICAgICAgICBpdGVtS2V5PVwiYnVkZ2V0XCJcbiAgICAgICAgICAgICAgICBsYWJlbD17QnVkZ2V0SXRlbUxhYmVsc1snYnVkZ2V0J119XG4gICAgICAgICAgICAgICAgdmFsdWU9e2J1ZGdldFZhbHVlcy5pbmNvbWUuYnVkZ2V0fVxuICAgICAgICAgICAgICAgIG9uQmx1cj17dXBkYXRlQnVkZ2V0SXRlbSgnaW5jb21lJywgJ2J1ZGdldCcpfVxuICAgICAgICAgICAgICAgIGNvbG9yPXtCdWRnZXRJdGVtQ29sb3JzWydidWRnZXQnXX1cbiAgICAgICAgICAgICAgICB0b29sdGlwVGV4dD17QnVkZ2V0SXRlbVRvb2xUaXBUZXh0WydidWRnZXQnXX1cbiAgICAgICAgICAgICAgICBpc0N1cnJlbmN5PXt0cnVlfVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICA8QnVkZ2V0SXRlbVxuICAgICAgICAgICAgICAgIGl0ZW1LZXk9XCJndWVzdHNcIlxuICAgICAgICAgICAgICAgIGxhYmVsPXtCdWRnZXRJdGVtTGFiZWxzWydudW1iZXJPZkd1ZXN0cyddfVxuICAgICAgICAgICAgICAgIHZhbHVlPXtidWRnZXRWYWx1ZXMuaW5jb21lLm51bWJlck9mR3Vlc3RzfVxuICAgICAgICAgICAgICAgIG9uQmx1cj17dXBkYXRlQnVkZ2V0SXRlbSgnaW5jb21lJywgJ251bWJlck9mR3Vlc3RzJyl9XG4gICAgICAgICAgICAgICAgY29sb3I9e0J1ZGdldEl0ZW1Db2xvcnNbJ251bWJlck9mR3Vlc3RzJ119XG4gICAgICAgICAgICAgICAgdG9vbHRpcFRleHQ9e0J1ZGdldEl0ZW1Ub29sVGlwVGV4dFsnbnVtYmVyT2ZHdWVzdHMnXX1cbiAgICAgICAgICAgICAgICBpc0N1cnJlbmN5PXtmYWxzZX1cbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGJveC1ib3JkZXIgYm9yZGVyLXQgYm9yZGVyLVsjRThFQ0VEXVwiPjwvZGl2PlxuICAgICAgICAgICAgPC9CdWRnZXRHcm91cD5cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBib3gtYm9yZGVyIG1iLTRcIj5cbiAgICAgICAgICAgICAgPEJ1ZGdldERpZmZlcmVuY2UgZGlmZmVyZW5jZT17Z2V0RGlmZmVyZW5jZSgpfSAvPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8cCBjbGFzc05hbWU9XCJ0ZXh0LTIgbWQ6cHQtMiBtZDptYi1bLTE2cHhdIG1kOnRleHQtMiB0ZXh0LVsjNEI0RjU0XSBib3R0b20tMFwiPlxuICAgICAgICAgICAgICAqIFRoZSBudW1iZXJzIGJlbG93IGFyZSBqdXN0IGF2ZXJhZ2UgYW1vdW50cyB0byBndWlkZSB5b3XigJRhZGp1c3RcbiAgICAgICAgICAgICAgdGhlbSB0byBmaXQgeW91ciBidWRnZXQuXG4gICAgICAgICAgICA8L3A+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8QnVkZ2V0R3JvdXBcbiAgICAgICAgICBoZWFkaW5nVGV4dD1cIkV4cGVuc2VzXCJcbiAgICAgICAgICBjbGFzc05hbWU9XCJ3LWZ1bGwgZmxleCBmbGV4LWNvbCBwdC0yIG1kOnB0LTAgbWItMlwiXG4gICAgICAgICAgZGF0YS10ZXN0aWQ9XCJib3R0b20tc2VjdGlvblwiXG4gICAgICAgID5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImdyaWQgZ3JpZC1jb2xzLTEgbWQ6Z3JpZC1jb2xzLTIgbWQ6Z2FwLTJ4bFwiPlxuICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAge09iamVjdC5rZXlzKEVYUEVOU0VfUEVSQ0VOVEFHRVMpXG4gICAgICAgICAgICAgICAgLnNsaWNlKFxuICAgICAgICAgICAgICAgICAgMCxcbiAgICAgICAgICAgICAgICAgIE1hdGguY2VpbChPYmplY3Qua2V5cyhFWFBFTlNFX1BFUkNFTlRBR0VTKS5sZW5ndGggLyAyKVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAubWFwKChrZXkpID0+IChcbiAgICAgICAgICAgICAgICAgIDxCdWRnZXRJdGVtXG4gICAgICAgICAgICAgICAgICAgIGtleT17a2V5fVxuICAgICAgICAgICAgICAgICAgICBpdGVtS2V5PXtrZXkgYXMgQnVkZ2V0RXhwZW5zZUlkfSAvLyBQYXNzIGtleSBhcyBpdGVtS2V5XG4gICAgICAgICAgICAgICAgICAgIGxhYmVsPXtCdWRnZXRJdGVtTGFiZWxzW2tleSBhcyBCdWRnZXRFeHBlbnNlSWRdfVxuICAgICAgICAgICAgICAgICAgICB2YWx1ZT17YnVkZ2V0VmFsdWVzLmV4cGVuc2VzW2tleSBhcyBCdWRnZXRFeHBlbnNlSWRdfVxuICAgICAgICAgICAgICAgICAgICBvbkJsdXI9e3VwZGF0ZUJ1ZGdldEl0ZW0oJ2V4cGVuc2VzJywga2V5KX1cbiAgICAgICAgICAgICAgICAgICAgY29sb3I9e0J1ZGdldEl0ZW1Db2xvcnNba2V5IGFzIEJ1ZGdldEV4cGVuc2VJZF19XG4gICAgICAgICAgICAgICAgICAgIHRvb2x0aXBUZXh0PXtCdWRnZXRJdGVtVG9vbFRpcFRleHRba2V5IGFzIEJ1ZGdldEV4cGVuc2VJZF19XG4gICAgICAgICAgICAgICAgICAgIGlzQ3VycmVuY3k9e3RydWV9XG4gICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICkpfVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICB7T2JqZWN0LmtleXMoRVhQRU5TRV9QRVJDRU5UQUdFUylcbiAgICAgICAgICAgICAgICAuc2xpY2UoTWF0aC5jZWlsKE9iamVjdC5rZXlzKEVYUEVOU0VfUEVSQ0VOVEFHRVMpLmxlbmd0aCAvIDIpKVxuICAgICAgICAgICAgICAgIC5tYXAoKGtleSkgPT4gKFxuICAgICAgICAgICAgICAgICAgPEJ1ZGdldEl0ZW1cbiAgICAgICAgICAgICAgICAgICAga2V5PXtrZXl9XG4gICAgICAgICAgICAgICAgICAgIGl0ZW1LZXk9e2tleSBhcyBCdWRnZXRFeHBlbnNlSWR9IC8vIFBhc3Mga2V5IGFzIGl0ZW1LZXlcbiAgICAgICAgICAgICAgICAgICAgbGFiZWw9e0J1ZGdldEl0ZW1MYWJlbHNba2V5IGFzIEJ1ZGdldEV4cGVuc2VJZF19XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlPXtidWRnZXRWYWx1ZXMuZXhwZW5zZXNba2V5IGFzIEJ1ZGdldEV4cGVuc2VJZF19XG4gICAgICAgICAgICAgICAgICAgIG9uQmx1cj17dXBkYXRlQnVkZ2V0SXRlbSgnZXhwZW5zZXMnLCBrZXkpfVxuICAgICAgICAgICAgICAgICAgICBjb2xvcj17QnVkZ2V0SXRlbUNvbG9yc1trZXkgYXMgQnVkZ2V0RXhwZW5zZUlkXX1cbiAgICAgICAgICAgICAgICAgICAgdG9vbHRpcFRleHQ9e0J1ZGdldEl0ZW1Ub29sVGlwVGV4dFtrZXkgYXMgQnVkZ2V0RXhwZW5zZUlkXX1cbiAgICAgICAgICAgICAgICAgICAgaXNDdXJyZW5jeT17dHJ1ZX1cbiAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgKSl9XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9CdWRnZXRHcm91cD5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICApO1xufVxuIiwiaW1wb3J0IHsgY3JlYXRlUm9vdCB9IGZyb20gJ3JlYWN0LWRvbS9jbGllbnQnO1xuaW1wb3J0ICcuLi8uLi8uLi9jc3MvZ2xvYmFsLmNzcyc7XG5pbXBvcnQgV2VkZGluZ0J1ZGdldENhbGN1bGF0b3IgZnJvbSAnLi9XZWRkaW5nQnVkZ2V0Q2FsY3VsYXRvcic7XG5cbmNvbnN0IHJvb3RFbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3dlZGRpbmctYnVkZ2V0LWNhbGN1bGF0b3Itcm9vdCcpO1xuaWYgKHJvb3RFbGVtZW50KSB7XG4gIGNyZWF0ZVJvb3Qocm9vdEVsZW1lbnQpLnJlbmRlcig8V2VkZGluZ0J1ZGdldENhbGN1bGF0b3IgLz4pO1xufVxuIiwiLy8gVGhlIG1vZHVsZSBjYWNoZVxudmFyIF9fd2VicGFja19tb2R1bGVfY2FjaGVfXyA9IHt9O1xuXG4vLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuXHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcblx0dmFyIGNhY2hlZE1vZHVsZSA9IF9fd2VicGFja19tb2R1bGVfY2FjaGVfX1ttb2R1bGVJZF07XG5cdGlmIChjYWNoZWRNb2R1bGUgIT09IHVuZGVmaW5lZCkge1xuXHRcdHJldHVybiBjYWNoZWRNb2R1bGUuZXhwb3J0cztcblx0fVxuXHQvLyBDcmVhdGUgYSBuZXcgbW9kdWxlIChhbmQgcHV0IGl0IGludG8gdGhlIGNhY2hlKVxuXHR2YXIgbW9kdWxlID0gX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fW21vZHVsZUlkXSA9IHtcblx0XHQvLyBubyBtb2R1bGUuaWQgbmVlZGVkXG5cdFx0Ly8gbm8gbW9kdWxlLmxvYWRlZCBuZWVkZWRcblx0XHRleHBvcnRzOiB7fVxuXHR9O1xuXG5cdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuXHRfX3dlYnBhY2tfbW9kdWxlc19fW21vZHVsZUlkXS5jYWxsKG1vZHVsZS5leHBvcnRzLCBtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcblxuXHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuXHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG59XG5cbi8vIGV4cG9zZSB0aGUgbW9kdWxlcyBvYmplY3QgKF9fd2VicGFja19tb2R1bGVzX18pXG5fX3dlYnBhY2tfcmVxdWlyZV9fLm0gPSBfX3dlYnBhY2tfbW9kdWxlc19fO1xuXG4iLCJ2YXIgZGVmZXJyZWQgPSBbXTtcbl9fd2VicGFja19yZXF1aXJlX18uTyA9IChyZXN1bHQsIGNodW5rSWRzLCBmbiwgcHJpb3JpdHkpID0+IHtcblx0aWYoY2h1bmtJZHMpIHtcblx0XHRwcmlvcml0eSA9IHByaW9yaXR5IHx8IDA7XG5cdFx0Zm9yKHZhciBpID0gZGVmZXJyZWQubGVuZ3RoOyBpID4gMCAmJiBkZWZlcnJlZFtpIC0gMV1bMl0gPiBwcmlvcml0eTsgaS0tKSBkZWZlcnJlZFtpXSA9IGRlZmVycmVkW2kgLSAxXTtcblx0XHRkZWZlcnJlZFtpXSA9IFtjaHVua0lkcywgZm4sIHByaW9yaXR5XTtcblx0XHRyZXR1cm47XG5cdH1cblx0dmFyIG5vdEZ1bGZpbGxlZCA9IEluZmluaXR5O1xuXHRmb3IgKHZhciBpID0gMDsgaSA8IGRlZmVycmVkLmxlbmd0aDsgaSsrKSB7XG5cdFx0dmFyIFtjaHVua0lkcywgZm4sIHByaW9yaXR5XSA9IGRlZmVycmVkW2ldO1xuXHRcdHZhciBmdWxmaWxsZWQgPSB0cnVlO1xuXHRcdGZvciAodmFyIGogPSAwOyBqIDwgY2h1bmtJZHMubGVuZ3RoOyBqKyspIHtcblx0XHRcdGlmICgocHJpb3JpdHkgJiAxID09PSAwIHx8IG5vdEZ1bGZpbGxlZCA+PSBwcmlvcml0eSkgJiYgT2JqZWN0LmtleXMoX193ZWJwYWNrX3JlcXVpcmVfXy5PKS5ldmVyeSgoa2V5KSA9PiAoX193ZWJwYWNrX3JlcXVpcmVfXy5PW2tleV0oY2h1bmtJZHNbal0pKSkpIHtcblx0XHRcdFx0Y2h1bmtJZHMuc3BsaWNlKGotLSwgMSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRmdWxmaWxsZWQgPSBmYWxzZTtcblx0XHRcdFx0aWYocHJpb3JpdHkgPCBub3RGdWxmaWxsZWQpIG5vdEZ1bGZpbGxlZCA9IHByaW9yaXR5O1xuXHRcdFx0fVxuXHRcdH1cblx0XHRpZihmdWxmaWxsZWQpIHtcblx0XHRcdGRlZmVycmVkLnNwbGljZShpLS0sIDEpXG5cdFx0XHR2YXIgciA9IGZuKCk7XG5cdFx0XHRpZiAociAhPT0gdW5kZWZpbmVkKSByZXN1bHQgPSByO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gcmVzdWx0O1xufTsiLCIvLyBnZXREZWZhdWx0RXhwb3J0IGZ1bmN0aW9uIGZvciBjb21wYXRpYmlsaXR5IHdpdGggbm9uLWhhcm1vbnkgbW9kdWxlc1xuX193ZWJwYWNrX3JlcXVpcmVfXy5uID0gKG1vZHVsZSkgPT4ge1xuXHR2YXIgZ2V0dGVyID0gbW9kdWxlICYmIG1vZHVsZS5fX2VzTW9kdWxlID9cblx0XHQoKSA9PiAobW9kdWxlWydkZWZhdWx0J10pIDpcblx0XHQoKSA9PiAobW9kdWxlKTtcblx0X193ZWJwYWNrX3JlcXVpcmVfXy5kKGdldHRlciwgeyBhOiBnZXR0ZXIgfSk7XG5cdHJldHVybiBnZXR0ZXI7XG59OyIsInZhciBnZXRQcm90byA9IE9iamVjdC5nZXRQcm90b3R5cGVPZiA/IChvYmopID0+IChPYmplY3QuZ2V0UHJvdG90eXBlT2Yob2JqKSkgOiAob2JqKSA9PiAob2JqLl9fcHJvdG9fXyk7XG52YXIgbGVhZlByb3RvdHlwZXM7XG4vLyBjcmVhdGUgYSBmYWtlIG5hbWVzcGFjZSBvYmplY3Rcbi8vIG1vZGUgJiAxOiB2YWx1ZSBpcyBhIG1vZHVsZSBpZCwgcmVxdWlyZSBpdFxuLy8gbW9kZSAmIDI6IG1lcmdlIGFsbCBwcm9wZXJ0aWVzIG9mIHZhbHVlIGludG8gdGhlIG5zXG4vLyBtb2RlICYgNDogcmV0dXJuIHZhbHVlIHdoZW4gYWxyZWFkeSBucyBvYmplY3Rcbi8vIG1vZGUgJiAxNjogcmV0dXJuIHZhbHVlIHdoZW4gaXQncyBQcm9taXNlLWxpa2Vcbi8vIG1vZGUgJiA4fDE6IGJlaGF2ZSBsaWtlIHJlcXVpcmVcbl9fd2VicGFja19yZXF1aXJlX18udCA9IGZ1bmN0aW9uKHZhbHVlLCBtb2RlKSB7XG5cdGlmKG1vZGUgJiAxKSB2YWx1ZSA9IHRoaXModmFsdWUpO1xuXHRpZihtb2RlICYgOCkgcmV0dXJuIHZhbHVlO1xuXHRpZih0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIHZhbHVlKSB7XG5cdFx0aWYoKG1vZGUgJiA0KSAmJiB2YWx1ZS5fX2VzTW9kdWxlKSByZXR1cm4gdmFsdWU7XG5cdFx0aWYoKG1vZGUgJiAxNikgJiYgdHlwZW9mIHZhbHVlLnRoZW4gPT09ICdmdW5jdGlvbicpIHJldHVybiB2YWx1ZTtcblx0fVxuXHR2YXIgbnMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnIobnMpO1xuXHR2YXIgZGVmID0ge307XG5cdGxlYWZQcm90b3R5cGVzID0gbGVhZlByb3RvdHlwZXMgfHwgW251bGwsIGdldFByb3RvKHt9KSwgZ2V0UHJvdG8oW10pLCBnZXRQcm90byhnZXRQcm90byldO1xuXHRmb3IodmFyIGN1cnJlbnQgPSBtb2RlICYgMiAmJiB2YWx1ZTsgKHR5cGVvZiBjdXJyZW50ID09ICdvYmplY3QnIHx8IHR5cGVvZiBjdXJyZW50ID09ICdmdW5jdGlvbicpICYmICF+bGVhZlByb3RvdHlwZXMuaW5kZXhPZihjdXJyZW50KTsgY3VycmVudCA9IGdldFByb3RvKGN1cnJlbnQpKSB7XG5cdFx0T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoY3VycmVudCkuZm9yRWFjaCgoa2V5KSA9PiAoZGVmW2tleV0gPSAoKSA9PiAodmFsdWVba2V5XSkpKTtcblx0fVxuXHRkZWZbJ2RlZmF1bHQnXSA9ICgpID0+ICh2YWx1ZSk7XG5cdF9fd2VicGFja19yZXF1aXJlX18uZChucywgZGVmKTtcblx0cmV0dXJuIG5zO1xufTsiLCIvLyBkZWZpbmUgZ2V0dGVyIGZ1bmN0aW9ucyBmb3IgaGFybW9ueSBleHBvcnRzXG5fX3dlYnBhY2tfcmVxdWlyZV9fLmQgPSAoZXhwb3J0cywgZGVmaW5pdGlvbikgPT4ge1xuXHRmb3IodmFyIGtleSBpbiBkZWZpbml0aW9uKSB7XG5cdFx0aWYoX193ZWJwYWNrX3JlcXVpcmVfXy5vKGRlZmluaXRpb24sIGtleSkgJiYgIV9fd2VicGFja19yZXF1aXJlX18ubyhleHBvcnRzLCBrZXkpKSB7XG5cdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywga2V5LCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZGVmaW5pdGlvbltrZXldIH0pO1xuXHRcdH1cblx0fVxufTsiLCJfX3dlYnBhY2tfcmVxdWlyZV9fLm8gPSAob2JqLCBwcm9wKSA9PiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwgcHJvcCkpIiwiLy8gZGVmaW5lIF9fZXNNb2R1bGUgb24gZXhwb3J0c1xuX193ZWJwYWNrX3JlcXVpcmVfXy5yID0gKGV4cG9ydHMpID0+IHtcblx0aWYodHlwZW9mIFN5bWJvbCAhPT0gJ3VuZGVmaW5lZCcgJiYgU3ltYm9sLnRvU3RyaW5nVGFnKSB7XG5cdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFN5bWJvbC50b1N0cmluZ1RhZywgeyB2YWx1ZTogJ01vZHVsZScgfSk7XG5cdH1cblx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbn07IiwiLy8gbm8gYmFzZVVSSVxuXG4vLyBvYmplY3QgdG8gc3RvcmUgbG9hZGVkIGFuZCBsb2FkaW5nIGNodW5rc1xuLy8gdW5kZWZpbmVkID0gY2h1bmsgbm90IGxvYWRlZCwgbnVsbCA9IGNodW5rIHByZWxvYWRlZC9wcmVmZXRjaGVkXG4vLyBbcmVzb2x2ZSwgcmVqZWN0LCBQcm9taXNlXSA9IGNodW5rIGxvYWRpbmcsIDAgPSBjaHVuayBsb2FkZWRcbnZhciBpbnN0YWxsZWRDaHVua3MgPSB7XG5cdDMxNDogMCxcblx0ODg2OiAwXG59O1xuXG4vLyBubyBjaHVuayBvbiBkZW1hbmQgbG9hZGluZ1xuXG4vLyBubyBwcmVmZXRjaGluZ1xuXG4vLyBubyBwcmVsb2FkZWRcblxuLy8gbm8gSE1SXG5cbi8vIG5vIEhNUiBtYW5pZmVzdFxuXG5fX3dlYnBhY2tfcmVxdWlyZV9fLk8uaiA9IChjaHVua0lkKSA9PiAoaW5zdGFsbGVkQ2h1bmtzW2NodW5rSWRdID09PSAwKTtcblxuLy8gaW5zdGFsbCBhIEpTT05QIGNhbGxiYWNrIGZvciBjaHVuayBsb2FkaW5nXG52YXIgd2VicGFja0pzb25wQ2FsbGJhY2sgPSAocGFyZW50Q2h1bmtMb2FkaW5nRnVuY3Rpb24sIGRhdGEpID0+IHtcblx0dmFyIFtjaHVua0lkcywgbW9yZU1vZHVsZXMsIHJ1bnRpbWVdID0gZGF0YTtcblx0Ly8gYWRkIFwibW9yZU1vZHVsZXNcIiB0byB0aGUgbW9kdWxlcyBvYmplY3QsXG5cdC8vIHRoZW4gZmxhZyBhbGwgXCJjaHVua0lkc1wiIGFzIGxvYWRlZCBhbmQgZmlyZSBjYWxsYmFja1xuXHR2YXIgbW9kdWxlSWQsIGNodW5rSWQsIGkgPSAwO1xuXHRpZihjaHVua0lkcy5zb21lKChpZCkgPT4gKGluc3RhbGxlZENodW5rc1tpZF0gIT09IDApKSkge1xuXHRcdGZvcihtb2R1bGVJZCBpbiBtb3JlTW9kdWxlcykge1xuXHRcdFx0aWYoX193ZWJwYWNrX3JlcXVpcmVfXy5vKG1vcmVNb2R1bGVzLCBtb2R1bGVJZCkpIHtcblx0XHRcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5tW21vZHVsZUlkXSA9IG1vcmVNb2R1bGVzW21vZHVsZUlkXTtcblx0XHRcdH1cblx0XHR9XG5cdFx0aWYocnVudGltZSkgdmFyIHJlc3VsdCA9IHJ1bnRpbWUoX193ZWJwYWNrX3JlcXVpcmVfXyk7XG5cdH1cblx0aWYocGFyZW50Q2h1bmtMb2FkaW5nRnVuY3Rpb24pIHBhcmVudENodW5rTG9hZGluZ0Z1bmN0aW9uKGRhdGEpO1xuXHRmb3IoO2kgPCBjaHVua0lkcy5sZW5ndGg7IGkrKykge1xuXHRcdGNodW5rSWQgPSBjaHVua0lkc1tpXTtcblx0XHRpZihfX3dlYnBhY2tfcmVxdWlyZV9fLm8oaW5zdGFsbGVkQ2h1bmtzLCBjaHVua0lkKSAmJiBpbnN0YWxsZWRDaHVua3NbY2h1bmtJZF0pIHtcblx0XHRcdGluc3RhbGxlZENodW5rc1tjaHVua0lkXVswXSgpO1xuXHRcdH1cblx0XHRpbnN0YWxsZWRDaHVua3NbY2h1bmtJZF0gPSAwO1xuXHR9XG5cdHJldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fLk8ocmVzdWx0KTtcbn1cblxudmFyIGNodW5rTG9hZGluZ0dsb2JhbCA9IHNlbGZbXCJ3ZWJwYWNrQ2h1bmtyYW1zZXlfcGx1c19mb3Jtc1wiXSA9IHNlbGZbXCJ3ZWJwYWNrQ2h1bmtyYW1zZXlfcGx1c19mb3Jtc1wiXSB8fCBbXTtcbmNodW5rTG9hZGluZ0dsb2JhbC5mb3JFYWNoKHdlYnBhY2tKc29ucENhbGxiYWNrLmJpbmQobnVsbCwgMCkpO1xuY2h1bmtMb2FkaW5nR2xvYmFsLnB1c2ggPSB3ZWJwYWNrSnNvbnBDYWxsYmFjay5iaW5kKG51bGwsIGNodW5rTG9hZGluZ0dsb2JhbC5wdXNoLmJpbmQoY2h1bmtMb2FkaW5nR2xvYmFsKSk7IiwiIiwiLy8gc3RhcnR1cFxuLy8gTG9hZCBlbnRyeSBtb2R1bGUgYW5kIHJldHVybiBleHBvcnRzXG4vLyBUaGlzIGVudHJ5IG1vZHVsZSBkZXBlbmRzIG9uIG90aGVyIGxvYWRlZCBjaHVua3MgYW5kIGV4ZWN1dGlvbiBuZWVkIHRvIGJlIGRlbGF5ZWRcbnZhciBfX3dlYnBhY2tfZXhwb3J0c19fID0gX193ZWJwYWNrX3JlcXVpcmVfXy5PKHVuZGVmaW5lZCwgWzI3OSw4Niw4ODZdLCAoKSA9PiAoX193ZWJwYWNrX3JlcXVpcmVfXyg1NjE5KSkpXG5fX3dlYnBhY2tfZXhwb3J0c19fID0gX193ZWJwYWNrX3JlcXVpcmVfXy5PKF9fd2VicGFja19leHBvcnRzX18pO1xuIiwiIl0sIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZVJvb3QiOiIifQ==