@gravityforms/components 6.2.1 → 6.2.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -15,7 +15,7 @@
15
15
  \*****************************************************************************/
16
16
  /***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
17
17
 
18
- eval("{// ESM COMPAT FLAG\n__webpack_require__.r(__webpack_exports__);\n\n// EXPORTS\n__webpack_require__.d(__webpack_exports__, {\n \"default\": function() { return /* binding */ Phone_PhoneComponent; }\n});\n\n// EXTERNAL MODULE: ../../../node_modules/@babel/runtime/helpers/esm/extends.js\nvar esm_extends = __webpack_require__(\"../../../node_modules/@babel/runtime/helpers/esm/extends.js\");\n// EXTERNAL MODULE: ../../../node_modules/@babel/runtime/helpers/esm/defineProperty.js\nvar defineProperty = __webpack_require__(\"../../../node_modules/@babel/runtime/helpers/esm/defineProperty.js\");\n// EXTERNAL MODULE: ../../../node_modules/@babel/runtime/helpers/esm/slicedToArray.js + 3 modules\nvar slicedToArray = __webpack_require__(\"../../../node_modules/@babel/runtime/helpers/esm/slicedToArray.js\");\n// EXTERNAL MODULE: external [\"gform\",\"libraries\"]\nvar external_gform_libraries_ = __webpack_require__(\"@gravityforms/libraries\");\n// EXTERNAL MODULE: external [\"gform\",\"utils\",\"react\"]\nvar external_gform_utils_react_ = __webpack_require__(\"@gravityforms/react-utils\");\n// EXTERNAL MODULE: external [\"gform\",\"utils\"]\nvar external_gform_utils_ = __webpack_require__(\"@gravityforms/utils\");\n// EXTERNAL MODULE: ../../../node_modules/libphonenumber-js/examples.mobile.json.js\nvar examples_mobile_json = __webpack_require__(\"../../../node_modules/libphonenumber-js/examples.mobile.json.js\");\n// EXTERNAL MODULE: ../../../node_modules/libphonenumber-js/min/exports/getExampleNumber.js + 17 modules\nvar getExampleNumber = __webpack_require__(\"../../../node_modules/libphonenumber-js/min/exports/getExampleNumber.js\");\n// EXTERNAL MODULE: ../components/react/admin/modules/Dropdown/utils.js\nvar utils = __webpack_require__(\"../components/react/admin/modules/Dropdown/utils.js\");\n// EXTERNAL MODULE: ../components/react/admin/modules/Dropdown/CountryDropdown/index.js\nvar CountryDropdown = __webpack_require__(\"../components/react/admin/modules/Dropdown/CountryDropdown/index.js\");\n// EXTERNAL MODULE: ../components/react/admin/modules/Dropdown/CountryDropdown/utils.js + 1 modules\nvar CountryDropdown_utils = __webpack_require__(\"../components/react/admin/modules/Dropdown/CountryDropdown/utils.js\");\n// EXTERNAL MODULE: ../components/react/admin/elements/HelpText/index.js\nvar HelpText = __webpack_require__(\"../components/react/admin/elements/HelpText/index.js\");\n// EXTERNAL MODULE: ../components/react/admin/elements/Input/index.js\nvar Input = __webpack_require__(\"../components/react/admin/elements/Input/index.js\");\n;// ../components/react/admin/modules/Phone/utils.js\n\nvar ANDROID_USER_AGENT_REG_EXP = /Android/i;\n\n/**\n * @function isAndroid\n * @description Checks if the user agent is Android.\n * Copied from the original function `isAndroid` from `input-format` package.\n * The original function is not exported, so it was copied here.\n *\n * @since 5.5.0\n *\n * @return {boolean} Whether the user agent is Android.\n */\nvar isAndroid = function isAndroid() {\n // `navigator` is not defined when running mocha tests.\n if (typeof navigator !== 'undefined') {\n return ANDROID_USER_AGENT_REG_EXP.test(navigator.userAgent);\n }\n return false;\n};\n\n/**\n * @function getCaretPosition\n * @description Gets the caret position.\n * Copied from the original function `getCaretPosition` from `input-format` package.\n * The original function is not exported, so it was copied here.\n *\n * @since 5.5.0\n *\n * @param {HTMLElement} element The element to get the caret position from.\n *\n * @return {number} The caret position.\n */\nvar getCaretPosition = function getCaretPosition(element) {\n return element.selectionStart;\n};\n\n/**\n * @function setCaretPosition\n * @description Sets the caret position.\n * Copied from the original function `setCaretPosition` from `input-format` package.\n * The original function is not exported, so it was copied here.\n *\n * @since 5.5.0\n *\n * @param {HTMLElement} element The element to set the caret position on.\n * @param {number} caretPosition The caret position to set.\n */\nvar setCaretPosition = function setCaretPosition(element, caretPosition) {\n // Sanity check\n if (caretPosition === undefined) {\n return;\n }\n\n // Set caret position.\n // There has been an issue with caret positioning on Android devices.\n // https://github.com/catamphetamine/input-format/issues/2\n // I was revisiting this issue and looked for similar issues in other libraries.\n // For example, there's [`text-mask`](https://github.com/text-mask/text-mask) library.\n // They've had exactly the same issue when the caret seemingly refused to be repositioned programmatically.\n // The symptoms were the same: whenever the caret passed through a non-digit character of a mask (a whitespace, a bracket, a dash, etc), it looked as if it placed itself one character before its correct position.\n // https://github.com/text-mask/text-mask/issues/300\n // They seem to have found a basic fix for it: calling `input.setSelectionRange()` in a timeout rather than instantly for Android devices.\n // https://github.com/text-mask/text-mask/pull/400/files\n // I've implemented the same workaround here.\n if (isAndroid()) {\n setTimeout(function () {\n return element.setSelectionRange(caretPosition, caretPosition);\n }, 0);\n } else {\n element.setSelectionRange(caretPosition, caretPosition);\n }\n};\n\n/**\n * @function getTextAfterEraseSelection\n * @description Gets the text after erasing the selection.\n * Modified from the original function `eraseSelection` from `input-format` package.\n * The original function is not exported, so it was copied here.\n *\n * @since 5.5.0\n *\n * @param {string} text The text to erase the selection from.\n * @param {object} selection The selection to erase. The selection is an object with `start` and `end` properties.\n *\n * @return {string} The text after erasing the selection.\n */\nvar getTextAfterEraseSelection = function getTextAfterEraseSelection(text, selection) {\n var start = Math.min(selection.start, selection.end);\n var end = Math.max(selection.start, selection.end);\n return text.slice(0, start) + text.slice(end);\n};\n\n/**\n * @function getSelection\n * @description Gets the selection.\n * Copied from the original function `getSelection` from `input-format` package.\n * The original function is not exported, so it was copied here.\n *\n * @since 5.5.0\n *\n * @param {HTMLElement} input The input element.\n *\n * @return {object|undefined} The selection object with `start` and `end` properties.\n */\nvar getSelection = function getSelection(input) {\n // If no selection, return nothing\n if (input.selectionStart === input.selectionEnd) {\n return;\n }\n var start = Math.min(input.selectionStart, input.selectionEnd);\n var end = Math.max(input.selectionStart, input.selectionEnd);\n return {\n start: start,\n end: end\n };\n};\n\n/**\n * @function getId\n * @description Get the id from the prefix and key provided.\n *\n * @since 5.5.0\n *\n * @param {string} prefix The id prefix.\n * @param {string} key The id key.\n *\n * @return {string} The id.\n */\nvar getId = function getId(prefix, key) {\n return (0,external_gform_utils_.slugify)(\"\".concat(prefix, \"-\").concat(key));\n};\n\n/**\n * @function e164ToNumber\n * @description Convert an E.164 formatted phone number to a number.\n *\n * @since 5.5.0\n *\n * @throws {TypeError} If the input is not a string.\n *\n * @param {string} e164 The E.164 formatted phone number.\n *\n * @return {string} The phone number.\n */\nvar e164ToNumber = function e164ToNumber(e164) {\n if (typeof e164 !== 'string') {\n throw new TypeError('Input must be a string');\n }\n return e164.replace(/^\\+/, '');\n};\n\n/**\n * @function numberToE164\n * @description Convert a phone number to E.164 format.\n *\n * @since 5.5.0\n *\n * @throws {TypeError} If the input is not a string.\n *\n * @param {string} number The phone number.\n *\n * @return {string} The E.164 formatted phone number.\n */\nvar numberToE164 = function numberToE164(number) {\n if (typeof number !== 'string') {\n throw new TypeError('Input must be a string');\n }\n return number.startsWith('+') ? number : \"+\".concat(number);\n};\n;// ../components/react/admin/modules/Phone/PhoneComponent.js\n\n\n\nfunction ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { (0,defineProperty[\"default\"])(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\n\n\n\n\n\n\n\n\n\n\n\nvar useEffect = external_gform_libraries_.React.useEffect,\n useRef = external_gform_libraries_.React.useRef,\n useState = external_gform_libraries_.React.useState,\n forwardRef = external_gform_libraries_.React.forwardRef;\nvar INPUT_SELECTOR = '.gform-input';\nvar DROPDOWN_TRIGGER_SELECTOR = '.gform-dropdown__trigger';\nvar BORDER_STYLE_DEFAULT = 'default';\nvar BORDER_STYLE_ERROR = 'error';\nvar BORDER_STYLE_CORRECT = 'correct';\nvar PhoneComponent = forwardRef(function (props, ref) {\n var countries = props.countries,\n customAttributes = props.customAttributes,\n customClasses = props.customClasses,\n disabled = props.disabled,\n dropdownAttributes = props.dropdownAttributes,\n dropdownClasses = props.dropdownClasses,\n helpTextAttributes = props.helpTextAttributes,\n helpTextClasses = props.helpTextClasses,\n i18n = props.i18n,\n inputAttributes = props.inputAttributes,\n inputClasses = props.inputClasses,\n international = props.international,\n label = props.label,\n labelAttributes = props.labelAttributes,\n labelClasses = props.labelClasses,\n language = props.language,\n onChange = props.onChange,\n preferredCountries = props.preferredCountries,\n required = props.required,\n requiredLabelAttributes = props.requiredLabelAttributes,\n requiredLabelClasses = props.requiredLabelClasses,\n size = props.size,\n spacing = props.spacing,\n usePlaceholder = props.usePlaceholder,\n useValidation = props.useValidation,\n width = props.width;\n\n // Refs\n var internalRef = useRef(null);\n var wrapperRef = ref || internalRef;\n var dropdownRef = useRef(null);\n var inputRef = useRef(null);\n var phoneInputRef = useRef(null);\n var id = (0,external_gform_utils_react_.useIdContext)();\n var _usePhoneInputFormatU = (0,external_gform_utils_react_.usePhoneInputFormatUtilsContext)(),\n inputFormatUtils = _usePhoneInputFormatU.inputFormatUtils;\n var getFormattedInputText = inputFormatUtils.getFormattedInputText;\n var _useState = useState(function () {\n var countriesListItems = (0,CountryDropdown_utils.getCountriesListItemsFromIsos)(countries, language, i18n, {\n showFlag: (dropdownAttributes === null || dropdownAttributes === void 0 ? void 0 : dropdownAttributes.showFlag) || true,\n showCallingCode: (dropdownAttributes === null || dropdownAttributes === void 0 ? void 0 : dropdownAttributes.showCallingCode) || true\n });\n if (dropdownAttributes !== null && dropdownAttributes !== void 0 && dropdownAttributes.initialValue) {\n return (0,utils.getSelectedItemFromValue)(dropdownAttributes === null || dropdownAttributes === void 0 ? void 0 : dropdownAttributes.initialValue, countriesListItems, false);\n }\n if (preferredCountries.length) {\n var _preferred$;\n var preferred = (0,CountryDropdown_utils.sortPreferredCountries)(countriesListItems, preferredCountries, i18n);\n if ((preferred === null || preferred === void 0 || (_preferred$ = preferred[0]) === null || _preferred$ === void 0 ? void 0 : _preferred$.type) === 'group') {\n var _preferred$2;\n return (preferred === null || preferred === void 0 || (_preferred$2 = preferred[0]) === null || _preferred$2 === void 0 || (_preferred$2 = _preferred$2.items) === null || _preferred$2 === void 0 ? void 0 : _preferred$2[0]) || {};\n }\n return preferred === null || preferred === void 0 ? void 0 : preferred[0];\n }\n if (countriesListItems !== null && countriesListItems !== void 0 && countriesListItems[0]) {\n return countriesListItems === null || countriesListItems === void 0 ? void 0 : countriesListItems[0];\n }\n return {};\n }),\n _useState2 = (0,slicedToArray[\"default\"])(_useState, 2),\n country = _useState2[0],\n setCountry = _useState2[1];\n var _useState3 = useState(function () {\n if (inputAttributes !== null && inputAttributes !== void 0 && inputAttributes.value) {\n var _getFormattedInputTex = getFormattedInputText(inputAttributes === null || inputAttributes === void 0 ? void 0 : inputAttributes.value, 0, country === null || country === void 0 ? void 0 : country.value, international),\n asYouType = _getFormattedInputTex.asYouType,\n formatted = _getFormattedInputTex.formatted;\n return {\n asYouType: asYouType,\n chars: (asYouType === null || asYouType === void 0 ? void 0 : asYouType.getChars()) || '',\n value: formatted.text,\n numberValue: (asYouType === null || asYouType === void 0 ? void 0 : asYouType.getNumberValue()) || ''\n };\n }\n return {\n asYouType: null,\n chars: '',\n value: '',\n numberValue: ''\n };\n }),\n _useState4 = (0,slicedToArray[\"default\"])(_useState3, 2),\n phoneNumber = _useState4[0],\n setPhoneNumber = _useState4[1];\n var _useState5 = useState(BORDER_STYLE_DEFAULT),\n _useState6 = (0,slicedToArray[\"default\"])(_useState5, 2),\n borderStyle = _useState6[0],\n setBorderStyle = _useState6[1];\n\n // Set phoneInputRef.\n useEffect(function () {\n if (!inputRef.current) {\n return;\n }\n if (phoneInputRef.current === inputRef.current.querySelector(INPUT_SELECTOR)) {\n return;\n }\n phoneInputRef.current = inputRef.current.querySelector(INPUT_SELECTOR);\n }, [inputRef, phoneInputRef]);\n\n /**\n * @function getPlaceholder\n * @description Get the placeholder text for the input.\n *\n * @since 5.5.0\n *\n * @return {string|undefined} Placeholder text.\n */\n var getPlaceholder = function getPlaceholder() {\n if (!usePlaceholder) {\n return undefined;\n }\n var exampleNumber = (0,getExampleNumber.getExampleNumber)(country === null || country === void 0 ? void 0 : country.value, examples_mobile_json[\"default\"]);\n if (!exampleNumber) {\n return undefined;\n }\n return international ? exampleNumber.formatInternational() : exampleNumber.formatNational();\n };\n\n /**\n * @function validatePhoneNumber\n * @description Validate the phone number.\n *\n * @since 5.5.0\n *\n */\n var validatePhoneNumber = function validatePhoneNumber() {\n // If validation is disabled, return early.\n if (!useValidation) {\n if (borderStyle !== BORDER_STYLE_DEFAULT) {\n setBorderStyle(BORDER_STYLE_DEFAULT);\n }\n return;\n }\n var asYouType = phoneNumber.asYouType,\n numberValue = phoneNumber.numberValue;\n var isPossible = asYouType === null || asYouType === void 0 ? void 0 : asYouType.isPossible();\n if (numberValue) {\n setBorderStyle(isPossible ? BORDER_STYLE_CORRECT : BORDER_STYLE_ERROR);\n } else {\n setBorderStyle(BORDER_STYLE_DEFAULT);\n }\n };\n\n /**\n * @function onCountryChange\n * @description Handle country change.\n *\n * @since 5.5.0\n *\n * @param {Event} event The event object.\n * @param {object} value The selected country object.\n */\n var onCountryChange = function onCountryChange(event, value) {\n setCountry(value);\n var _getFormattedInputTex2 = getFormattedInputText(phoneNumber.chars, 0, value === null || value === void 0 ? void 0 : value.value, international),\n asYouType = _getFormattedInputTex2.asYouType,\n formatted = _getFormattedInputTex2.formatted;\n var numberValue = (asYouType === null || asYouType === void 0 ? void 0 : asYouType.getNumberValue()) || '';\n setPhoneNumber({\n asYouType: asYouType,\n chars: (asYouType === null || asYouType === void 0 ? void 0 : asYouType.getChars()) || '',\n value: formatted.text,\n numberValue: numberValue\n });\n var changeValue = {\n country: value === null || value === void 0 ? void 0 : value.value,\n number: numberValue,\n isValid: (asYouType === null || asYouType === void 0 ? void 0 : asYouType.isPossible()) || false\n };\n onChange(changeValue, event);\n\n // Validate phone number after state updates.\n requestAnimationFrame(validatePhoneNumber);\n };\n\n /**\n * @function handleInputChange\n * @description Input change handler.\n *\n * @since 5.5.0\n *\n * @param {string} value The input value.\n * @param {string|undefined} operation The operation to perform.\n * @param {Event} event The event object.\n */\n var handleInputChange = function handleInputChange(value, operation, event) {\n var phoneInput = phoneInputRef.current;\n var caretPosition = getCaretPosition(phoneInput);\n var _getFormattedInputTex3 = getFormattedInputText(value, caretPosition, country === null || country === void 0 ? void 0 : country.value, international, operation),\n asYouType = _getFormattedInputTex3.asYouType,\n formatted = _getFormattedInputTex3.formatted;\n var numberValue = (asYouType === null || asYouType === void 0 ? void 0 : asYouType.getNumberValue()) || '';\n setPhoneNumber({\n asYouType: asYouType,\n chars: (asYouType === null || asYouType === void 0 ? void 0 : asYouType.getChars()) || '',\n value: formatted.text,\n numberValue: numberValue\n });\n var changeValue = {\n country: country === null || country === void 0 ? void 0 : country.value,\n number: numberValue,\n isValid: (asYouType === null || asYouType === void 0 ? void 0 : asYouType.isPossible()) || false\n };\n\n // requestAnimationFrame to set caret after rerender.\n requestAnimationFrame(function () {\n setCaretPosition(phoneInput, formatted.caret);\n });\n onChange(changeValue, event);\n };\n\n /**\n * @function onInputChange\n * @description Handle input change.\n *\n * @since 5.5.0\n *\n * @param {string} value The input value.\n * @param {Event} event The event object.\n */\n var onInputChange = function onInputChange(value, event) {\n handleInputChange(value, undefined, event);\n };\n\n /**\n * @function onInputKeyDown\n * @description Handle input key down.\n *\n * @since 5.5.0\n *\n * @param {Event} event The event object.\n */\n var onInputKeyDown = function onInputKeyDown(event) {\n if (inputAttributes !== null && inputAttributes !== void 0 && inputAttributes.onKeyDown) {\n var _inputAttributes$onKe;\n inputAttributes === null || inputAttributes === void 0 || (_inputAttributes$onKe = inputAttributes.onKeyDown) === null || _inputAttributes$onKe === void 0 || _inputAttributes$onKe.call(inputAttributes, event);\n }\n\n // If `onKeyDown()` handler above has called `event.preventDefault()` then ignore this `keydown` event.\n if (event.defaultPrevented) {\n return;\n }\n var phoneInput = phoneInputRef.current;\n if (phoneInput.hasAttribute('readonly')) {\n return;\n }\n var operation = event.key;\n if (!['Backspace', 'Delete'].includes(operation)) {\n return;\n }\n\n // Intercept this operation and perform it manually.\n event.preventDefault();\n var value = phoneInput.value;\n var selection = getSelection(phoneInput);\n\n // If a selection is made, get the text after erasing selection.\n // Else, perform the (character erasing) operation manually.\n var newValue = selection ? getTextAfterEraseSelection(value, selection) : value;\n var newOp = selection ? undefined : operation;\n handleInputChange(newValue, newOp, event);\n };\n\n /**\n * @function onInputBlur\n * @description Handle input blur.\n *\n * @since 5.5.0\n *\n * @param {Event} event The event object.\n */\n var onInputBlur = function onInputBlur(event) {\n if (inputAttributes !== null && inputAttributes !== void 0 && inputAttributes.onBlur) {\n var _inputAttributes$onBl;\n inputAttributes === null || inputAttributes === void 0 || (_inputAttributes$onBl = inputAttributes.onBlur) === null || _inputAttributes$onBl === void 0 || _inputAttributes$onBl.call(inputAttributes, event);\n }\n\n // If `onBlur()` handler above has called `event.preventDefault()` then ignore this `blur` event.\n if (event.defaultPrevented) {\n return;\n }\n validatePhoneNumber();\n };\n\n /**\n * @function onLabelClick\n * @description Handle label click.\n *\n * @since 5.5.0\n *\n */\n var onLabelClick = function onLabelClick() {\n var _dropdownRef$current;\n var dropdownTrigger = dropdownRef === null || dropdownRef === void 0 || (_dropdownRef$current = dropdownRef.current) === null || _dropdownRef$current === void 0 ? void 0 : _dropdownRef$current.querySelector(DROPDOWN_TRIGGER_SELECTOR);\n if (dropdownTrigger) {\n dropdownTrigger.focus();\n }\n };\n var helpTextId = getId(id, 'help-text');\n var labelId = getId(id, 'label');\n var componentProps = _objectSpread({\n className: (0,external_gform_libraries_.classnames)(_objectSpread((0,defineProperty[\"default\"])((0,defineProperty[\"default\"])({\n 'gform-phone': true,\n 'wp-exclude-emoji': true\n }, \"gform-phone--size-\".concat(size), true), 'gform-phone--disabled', disabled), (0,external_gform_utils_.spacerClasses)(spacing)), customClasses),\n id: id,\n style: {\n width: width ? \"\".concat(width, \"px\") : undefined\n }\n }, customAttributes);\n var labelProps = _objectSpread(_objectSpread({\n className: (0,external_gform_libraries_.classnames)(['gform-phone__label', 'gform-text', 'gform-text--color-port', 'gform-typography--size-text-sm', 'gform-typography--weight-medium'], labelClasses)\n }, labelAttributes), {}, {\n id: labelId,\n onClick: onLabelClick\n });\n var requiredLabelProps = _objectSpread(_objectSpread({\n size: 'text-sm',\n weight: 'medium'\n }, requiredLabelAttributes), {}, {\n customClasses: (0,external_gform_libraries_.classnames)(['gform-phone__required'], requiredLabelClasses)\n });\n var dropdownProps = _objectSpread(_objectSpread({\n countries: countries,\n hasSearch: true,\n popoverMaxHeight: 300\n }, dropdownAttributes), {}, {\n customClasses: (0,external_gform_libraries_.classnames)(['gform-phone__dropdown'], dropdownClasses),\n disabled: disabled,\n i18n: i18n,\n id: getId(id, 'dropdown'),\n language: language,\n onChange: onCountryChange,\n preferredCountries: preferredCountries,\n searchAttributes: _objectSpread({\n wrapperClasses: ['gform-phone__dropdown-search-wrapper']\n }, (dropdownAttributes === null || dropdownAttributes === void 0 ? void 0 : dropdownAttributes.searchAttributes) || {}),\n searchClasses: ['gform-phone__dropdown-search'],\n size: size,\n triggerAttributes: {\n 'aria-labelledby': label ? labelId : undefined\n },\n triggerClasses: ['gform-phone__dropdown-trigger']\n });\n var inputProps = _objectSpread(_objectSpread({}, inputAttributes), {}, {\n borderStyle: borderStyle,\n customAttributes: {\n 'aria-describedby': helpTextAttributes.content && borderStyle === BORDER_STYLE_ERROR ? helpTextId : undefined,\n 'aria-labelledby': label ? labelId : undefined\n },\n customClasses: (0,external_gform_libraries_.classnames)(['gform-phone__input'], inputClasses),\n directControlled: true,\n disabled: disabled,\n id: getId(id, 'input'),\n onBlur: onInputBlur,\n onChange: onInputChange,\n onKeyDown: onInputKeyDown,\n placeholder: getPlaceholder(),\n required: required,\n size: \"size-\".concat(size),\n type: 'tel',\n value: phoneNumber.value,\n wrapperClasses: (0,external_gform_libraries_.classnames)({\n 'gform-phone__input-wrapper': true\n }, (inputAttributes === null || inputAttributes === void 0 ? void 0 : inputAttributes.wrapperClasses) || [])\n });\n var helpTextProps = _objectSpread(_objectSpread({\n size: 'text-xs',\n weight: 'regular'\n }, helpTextAttributes), {}, {\n customClasses: (0,external_gform_libraries_.classnames)(['gform-phone__help-text'], helpTextClasses),\n id: helpTextId\n });\n return /*#__PURE__*/external_gform_libraries_.React.createElement(\"div\", (0,esm_extends[\"default\"])({}, componentProps, {\n ref: wrapperRef\n }), label && /*#__PURE__*/external_gform_libraries_.React.createElement(\"div\", labelProps, label, required && /*#__PURE__*/external_gform_libraries_.React.createElement(HelpText[\"default\"], requiredLabelProps)), /*#__PURE__*/external_gform_libraries_.React.createElement(\"div\", {\n className: \"gform-phone__wrapper\"\n }, /*#__PURE__*/external_gform_libraries_.React.createElement(CountryDropdown[\"default\"], (0,esm_extends[\"default\"])({}, dropdownProps, {\n ref: dropdownRef\n })), /*#__PURE__*/external_gform_libraries_.React.createElement(Input[\"default\"], (0,esm_extends[\"default\"])({}, inputProps, {\n ref: inputRef\n }))), borderStyle === BORDER_STYLE_ERROR && /*#__PURE__*/external_gform_libraries_.React.createElement(HelpText[\"default\"], helpTextProps));\n});\nPhoneComponent.propTypes = {\n countries: external_gform_libraries_.PropTypes.array,\n customAttributes: external_gform_libraries_.PropTypes.object,\n customClasses: external_gform_libraries_.PropTypes.oneOfType([external_gform_libraries_.PropTypes.string, external_gform_libraries_.PropTypes.array, external_gform_libraries_.PropTypes.object]),\n disabled: external_gform_libraries_.PropTypes.bool,\n dropdownAttributes: external_gform_libraries_.PropTypes.object,\n dropdownClasses: external_gform_libraries_.PropTypes.oneOfType([external_gform_libraries_.PropTypes.string, external_gform_libraries_.PropTypes.array, external_gform_libraries_.PropTypes.object]),\n helpTextAttributes: external_gform_libraries_.PropTypes.object,\n helpTextClasses: external_gform_libraries_.PropTypes.oneOfType([external_gform_libraries_.PropTypes.string, external_gform_libraries_.PropTypes.array, external_gform_libraries_.PropTypes.object]),\n i18n: external_gform_libraries_.PropTypes.object,\n id: external_gform_libraries_.PropTypes.string,\n inputAttributes: external_gform_libraries_.PropTypes.object,\n inputClasses: external_gform_libraries_.PropTypes.oneOfType([external_gform_libraries_.PropTypes.string, external_gform_libraries_.PropTypes.array, external_gform_libraries_.PropTypes.object]),\n international: external_gform_libraries_.PropTypes.bool,\n label: external_gform_libraries_.PropTypes.string,\n labelAttributes: external_gform_libraries_.PropTypes.object,\n labelClasses: external_gform_libraries_.PropTypes.oneOfType([external_gform_libraries_.PropTypes.string, external_gform_libraries_.PropTypes.array, external_gform_libraries_.PropTypes.object]),\n language: external_gform_libraries_.PropTypes.string,\n onChange: external_gform_libraries_.PropTypes.func,\n preferredCountries: external_gform_libraries_.PropTypes.array,\n required: external_gform_libraries_.PropTypes.bool,\n requiredLabelAttributes: external_gform_libraries_.PropTypes.object,\n requiredLabelClasses: external_gform_libraries_.PropTypes.oneOfType([external_gform_libraries_.PropTypes.string, external_gform_libraries_.PropTypes.array, external_gform_libraries_.PropTypes.object]),\n size: external_gform_libraries_.PropTypes.oneOf(['r', 'l', 'xl']),\n spacing: external_gform_libraries_.PropTypes.oneOfType([external_gform_libraries_.PropTypes.string, external_gform_libraries_.PropTypes.number, external_gform_libraries_.PropTypes.array, external_gform_libraries_.PropTypes.object]),\n usePlaceholder: external_gform_libraries_.PropTypes.bool,\n useValidation: external_gform_libraries_.PropTypes.bool,\n width: external_gform_libraries_.PropTypes.number\n};\nvar PhoneComponentWithId = forwardRef(function (props, ref) {\n var defaultProps = {\n countries: [],\n customAttributes: {},\n customClasses: [],\n disabled: false,\n dropdownAttributes: {},\n dropdownClasses: [],\n helpTextAttributes: {},\n helpTextClasses: [],\n i18n: {},\n id: '',\n inputAttributes: {},\n inputClasses: [],\n international: true,\n label: '',\n labelAttributes: {},\n labelClasses: [],\n language: 'en',\n onChange: function onChange() {},\n preferredCountries: [],\n required: false,\n requiredLabelAttributes: {},\n requiredLabelClasses: [],\n size: 'r',\n spacing: '',\n usePlaceholder: true,\n useValidation: false,\n width: 0\n };\n var combinedProps = _objectSpread(_objectSpread({}, defaultProps), props);\n var idProp = combinedProps.id;\n var idProviderProps = {\n id: idProp\n };\n return /*#__PURE__*/external_gform_libraries_.React.createElement(external_gform_utils_react_.IdProvider, idProviderProps, /*#__PURE__*/external_gform_libraries_.React.createElement(PhoneComponent, (0,esm_extends[\"default\"])({}, combinedProps, {\n ref: ref\n })));\n});\n/* harmony default export */ var Phone_PhoneComponent = (PhoneComponentWithId);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vY29tcG9uZW50cy9yZWFjdC9hZG1pbi9tb2R1bGVzL1Bob25lL1Bob25lQ29tcG9uZW50LmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQThDO0FBRTlDLElBQU1DLDBCQUEwQixHQUFHLFVBQVU7O0FBRTdDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ08sSUFBTUMsU0FBUyxHQUFHLFNBQVpBLFNBQVNBLENBQUEsRUFBUztFQUM5QjtFQUNBLElBQUssT0FBT0MsU0FBUyxLQUFLLFdBQVcsRUFBRztJQUN2QyxPQUFPRiwwQkFBMEIsQ0FBQ0csSUFBSSxDQUFFRCxTQUFTLENBQUNFLFNBQVUsQ0FBQztFQUM5RDtFQUVBLE9BQU8sS0FBSztBQUNiLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ08sSUFBTUMsZ0JBQWdCLEdBQUcsU0FBbkJBLGdCQUFnQkEsQ0FBS0MsT0FBTyxFQUFNO0VBQzlDLE9BQU9BLE9BQU8sQ0FBQ0MsY0FBYztBQUM5QixDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTyxJQUFNQyxnQkFBZ0IsR0FBRyxTQUFuQkEsZ0JBQWdCQSxDQUFLRixPQUFPLEVBQUVHLGFBQWEsRUFBTTtFQUM3RDtFQUNBLElBQUtBLGFBQWEsS0FBS0MsU0FBUyxFQUFHO0lBQ2xDO0VBQ0Q7O0VBRUE7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBLElBQUtULFNBQVMsQ0FBQyxDQUFDLEVBQUc7SUFDbEJVLFVBQVUsQ0FBRTtNQUFBLE9BQU1MLE9BQU8sQ0FBQ00saUJBQWlCLENBQUVILGFBQWEsRUFBRUEsYUFBYyxDQUFDO0lBQUEsR0FBRSxDQUFFLENBQUM7RUFDakYsQ0FB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QkFBQSxDQUFBMkosYUFBQSxDQUFDeEosc0NBQVUsRUFBTXNLLGVBQWUsZUFDL0J6SywrQkFBQSxDQUFBMkosYUFBQSxDQUFDbEksY0FBYyxFQUFBbUksMEJBQUEsS0FBTVcsYUFBYTtJQUFHNUksR0FBRyxFQUFHQTtFQUFLLEVBQUUsQ0FDdkMsQ0FBQztBQUVmLENBQUUsQ0FBQztBQUVILHlEQUFlMEksb0JBQW9CIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vZ3Jhdml0eWZvcm1zLy4uL2NvbXBvbmVudHMvcmVhY3QvYWRtaW4vbW9kdWxlcy9QaG9uZS91dGlscy5qcz9iMGM5Iiwid2VicGFjazovL2dyYXZpdHlmb3Jtcy8uLi9jb21wb25lbnRzL3JlYWN0L2FkbWluL21vZHVsZXMvUGhvbmUvUGhvbmVDb21wb25lbnQuanM/YjQzNiJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBzbHVnaWZ5IH0gZnJvbSAnQGdyYXZpdHlmb3Jtcy91dGlscyc7XG5cbmNvbnN0IEFORFJPSURfVVNFUl9BR0VOVF9SRUdfRVhQID0gL0FuZHJvaWQvaTtcblxuLyoqXG4gKiBAZnVuY3Rpb24gaXNBbmRyb2lkXG4gKiBAZGVzY3JpcHRpb24gQ2hlY2tzIGlmIHRoZSB1c2VyIGFnZW50IGlzIEFuZHJvaWQuXG4gKiAgICAgICAgICAgICAgQ29waWVkIGZyb20gdGhlIG9yaWdpbmFsIGZ1bmN0aW9uIGBpc0FuZHJvaWRgIGZyb20gYGlucHV0LWZvcm1hdGAgcGFja2FnZS5cbiAqICAgICAgICAgICAgICBUaGUgb3JpZ2luYWwgZnVuY3Rpb24gaXMgbm90IGV4cG9ydGVkLCBzbyBpdCB3YXMgY29waWVkIGhlcmUuXG4gKlxuICogQHNpbmNlIDUuNS4wXG4gKlxuICogQHJldHVybiB7Ym9vbGVhbn0gV2hldGhlciB0aGUgdXNlciBhZ2VudCBpcyBBbmRyb2lkLlxuICovXG5leHBvcnQgY29uc3QgaXNBbmRyb2lkID0gKCkgPT4ge1xuXHQvLyBgbmF2aWdhdG9yYCBpcyBub3QgZGVmaW5lZCB3aGVuIHJ1bm5pbmcgbW9jaGEgdGVzdHMuXG5cdGlmICggdHlwZW9mIG5hdmlnYXRvciAhPT0gJ3VuZGVmaW5lZCcgKSB7XG5cdFx0cmV0dXJuIEFORFJPSURfVVNFUl9BR0VOVF9SRUdfRVhQLnRlc3QoIG5hdmlnYXRvci51c2VyQWdlbnQgKTtcblx0fVxuXG5cdHJldHVybiBmYWxzZTtcbn07XG5cbi8qKlxuICogQGZ1bmN0aW9uIGdldENhcmV0UG9zaXRpb25cbiAqIEBkZXNjcmlwdGlvbiBHZXRzIHRoZSBjYXJldCBwb3NpdGlvbi5cbiAqICAgICAgICAgICAgICBDb3BpZWQgZnJvbSB0aGUgb3JpZ2luYWwgZnVuY3Rpb24gYGdldENhcmV0UG9zaXRpb25gIGZyb20gYGlucHV0LWZvcm1hdGAgcGFja2FnZS5cbiAqICAgICAgICAgICAgICBUaGUgb3JpZ2luYWwgZnVuY3Rpb24gaXMgbm90IGV4cG9ydGVkLCBzbyBpdCB3YXMgY29waWVkIGhlcmUuXG4gKlxuICogQHNpbmNlIDUuNS4wXG4gKlxuICogQHBhcmFtIHtIVE1MRWxlbWVudH0gZWxlbWVudCBUaGUgZWxlbWVudCB0byBnZXQgdGhlIGNhcmV0IHBvc2l0aW9uIGZyb20uXG4gKlxuICogQHJldHVybiB7bnVtYmVyfSBUaGUgY2FyZXQgcG9zaXRpb24uXG4gKi9cbmV4cG9ydCBjb25zdCBnZXRDYXJldFBvc2l0aW9uID0gKCBlbGVtZW50ICkgPT4ge1xuXHRyZXR1cm4gZWxlbWVudC5zZWxlY3Rpb25TdGFydDtcbn07XG5cbi8qKlxuICogQGZ1bmN0aW9uIHNldENhcmV0UG9zaXRpb25cbiAqIEBkZXNjcmlwdGlvbiBTZXRzIHRoZSBjYXJldCBwb3NpdGlvbi5cbiAqICAgICAgICAgICAgICBDb3BpZWQgZnJvbSB0aGUgb3JpZ2luYWwgZnVuY3Rpb24gYHNldENhcmV0UG9zaXRpb25gIGZyb20gYGlucHV0LWZvcm1hdGAgcGFja2FnZS5cbiAqICAgICAgICAgICAgICBUaGUgb3JpZ2luYWwgZnVuY3Rpb24gaXMgbm90IGV4cG9ydGVkLCBzbyBpdCB3YXMgY29waWVkIGhlcmUuXG4gKlxuICogQHNpbmNlIDUuNS4wXG4gKlxuICogQHBhcmFtIHtIVE1MRWxlbWVudH0gZWxlbWVudCAgICAgICBUaGUgZWxlbWVudCB0byBzZXQgdGhlIGNhcmV0IHBvc2l0aW9uIG9uLlxuICogQHBhcmFtIHtudW1iZXJ9ICAgICAgY2FyZXRQb3NpdGlvbiBUaGUgY2FyZXQgcG9zaXRpb24gdG8gc2V0LlxuICovXG5leHBvcnQgY29uc3Qgc2V0Q2FyZXRQb3NpdGlvbiA9ICggZWxlbWVudCwgY2FyZXRQb3NpdGlvbiApID0+IHtcblx0Ly8gU2FuaXR5IGNoZWNrXG5cdGlmICggY2FyZXRQb3NpdGlvbiA9PT0gdW5kZWZpbmVkICkge1xuXHRcdHJldHVybjtcblx0fVxuXG5cdC8vIFNldCBjYXJldCBwb3NpdGlvbi5cblx0Ly8gVGhlcmUgaGFzIGJlZW4gYW4gaXNzdWUgd2l0aCBjYXJldCBwb3NpdGlvbmluZyBvbiBBbmRyb2lkIGRldmljZXMuXG5cdC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9jYXRhbXBoZXRhbWluZS9pbnB1dC1mb3JtYXQvaXNzdWVzLzJcblx0Ly8gSSB3YXMgcmV2aXNpdGluZyB0aGlzIGlzc3VlIGFuZCBsb29rZWQgZm9yIHNpbWlsYXIgaXNzdWVzIGluIG90aGVyIGxpYnJhcmllcy5cblx0Ly8gRm9yIGV4YW1wbGUsIHRoZXJlJ3MgW2B0ZXh0LW1hc2tgXShodHRwczovL2dpdGh1Yi5jb20vdGV4dC1tYXNrL3RleHQtbWFzaykgbGlicmFyeS5cblx0Ly8gVGhleSd2ZSBoYWQgZXhhY3RseSB0aGUgc2FtZSBpc3N1ZSB3aGVuIHRoZSBjYXJldCBzZWVtaW5nbHkgcmVmdXNlZCB0byBiZSByZXBvc2l0aW9uZWQgcHJvZ3JhbW1hdGljYWxseS5cblx0Ly8gVGhlIHN5bXB0b21zIHdlcmUgdGhlIHNhbWU6IHdoZW5ldmVyIHRoZSBjYXJldCBwYXNzZWQgdGhyb3VnaCBhIG5vbi1kaWdpdCBjaGFyYWN0ZXIgb2YgYSBtYXNrIChhIHdoaXRlc3BhY2UsIGEgYnJhY2tldCwgYSBkYXNoLCBldGMpLCBpdCBsb29rZWQgYXMgaWYgaXQgcGxhY2VkIGl0c2VsZiBvbmUgY2hhcmFjdGVyIGJlZm9yZSBpdHMgY29ycmVjdCBwb3NpdGlvbi5cblx0Ly8gaHR0cHM6Ly9naXRodWIuY29tL3RleHQtbWFzay90ZXh0LW1hc2svaXNzdWVzLzMwMFxuXHQvLyBUaGV5IHNlZW0gdG8gaGF2ZSBmb3VuZCBhIGJhc2ljIGZpeCBmb3IgaXQ6IGNhbGxpbmcgYGlucHV0LnNldFNlbGVjdGlvblJhbmdlKClgIGluIGEgdGltZW91dCByYXRoZXIgdGhhbiBpbnN0YW50bHkgZm9yIEFuZHJvaWQgZGV2aWNlcy5cblx0Ly8gaHR0cHM6Ly9naXRodWIuY29tL3RleHQtbWFzay90ZXh0LW1hc2svcHVsbC80MDAvZmlsZXNcblx0Ly8gSSd2ZSBpbXBsZW1lbnRlZCB0aGUgc2FtZSB3b3JrYXJvdW5kIGhlcmUuXG5cdGlmICggaXNBbmRyb2lkKCkgKSB7XG5cdFx0c2V0VGltZW91dCggKCkgPT4gZWxlbWVudC5zZXRTZWxlY3Rpb25SYW5nZSggY2FyZXRQb3NpdGlvbiwgY2FyZXRQb3NpdGlvbiApLCAwICk7XG5cdH0gZWxzZSB7XG5cdFx0ZWxlbWVudC5zZXRTZWxlY3Rpb25SYW5nZSggY2FyZXRQb3NpdGlvbiwgY2FyZXRQb3NpdGlvbiApO1xuXHR9XG59O1xuXG4vKipcbiAqIEBmdW5jdGlvbiBnZXRUZXh0QWZ0ZXJFcmFzZVNlbGVjdGlvblxuICogQGRlc2NyaXB0aW9uIEdldHMgdGhlIHRleHQgYWZ0ZXIgZXJhc2luZyB0aGUgc2VsZWN0aW9uLlxuICogICAgICAgICAgICAgIE1vZGlmaWVkIGZyb20gdGhlIG9yaWdpbmFsIGZ1bmN0aW9uIGBlcmFzZVNlbGVjdGlvbmAgZnJvbSBgaW5wdXQtZm9ybWF0YCBwYWNrYWdlLlxuICogICAgICAgICAgICAgIFRoZSBvcmlnaW5hbCBmdW5jdGlvbiBpcyBub3QgZXhwb3J0ZWQsIHNvIGl0IHdhcyBjb3BpZWQgaGVyZS5cbiAqXG4gKiBAc2luY2UgNS41LjBcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gdGV4dCAgICAgIFRoZSB0ZXh0IHRvIGVyYXNlIHRoZSBzZWxlY3Rpb24gZnJvbS5cbiAqIEBwYXJhbSB7b2JqZWN0fSBzZWxlY3Rpb24gVGhlIHNlbGVjdGlvbiB0byBlcmFzZS4gVGhlIHNlbGVjdGlvbiBpcyBhbiBvYmplY3Qgd2l0aCBgc3RhcnRgIGFuZCBgZW5kYCBwcm9wZXJ0aWVzLlxuICpcbiAqIEByZXR1cm4ge3N0cmluZ30gVGhlIHRleHQgYWZ0ZXIgZXJhc2luZyB0aGUgc2VsZWN0aW9uLlxuICovXG5leHBvcnQgY29uc3QgZ2V0VGV4dEFmdGVyRXJhc2VTZWxlY3Rpb24gPSAoIHRleHQsIHNlbGVjdGlvbiApID0+IHtcblx0Y29uc3Qgc3RhcnQgPSBNYXRoLm1pbiggc2VsZWN0aW9uLnN0YXJ0LCBzZWxlY3Rpb24uZW5kICk7XG5cdGNvbnN0IGVuZCA9IE1hdGgubWF4KCBzZWxlY3Rpb24uc3RhcnQsIHNlbGVjdGlvbi5lbmQgKTtcblx0cmV0dXJuIHRleHQuc2xpY2UoIDAsIHN0YXJ0ICkgKyB0ZXh0LnNsaWNlKCBlbmQgKTtcbn07XG5cbi8qKlxuICogQGZ1bmN0aW9uIGdldFNlbGVjdGlvblxuICogQGRlc2NyaXB0aW9uIEdldHMgdGhlIHNlbGVjdGlvbi5cbiAqICAgICAgICAgICAgICBDb3BpZWQgZnJvbSB0aGUgb3JpZ2luYWwgZnVuY3Rpb24gYGdldFNlbGVjdGlvbmAgZnJvbSBgaW5wdXQtZm9ybWF0YCBwYWNrYWdlLlxuICogICAgICAgICAgICAgIFRoZSBvcmlnaW5hbCBmdW5jdGlvbiBpcyBub3QgZXhwb3J0ZWQsIHNvIGl0IHdhcyBjb3BpZWQgaGVyZS5cbiAqXG4gKiBAc2luY2UgNS41LjBcbiAqXG4gKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBpbnB1dCBUaGUgaW5wdXQgZWxlbWVudC5cbiAqXG4gKiBAcmV0dXJuIHtvYmplY3R8dW5kZWZpbmVkfSBUaGUgc2VsZWN0aW9uIG9iamVjdCB3aXRoIGBzdGFydGAgYW5kIGBlbmRgIHByb3BlcnRpZXMuXG4gKi9cbmV4cG9ydCBjb25zdCBnZXRTZWxlY3Rpb24gPSAoIGlucHV0ICkgPT4ge1xuXHQvLyBJZiBubyBzZWxlY3Rpb24sIHJldHVybiBub3RoaW5nXG5cdGlmICggaW5wdXQuc2VsZWN0aW9uU3RhcnQgPT09IGlucHV0LnNlbGVjdGlvbkVuZCApIHtcblx0XHRyZXR1cm47XG5cdH1cblxuXHRjb25zdCBzdGFydCA9IE1hdGgubWluKCBpbnB1dC5zZWxlY3Rpb25TdGFydCwgaW5wdXQuc2VsZWN0aW9uRW5kICk7XG5cdGNvbnN0IGVuZCA9IE1hdGgubWF4KCBpbnB1dC5zZWxlY3Rpb25TdGFydCwgaW5wdXQuc2VsZWN0aW9uRW5kICk7XG5cdHJldHVybiB7IHN0YXJ0LCBlbmQgfTtcbn07XG5cbi8qKlxuICogQGZ1bmN0aW9uIGdldElkXG4gKiBAZGVzY3JpcHRpb24gR2V0IHRoZSBpZCBmcm9tIHRoZSBwcmVmaXggYW5kIGtleSBwcm92aWRlZC5cbiAqXG4gKiBAc2luY2UgNS41LjBcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gcHJlZml4IFRoZSBpZCBwcmVmaXguXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5ICAgIFRoZSBpZCBrZXkuXG4gKlxuICogQHJldHVybiB7c3RyaW5nfSBUaGUgaWQuXG4gKi9cbmV4cG9ydCBjb25zdCBnZXRJZCA9ICggcHJlZml4LCBrZXkgKSA9PiBzbHVnaWZ5KCBgJHsgcHJlZml4IH0tJHsga2V5IH1gICk7XG5cbi8qKlxuICogQGZ1bmN0aW9uIGUxNjRUb051bWJlclxuICogQGRlc2NyaXB0aW9uIENvbnZlcnQgYW4gRS4xNjQgZm9ybWF0dGVkIHBob25lIG51bWJlciB0byBhIG51bWJlci5cbiAqXG4gKiBAc2luY2UgNS41LjBcbiAqXG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IElmIHRoZSBpbnB1dCBpcyBub3QgYSBzdHJpbmcuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGUxNjQgVGhlIEUuMTY0IGZvcm1hdHRlZCBwaG9uZSBudW1iZXIuXG4gKlxuICogQHJldHVybiB7c3RyaW5nfSBUaGUgcGhvbmUgbnVtYmVyLlxuICovXG5leHBvcnQgY29uc3QgZTE2NFRvTnVtYmVyID0gKCBlMTY0ICkgPT4ge1xuXHRpZiAoIHR5cGVvZiBlMTY0ICE9PSAnc3RyaW5nJyApIHtcblx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKCAnSW5wdXQgbXVzdCBiZSBhIHN0cmluZycgKTtcblx0fVxuXHRyZXR1cm4gZTE2NC5yZXBsYWNlKCAvXlxcKy8sICcnICk7XG59O1xuXG4vKipcbiAqIEBmdW5jdGlvbiBudW1iZXJUb0UxNjRcbiAqIEBkZXNjcmlwdGlvbiBDb252ZXJ0IGEgcGhvbmUgbnVtYmVyIHRvIEUuMTY0IGZvcm1hdC5cbiAqXG4gKiBAc2luY2UgNS41LjBcbiAqXG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IElmIHRoZSBpbnB1dCBpcyBub3QgYSBzdHJpbmcuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IG51bWJlciBUaGUgcGhvbmUgbnVtYmVyLlxuICpcbiAqIEByZXR1cm4ge3N0cmluZ30gVGhlIEUuMTY0IGZvcm1hdHRlZCBwaG9uZSBudW1iZXIuXG4gKi9cbmV4cG9ydCBjb25zdCBudW1iZXJUb0UxNjQgPSAoIG51bWJlciApID0+IHtcblx0aWYgKCB0eXBlb2YgbnVtYmVyICE9PSAnc3RyaW5nJyApIHtcblx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKCAnSW5wdXQgbXVzdCBiZSBhIHN0cmluZycgKTtcblx0fVxuXHRyZXR1cm4gbnVtYmVyLnN0YXJ0c1dpdGgoICcrJyApXG5cdFx0PyBudW1iZXJcblx0XHQ6IGArJHsgbnVtYmVyIH1gO1xufTtcbiIsImltcG9ydCB7IFJlYWN0LCBQcm9wVHlwZXMsIGNsYXNzbmFtZXMgfSBmcm9tICdAZ3Jhdml0eWZvcm1zL2xpYnJhcmllcyc7XG5pbXBvcnQge1xuXHRJZFByb3ZpZGVyLFxuXHR1c2VJZENvbnRleHQsXG5cdHVzZVBob25lSW5wdXRGb3JtYXRVdGlsc0NvbnRleHQgYXMgdXNlUGhvbmVJbnB1dEZvcm1hdFV0aWxzLFxufSBmcm9tICdAZ3Jhdml0eWZvcm1zL3JlYWN0LXV0aWxzJztcbmltcG9ydCB7IHNwYWNlckNsYXNzZXMgfSBmcm9tICdAZ3Jhdml0eWZvcm1zL3V0aWxzJztcbmltcG9ydCBleGFtcGxlTnVtYmVycyBmcm9tICdsaWJwaG9uZW51bWJlci1qcy9tb2JpbGUvZXhhbXBsZXMnO1xuaW1wb3J0IHsgZ2V0RXhhbXBsZU51bWJlciB9IGZyb20gJ2xpYnBob25lbnVtYmVyLWpzJztcbmltcG9ydCB7IGdldFNlbGVjdGVkSXRlbUZyb21WYWx1ZSB9IGZyb20gJy4uL0Ryb3Bkb3duL3V0aWxzJztcbmltcG9ydCBDb3VudHJ5RHJvcGRvd24gZnJvbSAnLi4vRHJvcGRvd24vQ291bnRyeURyb3Bkb3duJztcbmltcG9ydCB7IGdldENvdW50cmllc0xpc3RJdGVtc0Zyb21Jc29zLCBzb3J0UHJlZmVycmVkQ291bnRyaWVzIH0gZnJvbSAnLi4vRHJvcGRvd24vQ291bnRyeURyb3Bkb3duL3V0aWxzJztcbmltcG9ydCBIZWxwVGV4dCBmcm9tICcuLi8uLi9lbGVtZW50cy9IZWxwVGV4dCc7XG5pbXBvcnQgSW5wdXQgZnJvbSAnLi4vLi4vZWxlbWVudHMvSW5wdXQnO1xuaW1wb3J0IHtcblx0Z2V0Q2FyZXRQb3NpdGlvbixcblx0c2V0Q2FyZXRQb3NpdGlvbixcblx0Z2V0VGV4dEFmdGVyRXJhc2VTZWxlY3Rpb24sXG5cdGdldFNlbGVjdGlvbixcblx0Z2V0SWQsXG59IGZyb20gJy4vdXRpbHMnO1xuXG5jb25zdCB7IHVzZUVmZmVjdCwgdXNlUmVmLCB1c2VTdGF0ZSwgZm9yd2FyZFJlZiB9ID0gUmVhY3Q7XG5cbmNvbnN0IElOUFVUX1NFTEVDVE9SID0gJy5nZm9ybS1pbnB1dCc7XG5jb25zdCBEUk9QRE9XTl9UUklHR0VSX1NFTEVDVE9SID0gJy5nZm9ybS1kcm9wZG93bl9fdHJpZ2dlcic7XG5jb25zdCBCT1JERVJfU1RZTEVfREVGQVVMVCA9ICdkZWZhdWx0JztcbmNvbnN0IEJPUkRFUl9TVFlMRV9FUlJPUiA9ICdlcnJvcic7XG5jb25zdCBCT1JERVJfU1RZTEVfQ09SUkVDVCA9ICdjb3JyZWN0JztcblxuY29uc3QgUGhvbmVDb21wb25lbnQgPSBmb3J3YXJkUmVmKCAoIHByb3BzLCByZWYgKSA9PiB7XG5cdGNvbnN0IHtcblx0XHRjb3VudHJpZXMsXG5cdFx0Y3VzdG9tQXR0cmlidXRlcyxcblx0XHRjdXN0b21DbGFzc2VzLFxuXHRcdGRpc2FibGVkLFxuXHRcdGRyb3Bkb3duQXR0cmlidXRlcyxcblx0XHRkcm9wZG93bkNsYXNzZXMsXG5cdFx0aGVscFRleHRBdHRyaWJ1dGVzLFxuXHRcdGhlbHBUZXh0Q2xhc3Nlcyxcblx0XHRpMThuLFxuXHRcdGlucHV0QXR0cmlidXRlcyxcblx0XHRpbnB1dENsYXNzZXMsXG5cdFx0aW50ZXJuYXRpb25hbCxcblx0XHRsYWJlbCxcblx0XHRsYWJlbEF0dHJpYnV0ZXMsXG5cdFx0bGFiZWxDbGFzc2VzLFxuXHRcdGxhbmd1YWdlLFxuXHRcdG9uQ2hhbmdlLFxuXHRcdHByZWZlcnJlZENvdW50cmllcyxcblx0XHRyZXF1aXJlZCxcblx0XHRyZXF1aXJlZExhYmVsQXR0cmlidXRlcyxcblx0XHRyZXF1aXJlZExhYmVsQ2xhc3Nlcyxcblx0XHRzaXplLFxuXHRcdHNwYWNpbmcsXG5cdFx0dXNlUGxhY2Vob2xkZXIsXG5cdFx0dXNlVmFsaWRhdGlvbixcblx0XHR3aWR0aCxcblx0fSA9IHByb3BzO1xuXG5cdC8vIFJlZnNcblx0Y29uc3QgaW50ZXJuYWxSZWYgPSB1c2VSZWYoIG51bGwgKTtcblx0Y29uc3Qgd3JhcHBlclJlZiA9IHJlZiB8fCBpbnRlcm5hbFJlZjtcblx0Y29uc3QgZHJvcGRvd25SZWYgPSB1c2VSZWYoIG51bGwgKTtcblx0Y29uc3QgaW5wdXRSZWYgPSB1c2VSZWYoIG51bGwgKTtcblx0Y29uc3QgcGhvbmVJbnB1dFJlZiA9IHVzZVJlZiggbnVsbCApO1xuXG5cdGNvbnN0IGlkID0gdXNlSWRDb250ZXh0KCk7XG5cdGNvbnN0IHsgaW5wdXRGb3JtYXRVdGlscyB9ID0gdXNlUGhvbmVJbnB1dEZvcm1hdFV0aWxzKCk7XG5cdGNvbnN0IHsgZ2V0Rm9ybWF0dGVkSW5wdXRUZXh0IH0gPSBpbnB1dEZvcm1hdFV0aWxzO1xuXG5cdGNvbnN0IFsgY291bnRyeSwgc2V0Q291bnRyeSBdID0gdXNlU3RhdGUoICgpID0+IHtcblx0XHRjb25zdCBjb3VudHJpZXNMaXN0SXRlbXMgPSBnZXRDb3VudHJpZXNMaXN0SXRlbXNGcm9tSXNvcyhcblx0XHRcdGNvdW50cmllcyxcblx0XHRcdGxhbmd1YWdlLFxuXHRcdFx0aTE4bixcblx0XHRcdHtcblx0XHRcdFx0c2hvd0ZsYWc6IGRyb3Bkb3duQXR0cmlidXRlcz8uc2hvd0ZsYWcgfHwgdHJ1ZSxcblx0XHRcdFx0c2hvd0NhbGxpbmdDb2RlOiBkcm9wZG93bkF0dHJpYnV0ZXM/LnNob3dDYWxsaW5nQ29kZSB8fCB0cnVlLFxuXHRcdFx0fSxcblx0XHQpO1xuXHRcdGlmICggZHJvcGRvd25BdHRyaWJ1dGVzPy5pbml0aWFsVmFsdWUgKSB7XG5cdFx0XHRyZXR1cm4gZ2V0U2VsZWN0ZWRJdGVtRnJvbVZhbHVlKCBkcm9wZG93bkF0dHJpYnV0ZXM/LmluaXRpYWxWYWx1ZSwgY291bnRyaWVzTGlzdEl0ZW1zLCBmYWxzZSApO1xuXHRcdH1cblx0XHRpZiAoIHByZWZlcnJlZENvdW50cmllcy5sZW5ndGggKSB7XG5cdFx0XHRjb25zdCBwcmVmZXJyZWQgPSBzb3J0UHJlZmVycmVkQ291bnRyaWVzKCBjb3VudHJpZXNMaXN0SXRlbXMsIHByZWZlcnJlZENvdW50cmllcywgaTE4biApO1xuXHRcdFx0aWYgKCBwcmVmZXJyZWQ/LlsgMCBdPy50eXBlID09PSAnZ3JvdXAnICkge1xuXHRcdFx0XHRyZXR1cm4gcHJlZmVycmVkPy5bIDAgXT8uaXRlbXM/LlsgMCBdIHx8IHt9O1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHByZWZlcnJlZD8uWyAwIF07XG5cdFx0fVxuXHRcdGlmICggY291bnRyaWVzTGlzdEl0ZW1zPy5bIDAgXSApIHtcblx0XHRcdHJldHVybiBjb3VudHJpZXNMaXN0SXRlbXM/LlsgMCBdO1xuXHRcdH1cblx0XHRyZXR1cm4ge307XG5cdH0gKTtcblx0Y29uc3QgWyBwaG9uZU51bWJlciwgc2V0UGhvbmVOdW1iZXIgXSA9IHVzZVN0YXRlKCAoKSA9PiB7XG5cdFx0aWYgKCBpbnB1dEF0dHJpYnV0ZXM/LnZhbHVlICkge1xuXHRcdFx0Y29uc3QgeyBhc1lvdVR5cGUsIGZvcm1hdHRlZCB9ID0gZ2V0Rm9ybWF0dGVkSW5wdXRUZXh0KCBpbnB1dEF0dHJpYnV0ZXM/LnZhbHVlLCAwLCBjb3VudHJ5Py52YWx1ZSwgaW50ZXJuYXRpb25hbCApO1xuXHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0YXNZb3VUeXBlLFxuXHRcdFx0XHRjaGFyczogYXNZb3VUeXBlPy5nZXRDaGFycygpIHx8ICcnLFxuXHRcdFx0XHR2YWx1ZTogZm9ybWF0dGVkLnRleHQsXG5cdFx0XHRcdG51bWJlclZhbHVlOiBhc1lvdVR5cGU/LmdldE51bWJlclZhbHVlKCkgfHwgJycsXG5cdFx0XHR9O1xuXHRcdH1cblx0XHRyZXR1cm4ge1xuXHRcdFx0YXNZb3VUeXBlOiBudWxsLFxuXHRcdFx0Y2hhcnM6ICcnLFxuXHRcdFx0dmFsdWU6ICcnLFxuXHRcdFx0bnVtYmVyVmFsdWU6ICcnLFxuXHRcdH07XG5cdH0gKTtcblx0Y29uc3QgWyBib3JkZXJTdHlsZSwgc2V0Qm9yZGVyU3R5bGUgXSA9IHVzZVN0YXRlKCBCT1JERVJfU1RZTEVfREVGQVVMVCApO1xuXG5cdC8vIFNldCBwaG9uZUlucHV0UmVmLlxuXHR1c2VFZmZlY3QoICgpID0+IHtcblx0XHRpZiAoICEgaW5wdXRSZWYuY3VycmVudCApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0aWYgKCBwaG9uZUlucHV0UmVmLmN1cnJlbnQgPT09IGlucHV0UmVmLmN1cnJlbnQucXVlcnlTZWxlY3RvciggSU5QVVRfU0VMRUNUT1IgKSApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0cGhvbmVJbnB1dFJlZi5jdXJyZW50ID0gaW5wdXRSZWYuY3VycmVudC5xdWVyeVNlbGVjdG9yKCBJTlBVVF9TRUxFQ1RPUiApO1xuXHR9LCBbIGlucHV0UmVmLCBwaG9uZUlucHV0UmVmIF0gKTtcblxuXHQvKipcblx0ICogQGZ1bmN0aW9uIGdldFBsYWNlaG9sZGVyXG5cdCAqIEBkZXNjcmlwdGlvbiBHZXQgdGhlIHBsYWNlaG9sZGVyIHRleHQgZm9yIHRoZSBpbnB1dC5cblx0ICpcblx0ICogQHNpbmNlIDUuNS4wXG5cdCAqXG5cdCAqIEByZXR1cm4ge3N0cmluZ3x1bmRlZmluZWR9IFBsYWNlaG9sZGVyIHRleHQuXG5cdCAqL1xuXHRjb25zdCBnZXRQbGFjZWhvbGRlciA9ICgpID0+IHtcblx0XHRpZiAoICEgdXNlUGxhY2Vob2xkZXIgKSB7XG5cdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHRcdH1cblxuXHRcdGNvbnN0IGV4YW1wbGVOdW1iZXIgPSBnZXRFeGFtcGxlTnVtYmVyKCBjb3VudHJ5Py52YWx1ZSwgZXhhbXBsZU51bWJlcnMgKTtcblx0XHRpZiAoICEgZXhhbXBsZU51bWJlciApIHtcblx0XHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGludGVybmF0aW9uYWwgPyBleGFtcGxlTnVtYmVyLmZvcm1hdEludGVybmF0aW9uYWwoKSA6IGV4YW1wbGVOdW1iZXIuZm9ybWF0TmF0aW9uYWwoKTtcblx0fTtcblxuXHQvKipcblx0ICogQGZ1bmN0aW9uIHZhbGlkYXRlUGhvbmVOdW1iZXJcblx0ICogQGRlc2NyaXB0aW9uIFZhbGlkYXRlIHRoZSBwaG9uZSBudW1iZXIuXG5cdCAqXG5cdCAqIEBzaW5jZSA1LjUuMFxuXHQgKlxuXHQgKi9cblx0Y29uc3QgdmFsaWRhdGVQaG9uZU51bWJlciA9ICgpID0+IHtcblx0XHQvLyBJZiB2YWxpZGF0aW9uIGlzIGRpc2FibGVkLCByZXR1cm4gZWFybHkuXG5cdFx0aWYgKCAhIHVzZVZhbGlkYXRpb24gKSB7XG5cdFx0XHRpZiAoIGJvcmRlclN0eWxlICE9PSBCT1JERVJfU1RZTEVfREVGQVVMVCApIHtcblx0XHRcdFx0c2V0Qm9yZGVyU3R5bGUoIEJPUkRFUl9TVFlMRV9ERUZBVUxUICk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Y29uc3QgeyBhc1lvdVR5cGUsIG51bWJlclZhbHVlIH0gPSBwaG9uZU51bWJlcjtcblx0XHRjb25zdCBpc1Bvc3NpYmxlID0gYXNZb3VUeXBlPy5pc1Bvc3NpYmxlKCk7XG5cblx0XHRpZiAoIG51bWJlclZhbHVlICkge1xuXHRcdFx0c2V0Qm9yZGVyU3R5bGUoIGlzUG9zc2libGUgPyBCT1JERVJfU1RZTEVfQ09SUkVDVCA6IEJPUkRFUl9TVFlMRV9FUlJPUiApO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRzZXRCb3JkZXJTdHlsZSggQk9SREVSX1NUWUxFX0RFRkFVTFQgKTtcblx0XHR9XG5cdH07XG5cblx0LyoqXG5cdCAqIEBmdW5jdGlvbiBvbkNvdW50cnlDaGFuZ2Vcblx0ICogQGRlc2NyaXB0aW9uIEhhbmRsZSBjb3VudHJ5IGNoYW5nZS5cblx0ICpcblx0ICogQHNpbmNlIDUuNS4wXG5cdCAqXG5cdCAqIEBwYXJhbSB7RXZlbnR9ICBldmVudCBUaGUgZXZlbnQgb2JqZWN0LlxuXHQgKiBAcGFyYW0ge29iamVjdH0gdmFsdWUgVGhlIHNlbGVjdGVkIGNvdW50cnkgb2JqZWN0LlxuXHQgKi9cblx0Y29uc3Qgb25Db3VudHJ5Q2hhbmdlID0gKCBldmVudCwgdmFsdWUgKSA9PiB7XG5cdFx0c2V0Q291bnRyeSggdmFsdWUgKTtcblx0XHRjb25zdCB7IGFzWW91VHlwZSwgZm9ybWF0dGVkIH0gPSBnZXRGb3JtYXR0ZWRJbnB1dFRleHQoIHBob25lTnVtYmVyLmNoYXJzLCAwLCB2YWx1ZT8udmFsdWUsIGludGVybmF0aW9uYWwgKTtcblx0XHRjb25zdCBudW1iZXJWYWx1ZSA9IGFzWW91VHlwZT8uZ2V0TnVtYmVyVmFsdWUoKSB8fCAnJztcblx0XHRzZXRQaG9uZU51bWJlcigge1xuXHRcdFx0YXNZb3VUeXBlLFxuXHRcdFx0Y2hhcnM6IGFzWW91VHlwZT8uZ2V0Q2hhcnMoKSB8fCAnJyxcblx0XHRcdHZhbHVlOiBmb3JtYXR0ZWQudGV4dCxcblx0XHRcdG51bWJlclZhbHVlLFxuXHRcdH0gKTtcblxuXHRcdGNvbnN0IGNoYW5nZVZhbHVlID0ge1xuXHRcdFx0Y291bnRyeTogdmFsdWU/LnZhbHVlLFxuXHRcdFx0bnVtYmVyOiBudW1iZXJWYWx1ZSxcblx0XHRcdGlzVmFsaWQ6IGFzWW91VHlwZT8uaXNQb3NzaWJsZSgpIHx8IGZhbHNlLFxuXHRcdH07XG5cblx0XHRvbkNoYW5nZSggY2hhbmdlVmFsdWUsIGV2ZW50ICk7XG5cblx0XHQvLyBWYWxpZGF0ZSBwaG9uZSBudW1iZXIgYWZ0ZXIgc3RhdGUgdXBkYXRlcy5cblx0XHRyZXF1ZXN0QW5pbWF0aW9uRnJhbWUoIHZhbGlkYXRlUGhvbmVOdW1iZXIgKTtcblx0fTtcblxuXHQvKipcblx0ICogQGZ1bmN0aW9uIGhhbmRsZUlucHV0Q2hhbmdlXG5cdCAqIEBkZXNjcmlwdGlvbiBJbnB1dCBjaGFuZ2UgaGFuZGxlci5cblx0ICpcblx0ICogQHNpbmNlIDUuNS4wXG5cdCAqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSAgICAgICAgICAgdmFsdWUgICAgIFRoZSBpbnB1dCB2YWx1ZS5cblx0ICogQHBhcmFtIHtzdHJpbmd8dW5kZWZpbmVkfSBvcGVyYXRpb24gVGhlIG9wZXJhdGlvbiB0byBwZXJmb3JtLlxuXHQgKiBAcGFyYW0ge0V2ZW50fSAgICAgICAgICAgIGV2ZW50ICAgICBUaGUgZXZlbnQgb2JqZWN0LlxuXHQgKi9cblx0Y29uc3QgaGFuZGxlSW5wdXRDaGFuZ2UgPSAoIHZhbHVlLCBvcGVyYXRpb24sIGV2ZW50ICkgPT4ge1xuXHRcdGNvbnN0IHBob25lSW5wdXQgPSBwaG9uZUlucHV0UmVmLmN1cnJlbnQ7XG5cdFx0Y29uc3QgY2FyZXRQb3NpdGlvbiA9IGdldENhcmV0UG9zaXRpb24oIHBob25lSW5wdXQgKTtcblx0XHRjb25zdCB7IGFzWW91VHlwZSwgZm9ybWF0dGVkIH0gPSBnZXRGb3JtYXR0ZWRJbnB1dFRleHQoIHZhbHVlLCBjYXJldFBvc2l0aW9uLCBjb3VudHJ5Py52YWx1ZSwgaW50ZXJuYXRpb25hbCwgb3BlcmF0aW9uICk7XG5cdFx0Y29uc3QgbnVtYmVyVmFsdWUgPSBhc1lvdVR5cGU/LmdldE51bWJlclZhbHVlKCkgfHwgJyc7XG5cdFx0c2V0UGhvbmVOdW1iZXIoIHtcblx0XHRcdGFzWW91VHlwZSxcblx0XHRcdGNoYXJzOiBhc1lvdVR5cGU/LmdldENoYXJzKCkgfHwgJycsXG5cdFx0XHR2YWx1ZTogZm9ybWF0dGVkLnRleHQsXG5cdFx0XHRudW1iZXJWYWx1ZSxcblx0XHR9ICk7XG5cblx0XHRjb25zdCBjaGFuZ2VWYWx1ZSA9IHtcblx0XHRcdGNvdW50cnk6IGNvdW50cnk/LnZhbHVlLFxuXHRcdFx0bnVtYmVyOiBudW1iZXJWYWx1ZSxcblx0XHRcdGlzVmFsaWQ6IGFzWW91VHlwZT8uaXNQb3NzaWJsZSgpIHx8IGZhbHNlLFxuXHRcdH07XG5cblx0XHQvLyByZXF1ZXN0QW5pbWF0aW9uRnJhbWUgdG8gc2V0IGNhcmV0IGFmdGVyIHJlcmVuZGVyLlxuXHRcdHJlcXVlc3RBbmltYXRpb25GcmFtZSggKCkgPT4ge1xuXHRcdFx0c2V0Q2FyZXRQb3NpdGlvbiggcGhvbmVJbnB1dCwgZm9ybWF0dGVkLmNhcmV0ICk7XG5cdFx0fSApO1xuXG5cdFx0b25DaGFuZ2UoIGNoYW5nZVZhbHVlLCBldmVudCApO1xuXHR9O1xuXG5cdC8qKlxuXHQgKiBAZnVuY3Rpb24gb25JbnB1dENoYW5nZVxuXHQgKiBAZGVzY3JpcHRpb24gSGFuZGxlIGlucHV0IGNoYW5nZS5cblx0ICpcblx0ICogQHNpbmNlIDUuNS4wXG5cdCAqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZSBUaGUgaW5wdXQgdmFsdWUuXG5cdCAqIEBwYXJhbSB7RXZlbnR9ICBldmVudCBUaGUgZXZlbnQgb2JqZWN0LlxuXHQgKi9cblx0Y29uc3Qgb25JbnB1dENoYW5nZSA9ICggdmFsdWUsIGV2ZW50ICkgPT4ge1xuXHRcdGhhbmRsZUlucHV0Q2hhbmdlKCB2YWx1ZSwgdW5kZWZpbmVkLCBldmVudCApO1xuXHR9O1xuXG5cdC8qKlxuXHQgKiBAZnVuY3Rpb24gb25JbnB1dEtleURvd25cblx0ICogQGRlc2NyaXB0aW9uIEhhbmRsZSBpbnB1dCBrZXkgZG93bi5cblx0ICpcblx0ICogQHNpbmNlIDUuNS4wXG5cdCAqXG5cdCAqIEBwYXJhbSB7RXZlbnR9IGV2ZW50IFRoZSBldmVudCBvYmplY3QuXG5cdCAqL1xuXHRjb25zdCBvbklucHV0S2V5RG93biA9ICggZXZlbnQgKSA9PiB7XG5cdFx0aWYgKCBpbnB1dEF0dHJpYnV0ZXM/Lm9uS2V5RG93biApIHtcblx0XHRcdGlucHV0QXR0cmlidXRlcz8ub25LZXlEb3duPy4oIGV2ZW50ICk7XG5cdFx0fVxuXG5cdFx0Ly8gSWYgYG9uS2V5RG93bigpYCBoYW5kbGVyIGFib3ZlIGhhcyBjYWxsZWQgYGV2ZW50LnByZXZlbnREZWZhdWx0KClgIHRoZW4gaWdub3JlIHRoaXMgYGtleWRvd25gIGV2ZW50LlxuXHRcdGlmICggZXZlbnQuZGVmYXVsdFByZXZlbnRlZCApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRjb25zdCBwaG9uZUlucHV0ID0gcGhvbmVJbnB1dFJlZi5jdXJyZW50O1xuXHRcdGlmICggcGhvbmVJbnB1dC5oYXNBdHRyaWJ1dGUoICdyZWFkb25seScgKSApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRjb25zdCBvcGVyYXRpb24gPSBldmVudC5rZXk7XG5cdFx0aWYgKCAhIFsgJ0JhY2tzcGFjZScsICdEZWxldGUnIF0uaW5jbHVkZXMoIG9wZXJhdGlvbiApICkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdC8vIEludGVyY2VwdCB0aGlzIG9wZXJhdGlvbiBhbmQgcGVyZm9ybSBpdCBtYW51YWxseS5cblx0XHRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXG5cdFx0Y29uc3QgdmFsdWUgPSBwaG9uZUlucHV0LnZhbHVlO1xuXHRcdGNvbnN0IHNlbGVjdGlvbiA9IGdldFNlbGVjdGlvbiggcGhvbmVJbnB1dCApO1xuXG5cdFx0Ly8gSWYgYSBzZWxlY3Rpb24gaXMgbWFkZSwgZ2V0IHRoZSB0ZXh0IGFmdGVyIGVyYXNpbmcgc2VsZWN0aW9uLlxuXHRcdC8vIEVsc2UsIHBlcmZvcm0gdGhlIChjaGFyYWN0ZXIgZXJhc2luZykgb3BlcmF0aW9uIG1hbnVhbGx5LlxuXHRcdGNvbnN0IG5ld1ZhbHVlID0gc2VsZWN0aW9uID8gZ2V0VGV4dEFmdGVyRXJhc2VTZWxlY3Rpb24oIHZhbHVlLCBzZWxlY3Rpb24gKSA6IHZhbHVlO1xuXHRcdGNvbnN0IG5ld09wID0gc2VsZWN0aW9uID8gdW5kZWZpbmVkIDogb3BlcmF0aW9uO1xuXG5cdFx0aGFuZGxlSW5wdXRDaGFuZ2UoIG5ld1ZhbHVlLCBuZXdPcCwgZXZlbnQgKTtcblx0fTtcblxuXHQvKipcblx0ICogQGZ1bmN0aW9uIG9uSW5wdXRCbHVyXG5cdCAqIEBkZXNjcmlwdGlvbiBIYW5kbGUgaW5wdXQgYmx1ci5cblx0ICpcblx0ICogQHNpbmNlIDUuNS4wXG5cdCAqXG5cdCAqIEBwYXJhbSB7RXZlbnR9IGV2ZW50IFRoZSBldmVudCBvYmplY3QuXG5cdCAqL1xuXHRjb25zdCBvbklucHV0Qmx1ciA9ICggZXZlbnQgKSA9PiB7XG5cdFx0aWYgKCBpbnB1dEF0dHJpYnV0ZXM/Lm9uQmx1ciApIHtcblx0XHRcdGlucHV0QXR0cmlidXRlcz8ub25CbHVyPy4oIGV2ZW50ICk7XG5cdFx0fVxuXG5cdFx0Ly8gSWYgYG9uQmx1cigpYCBoYW5kbGVyIGFib3ZlIGhhcyBjYWxsZWQgYGV2ZW50LnByZXZlbnREZWZhdWx0KClgIHRoZW4gaWdub3JlIHRoaXMgYGJsdXJgIGV2ZW50LlxuXHRcdGlmICggZXZlbnQuZGVmYXVsdFByZXZlbnRlZCApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHR2YWxpZGF0ZVBob25lTnVtYmVyKCk7XG5cdH07XG5cblx0LyoqXG5cdCAqIEBmdW5jdGlvbiBvbkxhYmVsQ2xpY2tcblx0ICogQGRlc2NyaXB0aW9uIEhhbmRsZSBsYWJlbCBjbGljay5cblx0ICpcblx0ICogQHNpbmNlIDUuNS4wXG5cdCAqXG5cdCAqL1xuXHRjb25zdCBvbkxhYmVsQ2xpY2sgPSAoKSA9PiB7XG5cdFx0Y29uc3QgZHJvcGRvd25UcmlnZ2VyID0gZHJvcGRvd25SZWY/LmN1cnJlbnQ/LnF1ZXJ5U2VsZWN0b3IoIERST1BET1dOX1RSSUdHRVJfU0VMRUNUT1IgKTtcblx0XHRpZiAoIGRyb3Bkb3duVHJpZ2dlciApIHtcblx0XHRcdGRyb3Bkb3duVHJpZ2dlci5mb2N1cygpO1xuXHRcdH1cblx0fTtcblxuXHRjb25zdCBoZWxwVGV4dElkID0gZ2V0SWQoIGlkLCAnaGVscC10ZXh0JyApO1xuXHRjb25zdCBsYWJlbElkID0gZ2V0SWQoIGlkLCAnbGFiZWwnICk7XG5cblx0Y29uc3QgY29tcG9uZW50UHJvcHMgPSB7XG5cdFx0Y2xhc3NOYW1lOiBjbGFzc25hbWVzKCB7XG5cdFx0XHQnZ2Zvcm0tcGhvbmUnOiB0cnVlLFxuXHRcdFx0J3dwLWV4Y2x1ZGUtZW1vamknOiB0cnVlLFxuXHRcdFx0WyBgZ2Zvcm0tcGhvbmUtLXNpemUtJHsgc2l6ZSB9YCBdOiB0cnVlLFxuXHRcdFx0J2dmb3JtLXBob25lLS1kaXNhYmxlZCc6IGRpc2FibGVkLFxuXHRcdFx0Li4uc3BhY2VyQ2xhc3Nlcyggc3BhY2luZyApLFxuXHRcdH0sIGN1c3RvbUNsYXNzZXMgKSxcblx0XHRpZCxcblx0XHRzdHlsZToge1xuXHRcdFx0d2lkdGg6IHdpZHRoID8gYCR7IHdpZHRoIH1weGAgOiB1bmRlZmluZWQsXG5cdFx0fSxcblx0XHQuLi5jdXN0b21BdHRyaWJ1dGVzLFxuXHR9O1xuXG5cdGNvbnN0IGxhYmVsUHJvcHMgPSB7XG5cdFx0Y2xhc3NOYW1lOiBjbGFzc25hbWVzKCBbXG5cdFx0XHQnZ2Zvcm0tcGhvbmVfX2xhYmVsJyxcblx0XHRcdCdnZm9ybS10ZXh0Jyxcblx0XHRcdCdnZm9ybS10ZXh0LS1jb2xvci1wb3J0Jyxcblx0XHRcdCdnZm9ybS10eXBvZ3JhcGh5LS1zaXplLXRleHQtc20nLFxuXHRcdFx0J2dmb3JtLXR5cG9ncmFwaHktLXdlaWdodC1tZWRpdW0nLFxuXHRcdF0sIGxhYmVsQ2xhc3NlcyApLFxuXHRcdC4uLmxhYmVsQXR0cmlidXRlcyxcblx0XHRpZDogbGFiZWxJZCxcblx0XHRvbkNsaWNrOiBvbkxhYmVsQ2xpY2ssXG5cdH07XG5cblx0Y29uc3QgcmVxdWlyZWRMYWJlbFByb3BzID0ge1xuXHRcdHNpemU6ICd0ZXh0LXNtJyxcblx0XHR3ZWlnaHQ6ICdtZWRpdW0nLFxuXHRcdC4uLnJlcXVpcmVkTGFiZWxBdHRyaWJ1dGVzLFxuXHRcdGN1c3RvbUNsYXNzZXM6IGNsYXNzbmFtZXMoIFsgJ2dmb3JtLXBob25lX19yZXF1aXJlZCcgXSwgcmVxdWlyZWRMYWJlbENsYXNzZXMgKSxcblx0fTtcblxuXHRjb25zdCBkcm9wZG93blByb3BzID0ge1xuXHRcdGNvdW50cmllcyxcblx0XHRoYXNTZWFyY2g6IHRydWUsXG5cdFx0cG9wb3Zlck1heEhlaWdodDogMzAwLFxuXHRcdC4uLmRyb3Bkb3duQXR0cmlidXRlcyxcblx0XHRjdXN0b21DbGFzc2VzOiBjbGFzc25hbWVzKCBbXG5cdFx0XHQnZ2Zvcm0tcGhvbmVfX2Ryb3Bkb3duJyxcblx0XHRdLCBkcm9wZG93bkNsYXNzZXMgKSxcblx0XHRkaXNhYmxlZCxcblx0XHRpMThuLFxuXHRcdGlkOiBnZXRJZCggaWQsICdkcm9wZG93bicgKSxcblx0XHRsYW5ndWFnZSxcblx0XHRvbkNoYW5nZTogb25Db3VudHJ5Q2hhbmdlLFxuXHRcdHByZWZlcnJlZENvdW50cmllcyxcblx0XHRzZWFyY2hBdHRyaWJ1dGVzOiB7XG5cdFx0XHR3cmFwcGVyQ2xhc3NlczogWyAnZ2Zvcm0tcGhvbmVfX2Ryb3Bkb3duLXNlYXJjaC13cmFwcGVyJyBdLFxuXHRcdFx0Li4uKCBkcm9wZG93bkF0dHJpYnV0ZXM/LnNlYXJjaEF0dHJpYnV0ZXMgfHwge30gKSxcblx0XHR9LFxuXHRcdHNlYXJjaENsYXNzZXM6IFsgJ2dmb3JtLXBob25lX19kcm9wZG93bi1zZWFyY2gnIF0sXG5cdFx0c2l6ZSxcblx0XHR0cmlnZ2VyQXR0cmlidXRlczoge1xuXHRcdFx0J2FyaWEtbGFiZWxsZWRieSc6IGxhYmVsID8gbGFiZWxJZCA6IHVuZGVmaW5lZCxcblx0XHR9LFxuXHRcdHRyaWdnZXJDbGFzc2VzOiBbICdnZm9ybS1waG9uZV9fZHJvcGRvd24tdHJpZ2dlcicgXSxcblx0fTtcblxuXHRjb25zdCBpbnB1dFByb3BzID0ge1xuXHRcdC4uLmlucHV0QXR0cmlidXRlcyxcblx0XHRib3JkZXJTdHlsZSxcblx0XHRjdXN0b21BdHRyaWJ1dGVzOiB7XG5cdFx0XHQnYXJpYS1kZXNjcmliZWRieSc6IGhlbHBUZXh0QXR0cmlidXRlcy5jb250ZW50ICYmIGJvcmRlclN0eWxlID09PSBCT1JERVJfU1RZTEVfRVJST1IgPyBoZWxwVGV4dElkIDogdW5kZWZpbmVkLFxuXHRcdFx0J2FyaWEtbGFiZWxsZWRieSc6IGxhYmVsID8gbGFiZWxJZCA6IHVuZGVmaW5lZCxcblx0XHR9LFxuXHRcdGN1c3RvbUNsYXNzZXM6IGNsYXNzbmFtZXMoIFtcblx0XHRcdCdnZm9ybS1waG9uZV9faW5wdXQnLFxuXHRcdF0sIGlucHV0Q2xhc3NlcyApLFxuXHRcdGRpcmVjdENvbnRyb2xsZWQ6IHRydWUsXG5cdFx0ZGlzYWJsZWQsXG5cdFx0aWQ6IGdldElkKCBpZCwgJ2lucHV0JyApLFxuXHRcdG9uQmx1cjogb25JbnB1dEJsdXIsXG5cdFx0b25DaGFuZ2U6IG9uSW5wdXRDaGFuZ2UsXG5cdFx0b25LZXlEb3duOiBvbklucHV0S2V5RG93bixcblx0XHRwbGFjZWhvbGRlcjogZ2V0UGxhY2Vob2xkZXIoKSxcblx0XHRyZXF1aXJlZCxcblx0XHRzaXplOiBgc2l6ZS0keyBzaXplIH1gLFxuXHRcdHR5cGU6ICd0ZWwnLFxuXHRcdHZhbHVlOiBwaG9uZU51bWJlci52YWx1ZSxcblx0XHR3cmFwcGVyQ2xhc3NlczogY2xhc3NuYW1lcygge1xuXHRcdFx0J2dmb3JtLXBob25lX19pbnB1dC13cmFwcGVyJzogdHJ1ZSxcblx0XHR9LCBpbnB1dEF0dHJpYnV0ZXM/LndyYXBwZXJDbGFzc2VzIHx8IFtdICksXG5cdH07XG5cblx0Y29uc3QgaGVscFRleHRQcm9wcyA9IHtcblx0XHRzaXplOiAndGV4dC14cycsXG5cdFx0d2VpZ2h0OiAncmVndWxhcicsXG5cdFx0Li4uaGVscFRleHRBdHRyaWJ1dGVzLFxuXHRcdGN1c3RvbUNsYXNzZXM6IGNsYXNzbmFtZXMoIFsgJ2dmb3JtLXBob25lX19oZWxwLXRleHQnIF0sIGhlbHBUZXh0Q2xhc3NlcyApLFxuXHRcdGlkOiBoZWxwVGV4dElkLFxuXHR9O1xuXG5cdHJldHVybiAoXG5cdFx0PGRpdiB7IC4uLmNvbXBvbmVudFByb3BzIH0gcmVmPXsgd3JhcHBlclJlZiB9PlxuXHRcdFx0eyBsYWJlbCAmJiA8ZGl2IHsgLi4ubGFiZWxQcm9wcyB9PnsgbGFiZWwgfXsgcmVxdWlyZWQgJiYgPEhlbHBUZXh0IHsgLi4ucmVxdWlyZWRMYWJlbFByb3BzIH0gLz4gfTwvZGl2PiB9XG5cdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cImdmb3JtLXBob25lX193cmFwcGVyXCI+XG5cdFx0XHRcdDxDb3VudHJ5RHJvcGRvd24geyAuLi5kcm9wZG93blByb3BzIH0gcmVmPXsgZHJvcGRvd25SZWYgfSAvPlxuXHRcdFx0XHQ8SW5wdXQgeyAuLi5pbnB1dFByb3BzIH0gcmVmPXsgaW5wdXRSZWYgfSAvPlxuXHRcdFx0PC9kaXY+XG5cdFx0XHR7IGJvcmRlclN0eWxlID09PSBCT1JERVJfU1RZTEVfRVJST1IgJiYgPEhlbHBUZXh0IHsgLi4uaGVscFRleHRQcm9wcyB9IC8+IH1cblx0XHQ8L2Rpdj5cblx0KTtcbn0gKTtcblxuUGhvbmVDb21wb25lbnQucHJvcFR5cGVzID0ge1xuXHRjb3VudHJpZXM6IFByb3BUeXBlcy5hcnJheSxcblx0Y3VzdG9tQXR0cmlidXRlczogUHJvcFR5cGVzLm9iamVjdCxcblx0Y3VzdG9tQ2xhc3NlczogUHJvcFR5cGVzLm9uZU9mVHlwZSggW1xuXHRcdFByb3BUeXBlcy5zdHJpbmcsXG5cdFx0UHJvcFR5cGVzLmFycmF5LFxuXHRcdFByb3BUeXBlcy5vYmplY3QsXG5cdF0gKSxcblx0ZGlzYWJsZWQ6IFByb3BUeXBlcy5ib29sLFxuXHRkcm9wZG93bkF0dHJpYnV0ZXM6IFByb3BUeXBlcy5vYmplY3QsXG5cdGRyb3Bkb3duQ2xhc3NlczogUHJvcFR5cGVzLm9uZU9mVHlwZSggW1xuXHRcdFByb3BUeXBlcy5zdHJpbmcsXG5cdFx0UHJvcFR5cGVzLmFycmF5LFxuXHRcdFByb3BUeXBlcy5vYmplY3QsXG5cdF0gKSxcblx0aGVscFRleHRBdHRyaWJ1dGVzOiBQcm9wVHlwZXMub2JqZWN0LFxuXHRoZWxwVGV4dENsYXNzZXM6IFByb3BUeXBlcy5vbmVPZlR5cGUoIFtcblx0XHRQcm9wVHlwZXMuc3RyaW5nLFxuXHRcdFByb3BUeXBlcy5hcnJheSxcblx0XHRQcm9wVHlwZXMub2JqZWN0LFxuXHRdICksXG5cdGkxOG46IFByb3BUeXBlcy5vYmplY3QsXG5cdGlkOiBQcm9wVHlwZXMuc3RyaW5nLFxuXHRpbnB1dEF0dHJpYnV0ZXM6IFByb3BUeXBlcy5vYmplY3QsXG5cdGlucHV0Q2xhc3NlczogUHJvcFR5cGVzLm9uZU9mVHlwZSggW1xuXHRcdFByb3BUeXBlcy5zdHJpbmcsXG5cdFx0UHJvcFR5cGVzLmFycmF5LFxuXHRcdFByb3BUeXBlcy5vYmplY3QsXG5cdF0gKSxcblx0aW50ZXJuYXRpb25hbDogUHJvcFR5cGVzLmJvb2wsXG5cdGxhYmVsOiBQcm9wVHlwZXMuc3RyaW5nLFxuXHRsYWJlbEF0dHJpYnV0ZXM6IFByb3BUeXBlcy5vYmplY3QsXG5cdGxhYmVsQ2xhc3NlczogUHJvcFR5cGVzLm9uZU9mVHlwZSggW1xuXHRcdFByb3BUeXBlcy5zdHJpbmcsXG5cdFx0UHJvcFR5cGVzLmFycmF5LFxuXHRcdFByb3BUeXBlcy5vYmplY3QsXG5cdF0gKSxcblx0bGFuZ3VhZ2U6IFByb3BUeXBlcy5zdHJpbmcsXG5cdG9uQ2hhbmdlOiBQcm9wVHlwZXMuZnVuYyxcblx0cHJlZmVycmVkQ291bnRyaWVzOiBQcm9wVHlwZXMuYXJyYXksXG5cdHJlcXVpcmVkOiBQcm9wVHlwZXMuYm9vbCxcblx0cmVxdWlyZWRMYWJlbEF0dHJpYnV0ZXM6IFByb3BUeXBlcy5vYmplY3QsXG5cdHJlcXVpcmVkTGFiZWxDbGFzc2VzOiBQcm9wVHlwZXMub25lT2ZUeXBlKCBbXG5cdFx0UHJvcFR5cGVzLnN0cmluZyxcblx0XHRQcm9wVHlwZXMuYXJyYXksXG5cdFx0UHJvcFR5cGVzLm9iamVjdCxcblx0XSApLFxuXHRzaXplOiBQcm9wVHlwZXMub25lT2YoIFsgJ3InLCAnbCcsICd4bCcgXSApLFxuXHRzcGFjaW5nOiBQcm9wVHlwZXMub25lT2ZUeXBlKCBbXG5cdFx0UHJvcFR5cGVzLnN0cmluZyxcblx0XHRQcm9wVHlwZXMubnVtYmVyLFxuXHRcdFByb3BUeXBlcy5hcnJheSxcblx0XHRQcm9wVHlwZXMub2JqZWN0LFxuXHRdICksXG5cdHVzZVBsYWNlaG9sZGVyOiBQcm9wVHlwZXMuYm9vbCxcblx0dXNlVmFsaWRhdGlvbjogUHJvcFR5cGVzLmJvb2wsXG5cdHdpZHRoOiBQcm9wVHlwZXMubnVtYmVyLFxufTtcblxuY29uc3QgUGhvbmVDb21wb25lbnRXaXRoSWQgPSBmb3J3YXJkUmVmKCAoIHByb3BzLCByZWYgKSA9PiB7XG5cdGNvbnN0IGRlZmF1bHRQcm9wcyA9IHtcblx0XHRjb3VudHJpZXM6IFtdLFxuXHRcdGN1c3RvbUF0dHJpYnV0ZXM6IHt9LFxuXHRcdGN1c3RvbUNsYXNzZXM6IFtdLFxuXHRcdGRpc2FibGVkOiBmYWxzZSxcblx0XHRkcm9wZG93bkF0dHJpYnV0ZXM6IHt9LFxuXHRcdGRyb3Bkb3duQ2xhc3NlczogW10sXG5cdFx0aGVscFRleHRBdHRyaWJ1dGVzOiB7fSxcblx0XHRoZWxwVGV4dENsYXNzZXM6IFtdLFxuXHRcdGkxOG46IHt9LFxuXHRcdGlkOiAnJyxcblx0XHRpbnB1dEF0dHJpYnV0ZXM6IHt9LFxuXHRcdGlucHV0Q2xhc3NlczogW10sXG5cdFx0aW50ZXJuYXRpb25hbDogdHJ1ZSxcblx0XHRsYWJlbDogJycsXG5cdFx0bGFiZWxBdHRyaWJ1dGVzOiB7fSxcblx0XHRsYWJlbENsYXNzZXM6IFtdLFxuXHRcdGxhbmd1YWdlOiAnZW4nLFxuXHRcdG9uQ2hhbmdlOiAoKSA9PiB7fSxcblx0XHRwcmVmZXJyZWRDb3VudHJpZXM6IFtdLFxuXHRcdHJlcXVpcmVkOiBmYWxzZSxcblx0XHRyZXF1aXJlZExhYmVsQXR0cmlidXRlczoge30sXG5cdFx0cmVxdWlyZWRMYWJlbENsYXNzZXM6IFtdLFxuXHRcdHNpemU6ICdyJyxcblx0XHRzcGFjaW5nOiAnJyxcblx0XHR1c2VQbGFjZWhvbGRlcjogdHJ1ZSxcblx0XHR1c2VWYWxpZGF0aW9uOiBmYWxzZSxcblx0XHR3aWR0aDogMCxcblx0fTtcblx0Y29uc3QgY29tYmluZWRQcm9wcyA9IHsgLi4uZGVmYXVsdFByb3BzLCAuLi5wcm9wcyB9O1xuXHRjb25zdCB7IGlkOiBpZFByb3AgfSA9IGNvbWJpbmVkUHJvcHM7XG5cdGNvbnN0IGlkUHJvdmlkZXJQcm9wcyA9IHsgaWQ6IGlkUHJvcCB9O1xuXG5cdHJldHVybiAoXG5cdFx0PElkUHJvdmlkZXIgeyAuLi5pZFByb3ZpZGVyUHJvcHMgfT5cblx0XHRcdDxQaG9uZUNvbXBvbmVudCB7IC4uLmNvbWJpbmVkUHJvcHMgfSByZWY9eyByZWYgfSAvPlxuXHRcdDwvSWRQcm92aWRlcj5cblx0KTtcbn0gKTtcblxuZXhwb3J0IGRlZmF1bHQgUGhvbmVDb21wb25lbnRXaXRoSWQ7XG4iXSwibmFtZXMiOlsic2x1Z2lmeSIsIkFORFJPSURfVVNFUl9BR0VOVF9SRUdfRVhQIiwiaXNBbmRyb2lkIiwibmF2aWdhdG9yIiwidGVzdCIsInVzZXJBZ2VudCIsImdldENhcmV0UG9zaXRpb24iLCJlbGVtZW50Iiwic2VsZWN0aW9uU3RhcnQiLCJzZXRDYXJldFBvc2l0aW9uIiwiY2FyZXRQb3NpdGlvbiIsInVuZGVmaW5lZCIsInNldFRpbWVvdXQiLCJzZXRTZWxlY3Rpb25SYW5nZSIsImdldFRleHRBZnRlckVyYXNlU2VsZWN0aW9uIiwidGV4dCIsInNlbGVjdGlvbiIsInN0YXJ0IiwiTWF0aCIsIm1pbiIsImVuZCIsIm1heCIsInNsaWNlIiwiZ2V0U2VsZWN0aW9uIiwiaW5wdXQiLCJzZWxlY3Rpb25FbmQiLCJnZXRJZCIsInByZWZpeCIsImtleSIsImNvbmNhdCIsImUxNjRUb051bWJlciIsImUxNjQiLCJUeXBlRXJyb3IiLCJyZXBsYWNlIiwibnVtYmVyVG9FMTY0IiwibnVtYmVyIiwic3RhcnRzV2l0aCIsIlJlYWN0IiwiUHJvcFR5cGVzIiwiY2xhc3NuYW1lcyIsIklkUHJvdmlkZXIiLCJ1c2VJZENvbnRleHQiLCJ1c2VQaG9uZUlucHV0Rm9ybWF0VXRpbHNDb250ZXh0IiwidXNlUGhvbmVJbnB1dEZvcm1hdFV0aWxzIiwic3BhY2VyQ2xhc3NlcyIsImV4YW1wbGVOdW1iZXJzIiwiZ2V0RXhhbXBsZU51bWJlciIsImdldFNlbGVjdGVkSXRlbUZyb21WYWx1ZSIsIkNvdW50cnlEcm9wZG93biIsImdldENvdW50cmllc0xpc3RJdGVtc0Zyb21Jc29zIiwic29ydFByZWZlcnJlZENvdW50cmllcyIsIkhlbHBUZXh0IiwiSW5wdXQiLCJ1c2VFZmZlY3QiLCJ1c2VSZWYiLCJ1c2VTdGF0ZSIsImZvcndhcmRSZWYiLCJJTlBVVF9TRUxFQ1RPUiIsIkRST1BET1dOX1RSSUdHRVJfU0VMRUNUT1IiLCJCT1JERVJfU1RZTEVfREVGQVVMVCIsIkJPUkRFUl9TVFlMRV9FUlJPUiIsIkJPUkRFUl9TVFlMRV9DT1JSRUNUIiwiUGhvbmVDb21wb25lbnQiLCJwcm9wcyIsInJlZiIsImNvdW50cmllcyIsImN1c3RvbUF0dHJpYnV0ZXMiLCJjdXN0b21DbGFzc2VzIiwiZGlzYWJsZWQiLCJkcm9wZG93bkF0dHJpYnV0ZXMiLCJkcm9wZG93bkNsYXNzZXMiLCJoZWxwVGV4dEF0dHJpYnV0ZXMiLCJoZWxwVGV4dENsYXNzZXMiLCJpMThuIiwiaW5wdXRBdHRyaWJ1dGVzIiwiaW5wdXRDbGFzc2VzIiwiaW50ZXJuYXRpb25hbCIsImxhYmVsIiwibGFiZWxBdHRyaWJ1dGVzIiwibGFiZWxDbGFzc2VzIiwibGFuZ3VhZ2UiLCJvbkNoYW5nZSIsInByZWZlcnJlZENvdW50cmllcyIsInJlcXVpcmVkIiwicmVxdWlyZWRMYWJlbEF0dHJpYnV0ZXMiLCJyZXF1aXJlZExhYmVsQ2xhc3NlcyIsInNpemUiLCJzcGFjaW5nIiwidXNlUGxhY2Vob2xkZXIiLCJ1c2VWYWxpZGF0aW9uIiwid2lkdGgiLCJpbnRlcm5hbFJlZiIsIndyYXBwZXJSZWYiLCJkcm9wZG93blJlZiIsImlucHV0UmVmIiwicGhvbmVJbnB1dFJlZiIsImlkIiwiX3VzZVBob25lSW5wdXRGb3JtYXRVIiwiaW5wdXRGb3JtYXRVdGlscyIsImdldEZvcm1hdHRlZElucHV0VGV4dCIsIl91c2VTdGF0ZSIsImNvdW50cmllc0xpc3RJdGVtcyIsInNob3dGbGFnIiwic2hvd0NhbGxpbmdDb2RlIiwiaW5pdGlhbFZhbHVlIiwibGVuZ3RoIiwiX3ByZWZlcnJlZCQiLCJwcmVmZXJyZWQiLCJ0eXBlIiwiX3ByZWZlcnJlZCQyIiwiaXRlbXMiLCJfdXNlU3RhdGUyIiwiX3NsaWNlZFRvQXJyYXkiLCJjb3VudHJ5Iiwic2V0Q291bnRyeSIsIl91c2VTdGF0ZTMiLCJ2YWx1ZSIsIl9nZXRGb3JtYXR0ZWRJbnB1dFRleCIsImFzWW91VHlwZSIsImZvcm1hdHRlZCIsImNoYXJzIiwiZ2V0Q2hhcnMiLCJudW1iZXJWYWx1ZSIsImdldE51bWJlclZhbHVlIiwiX3VzZVN0YXRlNCIsInBob25lTnVtYmVyIiwic2V0UGhvbmVOdW1iZXIiLCJfdXNlU3RhdGU1IiwiX3VzZVN0YXRlNiIsImJvcmRlclN0eWxlIiwic2V0Qm9yZGVyU3R5bGUiLCJjdXJyZW50IiwicXVlcnlTZWxlY3RvciIsImdldFBsYWNlaG9sZGVyIiwiZXhhbXBsZU51bWJlciIsImZvcm1hdEludGVybmF0aW9uYWwiLCJmb3JtYXROYXRpb25hbCIsInZhbGlkYXRlUGhvbmVOdW1iZXIiLCJpc1Bvc3NpYmxlIiwib25Db3VudHJ5Q2hhbmdlIiwiZXZlbnQiLCJfZ2V0Rm9ybWF0dGVkSW5wdXRUZXgyIiwiY2hhbmdlVmFsdWUiLCJpc1ZhbGlkIiwicmVxdWVzdEFuaW1hdGlvbkZyYW1lIiwiaGFuZGxlSW5wdXRDaGFuZ2UiLCJvcGVyYXRpb24iLCJwaG9uZUlucHV0IiwiX2dldEZvcm1hdHRlZElucHV0VGV4MyIsImNhcmV0Iiwib25JbnB1dENoYW5nZSIsIm9uSW5wdXRLZXlEb3duIiwib25LZXlEb3duIiwiX2lucHV0QXR0cmlidXRlcyRvbktlIiwiY2FsbCIsImRlZmF1bHRQcmV2ZW50ZWQiLCJoYXNBdHRyaWJ1dGUiLCJpbmNsdWRlcyIsInByZXZlbnREZWZhdWx0IiwibmV3VmFsdWUiLCJuZXdPcCIsIm9uSW5wdXRCbHVyIiwib25CbHVyIiwiX2lucHV0QXR0cmlidXRlcyRvbkJsIiwib25MYWJlbENsaWNrIiwiX2Ryb3Bkb3duUmVmJGN1cnJlbnQiLCJkcm9wZG93blRyaWdnZXIiLCJmb2N1cyIsImhlbHBUZXh0SWQiLCJsYWJlbElkIiwiY29tcG9uZW50UHJvcHMiLCJfb2JqZWN0U3ByZWFkIiwiY2xhc3NOYW1lIiwiX2RlZmluZVByb3BlcnR5Iiwic3R5bGUiLCJsYWJlbFByb3BzIiwib25DbGljayIsInJlcXVpcmVkTGFiZWxQcm9wcyIsIndlaWdodCIsImRyb3Bkb3duUHJvcHMiLCJoYXNTZWFyY2giLCJwb3BvdmVyTWF4SGVpZ2h0Iiwic2VhcmNoQXR0cmlidXRlcyIsIndyYXBwZXJDbGFzc2VzIiwic2VhcmNoQ2xhc3NlcyIsInRyaWdnZXJBdHRyaWJ1dGVzIiwidHJpZ2dlckNsYXNzZXMiLCJpbnB1dFByb3BzIiwiY29udGVudCIsImRpcmVjdENvbnRyb2xsZWQiLCJwbGFjZWhvbGRlciIsImhlbHBUZXh0UHJvcHMiLCJjcmVhdGVFbGVtZW50IiwiX2V4dGVuZHMiLCJwcm9wVHlwZXMiLCJhcnJheSIsIm9iamVjdCIsIm9uZU9mVHlwZSIsInN0cmluZyIsImJvb2wiLCJmdW5jIiwib25lT2YiLCJQaG9uZUNvbXBvbmVudFdpdGhJZCIsImRlZmF1bHRQcm9wcyIsImNvbWJpbmVkUHJvcHMiLCJpZFByb3AiLCJpZFByb3ZpZGVyUHJvcHMiXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../components/react/admin/modules/Phone/PhoneComponent.js\n\n}");
18
+ eval("{// ESM COMPAT FLAG\n__webpack_require__.r(__webpack_exports__);\n\n// EXPORTS\n__webpack_require__.d(__webpack_exports__, {\n \"default\": function() { return /* binding */ Phone_PhoneComponent; }\n});\n\n// EXTERNAL MODULE: ../../../node_modules/@babel/runtime/helpers/esm/extends.js\nvar esm_extends = __webpack_require__(\"../../../node_modules/@babel/runtime/helpers/esm/extends.js\");\n// EXTERNAL MODULE: ../../../node_modules/@babel/runtime/helpers/esm/defineProperty.js\nvar defineProperty = __webpack_require__(\"../../../node_modules/@babel/runtime/helpers/esm/defineProperty.js\");\n// EXTERNAL MODULE: ../../../node_modules/@babel/runtime/helpers/esm/slicedToArray.js + 3 modules\nvar slicedToArray = __webpack_require__(\"../../../node_modules/@babel/runtime/helpers/esm/slicedToArray.js\");\n// EXTERNAL MODULE: external [\"gform\",\"libraries\"]\nvar external_gform_libraries_ = __webpack_require__(\"@gravityforms/libraries\");\n// EXTERNAL MODULE: external [\"gform\",\"utils\",\"react\"]\nvar external_gform_utils_react_ = __webpack_require__(\"@gravityforms/react-utils\");\n// EXTERNAL MODULE: external [\"gform\",\"utils\"]\nvar external_gform_utils_ = __webpack_require__(\"@gravityforms/utils\");\n// EXTERNAL MODULE: ../../../node_modules/libphonenumber-js/examples.mobile.json.js\nvar examples_mobile_json = __webpack_require__(\"../../../node_modules/libphonenumber-js/examples.mobile.json.js\");\n// EXTERNAL MODULE: ../../../node_modules/libphonenumber-js/min/exports/getExampleNumber.js + 17 modules\nvar getExampleNumber = __webpack_require__(\"../../../node_modules/libphonenumber-js/min/exports/getExampleNumber.js\");\n// EXTERNAL MODULE: ../components/react/admin/modules/Dropdown/utils.js\nvar utils = __webpack_require__(\"../components/react/admin/modules/Dropdown/utils.js\");\n// EXTERNAL MODULE: ../components/react/admin/modules/Dropdown/CountryDropdown/index.js\nvar CountryDropdown = __webpack_require__(\"../components/react/admin/modules/Dropdown/CountryDropdown/index.js\");\n// EXTERNAL MODULE: ../components/react/admin/modules/Dropdown/CountryDropdown/utils.js + 1 modules\nvar CountryDropdown_utils = __webpack_require__(\"../components/react/admin/modules/Dropdown/CountryDropdown/utils.js\");\n// EXTERNAL MODULE: ../components/react/admin/elements/HelpText/index.js\nvar HelpText = __webpack_require__(\"../components/react/admin/elements/HelpText/index.js\");\n// EXTERNAL MODULE: ../components/react/admin/elements/Input/index.js\nvar Input = __webpack_require__(\"../components/react/admin/elements/Input/index.js\");\n;// ../components/react/admin/modules/Phone/utils.js\n\nvar ANDROID_USER_AGENT_REG_EXP = /Android/i;\n\n/**\n * @function isAndroid\n * @description Checks if the user agent is Android.\n * Copied from the original function `isAndroid` from `input-format` package.\n * The original function is not exported, so it was copied here.\n *\n * @since 5.5.0\n *\n * @return {boolean} Whether the user agent is Android.\n */\nvar isAndroid = function isAndroid() {\n // `navigator` is not defined when running mocha tests.\n if (typeof navigator !== 'undefined') {\n return ANDROID_USER_AGENT_REG_EXP.test(navigator.userAgent);\n }\n return false;\n};\n\n/**\n * @function getCaretPosition\n * @description Gets the caret position.\n * Copied from the original function `getCaretPosition` from `input-format` package.\n * The original function is not exported, so it was copied here.\n *\n * @since 5.5.0\n *\n * @param {HTMLElement} element The element to get the caret position from.\n *\n * @return {number} The caret position.\n */\nvar getCaretPosition = function getCaretPosition(element) {\n return element.selectionStart;\n};\n\n/**\n * @function setCaretPosition\n * @description Sets the caret position.\n * Copied from the original function `setCaretPosition` from `input-format` package.\n * The original function is not exported, so it was copied here.\n *\n * @since 5.5.0\n *\n * @param {HTMLElement} element The element to set the caret position on.\n * @param {number} caretPosition The caret position to set.\n */\nvar setCaretPosition = function setCaretPosition(element, caretPosition) {\n // Sanity check\n if (caretPosition === undefined) {\n return;\n }\n\n // Set caret position.\n // There has been an issue with caret positioning on Android devices.\n // https://github.com/catamphetamine/input-format/issues/2\n // I was revisiting this issue and looked for similar issues in other libraries.\n // For example, there's [`text-mask`](https://github.com/text-mask/text-mask) library.\n // They've had exactly the same issue when the caret seemingly refused to be repositioned programmatically.\n // The symptoms were the same: whenever the caret passed through a non-digit character of a mask (a whitespace, a bracket, a dash, etc), it looked as if it placed itself one character before its correct position.\n // https://github.com/text-mask/text-mask/issues/300\n // They seem to have found a basic fix for it: calling `input.setSelectionRange()` in a timeout rather than instantly for Android devices.\n // https://github.com/text-mask/text-mask/pull/400/files\n // I've implemented the same workaround here.\n if (isAndroid()) {\n setTimeout(function () {\n return element.setSelectionRange(caretPosition, caretPosition);\n }, 0);\n } else {\n element.setSelectionRange(caretPosition, caretPosition);\n }\n};\n\n/**\n * @function getTextAfterEraseSelection\n * @description Gets the text after erasing the selection.\n * Modified from the original function `eraseSelection` from `input-format` package.\n * The original function is not exported, so it was copied here.\n *\n * @since 5.5.0\n *\n * @param {string} text The text to erase the selection from.\n * @param {object} selection The selection to erase. The selection is an object with `start` and `end` properties.\n *\n * @return {string} The text after erasing the selection.\n */\nvar getTextAfterEraseSelection = function getTextAfterEraseSelection(text, selection) {\n var start = Math.min(selection.start, selection.end);\n var end = Math.max(selection.start, selection.end);\n return text.slice(0, start) + text.slice(end);\n};\n\n/**\n * @function getSelection\n * @description Gets the selection.\n * Copied from the original function `getSelection` from `input-format` package.\n * The original function is not exported, so it was copied here.\n *\n * @since 5.5.0\n *\n * @param {HTMLElement} input The input element.\n *\n * @return {object|undefined} The selection object with `start` and `end` properties.\n */\nvar getSelection = function getSelection(input) {\n // If no selection, return nothing\n if (input.selectionStart === input.selectionEnd) {\n return;\n }\n var start = Math.min(input.selectionStart, input.selectionEnd);\n var end = Math.max(input.selectionStart, input.selectionEnd);\n return {\n start: start,\n end: end\n };\n};\n\n/**\n * @function getId\n * @description Get the id from the prefix and key provided.\n *\n * @since 5.5.0\n *\n * @param {string} prefix The id prefix.\n * @param {string} key The id key.\n *\n * @return {string} The id.\n */\nvar getId = function getId(prefix, key) {\n return (0,external_gform_utils_.slugify)(\"\".concat(prefix, \"-\").concat(key));\n};\n\n/**\n * @function e164ToNumber\n * @description Convert an E.164 formatted phone number to a number.\n *\n * @since 5.5.0\n *\n * @throws {TypeError} If the input is not a string.\n *\n * @param {string} e164 The E.164 formatted phone number.\n *\n * @return {string} The phone number.\n */\nvar e164ToNumber = function e164ToNumber(e164) {\n if (typeof e164 !== 'string') {\n throw new TypeError('Input must be a string');\n }\n return e164.replace(/^\\+/, '');\n};\n\n/**\n * @function numberToE164\n * @description Convert a phone number to E.164 format.\n *\n * @since 5.5.0\n *\n * @throws {TypeError} If the input is not a string.\n *\n * @param {string} number The phone number.\n *\n * @return {string} The E.164 formatted phone number.\n */\nvar numberToE164 = function numberToE164(number) {\n if (typeof number !== 'string') {\n throw new TypeError('Input must be a string');\n }\n return number.startsWith('+') ? number : \"+\".concat(number);\n};\n;// ../components/react/admin/modules/Phone/PhoneComponent.js\n\n\n\nfunction ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { (0,defineProperty[\"default\"])(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\n\n\n\n\n\n\n\n\n\n\n\nvar useEffect = external_gform_libraries_.React.useEffect,\n useRef = external_gform_libraries_.React.useRef,\n useState = external_gform_libraries_.React.useState,\n forwardRef = external_gform_libraries_.React.forwardRef;\nvar INPUT_SELECTOR = '.gform-input';\nvar DROPDOWN_TRIGGER_SELECTOR = '.gform-dropdown__trigger';\nvar BORDER_STYLE_DEFAULT = 'default';\nvar BORDER_STYLE_ERROR = 'error';\nvar BORDER_STYLE_CORRECT = 'correct';\nvar PhoneComponent = forwardRef(function (props, ref) {\n var countries = props.countries,\n customAttributes = props.customAttributes,\n customClasses = props.customClasses,\n disabled = props.disabled,\n dropdownAttributes = props.dropdownAttributes,\n dropdownClasses = props.dropdownClasses,\n helpTextAttributes = props.helpTextAttributes,\n helpTextClasses = props.helpTextClasses,\n i18n = props.i18n,\n inputAttributes = props.inputAttributes,\n inputClasses = props.inputClasses,\n international = props.international,\n label = props.label,\n labelAttributes = props.labelAttributes,\n labelClasses = props.labelClasses,\n language = props.language,\n onChange = props.onChange,\n preferredCountries = props.preferredCountries,\n required = props.required,\n requiredLabelAttributes = props.requiredLabelAttributes,\n requiredLabelClasses = props.requiredLabelClasses,\n size = props.size,\n spacing = props.spacing,\n usePlaceholder = props.usePlaceholder,\n useValidation = props.useValidation,\n width = props.width;\n\n // Refs\n var internalRef = useRef(null);\n var wrapperRef = ref || internalRef;\n var dropdownRef = useRef(null);\n var inputRef = useRef(null);\n var phoneInputRef = useRef(null);\n var id = (0,external_gform_utils_react_.useIdContext)();\n var _usePhoneInputFormatU = (0,external_gform_utils_react_.usePhoneInputFormatUtilsContext)(),\n inputFormatUtils = _usePhoneInputFormatU.inputFormatUtils;\n var getFormattedInputText = inputFormatUtils.getFormattedInputText;\n var _useState = useState(function () {\n var countriesListItems = (0,CountryDropdown_utils.getCountriesListItemsFromIsos)(countries, language, i18n, {\n showFlag: (dropdownAttributes === null || dropdownAttributes === void 0 ? void 0 : dropdownAttributes.showFlag) || true,\n showCallingCode: (dropdownAttributes === null || dropdownAttributes === void 0 ? void 0 : dropdownAttributes.showCallingCode) || true\n });\n if (dropdownAttributes !== null && dropdownAttributes !== void 0 && dropdownAttributes.initialValue) {\n return (0,utils.getSelectedItemFromValue)(dropdownAttributes === null || dropdownAttributes === void 0 ? void 0 : dropdownAttributes.initialValue, countriesListItems, false);\n }\n if (preferredCountries.length) {\n var _preferred$;\n var preferred = (0,CountryDropdown_utils.sortPreferredCountries)(countriesListItems, preferredCountries, i18n);\n if ((preferred === null || preferred === void 0 || (_preferred$ = preferred[0]) === null || _preferred$ === void 0 ? void 0 : _preferred$.type) === 'group') {\n var _preferred$2;\n return (preferred === null || preferred === void 0 || (_preferred$2 = preferred[0]) === null || _preferred$2 === void 0 || (_preferred$2 = _preferred$2.items) === null || _preferred$2 === void 0 ? void 0 : _preferred$2[0]) || {};\n }\n return preferred === null || preferred === void 0 ? void 0 : preferred[0];\n }\n if (countriesListItems !== null && countriesListItems !== void 0 && countriesListItems[0]) {\n return countriesListItems === null || countriesListItems === void 0 ? void 0 : countriesListItems[0];\n }\n return {};\n }),\n _useState2 = (0,slicedToArray[\"default\"])(_useState, 2),\n country = _useState2[0],\n setCountry = _useState2[1];\n var _useState3 = useState(function () {\n if (inputAttributes !== null && inputAttributes !== void 0 && inputAttributes.value) {\n var _getFormattedInputTex = getFormattedInputText(inputAttributes === null || inputAttributes === void 0 ? void 0 : inputAttributes.value, 0, country === null || country === void 0 ? void 0 : country.value, international),\n asYouType = _getFormattedInputTex.asYouType,\n formatted = _getFormattedInputTex.formatted;\n return {\n asYouType: asYouType,\n chars: (asYouType === null || asYouType === void 0 ? void 0 : asYouType.getChars()) || '',\n value: formatted.text,\n numberValue: (asYouType === null || asYouType === void 0 ? void 0 : asYouType.getNumberValue()) || ''\n };\n }\n return {\n asYouType: null,\n chars: '',\n value: '',\n numberValue: ''\n };\n }),\n _useState4 = (0,slicedToArray[\"default\"])(_useState3, 2),\n phoneNumber = _useState4[0],\n setPhoneNumber = _useState4[1];\n var _useState5 = useState(BORDER_STYLE_DEFAULT),\n _useState6 = (0,slicedToArray[\"default\"])(_useState5, 2),\n borderStyle = _useState6[0],\n setBorderStyle = _useState6[1];\n\n // Set phoneInputRef.\n useEffect(function () {\n if (!inputRef.current) {\n return;\n }\n if (phoneInputRef.current === inputRef.current.querySelector(INPUT_SELECTOR)) {\n return;\n }\n phoneInputRef.current = inputRef.current.querySelector(INPUT_SELECTOR);\n }, [inputRef, phoneInputRef]);\n\n /**\n * @function getPlaceholder\n * @description Get the placeholder text for the input.\n *\n * @since 5.5.0\n *\n * @return {string|undefined} Placeholder text.\n */\n var getPlaceholder = function getPlaceholder() {\n if (!usePlaceholder) {\n return undefined;\n }\n var exampleNumber = (0,getExampleNumber.getExampleNumber)(country === null || country === void 0 ? void 0 : country.value, examples_mobile_json[\"default\"]);\n if (!exampleNumber) {\n return undefined;\n }\n return international ? exampleNumber.formatInternational() : exampleNumber.formatNational();\n };\n\n /**\n * @function validatePhoneNumber\n * @description Validate the phone number.\n *\n * @since 5.5.0\n *\n */\n var validatePhoneNumber = function validatePhoneNumber() {\n // If validation is disabled, return early.\n if (!useValidation) {\n if (borderStyle !== BORDER_STYLE_DEFAULT) {\n setBorderStyle(BORDER_STYLE_DEFAULT);\n }\n return;\n }\n var asYouType = phoneNumber.asYouType,\n numberValue = phoneNumber.numberValue;\n var isPossible = asYouType === null || asYouType === void 0 ? void 0 : asYouType.isPossible();\n if (numberValue) {\n setBorderStyle(isPossible ? BORDER_STYLE_CORRECT : BORDER_STYLE_ERROR);\n } else {\n setBorderStyle(BORDER_STYLE_DEFAULT);\n }\n };\n\n /**\n * @function onCountryChange\n * @description Handle country change.\n *\n * @since 5.5.0\n *\n * @param {Event} event The event object.\n * @param {object} value The selected country object.\n */\n var onCountryChange = function onCountryChange(event, value) {\n setCountry(value);\n var _getFormattedInputTex2 = getFormattedInputText(phoneNumber.chars, 0, value === null || value === void 0 ? void 0 : value.value, international),\n asYouType = _getFormattedInputTex2.asYouType,\n formatted = _getFormattedInputTex2.formatted;\n var numberValue = (asYouType === null || asYouType === void 0 ? void 0 : asYouType.getNumberValue()) || '';\n setPhoneNumber({\n asYouType: asYouType,\n chars: (asYouType === null || asYouType === void 0 ? void 0 : asYouType.getChars()) || '',\n value: formatted.text,\n numberValue: numberValue\n });\n var changeValue = {\n country: value === null || value === void 0 ? void 0 : value.value,\n number: numberValue,\n isValid: (asYouType === null || asYouType === void 0 ? void 0 : asYouType.isPossible()) || false\n };\n onChange(changeValue, event);\n\n // Validate phone number after state updates.\n requestAnimationFrame(validatePhoneNumber);\n };\n\n /**\n * @function handleInputChange\n * @description Input change handler.\n *\n * @since 5.5.0\n *\n * @param {string} value The input value.\n * @param {string|undefined} operation The operation to perform.\n * @param {Event} event The event object.\n */\n var handleInputChange = function handleInputChange(value, operation, event) {\n var phoneInput = phoneInputRef.current;\n var caretPosition = getCaretPosition(phoneInput);\n var _getFormattedInputTex3 = getFormattedInputText(value, caretPosition, country === null || country === void 0 ? void 0 : country.value, international, operation),\n asYouType = _getFormattedInputTex3.asYouType,\n formatted = _getFormattedInputTex3.formatted;\n var numberValue = (asYouType === null || asYouType === void 0 ? void 0 : asYouType.getNumberValue()) || '';\n setPhoneNumber({\n asYouType: asYouType,\n chars: (asYouType === null || asYouType === void 0 ? void 0 : asYouType.getChars()) || '',\n value: formatted.text,\n numberValue: numberValue\n });\n var changeValue = {\n country: country === null || country === void 0 ? void 0 : country.value,\n number: numberValue,\n isValid: (asYouType === null || asYouType === void 0 ? void 0 : asYouType.isPossible()) || false\n };\n\n // requestAnimationFrame to set caret after rerender.\n requestAnimationFrame(function () {\n setCaretPosition(phoneInput, formatted.caret);\n });\n onChange(changeValue, event);\n };\n\n /**\n * @function onInputChange\n * @description Handle input change.\n *\n * @since 5.5.0\n *\n * @param {string} value The input value.\n * @param {Event} event The event object.\n */\n var onInputChange = function onInputChange(value, event) {\n handleInputChange(value, undefined, event);\n };\n\n /**\n * @function onInputKeyDown\n * @description Handle input key down.\n *\n * @since 5.5.0\n *\n * @param {Event} event The event object.\n */\n var onInputKeyDown = function onInputKeyDown(event) {\n if (inputAttributes !== null && inputAttributes !== void 0 && inputAttributes.onKeyDown) {\n var _inputAttributes$onKe;\n inputAttributes === null || inputAttributes === void 0 || (_inputAttributes$onKe = inputAttributes.onKeyDown) === null || _inputAttributes$onKe === void 0 || _inputAttributes$onKe.call(inputAttributes, event);\n }\n\n // If `onKeyDown()` handler above has called `event.preventDefault()` then ignore this `keydown` event.\n if (event.defaultPrevented) {\n return;\n }\n var phoneInput = phoneInputRef.current;\n if (phoneInput.hasAttribute('readonly')) {\n return;\n }\n var operation = event.key;\n if (!['Backspace', 'Delete'].includes(operation)) {\n return;\n }\n\n // Intercept this operation and perform it manually.\n event.preventDefault();\n var value = phoneInput.value;\n var selection = getSelection(phoneInput);\n\n // If a selection is made, get the text after erasing selection.\n // Else, perform the (character erasing) operation manually.\n var newValue = selection ? getTextAfterEraseSelection(value, selection) : value;\n var newOp = selection ? undefined : operation;\n handleInputChange(newValue, newOp, event);\n };\n\n /**\n * @function onInputBlur\n * @description Handle input blur.\n *\n * @since 5.5.0\n *\n * @param {Event} event The event object.\n */\n var onInputBlur = function onInputBlur(event) {\n if (inputAttributes !== null && inputAttributes !== void 0 && inputAttributes.onBlur) {\n var _inputAttributes$onBl;\n inputAttributes === null || inputAttributes === void 0 || (_inputAttributes$onBl = inputAttributes.onBlur) === null || _inputAttributes$onBl === void 0 || _inputAttributes$onBl.call(inputAttributes, event);\n }\n\n // If `onBlur()` handler above has called `event.preventDefault()` then ignore this `blur` event.\n if (event.defaultPrevented) {\n return;\n }\n validatePhoneNumber();\n };\n\n /**\n * @function onLabelClick\n * @description Handle label click.\n *\n * @since 5.5.0\n *\n */\n var onLabelClick = function onLabelClick() {\n var _dropdownRef$current;\n var dropdownTrigger = dropdownRef === null || dropdownRef === void 0 || (_dropdownRef$current = dropdownRef.current) === null || _dropdownRef$current === void 0 ? void 0 : _dropdownRef$current.querySelector(DROPDOWN_TRIGGER_SELECTOR);\n if (dropdownTrigger) {\n dropdownTrigger.focus();\n }\n };\n var helpTextId = getId(id, 'help-text');\n var labelId = getId(id, 'label');\n var componentProps = _objectSpread({\n className: (0,external_gform_libraries_.classnames)(_objectSpread((0,defineProperty[\"default\"])((0,defineProperty[\"default\"])({\n 'gform-phone': true,\n 'wp-exclude-emoji': true\n }, \"gform-phone--size-\".concat(size), true), 'gform-phone--disabled', disabled), (0,external_gform_utils_.spacerClasses)(spacing)), customClasses),\n id: id,\n style: {\n width: width ? \"\".concat(width, \"px\") : undefined\n }\n }, customAttributes);\n var labelProps = _objectSpread(_objectSpread({\n className: (0,external_gform_libraries_.classnames)(['gform-phone__label', 'gform-text', 'gform-text--color-port', 'gform-typography--size-text-sm', 'gform-typography--weight-medium'], labelClasses)\n }, labelAttributes), {}, {\n id: labelId,\n onClick: onLabelClick\n });\n var requiredLabelProps = _objectSpread(_objectSpread({\n size: 'text-sm',\n weight: 'medium'\n }, requiredLabelAttributes), {}, {\n customClasses: (0,external_gform_libraries_.classnames)(['gform-phone__required'], requiredLabelClasses)\n });\n var dropdownProps = _objectSpread(_objectSpread({\n countries: countries,\n hasSearch: true,\n popoverMaxHeight: 300\n }, dropdownAttributes), {}, {\n customClasses: (0,external_gform_libraries_.classnames)(['gform-phone__dropdown'], dropdownClasses),\n disabled: disabled,\n i18n: i18n,\n id: getId(id, 'dropdown'),\n language: language,\n onChange: onCountryChange,\n preferredCountries: preferredCountries,\n searchAttributes: _objectSpread({\n wrapperClasses: ['gform-phone__dropdown-search-wrapper']\n }, (dropdownAttributes === null || dropdownAttributes === void 0 ? void 0 : dropdownAttributes.searchAttributes) || {}),\n searchClasses: ['gform-phone__dropdown-search'],\n size: size,\n triggerAttributes: {\n 'aria-labelledby': label ? labelId : undefined\n },\n triggerClasses: ['gform-phone__dropdown-trigger']\n });\n var inputProps = _objectSpread(_objectSpread({}, inputAttributes), {}, {\n borderStyle: borderStyle,\n customAttributes: {\n 'aria-describedby': helpTextAttributes.content && borderStyle === BORDER_STYLE_ERROR ? helpTextId : undefined,\n 'aria-labelledby': label ? labelId : undefined\n },\n customClasses: (0,external_gform_libraries_.classnames)(['gform-phone__input'], inputClasses),\n directControlled: true,\n disabled: disabled,\n id: getId(id, 'input'),\n onBlur: onInputBlur,\n onChange: onInputChange,\n onKeyDown: onInputKeyDown,\n placeholder: getPlaceholder(),\n required: required,\n size: \"size-\".concat(size),\n type: 'tel',\n value: phoneNumber.value,\n wrapperClasses: (0,external_gform_libraries_.classnames)({\n 'gform-phone__input-wrapper': true\n }, (inputAttributes === null || inputAttributes === void 0 ? void 0 : inputAttributes.wrapperClasses) || [])\n });\n var helpTextProps = _objectSpread(_objectSpread({\n size: 'text-xs',\n weight: 'regular'\n }, helpTextAttributes), {}, {\n customClasses: (0,external_gform_libraries_.classnames)(['gform-phone__help-text'], helpTextClasses),\n id: helpTextId\n });\n return /*#__PURE__*/external_gform_libraries_.React.createElement(\"div\", (0,esm_extends[\"default\"])({}, componentProps, {\n ref: wrapperRef\n }), label && /*#__PURE__*/external_gform_libraries_.React.createElement(\"div\", labelProps, label, required && /*#__PURE__*/external_gform_libraries_.React.createElement(HelpText[\"default\"], requiredLabelProps)), /*#__PURE__*/external_gform_libraries_.React.createElement(\"div\", {\n className: \"gform-phone__wrapper\"\n }, /*#__PURE__*/external_gform_libraries_.React.createElement(CountryDropdown[\"default\"], (0,esm_extends[\"default\"])({}, dropdownProps, {\n ref: dropdownRef\n })), /*#__PURE__*/external_gform_libraries_.React.createElement(Input[\"default\"], (0,esm_extends[\"default\"])({}, inputProps, {\n ref: inputRef\n }))), borderStyle === BORDER_STYLE_ERROR && /*#__PURE__*/external_gform_libraries_.React.createElement(HelpText[\"default\"], helpTextProps));\n});\nPhoneComponent.propTypes = {\n countries: external_gform_libraries_.PropTypes.array,\n customAttributes: external_gform_libraries_.PropTypes.object,\n customClasses: external_gform_libraries_.PropTypes.oneOfType([external_gform_libraries_.PropTypes.string, external_gform_libraries_.PropTypes.array, external_gform_libraries_.PropTypes.object]),\n disabled: external_gform_libraries_.PropTypes.bool,\n dropdownAttributes: external_gform_libraries_.PropTypes.object,\n dropdownClasses: external_gform_libraries_.PropTypes.oneOfType([external_gform_libraries_.PropTypes.string, external_gform_libraries_.PropTypes.array, external_gform_libraries_.PropTypes.object]),\n helpTextAttributes: external_gform_libraries_.PropTypes.object,\n helpTextClasses: external_gform_libraries_.PropTypes.oneOfType([external_gform_libraries_.PropTypes.string, external_gform_libraries_.PropTypes.array, external_gform_libraries_.PropTypes.object]),\n i18n: external_gform_libraries_.PropTypes.object,\n id: external_gform_libraries_.PropTypes.string,\n inputAttributes: external_gform_libraries_.PropTypes.object,\n inputClasses: external_gform_libraries_.PropTypes.oneOfType([external_gform_libraries_.PropTypes.string, external_gform_libraries_.PropTypes.array, external_gform_libraries_.PropTypes.object]),\n international: external_gform_libraries_.PropTypes.bool,\n label: external_gform_libraries_.PropTypes.string,\n labelAttributes: external_gform_libraries_.PropTypes.object,\n labelClasses: external_gform_libraries_.PropTypes.oneOfType([external_gform_libraries_.PropTypes.string, external_gform_libraries_.PropTypes.array, external_gform_libraries_.PropTypes.object]),\n language: external_gform_libraries_.PropTypes.string,\n onChange: external_gform_libraries_.PropTypes.func,\n preferredCountries: external_gform_libraries_.PropTypes.array,\n required: external_gform_libraries_.PropTypes.bool,\n requiredLabelAttributes: external_gform_libraries_.PropTypes.object,\n requiredLabelClasses: external_gform_libraries_.PropTypes.oneOfType([external_gform_libraries_.PropTypes.string, external_gform_libraries_.PropTypes.array, external_gform_libraries_.PropTypes.object]),\n size: external_gform_libraries_.PropTypes.oneOf(['r', 'l', 'xl']),\n spacing: external_gform_libraries_.PropTypes.oneOfType([external_gform_libraries_.PropTypes.string, external_gform_libraries_.PropTypes.number, external_gform_libraries_.PropTypes.array, external_gform_libraries_.PropTypes.object]),\n usePlaceholder: external_gform_libraries_.PropTypes.bool,\n useValidation: external_gform_libraries_.PropTypes.bool,\n width: external_gform_libraries_.PropTypes.number\n};\nvar PhoneComponentWithId = forwardRef(function (props, ref) {\n var defaultProps = {\n countries: [],\n customAttributes: {},\n customClasses: [],\n disabled: false,\n dropdownAttributes: {},\n dropdownClasses: [],\n helpTextAttributes: {},\n helpTextClasses: [],\n i18n: {},\n id: '',\n inputAttributes: {},\n inputClasses: [],\n international: true,\n label: '',\n labelAttributes: {},\n labelClasses: [],\n language: 'en',\n onChange: function onChange() {},\n preferredCountries: [],\n required: false,\n requiredLabelAttributes: {},\n requiredLabelClasses: [],\n size: 'r',\n spacing: '',\n usePlaceholder: true,\n useValidation: false,\n width: 0\n };\n var combinedProps = _objectSpread(_objectSpread({}, defaultProps), props);\n var idProp = combinedProps.id;\n var idProviderProps = {\n id: idProp\n };\n return /*#__PURE__*/external_gform_libraries_.React.createElement(external_gform_utils_react_.IdProvider, idProviderProps, /*#__PURE__*/external_gform_libraries_.React.createElement(PhoneComponent, (0,esm_extends[\"default\"])({}, combinedProps, {\n ref: ref\n })));\n});\n/* harmony default export */ var Phone_PhoneComponent = (PhoneComponentWithId);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vY29tcG9uZW50cy9yZWFjdC9hZG1pbi9tb2R1bGVzL1Bob25lL1Bob25lQ29tcG9uZW50LmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQThDO0FBRTlDLElBQU1DLDBCQUEwQixHQUFHLFVBQVU7O0FBRTdDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ08sSUFBTUMsU0FBUyxHQUFHLFNBQVpBLFNBQVNBLENBQUEsRUFBUztFQUM5QjtFQUNBLElBQUssT0FBT0MsU0FBUyxLQUFLLFdBQVcsRUFBRztJQUN2QyxPQUFPRiwwQkFBMEIsQ0FBQ0csSUFBSSxDQUFFRCxTQUFTLENBQUNFLFNBQVUsQ0FBQztFQUM5RDtFQUVBLE9BQU8sS0FBSztBQUNiLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ08sSUFBTUMsZ0JBQWdCLEdBQUcsU0FBbkJBLGdCQUFnQkEsQ0FBS0MsT0FBTyxFQUFNO0VBQzlDLE9BQU9BLE9BQU8sQ0FBQ0MsY0FBYztBQUM5QixDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTyxJQUFNQyxnQkFBZ0IsR0FBRyxTQUFuQkEsZ0JBQWdCQSxDQUFLRixPQUFPLEVBQUVHLGFBQWEsRUFBTTtFQUM3RDtFQUNBLElBQUtBLGFBQWEsS0FBS0MsU0FBUyxFQUFHO0lBQ2xDO0VBQ0Q7O0VBRUE7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBLElBQUtULFNBQVMsQ0FBQyxDQUFDLEVBQUc7SUFDbEJVLFVBQVUsQ0FBRTtNQUFBLE9BQU1MLE9BQU8sQ0FBQ00saUJBQWlCLENBQUVILGFBQWEsRUFBRUEsYUFBYyxDQUFDO0lBQUEsR0FBRSxDQUFFLENBQUM7RUFDakYsQ0FB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QkFBQSxDQUFBMkosYUFBQSxDQUFDeEosc0NBQVUsRUFBTXNLLGVBQWUsZUFDL0J6SywrQkFBQSxDQUFBMkosYUFBQSxDQUFDbEksY0FBYyxFQUFBbUksMEJBQUEsS0FBTVcsYUFBYTtJQUFHNUksR0FBRyxFQUFHQTtFQUFLLEVBQUUsQ0FDdkMsQ0FBQztBQUVmLENBQUUsQ0FBQztBQUVILHlEQUFlMEksb0JBQW9CIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vZ3Jhdml0eWZvcm1zLy4uL2NvbXBvbmVudHMvcmVhY3QvYWRtaW4vbW9kdWxlcy9QaG9uZS91dGlscy5qcz9iMGM5Iiwid2VicGFjazovL2dyYXZpdHlmb3Jtcy8uLi9jb21wb25lbnRzL3JlYWN0L2FkbWluL21vZHVsZXMvUGhvbmUvUGhvbmVDb21wb25lbnQuanM/YjQzNiJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBzbHVnaWZ5IH0gZnJvbSAnQGdyYXZpdHlmb3Jtcy91dGlscyc7XG5cbmNvbnN0IEFORFJPSURfVVNFUl9BR0VOVF9SRUdfRVhQID0gL0FuZHJvaWQvaTtcblxuLyoqXG4gKiBAZnVuY3Rpb24gaXNBbmRyb2lkXG4gKiBAZGVzY3JpcHRpb24gQ2hlY2tzIGlmIHRoZSB1c2VyIGFnZW50IGlzIEFuZHJvaWQuXG4gKiAgICAgICAgICAgICAgQ29waWVkIGZyb20gdGhlIG9yaWdpbmFsIGZ1bmN0aW9uIGBpc0FuZHJvaWRgIGZyb20gYGlucHV0LWZvcm1hdGAgcGFja2FnZS5cbiAqICAgICAgICAgICAgICBUaGUgb3JpZ2luYWwgZnVuY3Rpb24gaXMgbm90IGV4cG9ydGVkLCBzbyBpdCB3YXMgY29waWVkIGhlcmUuXG4gKlxuICogQHNpbmNlIDUuNS4wXG4gKlxuICogQHJldHVybiB7Ym9vbGVhbn0gV2hldGhlciB0aGUgdXNlciBhZ2VudCBpcyBBbmRyb2lkLlxuICovXG5leHBvcnQgY29uc3QgaXNBbmRyb2lkID0gKCkgPT4ge1xuXHQvLyBgbmF2aWdhdG9yYCBpcyBub3QgZGVmaW5lZCB3aGVuIHJ1bm5pbmcgbW9jaGEgdGVzdHMuXG5cdGlmICggdHlwZW9mIG5hdmlnYXRvciAhPT0gJ3VuZGVmaW5lZCcgKSB7XG5cdFx0cmV0dXJuIEFORFJPSURfVVNFUl9BR0VOVF9SRUdfRVhQLnRlc3QoIG5hdmlnYXRvci51c2VyQWdlbnQgKTtcblx0fVxuXG5cdHJldHVybiBmYWxzZTtcbn07XG5cbi8qKlxuICogQGZ1bmN0aW9uIGdldENhcmV0UG9zaXRpb25cbiAqIEBkZXNjcmlwdGlvbiBHZXRzIHRoZSBjYXJldCBwb3NpdGlvbi5cbiAqICAgICAgICAgICAgICBDb3BpZWQgZnJvbSB0aGUgb3JpZ2luYWwgZnVuY3Rpb24gYGdldENhcmV0UG9zaXRpb25gIGZyb20gYGlucHV0LWZvcm1hdGAgcGFja2FnZS5cbiAqICAgICAgICAgICAgICBUaGUgb3JpZ2luYWwgZnVuY3Rpb24gaXMgbm90IGV4cG9ydGVkLCBzbyBpdCB3YXMgY29waWVkIGhlcmUuXG4gKlxuICogQHNpbmNlIDUuNS4wXG4gKlxuICogQHBhcmFtIHtIVE1MRWxlbWVudH0gZWxlbWVudCBUaGUgZWxlbWVudCB0byBnZXQgdGhlIGNhcmV0IHBvc2l0aW9uIGZyb20uXG4gKlxuICogQHJldHVybiB7bnVtYmVyfSBUaGUgY2FyZXQgcG9zaXRpb24uXG4gKi9cbmV4cG9ydCBjb25zdCBnZXRDYXJldFBvc2l0aW9uID0gKCBlbGVtZW50ICkgPT4ge1xuXHRyZXR1cm4gZWxlbWVudC5zZWxlY3Rpb25TdGFydDtcbn07XG5cbi8qKlxuICogQGZ1bmN0aW9uIHNldENhcmV0UG9zaXRpb25cbiAqIEBkZXNjcmlwdGlvbiBTZXRzIHRoZSBjYXJldCBwb3NpdGlvbi5cbiAqICAgICAgICAgICAgICBDb3BpZWQgZnJvbSB0aGUgb3JpZ2luYWwgZnVuY3Rpb24gYHNldENhcmV0UG9zaXRpb25gIGZyb20gYGlucHV0LWZvcm1hdGAgcGFja2FnZS5cbiAqICAgICAgICAgICAgICBUaGUgb3JpZ2luYWwgZnVuY3Rpb24gaXMgbm90IGV4cG9ydGVkLCBzbyBpdCB3YXMgY29waWVkIGhlcmUuXG4gKlxuICogQHNpbmNlIDUuNS4wXG4gKlxuICogQHBhcmFtIHtIVE1MRWxlbWVudH0gZWxlbWVudCAgICAgICBUaGUgZWxlbWVudCB0byBzZXQgdGhlIGNhcmV0IHBvc2l0aW9uIG9uLlxuICogQHBhcmFtIHtudW1iZXJ9ICAgICAgY2FyZXRQb3NpdGlvbiBUaGUgY2FyZXQgcG9zaXRpb24gdG8gc2V0LlxuICovXG5leHBvcnQgY29uc3Qgc2V0Q2FyZXRQb3NpdGlvbiA9ICggZWxlbWVudCwgY2FyZXRQb3NpdGlvbiApID0+IHtcblx0Ly8gU2FuaXR5IGNoZWNrXG5cdGlmICggY2FyZXRQb3NpdGlvbiA9PT0gdW5kZWZpbmVkICkge1xuXHRcdHJldHVybjtcblx0fVxuXG5cdC8vIFNldCBjYXJldCBwb3NpdGlvbi5cblx0Ly8gVGhlcmUgaGFzIGJlZW4gYW4gaXNzdWUgd2l0aCBjYXJldCBwb3NpdGlvbmluZyBvbiBBbmRyb2lkIGRldmljZXMuXG5cdC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9jYXRhbXBoZXRhbWluZS9pbnB1dC1mb3JtYXQvaXNzdWVzLzJcblx0Ly8gSSB3YXMgcmV2aXNpdGluZyB0aGlzIGlzc3VlIGFuZCBsb29rZWQgZm9yIHNpbWlsYXIgaXNzdWVzIGluIG90aGVyIGxpYnJhcmllcy5cblx0Ly8gRm9yIGV4YW1wbGUsIHRoZXJlJ3MgW2B0ZXh0LW1hc2tgXShodHRwczovL2dpdGh1Yi5jb20vdGV4dC1tYXNrL3RleHQtbWFzaykgbGlicmFyeS5cblx0Ly8gVGhleSd2ZSBoYWQgZXhhY3RseSB0aGUgc2FtZSBpc3N1ZSB3aGVuIHRoZSBjYXJldCBzZWVtaW5nbHkgcmVmdXNlZCB0byBiZSByZXBvc2l0aW9uZWQgcHJvZ3JhbW1hdGljYWxseS5cblx0Ly8gVGhlIHN5bXB0b21zIHdlcmUgdGhlIHNhbWU6IHdoZW5ldmVyIHRoZSBjYXJldCBwYXNzZWQgdGhyb3VnaCBhIG5vbi1kaWdpdCBjaGFyYWN0ZXIgb2YgYSBtYXNrIChhIHdoaXRlc3BhY2UsIGEgYnJhY2tldCwgYSBkYXNoLCBldGMpLCBpdCBsb29rZWQgYXMgaWYgaXQgcGxhY2VkIGl0c2VsZiBvbmUgY2hhcmFjdGVyIGJlZm9yZSBpdHMgY29ycmVjdCBwb3NpdGlvbi5cblx0Ly8gaHR0cHM6Ly9naXRodWIuY29tL3RleHQtbWFzay90ZXh0LW1hc2svaXNzdWVzLzMwMFxuXHQvLyBUaGV5IHNlZW0gdG8gaGF2ZSBmb3VuZCBhIGJhc2ljIGZpeCBmb3IgaXQ6IGNhbGxpbmcgYGlucHV0LnNldFNlbGVjdGlvblJhbmdlKClgIGluIGEgdGltZW91dCByYXRoZXIgdGhhbiBpbnN0YW50bHkgZm9yIEFuZHJvaWQgZGV2aWNlcy5cblx0Ly8gaHR0cHM6Ly9naXRodWIuY29tL3RleHQtbWFzay90ZXh0LW1hc2svcHVsbC80MDAvZmlsZXNcblx0Ly8gSSd2ZSBpbXBsZW1lbnRlZCB0aGUgc2FtZSB3b3JrYXJvdW5kIGhlcmUuXG5cdGlmICggaXNBbmRyb2lkKCkgKSB7XG5cdFx0c2V0VGltZW91dCggKCkgPT4gZWxlbWVudC5zZXRTZWxlY3Rpb25SYW5nZSggY2FyZXRQb3NpdGlvbiwgY2FyZXRQb3NpdGlvbiApLCAwICk7XG5cdH0gZWxzZSB7XG5cdFx0ZWxlbWVudC5zZXRTZWxlY3Rpb25SYW5nZSggY2FyZXRQb3NpdGlvbiwgY2FyZXRQb3NpdGlvbiApO1xuXHR9XG59O1xuXG4vKipcbiAqIEBmdW5jdGlvbiBnZXRUZXh0QWZ0ZXJFcmFzZVNlbGVjdGlvblxuICogQGRlc2NyaXB0aW9uIEdldHMgdGhlIHRleHQgYWZ0ZXIgZXJhc2luZyB0aGUgc2VsZWN0aW9uLlxuICogICAgICAgICAgICAgIE1vZGlmaWVkIGZyb20gdGhlIG9yaWdpbmFsIGZ1bmN0aW9uIGBlcmFzZVNlbGVjdGlvbmAgZnJvbSBgaW5wdXQtZm9ybWF0YCBwYWNrYWdlLlxuICogICAgICAgICAgICAgIFRoZSBvcmlnaW5hbCBmdW5jdGlvbiBpcyBub3QgZXhwb3J0ZWQsIHNvIGl0IHdhcyBjb3BpZWQgaGVyZS5cbiAqXG4gKiBAc2luY2UgNS41LjBcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gdGV4dCAgICAgIFRoZSB0ZXh0IHRvIGVyYXNlIHRoZSBzZWxlY3Rpb24gZnJvbS5cbiAqIEBwYXJhbSB7b2JqZWN0fSBzZWxlY3Rpb24gVGhlIHNlbGVjdGlvbiB0byBlcmFzZS4gVGhlIHNlbGVjdGlvbiBpcyBhbiBvYmplY3Qgd2l0aCBgc3RhcnRgIGFuZCBgZW5kYCBwcm9wZXJ0aWVzLlxuICpcbiAqIEByZXR1cm4ge3N0cmluZ30gVGhlIHRleHQgYWZ0ZXIgZXJhc2luZyB0aGUgc2VsZWN0aW9uLlxuICovXG5leHBvcnQgY29uc3QgZ2V0VGV4dEFmdGVyRXJhc2VTZWxlY3Rpb24gPSAoIHRleHQsIHNlbGVjdGlvbiApID0+IHtcblx0Y29uc3Qgc3RhcnQgPSBNYXRoLm1pbiggc2VsZWN0aW9uLnN0YXJ0LCBzZWxlY3Rpb24uZW5kICk7XG5cdGNvbnN0IGVuZCA9IE1hdGgubWF4KCBzZWxlY3Rpb24uc3RhcnQsIHNlbGVjdGlvbi5lbmQgKTtcblx0cmV0dXJuIHRleHQuc2xpY2UoIDAsIHN0YXJ0ICkgKyB0ZXh0LnNsaWNlKCBlbmQgKTtcbn07XG5cbi8qKlxuICogQGZ1bmN0aW9uIGdldFNlbGVjdGlvblxuICogQGRlc2NyaXB0aW9uIEdldHMgdGhlIHNlbGVjdGlvbi5cbiAqICAgICAgICAgICAgICBDb3BpZWQgZnJvbSB0aGUgb3JpZ2luYWwgZnVuY3Rpb24gYGdldFNlbGVjdGlvbmAgZnJvbSBgaW5wdXQtZm9ybWF0YCBwYWNrYWdlLlxuICogICAgICAgICAgICAgIFRoZSBvcmlnaW5hbCBmdW5jdGlvbiBpcyBub3QgZXhwb3J0ZWQsIHNvIGl0IHdhcyBjb3BpZWQgaGVyZS5cbiAqXG4gKiBAc2luY2UgNS41LjBcbiAqXG4gKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBpbnB1dCBUaGUgaW5wdXQgZWxlbWVudC5cbiAqXG4gKiBAcmV0dXJuIHtvYmplY3R8dW5kZWZpbmVkfSBUaGUgc2VsZWN0aW9uIG9iamVjdCB3aXRoIGBzdGFydGAgYW5kIGBlbmRgIHByb3BlcnRpZXMuXG4gKi9cbmV4cG9ydCBjb25zdCBnZXRTZWxlY3Rpb24gPSAoIGlucHV0ICkgPT4ge1xuXHQvLyBJZiBubyBzZWxlY3Rpb24sIHJldHVybiBub3RoaW5nXG5cdGlmICggaW5wdXQuc2VsZWN0aW9uU3RhcnQgPT09IGlucHV0LnNlbGVjdGlvbkVuZCApIHtcblx0XHRyZXR1cm47XG5cdH1cblxuXHRjb25zdCBzdGFydCA9IE1hdGgubWluKCBpbnB1dC5zZWxlY3Rpb25TdGFydCwgaW5wdXQuc2VsZWN0aW9uRW5kICk7XG5cdGNvbnN0IGVuZCA9IE1hdGgubWF4KCBpbnB1dC5zZWxlY3Rpb25TdGFydCwgaW5wdXQuc2VsZWN0aW9uRW5kICk7XG5cdHJldHVybiB7IHN0YXJ0LCBlbmQgfTtcbn07XG5cbi8qKlxuICogQGZ1bmN0aW9uIGdldElkXG4gKiBAZGVzY3JpcHRpb24gR2V0IHRoZSBpZCBmcm9tIHRoZSBwcmVmaXggYW5kIGtleSBwcm92aWRlZC5cbiAqXG4gKiBAc2luY2UgNS41LjBcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gcHJlZml4IFRoZSBpZCBwcmVmaXguXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5ICAgIFRoZSBpZCBrZXkuXG4gKlxuICogQHJldHVybiB7c3RyaW5nfSBUaGUgaWQuXG4gKi9cbmV4cG9ydCBjb25zdCBnZXRJZCA9ICggcHJlZml4LCBrZXkgKSA9PiBzbHVnaWZ5KCBgJHsgcHJlZml4IH0tJHsga2V5IH1gICk7XG5cbi8qKlxuICogQGZ1bmN0aW9uIGUxNjRUb051bWJlclxuICogQGRlc2NyaXB0aW9uIENvbnZlcnQgYW4gRS4xNjQgZm9ybWF0dGVkIHBob25lIG51bWJlciB0byBhIG51bWJlci5cbiAqXG4gKiBAc2luY2UgNS41LjBcbiAqXG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IElmIHRoZSBpbnB1dCBpcyBub3QgYSBzdHJpbmcuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGUxNjQgVGhlIEUuMTY0IGZvcm1hdHRlZCBwaG9uZSBudW1iZXIuXG4gKlxuICogQHJldHVybiB7c3RyaW5nfSBUaGUgcGhvbmUgbnVtYmVyLlxuICovXG5leHBvcnQgY29uc3QgZTE2NFRvTnVtYmVyID0gKCBlMTY0ICkgPT4ge1xuXHRpZiAoIHR5cGVvZiBlMTY0ICE9PSAnc3RyaW5nJyApIHtcblx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKCAnSW5wdXQgbXVzdCBiZSBhIHN0cmluZycgKTtcblx0fVxuXHRyZXR1cm4gZTE2NC5yZXBsYWNlKCAvXlxcKy8sICcnICk7XG59O1xuXG4vKipcbiAqIEBmdW5jdGlvbiBudW1iZXJUb0UxNjRcbiAqIEBkZXNjcmlwdGlvbiBDb252ZXJ0IGEgcGhvbmUgbnVtYmVyIHRvIEUuMTY0IGZvcm1hdC5cbiAqXG4gKiBAc2luY2UgNS41LjBcbiAqXG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IElmIHRoZSBpbnB1dCBpcyBub3QgYSBzdHJpbmcuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IG51bWJlciBUaGUgcGhvbmUgbnVtYmVyLlxuICpcbiAqIEByZXR1cm4ge3N0cmluZ30gVGhlIEUuMTY0IGZvcm1hdHRlZCBwaG9uZSBudW1iZXIuXG4gKi9cbmV4cG9ydCBjb25zdCBudW1iZXJUb0UxNjQgPSAoIG51bWJlciApID0+IHtcblx0aWYgKCB0eXBlb2YgbnVtYmVyICE9PSAnc3RyaW5nJyApIHtcblx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKCAnSW5wdXQgbXVzdCBiZSBhIHN0cmluZycgKTtcblx0fVxuXHRyZXR1cm4gbnVtYmVyLnN0YXJ0c1dpdGgoICcrJyApXG5cdFx0PyBudW1iZXJcblx0XHQ6IGArJHsgbnVtYmVyIH1gO1xufTtcbiIsImltcG9ydCB7IFJlYWN0LCBQcm9wVHlwZXMsIGNsYXNzbmFtZXMgfSBmcm9tICdAZ3Jhdml0eWZvcm1zL2xpYnJhcmllcyc7XG5pbXBvcnQge1xuXHRJZFByb3ZpZGVyLFxuXHR1c2VJZENvbnRleHQsXG5cdHVzZVBob25lSW5wdXRGb3JtYXRVdGlsc0NvbnRleHQgYXMgdXNlUGhvbmVJbnB1dEZvcm1hdFV0aWxzLFxufSBmcm9tICdAZ3Jhdml0eWZvcm1zL3JlYWN0LXV0aWxzJztcbmltcG9ydCB7IHNwYWNlckNsYXNzZXMgfSBmcm9tICdAZ3Jhdml0eWZvcm1zL3V0aWxzJztcbmltcG9ydCBleGFtcGxlTnVtYmVycyBmcm9tICdsaWJwaG9uZW51bWJlci1qcy9tb2JpbGUvZXhhbXBsZXMnO1xuaW1wb3J0IHsgZ2V0RXhhbXBsZU51bWJlciB9IGZyb20gJ2xpYnBob25lbnVtYmVyLWpzJztcbmltcG9ydCB7IGdldFNlbGVjdGVkSXRlbUZyb21WYWx1ZSB9IGZyb20gJy4uL0Ryb3Bkb3duL3V0aWxzJztcbmltcG9ydCBDb3VudHJ5RHJvcGRvd24gZnJvbSAnLi4vRHJvcGRvd24vQ291bnRyeURyb3Bkb3duJztcbmltcG9ydCB7IGdldENvdW50cmllc0xpc3RJdGVtc0Zyb21Jc29zLCBzb3J0UHJlZmVycmVkQ291bnRyaWVzIH0gZnJvbSAnLi4vRHJvcGRvd24vQ291bnRyeURyb3Bkb3duL3V0aWxzJztcbmltcG9ydCBIZWxwVGV4dCBmcm9tICcuLi8uLi9lbGVtZW50cy9IZWxwVGV4dCc7XG5pbXBvcnQgSW5wdXQgZnJvbSAnLi4vLi4vZWxlbWVudHMvSW5wdXQnO1xuaW1wb3J0IHtcblx0Z2V0Q2FyZXRQb3NpdGlvbixcblx0c2V0Q2FyZXRQb3NpdGlvbixcblx0Z2V0VGV4dEFmdGVyRXJhc2VTZWxlY3Rpb24sXG5cdGdldFNlbGVjdGlvbixcblx0Z2V0SWQsXG59IGZyb20gJy4vdXRpbHMnO1xuXG5jb25zdCB7IHVzZUVmZmVjdCwgdXNlUmVmLCB1c2VTdGF0ZSwgZm9yd2FyZFJlZiB9ID0gUmVhY3Q7XG5cbmNvbnN0IElOUFVUX1NFTEVDVE9SID0gJy5nZm9ybS1pbnB1dCc7XG5jb25zdCBEUk9QRE9XTl9UUklHR0VSX1NFTEVDVE9SID0gJy5nZm9ybS1kcm9wZG93bl9fdHJpZ2dlcic7XG5jb25zdCBCT1JERVJfU1RZTEVfREVGQVVMVCA9ICdkZWZhdWx0JztcbmNvbnN0IEJPUkRFUl9TVFlMRV9FUlJPUiA9ICdlcnJvcic7XG5jb25zdCBCT1JERVJfU1RZTEVfQ09SUkVDVCA9ICdjb3JyZWN0JztcblxuY29uc3QgUGhvbmVDb21wb25lbnQgPSBmb3J3YXJkUmVmKCAoIHByb3BzLCByZWYgKSA9PiB7XG5cdGNvbnN0IHtcblx0XHRjb3VudHJpZXMsXG5cdFx0Y3VzdG9tQXR0cmlidXRlcyxcblx0XHRjdXN0b21DbGFzc2VzLFxuXHRcdGRpc2FibGVkLFxuXHRcdGRyb3Bkb3duQXR0cmlidXRlcyxcblx0XHRkcm9wZG93bkNsYXNzZXMsXG5cdFx0aGVscFRleHRBdHRyaWJ1dGVzLFxuXHRcdGhlbHBUZXh0Q2xhc3Nlcyxcblx0XHRpMThuLFxuXHRcdGlucHV0QXR0cmlidXRlcyxcblx0XHRpbnB1dENsYXNzZXMsXG5cdFx0aW50ZXJuYXRpb25hbCxcblx0XHRsYWJlbCxcblx0XHRsYWJlbEF0dHJpYnV0ZXMsXG5cdFx0bGFiZWxDbGFzc2VzLFxuXHRcdGxhbmd1YWdlLFxuXHRcdG9uQ2hhbmdlLFxuXHRcdHByZWZlcnJlZENvdW50cmllcyxcblx0XHRyZXF1aXJlZCxcblx0XHRyZXF1aXJlZExhYmVsQXR0cmlidXRlcyxcblx0XHRyZXF1aXJlZExhYmVsQ2xhc3Nlcyxcblx0XHRzaXplLFxuXHRcdHNwYWNpbmcsXG5cdFx0dXNlUGxhY2Vob2xkZXIsXG5cdFx0dXNlVmFsaWRhdGlvbixcblx0XHR3aWR0aCxcblx0fSA9IHByb3BzO1xuXG5cdC8vIFJlZnNcblx0Y29uc3QgaW50ZXJuYWxSZWYgPSB1c2VSZWYoIG51bGwgKTtcblx0Y29uc3Qgd3JhcHBlclJlZiA9IHJlZiB8fCBpbnRlcm5hbFJlZjtcblx0Y29uc3QgZHJvcGRvd25SZWYgPSB1c2VSZWYoIG51bGwgKTtcblx0Y29uc3QgaW5wdXRSZWYgPSB1c2VSZWYoIG51bGwgKTtcblx0Y29uc3QgcGhvbmVJbnB1dFJlZiA9IHVzZVJlZiggbnVsbCApO1xuXG5cdGNvbnN0IGlkID0gdXNlSWRDb250ZXh0KCk7XG5cdGNvbnN0IHsgaW5wdXRGb3JtYXRVdGlscyB9ID0gdXNlUGhvbmVJbnB1dEZvcm1hdFV0aWxzKCk7XG5cdGNvbnN0IHsgZ2V0Rm9ybWF0dGVkSW5wdXRUZXh0IH0gPSBpbnB1dEZvcm1hdFV0aWxzO1xuXG5cdGNvbnN0IFsgY291bnRyeSwgc2V0Q291bnRyeSBdID0gdXNlU3RhdGUoICgpID0+IHtcblx0XHRjb25zdCBjb3VudHJpZXNMaXN0SXRlbXMgPSBnZXRDb3VudHJpZXNMaXN0SXRlbXNGcm9tSXNvcyhcblx0XHRcdGNvdW50cmllcyxcblx0XHRcdGxhbmd1YWdlLFxuXHRcdFx0aTE4bixcblx0XHRcdHtcblx0XHRcdFx0c2hvd0ZsYWc6IGRyb3Bkb3duQXR0cmlidXRlcz8uc2hvd0ZsYWcgfHwgdHJ1ZSxcblx0XHRcdFx0c2hvd0NhbGxpbmdDb2RlOiBkcm9wZG93bkF0dHJpYnV0ZXM/LnNob3dDYWxsaW5nQ29kZSB8fCB0cnVlLFxuXHRcdFx0fSxcblx0XHQpO1xuXHRcdGlmICggZHJvcGRvd25BdHRyaWJ1dGVzPy5pbml0aWFsVmFsdWUgKSB7XG5cdFx0XHRyZXR1cm4gZ2V0U2VsZWN0ZWRJdGVtRnJvbVZhbHVlKCBkcm9wZG93bkF0dHJpYnV0ZXM/LmluaXRpYWxWYWx1ZSwgY291bnRyaWVzTGlzdEl0ZW1zLCBmYWxzZSApO1xuXHRcdH1cblx0XHRpZiAoIHByZWZlcnJlZENvdW50cmllcy5sZW5ndGggKSB7XG5cdFx0XHRjb25zdCBwcmVmZXJyZWQgPSBzb3J0UHJlZmVycmVkQ291bnRyaWVzKCBjb3VudHJpZXNMaXN0SXRlbXMsIHByZWZlcnJlZENvdW50cmllcywgaTE4biApO1xuXHRcdFx0aWYgKCBwcmVmZXJyZWQ/LlsgMCBdPy50eXBlID09PSAnZ3JvdXAnICkge1xuXHRcdFx0XHRyZXR1cm4gcHJlZmVycmVkPy5bIDAgXT8uaXRlbXM/LlsgMCBdIHx8IHt9O1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHByZWZlcnJlZD8uWyAwIF07XG5cdFx0fVxuXHRcdGlmICggY291bnRyaWVzTGlzdEl0ZW1zPy5bIDAgXSApIHtcblx0XHRcdHJldHVybiBjb3VudHJpZXNMaXN0SXRlbXM/LlsgMCBdO1xuXHRcdH1cblx0XHRyZXR1cm4ge307XG5cdH0gKTtcblx0Y29uc3QgWyBwaG9uZU51bWJlciwgc2V0UGhvbmVOdW1iZXIgXSA9IHVzZVN0YXRlKCAoKSA9PiB7XG5cdFx0aWYgKCBpbnB1dEF0dHJpYnV0ZXM/LnZhbHVlICkge1xuXHRcdFx0Y29uc3QgeyBhc1lvdVR5cGUsIGZvcm1hdHRlZCB9ID0gZ2V0Rm9ybWF0dGVkSW5wdXRUZXh0KCBpbnB1dEF0dHJpYnV0ZXM/LnZhbHVlLCAwLCBjb3VudHJ5Py52YWx1ZSwgaW50ZXJuYXRpb25hbCApO1xuXHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0YXNZb3VUeXBlLFxuXHRcdFx0XHRjaGFyczogYXNZb3VUeXBlPy5nZXRDaGFycygpIHx8ICcnLFxuXHRcdFx0XHR2YWx1ZTogZm9ybWF0dGVkLnRleHQsXG5cdFx0XHRcdG51bWJlclZhbHVlOiBhc1lvdVR5cGU/LmdldE51bWJlclZhbHVlKCkgfHwgJycsXG5cdFx0XHR9O1xuXHRcdH1cblx0XHRyZXR1cm4ge1xuXHRcdFx0YXNZb3VUeXBlOiBudWxsLFxuXHRcdFx0Y2hhcnM6ICcnLFxuXHRcdFx0dmFsdWU6ICcnLFxuXHRcdFx0bnVtYmVyVmFsdWU6ICcnLFxuXHRcdH07XG5cdH0gKTtcblx0Y29uc3QgWyBib3JkZXJTdHlsZSwgc2V0Qm9yZGVyU3R5bGUgXSA9IHVzZVN0YXRlKCBCT1JERVJfU1RZTEVfREVGQVVMVCApO1xuXG5cdC8vIFNldCBwaG9uZUlucHV0UmVmLlxuXHR1c2VFZmZlY3QoICgpID0+IHtcblx0XHRpZiAoICEgaW5wdXRSZWYuY3VycmVudCApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0aWYgKCBwaG9uZUlucHV0UmVmLmN1cnJlbnQgPT09IGlucHV0UmVmLmN1cnJlbnQucXVlcnlTZWxlY3RvciggSU5QVVRfU0VMRUNUT1IgKSApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0cGhvbmVJbnB1dFJlZi5jdXJyZW50ID0gaW5wdXRSZWYuY3VycmVudC5xdWVyeVNlbGVjdG9yKCBJTlBVVF9TRUxFQ1RPUiApO1xuXHR9LCBbIGlucHV0UmVmLCBwaG9uZUlucHV0UmVmIF0gKTtcblxuXHQvKipcblx0ICogQGZ1bmN0aW9uIGdldFBsYWNlaG9sZGVyXG5cdCAqIEBkZXNjcmlwdGlvbiBHZXQgdGhlIHBsYWNlaG9sZGVyIHRleHQgZm9yIHRoZSBpbnB1dC5cblx0ICpcblx0ICogQHNpbmNlIDUuNS4wXG5cdCAqXG5cdCAqIEByZXR1cm4ge3N0cmluZ3x1bmRlZmluZWR9IFBsYWNlaG9sZGVyIHRleHQuXG5cdCAqL1xuXHRjb25zdCBnZXRQbGFjZWhvbGRlciA9ICgpID0+IHtcblx0XHRpZiAoICEgdXNlUGxhY2Vob2xkZXIgKSB7XG5cdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHRcdH1cblxuXHRcdGNvbnN0IGV4YW1wbGVOdW1iZXIgPSBnZXRFeGFtcGxlTnVtYmVyKCBjb3VudHJ5Py52YWx1ZSwgZXhhbXBsZU51bWJlcnMgKTtcblx0XHRpZiAoICEgZXhhbXBsZU51bWJlciApIHtcblx0XHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGludGVybmF0aW9uYWwgPyBleGFtcGxlTnVtYmVyLmZvcm1hdEludGVybmF0aW9uYWwoKSA6IGV4YW1wbGVOdW1iZXIuZm9ybWF0TmF0aW9uYWwoKTtcblx0fTtcblxuXHQvKipcblx0ICogQGZ1bmN0aW9uIHZhbGlkYXRlUGhvbmVOdW1iZXJcblx0ICogQGRlc2NyaXB0aW9uIFZhbGlkYXRlIHRoZSBwaG9uZSBudW1iZXIuXG5cdCAqXG5cdCAqIEBzaW5jZSA1LjUuMFxuXHQgKlxuXHQgKi9cblx0Y29uc3QgdmFsaWRhdGVQaG9uZU51bWJlciA9ICgpID0+IHtcblx0XHQvLyBJZiB2YWxpZGF0aW9uIGlzIGRpc2FibGVkLCByZXR1cm4gZWFybHkuXG5cdFx0aWYgKCAhIHVzZVZhbGlkYXRpb24gKSB7XG5cdFx0XHRpZiAoIGJvcmRlclN0eWxlICE9PSBCT1JERVJfU1RZTEVfREVGQVVMVCApIHtcblx0XHRcdFx0c2V0Qm9yZGVyU3R5bGUoIEJPUkRFUl9TVFlMRV9ERUZBVUxUICk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Y29uc3QgeyBhc1lvdVR5cGUsIG51bWJlclZhbHVlIH0gPSBwaG9uZU51bWJlcjtcblx0XHRjb25zdCBpc1Bvc3NpYmxlID0gYXNZb3VUeXBlPy5pc1Bvc3NpYmxlKCk7XG5cblx0XHRpZiAoIG51bWJlclZhbHVlICkge1xuXHRcdFx0c2V0Qm9yZGVyU3R5bGUoIGlzUG9zc2libGUgPyBCT1JERVJfU1RZTEVfQ09SUkVDVCA6IEJPUkRFUl9TVFlMRV9FUlJPUiApO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRzZXRCb3JkZXJTdHlsZSggQk9SREVSX1NUWUxFX0RFRkFVTFQgKTtcblx0XHR9XG5cdH07XG5cblx0LyoqXG5cdCAqIEBmdW5jdGlvbiBvbkNvdW50cnlDaGFuZ2Vcblx0ICogQGRlc2NyaXB0aW9uIEhhbmRsZSBjb3VudHJ5IGNoYW5nZS5cblx0ICpcblx0ICogQHNpbmNlIDUuNS4wXG5cdCAqXG5cdCAqIEBwYXJhbSB7RXZlbnR9ICBldmVudCBUaGUgZXZlbnQgb2JqZWN0LlxuXHQgKiBAcGFyYW0ge29iamVjdH0gdmFsdWUgVGhlIHNlbGVjdGVkIGNvdW50cnkgb2JqZWN0LlxuXHQgKi9cblx0Y29uc3Qgb25Db3VudHJ5Q2hhbmdlID0gKCBldmVudCwgdmFsdWUgKSA9PiB7XG5cdFx0c2V0Q291bnRyeSggdmFsdWUgKTtcblx0XHRjb25zdCB7IGFzWW91VHlwZSwgZm9ybWF0dGVkIH0gPSBnZXRGb3JtYXR0ZWRJbnB1dFRleHQoIHBob25lTnVtYmVyLmNoYXJzLCAwLCB2YWx1ZT8udmFsdWUsIGludGVybmF0aW9uYWwgKTtcblx0XHRjb25zdCBudW1iZXJWYWx1ZSA9IGFzWW91VHlwZT8uZ2V0TnVtYmVyVmFsdWUoKSB8fCAnJztcblx0XHRzZXRQaG9uZU51bWJlcigge1xuXHRcdFx0YXNZb3VUeXBlLFxuXHRcdFx0Y2hhcnM6IGFzWW91VHlwZT8uZ2V0Q2hhcnMoKSB8fCAnJyxcblx0XHRcdHZhbHVlOiBmb3JtYXR0ZWQudGV4dCxcblx0XHRcdG51bWJlclZhbHVlLFxuXHRcdH0gKTtcblxuXHRcdGNvbnN0IGNoYW5nZVZhbHVlID0ge1xuXHRcdFx0Y291bnRyeTogdmFsdWU/LnZhbHVlLFxuXHRcdFx0bnVtYmVyOiBudW1iZXJWYWx1ZSxcblx0XHRcdGlzVmFsaWQ6IGFzWW91VHlwZT8uaXNQb3NzaWJsZSgpIHx8IGZhbHNlLFxuXHRcdH07XG5cblx0XHRvbkNoYW5nZSggY2hhbmdlVmFsdWUsIGV2ZW50ICk7XG5cblx0XHQvLyBWYWxpZGF0ZSBwaG9uZSBudW1iZXIgYWZ0ZXIgc3RhdGUgdXBkYXRlcy5cblx0XHRyZXF1ZXN0QW5pbWF0aW9uRnJhbWUoIHZhbGlkYXRlUGhvbmVOdW1iZXIgKTtcblx0fTtcblxuXHQvKipcblx0ICogQGZ1bmN0aW9uIGhhbmRsZUlucHV0Q2hhbmdlXG5cdCAqIEBkZXNjcmlwdGlvbiBJbnB1dCBjaGFuZ2UgaGFuZGxlci5cblx0ICpcblx0ICogQHNpbmNlIDUuNS4wXG5cdCAqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSAgICAgICAgICAgdmFsdWUgICAgIFRoZSBpbnB1dCB2YWx1ZS5cblx0ICogQHBhcmFtIHtzdHJpbmd8dW5kZWZpbmVkfSBvcGVyYXRpb24gVGhlIG9wZXJhdGlvbiB0byBwZXJmb3JtLlxuXHQgKiBAcGFyYW0ge0V2ZW50fSAgICAgICAgICAgIGV2ZW50ICAgICBUaGUgZXZlbnQgb2JqZWN0LlxuXHQgKi9cblx0Y29uc3QgaGFuZGxlSW5wdXRDaGFuZ2UgPSAoIHZhbHVlLCBvcGVyYXRpb24sIGV2ZW50ICkgPT4ge1xuXHRcdGNvbnN0IHBob25lSW5wdXQgPSBwaG9uZUlucHV0UmVmLmN1cnJlbnQ7XG5cdFx0Y29uc3QgY2FyZXRQb3NpdGlvbiA9IGdldENhcmV0UG9zaXRpb24oIHBob25lSW5wdXQgKTtcblx0XHRjb25zdCB7IGFzWW91VHlwZSwgZm9ybWF0dGVkIH0gPSBnZXRGb3JtYXR0ZWRJbnB1dFRleHQoIHZhbHVlLCBjYXJldFBvc2l0aW9uLCBjb3VudHJ5Py52YWx1ZSwgaW50ZXJuYXRpb25hbCwgb3BlcmF0aW9uICk7XG5cdFx0Y29uc3QgbnVtYmVyVmFsdWUgPSBhc1lvdVR5cGU/LmdldE51bWJlclZhbHVlKCkgfHwgJyc7XG5cdFx0c2V0UGhvbmVOdW1iZXIoIHtcblx0XHRcdGFzWW91VHlwZSxcblx0XHRcdGNoYXJzOiBhc1lvdVR5cGU/LmdldENoYXJzKCkgfHwgJycsXG5cdFx0XHR2YWx1ZTogZm9ybWF0dGVkLnRleHQsXG5cdFx0XHRudW1iZXJWYWx1ZSxcblx0XHR9ICk7XG5cblx0XHRjb25zdCBjaGFuZ2VWYWx1ZSA9IHtcblx0XHRcdGNvdW50cnk6IGNvdW50cnk/LnZhbHVlLFxuXHRcdFx0bnVtYmVyOiBudW1iZXJWYWx1ZSxcblx0XHRcdGlzVmFsaWQ6IGFzWW91VHlwZT8uaXNQb3NzaWJsZSgpIHx8IGZhbHNlLFxuXHRcdH07XG5cblx0XHQvLyByZXF1ZXN0QW5pbWF0aW9uRnJhbWUgdG8gc2V0IGNhcmV0IGFmdGVyIHJlcmVuZGVyLlxuXHRcdHJlcXVlc3RBbmltYXRpb25GcmFtZSggKCkgPT4ge1xuXHRcdFx0c2V0Q2FyZXRQb3NpdGlvbiggcGhvbmVJbnB1dCwgZm9ybWF0dGVkLmNhcmV0ICk7XG5cdFx0fSApO1xuXG5cdFx0b25DaGFuZ2UoIGNoYW5nZVZhbHVlLCBldmVudCApO1xuXHR9O1xuXG5cdC8qKlxuXHQgKiBAZnVuY3Rpb24gb25JbnB1dENoYW5nZVxuXHQgKiBAZGVzY3JpcHRpb24gSGFuZGxlIGlucHV0IGNoYW5nZS5cblx0ICpcblx0ICogQHNpbmNlIDUuNS4wXG5cdCAqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZSBUaGUgaW5wdXQgdmFsdWUuXG5cdCAqIEBwYXJhbSB7RXZlbnR9ICBldmVudCBUaGUgZXZlbnQgb2JqZWN0LlxuXHQgKi9cblx0Y29uc3Qgb25JbnB1dENoYW5nZSA9ICggdmFsdWUsIGV2ZW50ICkgPT4ge1xuXHRcdGhhbmRsZUlucHV0Q2hhbmdlKCB2YWx1ZSwgdW5kZWZpbmVkLCBldmVudCApO1xuXHR9O1xuXG5cdC8qKlxuXHQgKiBAZnVuY3Rpb24gb25JbnB1dEtleURvd25cblx0ICogQGRlc2NyaXB0aW9uIEhhbmRsZSBpbnB1dCBrZXkgZG93bi5cblx0ICpcblx0ICogQHNpbmNlIDUuNS4wXG5cdCAqXG5cdCAqIEBwYXJhbSB7RXZlbnR9IGV2ZW50IFRoZSBldmVudCBvYmplY3QuXG5cdCAqL1xuXHRjb25zdCBvbklucHV0S2V5RG93biA9ICggZXZlbnQgKSA9PiB7XG5cdFx0aWYgKCBpbnB1dEF0dHJpYnV0ZXM/Lm9uS2V5RG93biApIHtcblx0XHRcdGlucHV0QXR0cmlidXRlcz8ub25LZXlEb3duPy4oIGV2ZW50ICk7XG5cdFx0fVxuXG5cdFx0Ly8gSWYgYG9uS2V5RG93bigpYCBoYW5kbGVyIGFib3ZlIGhhcyBjYWxsZWQgYGV2ZW50LnByZXZlbnREZWZhdWx0KClgIHRoZW4gaWdub3JlIHRoaXMgYGtleWRvd25gIGV2ZW50LlxuXHRcdGlmICggZXZlbnQuZGVmYXVsdFByZXZlbnRlZCApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRjb25zdCBwaG9uZUlucHV0ID0gcGhvbmVJbnB1dFJlZi5jdXJyZW50O1xuXHRcdGlmICggcGhvbmVJbnB1dC5oYXNBdHRyaWJ1dGUoICdyZWFkb25seScgKSApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRjb25zdCBvcGVyYXRpb24gPSBldmVudC5rZXk7XG5cdFx0aWYgKCAhIFsgJ0JhY2tzcGFjZScsICdEZWxldGUnIF0uaW5jbHVkZXMoIG9wZXJhdGlvbiApICkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdC8vIEludGVyY2VwdCB0aGlzIG9wZXJhdGlvbiBhbmQgcGVyZm9ybSBpdCBtYW51YWxseS5cblx0XHRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXG5cdFx0Y29uc3QgdmFsdWUgPSBwaG9uZUlucHV0LnZhbHVlO1xuXHRcdGNvbnN0IHNlbGVjdGlvbiA9IGdldFNlbGVjdGlvbiggcGhvbmVJbnB1dCApO1xuXG5cdFx0Ly8gSWYgYSBzZWxlY3Rpb24gaXMgbWFkZSwgZ2V0IHRoZSB0ZXh0IGFmdGVyIGVyYXNpbmcgc2VsZWN0aW9uLlxuXHRcdC8vIEVsc2UsIHBlcmZvcm0gdGhlIChjaGFyYWN0ZXIgZXJhc2luZykgb3BlcmF0aW9uIG1hbnVhbGx5LlxuXHRcdGNvbnN0IG5ld1ZhbHVlID0gc2VsZWN0aW9uID8gZ2V0VGV4dEFmdGVyRXJhc2VTZWxlY3Rpb24oIHZhbHVlLCBzZWxlY3Rpb24gKSA6IHZhbHVlO1xuXHRcdGNvbnN0IG5ld09wID0gc2VsZWN0aW9uID8gdW5kZWZpbmVkIDogb3BlcmF0aW9uO1xuXG5cdFx0aGFuZGxlSW5wdXRDaGFuZ2UoIG5ld1ZhbHVlLCBuZXdPcCwgZXZlbnQgKTtcblx0fTtcblxuXHQvKipcblx0ICogQGZ1bmN0aW9uIG9uSW5wdXRCbHVyXG5cdCAqIEBkZXNjcmlwdGlvbiBIYW5kbGUgaW5wdXQgYmx1ci5cblx0ICpcblx0ICogQHNpbmNlIDUuNS4wXG5cdCAqXG5cdCAqIEBwYXJhbSB7RXZlbnR9IGV2ZW50IFRoZSBldmVudCBvYmplY3QuXG5cdCAqL1xuXHRjb25zdCBvbklucHV0Qmx1ciA9ICggZXZlbnQgKSA9PiB7XG5cdFx0aWYgKCBpbnB1dEF0dHJpYnV0ZXM/Lm9uQmx1ciApIHtcblx0XHRcdGlucHV0QXR0cmlidXRlcz8ub25CbHVyPy4oIGV2ZW50ICk7XG5cdFx0fVxuXG5cdFx0Ly8gSWYgYG9uQmx1cigpYCBoYW5kbGVyIGFib3ZlIGhhcyBjYWxsZWQgYGV2ZW50LnByZXZlbnREZWZhdWx0KClgIHRoZW4gaWdub3JlIHRoaXMgYGJsdXJgIGV2ZW50LlxuXHRcdGlmICggZXZlbnQuZGVmYXVsdFByZXZlbnRlZCApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHR2YWxpZGF0ZVBob25lTnVtYmVyKCk7XG5cdH07XG5cblx0LyoqXG5cdCAqIEBmdW5jdGlvbiBvbkxhYmVsQ2xpY2tcblx0ICogQGRlc2NyaXB0aW9uIEhhbmRsZSBsYWJlbCBjbGljay5cblx0ICpcblx0ICogQHNpbmNlIDUuNS4wXG5cdCAqXG5cdCAqL1xuXHRjb25zdCBvbkxhYmVsQ2xpY2sgPSAoKSA9PiB7XG5cdFx0Y29uc3QgZHJvcGRvd25UcmlnZ2VyID0gZHJvcGRvd25SZWY/LmN1cnJlbnQ/LnF1ZXJ5U2VsZWN0b3IoIERST1BET1dOX1RSSUdHRVJfU0VMRUNUT1IgKTtcblx0XHRpZiAoIGRyb3Bkb3duVHJpZ2dlciApIHtcblx0XHRcdGRyb3Bkb3duVHJpZ2dlci5mb2N1cygpO1xuXHRcdH1cblx0fTtcblxuXHRjb25zdCBoZWxwVGV4dElkID0gZ2V0SWQoIGlkLCAnaGVscC10ZXh0JyApO1xuXHRjb25zdCBsYWJlbElkID0gZ2V0SWQoIGlkLCAnbGFiZWwnICk7XG5cblx0Y29uc3QgY29tcG9uZW50UHJvcHMgPSB7XG5cdFx0Y2xhc3NOYW1lOiBjbGFzc25hbWVzKCB7XG5cdFx0XHQnZ2Zvcm0tcGhvbmUnOiB0cnVlLFxuXHRcdFx0J3dwLWV4Y2x1ZGUtZW1vamknOiB0cnVlLFxuXHRcdFx0WyBgZ2Zvcm0tcGhvbmUtLXNpemUtJHsgc2l6ZSB9YCBdOiB0cnVlLFxuXHRcdFx0J2dmb3JtLXBob25lLS1kaXNhYmxlZCc6IGRpc2FibGVkLFxuXHRcdFx0Li4uc3BhY2VyQ2xhc3Nlcyggc3BhY2luZyApLFxuXHRcdH0sIGN1c3RvbUNsYXNzZXMgKSxcblx0XHRpZCxcblx0XHRzdHlsZToge1xuXHRcdFx0d2lkdGg6IHdpZHRoID8gYCR7IHdpZHRoIH1weGAgOiB1bmRlZmluZWQsXG5cdFx0fSxcblx0XHQuLi5jdXN0b21BdHRyaWJ1dGVzLFxuXHR9O1xuXG5cdGNvbnN0IGxhYmVsUHJvcHMgPSB7XG5cdFx0Y2xhc3NOYW1lOiBjbGFzc25hbWVzKCBbXG5cdFx0XHQnZ2Zvcm0tcGhvbmVfX2xhYmVsJyxcblx0XHRcdCdnZm9ybS10ZXh0Jyxcblx0XHRcdCdnZm9ybS10ZXh0LS1jb2xvci1wb3J0Jyxcblx0XHRcdCdnZm9ybS10eXBvZ3JhcGh5LS1zaXplLXRleHQtc20nLFxuXHRcdFx0J2dmb3JtLXR5cG9ncmFwaHktLXdlaWdodC1tZWRpdW0nLFxuXHRcdF0sIGxhYmVsQ2xhc3NlcyApLFxuXHRcdC4uLmxhYmVsQXR0cmlidXRlcyxcblx0XHRpZDogbGFiZWxJZCxcblx0XHRvbkNsaWNrOiBvbkxhYmVsQ2xpY2ssXG5cdH07XG5cblx0Y29uc3QgcmVxdWlyZWRMYWJlbFByb3BzID0ge1xuXHRcdHNpemU6ICd0ZXh0LXNtJyxcblx0XHR3ZWlnaHQ6ICdtZWRpdW0nLFxuXHRcdC4uLnJlcXVpcmVkTGFiZWxBdHRyaWJ1dGVzLFxuXHRcdGN1c3RvbUNsYXNzZXM6IGNsYXNzbmFtZXMoIFsgJ2dmb3JtLXBob25lX19yZXF1aXJlZCcgXSwgcmVxdWlyZWRMYWJlbENsYXNzZXMgKSxcblx0fTtcblxuXHRjb25zdCBkcm9wZG93blByb3BzID0ge1xuXHRcdGNvdW50cmllcyxcblx0XHRoYXNTZWFyY2g6IHRydWUsXG5cdFx0cG9wb3Zlck1heEhlaWdodDogMzAwLFxuXHRcdC4uLmRyb3Bkb3duQXR0cmlidXRlcyxcblx0XHRjdXN0b21DbGFzc2VzOiBjbGFzc25hbWVzKCBbXG5cdFx0XHQnZ2Zvcm0tcGhvbmVfX2Ryb3Bkb3duJyxcblx0XHRdLCBkcm9wZG93bkNsYXNzZXMgKSxcblx0XHRkaXNhYmxlZCxcblx0XHRpMThuLFxuXHRcdGlkOiBnZXRJZCggaWQsICdkcm9wZG93bicgKSxcblx0XHRsYW5ndWFnZSxcblx0XHRvbkNoYW5nZTogb25Db3VudHJ5Q2hhbmdlLFxuXHRcdHByZWZlcnJlZENvdW50cmllcyxcblx0XHRzZWFyY2hBdHRyaWJ1dGVzOiB7XG5cdFx0XHR3cmFwcGVyQ2xhc3NlczogWyAnZ2Zvcm0tcGhvbmVfX2Ryb3Bkb3duLXNlYXJjaC13cmFwcGVyJyBdLFxuXHRcdFx0Li4uKCBkcm9wZG93bkF0dHJpYnV0ZXM/LnNlYXJjaEF0dHJpYnV0ZXMgfHwge30gKSxcblx0XHR9LFxuXHRcdHNlYXJjaENsYXNzZXM6IFsgJ2dmb3JtLXBob25lX19kcm9wZG93bi1zZWFyY2gnIF0sXG5cdFx0c2l6ZSxcblx0XHR0cmlnZ2VyQXR0cmlidXRlczoge1xuXHRcdFx0J2FyaWEtbGFiZWxsZWRieSc6IGxhYmVsID8gbGFiZWxJZCA6IHVuZGVmaW5lZCxcblx0XHR9LFxuXHRcdHRyaWdnZXJDbGFzc2VzOiBbICdnZm9ybS1waG9uZV9fZHJvcGRvd24tdHJpZ2dlcicgXSxcblx0fTtcblxuXHRjb25zdCBpbnB1dFByb3BzID0ge1xuXHRcdC4uLmlucHV0QXR0cmlidXRlcyxcblx0XHRib3JkZXJTdHlsZSxcblx0XHRjdXN0b21BdHRyaWJ1dGVzOiB7XG5cdFx0XHQnYXJpYS1kZXNjcmliZWRieSc6IGhlbHBUZXh0QXR0cmlidXRlcy5jb250ZW50ICYmIGJvcmRlclN0eWxlID09PSBCT1JERVJfU1RZTEVfRVJST1IgPyBoZWxwVGV4dElkIDogdW5kZWZpbmVkLFxuXHRcdFx0J2FyaWEtbGFiZWxsZWRieSc6IGxhYmVsID8gbGFiZWxJZCA6IHVuZGVmaW5lZCxcblx0XHR9LFxuXHRcdGN1c3RvbUNsYXNzZXM6IGNsYXNzbmFtZXMoIFtcblx0XHRcdCdnZm9ybS1waG9uZV9faW5wdXQnLFxuXHRcdF0sIGlucHV0Q2xhc3NlcyApLFxuXHRcdGRpcmVjdENvbnRyb2xsZWQ6IHRydWUsXG5cdFx0ZGlzYWJsZWQsXG5cdFx0aWQ6IGdldElkKCBpZCwgJ2lucHV0JyApLFxuXHRcdG9uQmx1cjogb25JbnB1dEJsdXIsXG5cdFx0b25DaGFuZ2U6IG9uSW5wdXRDaGFuZ2UsXG5cdFx0b25LZXlEb3duOiBvbklucHV0S2V5RG93bixcblx0XHRwbGFjZWhvbGRlcjogZ2V0UGxhY2Vob2xkZXIoKSxcblx0XHRyZXF1aXJlZCxcblx0XHRzaXplOiBgc2l6ZS0keyBzaXplIH1gLFxuXHRcdHR5cGU6ICd0ZWwnLFxuXHRcdHZhbHVlOiBwaG9uZU51bWJlci52YWx1ZSxcblx0XHR3cmFwcGVyQ2xhc3NlczogY2xhc3NuYW1lcygge1xuXHRcdFx0J2dmb3JtLXBob25lX19pbnB1dC13cmFwcGVyJzogdHJ1ZSxcblx0XHR9LCBpbnB1dEF0dHJpYnV0ZXM/LndyYXBwZXJDbGFzc2VzIHx8IFtdICksXG5cdH07XG5cblx0Y29uc3QgaGVscFRleHRQcm9wcyA9IHtcblx0XHRzaXplOiAndGV4dC14cycsXG5cdFx0d2VpZ2h0OiAncmVndWxhcicsXG5cdFx0Li4uaGVscFRleHRBdHRyaWJ1dGVzLFxuXHRcdGN1c3RvbUNsYXNzZXM6IGNsYXNzbmFtZXMoIFsgJ2dmb3JtLXBob25lX19oZWxwLXRleHQnIF0sIGhlbHBUZXh0Q2xhc3NlcyApLFxuXHRcdGlkOiBoZWxwVGV4dElkLFxuXHR9O1xuXG5cdHJldHVybiAoXG5cdFx0PGRpdiB7IC4uLmNvbXBvbmVudFByb3BzIH0gcmVmPXsgd3JhcHBlclJlZiB9PlxuXHRcdFx0eyBsYWJlbCAmJiA8ZGl2IHsgLi4ubGFiZWxQcm9wcyB9PnsgbGFiZWwgfXsgcmVxdWlyZWQgJiYgPEhlbHBUZXh0IHsgLi4ucmVxdWlyZWRMYWJlbFByb3BzIH0gLz4gfTwvZGl2PiB9XG5cdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cImdmb3JtLXBob25lX193cmFwcGVyXCI+XG5cdFx0XHRcdDxDb3VudHJ5RHJvcGRvd24geyAuLi5kcm9wZG93blByb3BzIH0gcmVmPXsgZHJvcGRvd25SZWYgfSAvPlxuXHRcdFx0XHQ8SW5wdXQgeyAuLi5pbnB1dFByb3BzIH0gcmVmPXsgaW5wdXRSZWYgfSAvPlxuXHRcdFx0PC9kaXY+XG5cdFx0XHR7IGJvcmRlclN0eWxlID09PSBCT1JERVJfU1RZTEVfRVJST1IgJiYgPEhlbHBUZXh0IHsgLi4uaGVscFRleHRQcm9wcyB9IC8+IH1cblx0XHQ8L2Rpdj5cblx0KTtcbn0gKTtcblxuUGhvbmVDb21wb25lbnQucHJvcFR5cGVzID0ge1xuXHRjb3VudHJpZXM6IFByb3BUeXBlcy5hcnJheSxcblx0Y3VzdG9tQXR0cmlidXRlczogUHJvcFR5cGVzLm9iamVjdCxcblx0Y3VzdG9tQ2xhc3NlczogUHJvcFR5cGVzLm9uZU9mVHlwZSggW1xuXHRcdFByb3BUeXBlcy5zdHJpbmcsXG5cdFx0UHJvcFR5cGVzLmFycmF5LFxuXHRcdFByb3BUeXBlcy5vYmplY3QsXG5cdF0gKSxcblx0ZGlzYWJsZWQ6IFByb3BUeXBlcy5ib29sLFxuXHRkcm9wZG93bkF0dHJpYnV0ZXM6IFByb3BUeXBlcy5vYmplY3QsXG5cdGRyb3Bkb3duQ2xhc3NlczogUHJvcFR5cGVzLm9uZU9mVHlwZSggW1xuXHRcdFByb3BUeXBlcy5zdHJpbmcsXG5cdFx0UHJvcFR5cGVzLmFycmF5LFxuXHRcdFByb3BUeXBlcy5vYmplY3QsXG5cdF0gKSxcblx0aGVscFRleHRBdHRyaWJ1dGVzOiBQcm9wVHlwZXMub2JqZWN0LFxuXHRoZWxwVGV4dENsYXNzZXM6IFByb3BUeXBlcy5vbmVPZlR5cGUoIFtcblx0XHRQcm9wVHlwZXMuc3RyaW5nLFxuXHRcdFByb3BUeXBlcy5hcnJheSxcblx0XHRQcm9wVHlwZXMub2JqZWN0LFxuXHRdICksXG5cdGkxOG46IFByb3BUeXBlcy5vYmplY3QsXG5cdGlkOiBQcm9wVHlwZXMuc3RyaW5nLFxuXHRpbnB1dEF0dHJpYnV0ZXM6IFByb3BUeXBlcy5vYmplY3QsXG5cdGlucHV0Q2xhc3NlczogUHJvcFR5cGVzLm9uZU9mVHlwZSggW1xuXHRcdFByb3BUeXBlcy5zdHJpbmcsXG5cdFx0UHJvcFR5cGVzLmFycmF5LFxuXHRcdFByb3BUeXBlcy5vYmplY3QsXG5cdF0gKSxcblx0aW50ZXJuYXRpb25hbDogUHJvcFR5cGVzLmJvb2wsXG5cdGxhYmVsOiBQcm9wVHlwZXMuc3RyaW5nLFxuXHRsYWJlbEF0dHJpYnV0ZXM6IFByb3BUeXBlcy5vYmplY3QsXG5cdGxhYmVsQ2xhc3NlczogUHJvcFR5cGVzLm9uZU9mVHlwZSggW1xuXHRcdFByb3BUeXBlcy5zdHJpbmcsXG5cdFx0UHJvcFR5cGVzLmFycmF5LFxuXHRcdFByb3BUeXBlcy5vYmplY3QsXG5cdF0gKSxcblx0bGFuZ3VhZ2U6IFByb3BUeXBlcy5zdHJpbmcsXG5cdG9uQ2hhbmdlOiBQcm9wVHlwZXMuZnVuYyxcblx0cHJlZmVycmVkQ291bnRyaWVzOiBQcm9wVHlwZXMuYXJyYXksXG5cdHJlcXVpcmVkOiBQcm9wVHlwZXMuYm9vbCxcblx0cmVxdWlyZWRMYWJlbEF0dHJpYnV0ZXM6IFByb3BUeXBlcy5vYmplY3QsXG5cdHJlcXVpcmVkTGFiZWxDbGFzc2VzOiBQcm9wVHlwZXMub25lT2ZUeXBlKCBbXG5cdFx0UHJvcFR5cGVzLnN0cmluZyxcblx0XHRQcm9wVHlwZXMuYXJyYXksXG5cdFx0UHJvcFR5cGVzLm9iamVjdCxcblx0XSApLFxuXHRzaXplOiBQcm9wVHlwZXMub25lT2YoIFsgJ3InLCAnbCcsICd4bCcgXSApLFxuXHRzcGFjaW5nOiBQcm9wVHlwZXMub25lT2ZUeXBlKCBbXG5cdFx0UHJvcFR5cGVzLnN0cmluZyxcblx0XHRQcm9wVHlwZXMubnVtYmVyLFxuXHRcdFByb3BUeXBlcy5hcnJheSxcblx0XHRQcm9wVHlwZXMub2JqZWN0LFxuXHRdICksXG5cdHVzZVBsYWNlaG9sZGVyOiBQcm9wVHlwZXMuYm9vbCxcblx0dXNlVmFsaWRhdGlvbjogUHJvcFR5cGVzLmJvb2wsXG5cdHdpZHRoOiBQcm9wVHlwZXMubnVtYmVyLFxufTtcblxuY29uc3QgUGhvbmVDb21wb25lbnRXaXRoSWQgPSBmb3J3YXJkUmVmKCAoIHByb3BzLCByZWYgKSA9PiB7XG5cdGNvbnN0IGRlZmF1bHRQcm9wcyA9IHtcblx0XHRjb3VudHJpZXM6IFtdLFxuXHRcdGN1c3RvbUF0dHJpYnV0ZXM6IHt9LFxuXHRcdGN1c3RvbUNsYXNzZXM6IFtdLFxuXHRcdGRpc2FibGVkOiBmYWxzZSxcblx0XHRkcm9wZG93bkF0dHJpYnV0ZXM6IHt9LFxuXHRcdGRyb3Bkb3duQ2xhc3NlczogW10sXG5cdFx0aGVscFRleHRBdHRyaWJ1dGVzOiB7fSxcblx0XHRoZWxwVGV4dENsYXNzZXM6IFtdLFxuXHRcdGkxOG46IHt9LFxuXHRcdGlkOiAnJyxcblx0XHRpbnB1dEF0dHJpYnV0ZXM6IHt9LFxuXHRcdGlucHV0Q2xhc3NlczogW10sXG5cdFx0aW50ZXJuYXRpb25hbDogdHJ1ZSxcblx0XHRsYWJlbDogJycsXG5cdFx0bGFiZWxBdHRyaWJ1dGVzOiB7fSxcblx0XHRsYWJlbENsYXNzZXM6IFtdLFxuXHRcdGxhbmd1YWdlOiAnZW4nLFxuXHRcdG9uQ2hhbmdlOiAoKSA9PiB7fSxcblx0XHRwcmVmZXJyZWRDb3VudHJpZXM6IFtdLFxuXHRcdHJlcXVpcmVkOiBmYWxzZSxcblx0XHRyZXF1aXJlZExhYmVsQXR0cmlidXRlczoge30sXG5cdFx0cmVxdWlyZWRMYWJlbENsYXNzZXM6IFtdLFxuXHRcdHNpemU6ICdyJyxcblx0XHRzcGFjaW5nOiAnJyxcblx0XHR1c2VQbGFjZWhvbGRlcjogdHJ1ZSxcblx0XHR1c2VWYWxpZGF0aW9uOiBmYWxzZSxcblx0XHR3aWR0aDogMCxcblx0fTtcblx0Y29uc3QgY29tYmluZWRQcm9wcyA9IHsgLi4uZGVmYXVsdFByb3BzLCAuLi5wcm9wcyB9O1xuXHRjb25zdCB7IGlkOiBpZFByb3AgfSA9IGNvbWJpbmVkUHJvcHM7XG5cdGNvbnN0IGlkUHJvdmlkZXJQcm9wcyA9IHsgaWQ6IGlkUHJvcCB9O1xuXG5cdHJldHVybiAoXG5cdFx0PElkUHJvdmlkZXIgeyAuLi5pZFByb3ZpZGVyUHJvcHMgfT5cblx0XHRcdDxQaG9uZUNvbXBvbmVudCB7IC4uLmNvbWJpbmVkUHJvcHMgfSByZWY9eyByZWYgfSAvPlxuXHRcdDwvSWRQcm92aWRlcj5cblx0KTtcbn0gKTtcblxuZXhwb3J0IGRlZmF1bHQgUGhvbmVDb21wb25lbnRXaXRoSWQ7XG4iXSwibmFtZXMiOlsic2x1Z2lmeSIsIkFORFJPSURfVVNFUl9BR0VOVF9SRUdfRVhQIiwiaXNBbmRyb2lkIiwibmF2aWdhdG9yIiwidGVzdCIsInVzZXJBZ2VudCIsImdldENhcmV0UG9zaXRpb24iLCJlbGVtZW50Iiwic2VsZWN0aW9uU3RhcnQiLCJzZXRDYXJldFBvc2l0aW9uIiwiY2FyZXRQb3NpdGlvbiIsInVuZGVmaW5lZCIsInNldFRpbWVvdXQiLCJzZXRTZWxlY3Rpb25SYW5nZSIsImdldFRleHRBZnRlckVyYXNlU2VsZWN0aW9uIiwidGV4dCIsInNlbGVjdGlvbiIsInN0YXJ0IiwiTWF0aCIsIm1pbiIsImVuZCIsIm1heCIsInNsaWNlIiwiZ2V0U2VsZWN0aW9uIiwiaW5wdXQiLCJzZWxlY3Rpb25FbmQiLCJnZXRJZCIsInByZWZpeCIsImtleSIsImNvbmNhdCIsImUxNjRUb051bWJlciIsImUxNjQiLCJUeXBlRXJyb3IiLCJyZXBsYWNlIiwibnVtYmVyVG9FMTY0IiwibnVtYmVyIiwic3RhcnRzV2l0aCIsIlJlYWN0IiwiUHJvcFR5cGVzIiwiY2xhc3NuYW1lcyIsIklkUHJvdmlkZXIiLCJ1c2VJZENvbnRleHQiLCJ1c2VQaG9uZUlucHV0Rm9ybWF0VXRpbHNDb250ZXh0IiwidXNlUGhvbmVJbnB1dEZvcm1hdFV0aWxzIiwic3BhY2VyQ2xhc3NlcyIsImV4YW1wbGVOdW1iZXJzIiwiZ2V0RXhhbXBsZU51bWJlciIsImdldFNlbGVjdGVkSXRlbUZyb21WYWx1ZSIsIkNvdW50cnlEcm9wZG93biIsImdldENvdW50cmllc0xpc3RJdGVtc0Zyb21Jc29zIiwic29ydFByZWZlcnJlZENvdW50cmllcyIsIkhlbHBUZXh0IiwiSW5wdXQiLCJ1c2VFZmZlY3QiLCJ1c2VSZWYiLCJ1c2VTdGF0ZSIsImZvcndhcmRSZWYiLCJJTlBVVF9TRUxFQ1RPUiIsIkRST1BET1dOX1RSSUdHRVJfU0VMRUNUT1IiLCJCT1JERVJfU1RZTEVfREVGQVVMVCIsIkJPUkRFUl9TVFlMRV9FUlJPUiIsIkJPUkRFUl9TVFlMRV9DT1JSRUNUIiwiUGhvbmVDb21wb25lbnQiLCJwcm9wcyIsInJlZiIsImNvdW50cmllcyIsImN1c3RvbUF0dHJpYnV0ZXMiLCJjdXN0b21DbGFzc2VzIiwiZGlzYWJsZWQiLCJkcm9wZG93bkF0dHJpYnV0ZXMiLCJkcm9wZG93bkNsYXNzZXMiLCJoZWxwVGV4dEF0dHJpYnV0ZXMiLCJoZWxwVGV4dENsYXNzZXMiLCJpMThuIiwiaW5wdXRBdHRyaWJ1dGVzIiwiaW5wdXRDbGFzc2VzIiwiaW50ZXJuYXRpb25hbCIsImxhYmVsIiwibGFiZWxBdHRyaWJ1dGVzIiwibGFiZWxDbGFzc2VzIiwibGFuZ3VhZ2UiLCJvbkNoYW5nZSIsInByZWZlcnJlZENvdW50cmllcyIsInJlcXVpcmVkIiwicmVxdWlyZWRMYWJlbEF0dHJpYnV0ZXMiLCJyZXF1aXJlZExhYmVsQ2xhc3NlcyIsInNpemUiLCJzcGFjaW5nIiwidXNlUGxhY2Vob2xkZXIiLCJ1c2VWYWxpZGF0aW9uIiwid2lkdGgiLCJpbnRlcm5hbFJlZiIsIndyYXBwZXJSZWYiLCJkcm9wZG93blJlZiIsImlucHV0UmVmIiwicGhvbmVJbnB1dFJlZiIsImlkIiwiX3VzZVBob25lSW5wdXRGb3JtYXRVIiwiaW5wdXRGb3JtYXRVdGlscyIsImdldEZvcm1hdHRlZElucHV0VGV4dCIsIl91c2VTdGF0ZSIsImNvdW50cmllc0xpc3RJdGVtcyIsInNob3dGbGFnIiwic2hvd0NhbGxpbmdDb2RlIiwiaW5pdGlhbFZhbHVlIiwibGVuZ3RoIiwiX3ByZWZlcnJlZCQiLCJwcmVmZXJyZWQiLCJ0eXBlIiwiX3ByZWZlcnJlZCQyIiwiaXRlbXMiLCJfdXNlU3RhdGUyIiwiX3NsaWNlZFRvQXJyYXkiLCJjb3VudHJ5Iiwic2V0Q291bnRyeSIsIl91c2VTdGF0ZTMiLCJ2YWx1ZSIsIl9nZXRGb3JtYXR0ZWRJbnB1dFRleCIsImFzWW91VHlwZSIsImZvcm1hdHRlZCIsImNoYXJzIiwiZ2V0Q2hhcnMiLCJudW1iZXJWYWx1ZSIsImdldE51bWJlclZhbHVlIiwiX3VzZVN0YXRlNCIsInBob25lTnVtYmVyIiwic2V0UGhvbmVOdW1iZXIiLCJfdXNlU3RhdGU1IiwiX3VzZVN0YXRlNiIsImJvcmRlclN0eWxlIiwic2V0Qm9yZGVyU3R5bGUiLCJjdXJyZW50IiwicXVlcnlTZWxlY3RvciIsImdldFBsYWNlaG9sZGVyIiwiZXhhbXBsZU51bWJlciIsImZvcm1hdEludGVybmF0aW9uYWwiLCJmb3JtYXROYXRpb25hbCIsInZhbGlkYXRlUGhvbmVOdW1iZXIiLCJpc1Bvc3NpYmxlIiwib25Db3VudHJ5Q2hhbmdlIiwiZXZlbnQiLCJfZ2V0Rm9ybWF0dGVkSW5wdXRUZXgyIiwiY2hhbmdlVmFsdWUiLCJpc1ZhbGlkIiwicmVxdWVzdEFuaW1hdGlvbkZyYW1lIiwiaGFuZGxlSW5wdXRDaGFuZ2UiLCJvcGVyYXRpb24iLCJwaG9uZUlucHV0IiwiX2dldEZvcm1hdHRlZElucHV0VGV4MyIsImNhcmV0Iiwib25JbnB1dENoYW5nZSIsIm9uSW5wdXRLZXlEb3duIiwib25LZXlEb3duIiwiX2lucHV0QXR0cmlidXRlcyRvbktlIiwiY2FsbCIsImRlZmF1bHRQcmV2ZW50ZWQiLCJoYXNBdHRyaWJ1dGUiLCJpbmNsdWRlcyIsInByZXZlbnREZWZhdWx0IiwibmV3VmFsdWUiLCJuZXdPcCIsIm9uSW5wdXRCbHVyIiwib25CbHVyIiwiX2lucHV0QXR0cmlidXRlcyRvbkJsIiwib25MYWJlbENsaWNrIiwiX2Ryb3Bkb3duUmVmJGN1cnJlbnQiLCJkcm9wZG93blRyaWdnZXIiLCJmb2N1cyIsImhlbHBUZXh0SWQiLCJsYWJlbElkIiwiY29tcG9uZW50UHJvcHMiLCJfb2JqZWN0U3ByZWFkIiwiY2xhc3NOYW1lIiwiX2RlZmluZVByb3BlcnR5Iiwic3R5bGUiLCJsYWJlbFByb3BzIiwib25DbGljayIsInJlcXVpcmVkTGFiZWxQcm9wcyIsIndlaWdodCIsImRyb3Bkb3duUHJvcHMiLCJoYXNTZWFyY2giLCJwb3BvdmVyTWF4SGVpZ2h0Iiwic2VhcmNoQXR0cmlidXRlcyIsIndyYXBwZXJDbGFzc2VzIiwic2VhcmNoQ2xhc3NlcyIsInRyaWdnZXJBdHRyaWJ1dGVzIiwidHJpZ2dlckNsYXNzZXMiLCJpbnB1dFByb3BzIiwiY29udGVudCIsImRpcmVjdENvbnRyb2xsZWQiLCJwbGFjZWhvbGRlciIsImhlbHBUZXh0UHJvcHMiLCJjcmVhdGVFbGVtZW50IiwiX2V4dGVuZHMiLCJwcm9wVHlwZXMiLCJhcnJheSIsIm9iamVjdCIsIm9uZU9mVHlwZSIsInN0cmluZyIsImJvb2wiLCJmdW5jIiwib25lT2YiLCJQaG9uZUNvbXBvbmVudFdpdGhJZCIsImRlZmF1bHRQcm9wcyIsImNvbWJpbmVkUHJvcHMiLCJpZFByb3AiLCJpZFByb3ZpZGVyUHJvcHMiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../components/react/admin/modules/Phone/PhoneComponent.js\n\n}");
19
19
 
20
20
  /***/ })
21
21