var telmeBase64 = { _keyStr: "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=", encode: function (r) { var t, e, n, o, i, a, f, c = "", h = 0; for (r = telmeBase64._utf8_encode(r); h < r.length;)o = (t = r.charCodeAt(h++)) >> 2, i = (3 & t) << 4 | (e = r.charCodeAt(h++)) >> 4, a = (15 & e) << 2 | (n = r.charCodeAt(h++)) >> 6, f = 63 & n, isNaN(e) ? a = f = 64 : isNaN(n) && (f = 64), c = c + this._keyStr.charAt(o) + this._keyStr.charAt(i) + this._keyStr.charAt(a) + this._keyStr.charAt(f); return c }, decode: function (r) { var t, e, n, o, i, a, f = "", c = 0; for (r = r.replace(/[^A-Za-z0-9\+\/\=]/g, ""); c < r.length;)t = this._keyStr.indexOf(r.charAt(c++)) << 2 | (o = this._keyStr.indexOf(r.charAt(c++))) >> 4, e = (15 & o) << 4 | (i = this._keyStr.indexOf(r.charAt(c++))) >> 2, n = (3 & i) << 6 | (a = this._keyStr.indexOf(r.charAt(c++))), f += String.fromCharCode(t), 64 != i && (f += String.fromCharCode(e)), 64 != a && (f += String.fromCharCode(n)); return f = telmeBase64._utf8_decode(f) }, _utf8_encode: function (r) { r = r.replace(/\r\n/g, "\n"); for (var t = "", e = 0; e < r.length; e++) { var n = r.charCodeAt(e); n < 128 ? t += String.fromCharCode(n) : n > 127 && n < 2048 ? (t += String.fromCharCode(n >> 6 | 192), t += String.fromCharCode(63 & n | 128)) : (t += String.fromCharCode(n >> 12 | 224), t += String.fromCharCode(n >> 6 & 63 | 128), t += String.fromCharCode(63 & n | 128)) } return t }, _utf8_decode: function (r) { for (var t = "", e = 0, n = c1 = c2 = 0; e < r.length;)(n = r.charCodeAt(e)) < 128 ? (t += String.fromCharCode(n), e++) : n > 191 && n < 224 ? (c2 = r.charCodeAt(e + 1), t += String.fromCharCode((31 & n) << 6 | 63 & c2), e += 2) : (c2 = r.charCodeAt(e + 1), c3 = r.charCodeAt(e + 2), t += String.fromCharCode((15 & n) << 12 | (63 & c2) << 6 | 63 & c3), e += 3); return t } }; { function TJSON_Serializer() { var m = { "\b": "\\b", "\t": "\\t", "\n": "\\n", "\f": "\\f", "\r": "\\r", '"': '\\"', "\\": "\\\\" }, s = { array: function (r) { var t, e, n, o, i = ["["], a = r.length; for (n = 0; n < a; n += 1)o = r[n], (e = s[typeof o]) && "string" == typeof (o = e(o)) && (t && (i[i.length] = ","), i[i.length] = o, t = !0); return i[i.length] = "]", i.join("") }, boolean: function (r) { return String(r) }, null: function (r) { return "null" }, number: function (r) { return isFinite(r) ? String(r) : "null" }, object: function (r) { if (JSON && JSON.stringify) return JSON.stringify(r); if (r) { if (r instanceof Array) return s.array(r); var t, e, n, o, i = ["{"]; for (n in r) o = r[n], (e = s[typeof o]) && "string" == typeof (o = e(o)) && (t && (i[i.length] = ","), i.push(s.string(n), ":", o), t = !0); return i[i.length] = "}", i.join("") } return "null" }, string: function (r) { return /["\\\x00-\x1f]/.test(r) && (r = r.replace(/([\x00-\x1f\\"])/g, function (r, t) { var e = m[t]; return e || (e = t.charCodeAt(), "\\u00" + Math.floor(e / 16).toString(16) + (e % 16).toString(16)) })), '"' + r + '"' } }, d = function (x) { if (JSON && JSON.parse) return JSON.parse(x); try { return !/[^,:{}\[\]0-9.\-+Eaeflnr-u \n\r\t]/.test(x.replace(/"(\\.|[^"\\])*"/g, "")) && eval("(" + x + ")") } catch (r) { return !1 } }; this.serialize = s.object, this.deserialize = d } telmeBase64.J = new TJSON_Serializer }
//# sourceURL=ds.js
var MARCHEX_DNI_SCANNER = {
	nodesWithNumbers: [],
	_foundNumbersHashSet: {},
	_searchOptions: { viewPortEnabled: false },
	_vanityNumberRegex: [],
	_NANPA_RGX: null,
	_INTL_RGX: null,
	_VANITY_RGX_LIST: [],
	_viewPortLookup: {
		blocks: [],
		blockHeight: 0,
		blockNumbers: 0
	},

	_isVisible(element, vp) {
		/* This checks if the element is in the viewport area, you could also
		 * check the display and visibility of its style.
		 */
		var rect = element.getBoundingClientRect();
		var x = rect.left;
		var x2 = x + element.offsetWidth;
		var y = rect.top;
		var y2 = y + element.offsetHeight;
		return !(x >= vp.w || y >= vp.h || x2 < 0 || y2 < 0);
	},

	_addElement: function (element) {
		if (!element.getBoundingClientRect) return;
		var rect = element.getBoundingClientRect();
		var y = rect.top + window.pageYOffset;
		var y2 = y + element.offsetHeight;
		var from = Math.trunc(y / blockHeight);
		var to = Math.trunc(y2 / blockHeight);

		for (var b = from; b <= to; ++b) {
			MARCHEX_DNI_SCANNER._viewPortLookup.blocks[b].push(element);
		}
		var nodes = element.childNodes;
		if (nodes) {
			for (var i = 0; i < nodes.length; ++i) {
				MARCHEX_DNI_SCANNER.addElement(nodes[i]);
			}
		}
	},

	searchInitialViewPort: function (searchIntl, vanityNumberList) {
		MARCHEX_DNI_SCANNER._searchOptions.isIntl = searchIntl === true;
		MARCHEX_DNI_SCANNER._searchOptions.viewPortEnabled = true;
		if (vanityNumberList && vanityNumberList.length > 0) {
			MARCHEX_DNI_SCANNER._VANITY_RGX_LIST = MARCHEX_DNI_SCANNER._VANITY_RGX_LIST.concat(MARCHEX_DNI_SCANNER._getVanityNumberRegex(vanityNumberList));
		}

		var blockHeight = window.innerHeight;
		var documentHeight = Math.max(document.body.scrollHeight,
			document.body.offsetHeight,
			document.documentElement.clientHeight,
			document.documentElement.scrollHeight,
			document.documentElement.offsetHeight);

		MARCHEX_DNI_SCANNER._viewPortLookup.blockHeight = window.innerHeight;
		MARCHEX_DNI_SCANNER._viewPortLookup.blocksNumber = Math.ceil(documentHeight / blockHeight);

		for (var b = 0; b < MARCHEX_DNI_SCANNER._viewPortLookup.blocksNumber; b++) {
			MARCHEX_DNI_SCANNER._viewPortLookup.blocks[b] = {
				phoneNumbers: {},
				elements: []
            };
		}
		var foundNumbers = MARCHEX_DNI_SCANNER.searchDOM(searchIntl, []);

		return MARCHEX_DNI_SCANNER.getPhoneNumberNodesFromViewPort(foundNumbers);
	},

	_addNodeToViewPortLookup: function (node, phoneNumber) {
		if (node.className == 'vsnotnumber') {
			return;
		}

		if (node.nodeType !== 1 && node.nodeType !== 3 || (node.nodeName === 'SCRIPT' || node.type === ("text/css") || node.nodeName === "STYLE")) {
			return;
		}

		if (node.nodeType === 3) {
			var parent = node.parentElement;
			if (!parent) {
				return;
			}

			var rect = parent.getBoundingClientRect();
			var y = rect.top + window.pageYOffset;
			var y2 = y + parent.offsetHeight;
		}
		else {
			var rect = node.getBoundingClientRect();
			var y = rect.top + window.pageYOffset;
			var y2 = y + node.offsetHeight;
		}

		var from = Math.trunc(y / MARCHEX_DNI_SCANNER._viewPortLookup.blockHeight);
		var to = Math.trunc(y2 / MARCHEX_DNI_SCANNER._viewPortLookup.blockHeight);

		if (!rect)
			return;

		for (var b = from; b <= to; ++b) {
			var block = MARCHEX_DNI_SCANNER._viewPortLookup.blocks[b];

			if (!block) {
				continue;
            }

			if (block.phoneNumbers[phoneNumber] !== true) {
				block.phoneNumbers[phoneNumber] = true;
			}
			if (!block.elements.includes(node)) {
				block.elements.push(node);
            }			
		}
	},

	_getViewPort: function () {
		var x = window.pageXOffset;
		var w = window.innerWidth;
		var x2 = x + w - 1;
		var y = window.pageYOffset;
		var h = window.innerHeight;
		var y2 = y + h - 1;

		return {
			x: x, w: w, x2: x2, y: y, h: h, y2: y2
		};
	},

	getPhoneNumberNodesFromViewPort: function () {
		// Get the from and to 'block' based on the current viewport
		var vp = MARCHEX_DNI_SCANNER._getViewPort();
		var from = Math.trunc(vp.y / this._viewPortLookup.blockHeight);
		var to = Math.trunc(vp.y2 / this._viewPortLookup.blockHeight) + 1; 

		var phoneNumbers = [];
		var elements = [];
		var length = MARCHEX_DNI_SCANNER._viewPortLookup.blocks.length;
		for (var b = from; b < length && b <= to; ++b) {

			var block = MARCHEX_DNI_SCANNER._viewPortLookup.blocks[b];
			if (block && block.elements && block.elements.length && block.elements.length > 0) {
				elements = elements.concat(block.elements);
			}
			if (block && block.phoneNumbers) {
				for (var prop in block.phoneNumbers) {
					phoneNumbers.push(prop);
				}
			}
		}

		var res =  {
			phoneNumbers: phoneNumbers,
			elementsWithNumbers: elements
		}
		return res;
	},

	searchDOM: function (searchIntl, vanityNumberList) {
		var phoneNumberDict = {};
		var elements = [];
		var numbers = [];
		MARCHEX_DNI_SCANNER._searchOptions.isIntl = searchIntl ===  true;

		if (vanityNumberList && vanityNumberList.length > 0) {
			MARCHEX_DNI_SCANNER._VANITY_RGX_LIST = MARCHEX_DNI_SCANNER._VANITY_RGX_LIST.concat(MARCHEX_DNI_SCANNER._getVanityNumberRegex(vanityNumberList));
		}

		var shadowHosts = MARCHEX_DNI_SCANNER.getShadowHosts();

		for (var i = 0; i < shadowHosts.length; i++) {
			var shadowDOM = shadowHosts[i];
			MARCHEX_DNI_SCANNER._searchDOMNode(shadowDOM, phoneNumberDict, elements, numbers);
		}

		MARCHEX_DNI_SCANNER._searchDOMNode(document, phoneNumberDict, elements, numbers);
		MARCHEX_DNI_SCANNER.nodesWithNumbers = MARCHEX_DNI_SCANNER.nodesWithNumbers.concat(elements);
		return {
			elementsWithNumbers: elements,
			newNumbersFound: numbers,
			phoneNumberDict: phoneNumberDict
		};
	},
	searchDOMNode: function (element) {
		var phoneNumberDict = {};
		var elements = [];
		var numbers = [];
		MARCHEX_DNI_SCANNER._searchDOMNode(element, phoneNumberDict, elements, numbers);
		MARCHEX_DNI_SCANNER.nodesWithNumbers = MARCHEX_DNI_SCANNER.nodesWithNumbers.concat(elements);
		return {
			elementsWithNumbers: elements,
			newNumbersFound: numbers,
			phoneNumberDict: phoneNumberDict
		};
	},

	getAllNodesWithNumbers: function () {
		return MARCHEX_DNI_SCANNER.nodesWithNumbers;
	},

	getAllFoundNumbers: function () {
		var foundNumbers = [];
		for (var property in MARCHEX_DNI_SCANNER._foundNumbersHashSet) {
			foundNumbers.push(property);
		}
		return foundNumbers;
	},

	getShadowHosts: function () {
		const shadowNodes = [];

		function traverseShadowDOM(root, isShadowRoot = false) {
			const walker = document.createTreeWalker(root, NodeFilter.SHOW_ELEMENT, null, false);
			let node = walker.currentNode;
			while (node) {
				if (node.shadowRoot) {
					shadowNodes.push(node);
					traverseShadowDOM(node.shadowRoot, true);
				} else if (isShadowRoot) {
					shadowNodes.push(node);
				}
				node = walker.nextNode();
			}
		}
		traverseShadowDOM(document.body, false);

		return shadowNodes;
	},

	_searchDOMNode: function (node, phoneNumberNodeDict, elements, numbers) {
		if (!node
			|| node.className == 'vsnotnumber'
			|| node.nodeName === "NOSCRIPT"
			|| node.nodeName === 'SCRIPT'
			|| node.type === ("text/css")
			|| node.nodeName === "STYLE"
			|| node.nodeName == "IMG" ||
			(node.parentElement && node.parentElement.nodeName == "STYLE")) {
			return;
		}

		if (node.childNodes.length > 0)
			for (var i = 0; i < node.childNodes.length; i++)
				MARCHEX_DNI_SCANNER._searchDOMNode(node.childNodes[i], phoneNumberNodeDict, elements, numbers);

		if (node.nodeType === 3 && node.nodeValue.length >= 10) {
			var phoneNumber = MARCHEX_DNI_SCANNER._matchAndStorePhoneNumber(node.nodeValue, numbers)
			if (phoneNumber !== '') {
				elements.push(node);
				if (Object.prototype.hasOwnProperty.call(phoneNumberNodeDict, phoneNumber)) {
					phoneNumberNodeDict[phoneNumber].push(node);
				}
				else {
					phoneNumberNodeDict[phoneNumber] = [node];
				}
				if (MARCHEX_DNI_SCANNER._searchOptions.viewPortEnabled) {
					MARCHEX_DNI_SCANNER._addNodeToViewPortLookup(node, phoneNumber);
                }
			}
		}

		if (node.href && typeof node.href.indexOf === "function") {
			var link = node.href;
			var value = null;
			if (link.indexOf("tel:") === 0) {
				value = link.substring(4);
			}
			else if (link.indexOf("sms:") === 0) {
				value = link.substring(4);
			}
			else if (link.indexOf("callto:") === 0) {
				value = link.substring(7);
			}
			else if (link.indexOf("wtai://wp/mc;") === 0) {
				value = link.substring(13);
			}
			else if (link.indexOf("wtai://wp/ap;") === 0) {
				value = link.substring(13);
			}
			else if (link.indexOf("wtai://wp/sd;") === 0) {
				value = link.substring(13);
			}
			if (!value)
				return;
			var phoneNumberInLink = MARCHEX_DNI_SCANNER._matchAndStorePhoneNumber(value, numbers)
			if (phoneNumberInLink !== '') {
				elements.push(node);
				if (Object.prototype.hasOwnProperty.call(phoneNumberNodeDict, phoneNumberInLink)) {
					phoneNumberNodeDict[phoneNumberInLink].push(node);
				}
				else {
					phoneNumberNodeDict[phoneNumberInLink] = [node];
					numbers.push(phoneNumberInLink);
				}
				if (MARCHEX_DNI_SCANNER._searchOptions.viewPortEnabled) {
					MARCHEX_DNI_SCANNER._addNodeToViewPortLookup(node, phoneNumberInLink);
				}
			}
		}
	},

	_matchAndStorePhoneNumber: function (phoneNumber, newNumbersFound) {
		if (MARCHEX_DNI_SCANNER._VANITY_RGX_LIST.length > 0) {
			var matched = MARCHEX_DNI_SCANNER._matchAndStoreVanityPhoneNumber(phoneNumber, newNumbersFound);
			if (matched !== '') {
				return matched;
			}
		}
		if (MARCHEX_DNI_SCANNER._searchOptions !== null && MARCHEX_DNI_SCANNER._searchOptions.isIntl === true) {
			return MARCHEX_DNI_SCANNER._matchAndStoreIntlPhoneNumber(phoneNumber, newNumbersFound);
		}
		else {
			return MARCHEX_DNI_SCANNER._matchAndStoreNAPhoneNumber(phoneNumber, newNumbersFound);
		}
	},

	_matchAndStoreVanityPhoneNumber: function (phoneNumber, numbers) {
		var cleanValue = '';
		for (var i = 0; i < MARCHEX_DNI_SCANNER._VANITY_RGX_LIST.length; i++) {
			var results = phoneNumber.match(MARCHEX_DNI_SCANNER._VANITY_RGX_LIST[i]);
			if (!results || results.length === 0)
				continue;
			for (var j = 0; j < results.length; j++) {
				cleanValue = MARCHEX_DNI_SCANNER._stripVanityPhoneNumber(results[j]);
				if (cleanValue.length < 10 || cleanValue.length > 20) {
					continue;
				}
				if (!MARCHEX_DNI_SCANNER._foundNumbersHashSet[cleanValue] && cleanValue.length >= 9) {
					MARCHEX_DNI_SCANNER._foundNumbersHashSet[cleanValue.toLowerCase()] = true;
				}
				numbers.push(cleanValue);

			}
		}
		return cleanValue;
	},
	_matchAndStoreNAPhoneNumber: function (phoneNumber, numbers) {
		var cleanValue = '';
		var results = phoneNumber.match(MARCHEX_DNI_SCANNER.NANPA_RGX);
		if (!results || results.length === 0)
			return cleanValue;

		for (var i = 0; i < results.length; i++) {

			cleanValue = MARCHEX_DNI_SCANNER._stripPhoneNumber(results[i]);
			if (cleanValue.length > 10) {
				cleanValue = cleanValue.substring(cleanValue.length - 10);
			}
			if (!MARCHEX_DNI_SCANNER._foundNumbersHashSet[cleanValue] && cleanValue.length >= 10) {
				MARCHEX_DNI_SCANNER._foundNumbersHashSet[cleanValue] = true;
			}
			numbers.push(cleanValue);
		}
		return cleanValue;
	},

	_matchAndStoreIntlPhoneNumber: function (inputString, numbers) {
		var cleanValue = '';
		var matched = inputString.match(MARCHEX_DNI_SCANNER.INTL_RGX);
		while (matched !== null || matched !== '') {
			if (!matched || matched.length === 0)
				break;

			for (var i = 0; i < matched.length; i++) {

				cleanValue = MARCHEX_DNI_SCANNER._stripPhoneNumber(matched[i]);
				if (!MARCHEX_DNI_SCANNER._foundNumbersHashSet[cleanValue] && cleanValue.length >= 10 && cleanValue.length <= 20) {
					MARCHEX_DNI_SCANNER._foundNumbersHashSet[cleanValue] = true;
				}
				numbers.push(cleanValue);
			}
			inputString = inputString.substring(matched.index + matched[0].length);
			matched = inputString.match(MARCHEX_DNI_SCANNER.INTL_RGX);;
		}
		return cleanValue;
	},

	_stripPhoneNumber: function (number) {
		if (typeof number !== 'string') {
			return null;
		}
		var preDecodeNumber = number;
		try {
			number = decodeURI(number);
		}
		catch (e) {
			number = preDecodeNumber;
		}
		var stripped = number.replace(/[^0-9]/g, '');
		return stripped;
	},

	_stripVanityPhoneNumber: function (number) {
		if (typeof number !== 'string') {
			return null;
		}
		number = decodeURI(number);
		var stripped = number.replace(/[^0-9a-zA-z]/g, '');
		return stripped;
	},

	_getVanityNumberRegex: function (vanityNumbers) {
		var vanityRegexList = [];
		if (vanityNumbers && vanityNumbers.length > 0) {
			for (var i = 0; i < vanityNumbers.length; i++) {
				vanityRegexList.push(RegExp(MARCHEX_DNI_SCANNER._createMatchNumberPattern(vanityNumbers[i]), "gi"));
			}
		}
		return vanityRegexList;
	},

	_createMatchNumberPattern: function (key) {
		var l = key.length;
		var pattern = "";
		if (MARCHEX_DNI_SCANNER._searchOptions.isIntl === true) {
			pattern = "([[\(\+])?";
		}
		for (var i = 0; i < l; i++) {
			if (i === 0)
				pattern += "(?:" + key[i] + ")";
			else
				pattern += "((?:[^0-9a-zA-Z<]|(?:&.{2,6};)|(?:<[^>]*>)){0,6})(?:" + key[i] + ")";
		}
		return pattern;
	},

	_hasClassName: function (node, className) {
		var i, classNames;

		if (!className) { // any false value of className
			return false;
		}
		if (typeof node.className !== 'string') {
			return false;
		}

		classNames = node.className.split(' ');
		var classNamesLen = classNames.length;
		for (i = 0; i < classNamesLen; ++i) {
			if (classNames[i] === className) {
				return true;
			}
		}
		return false;
	}

};

(function () {
	var getNARegex = function () {
		var parts = [
			'(',// begin match group
			'(?:[^0-9])*)', // match any none digit chars (if there is one) 
			'(\d{3})',  // match 3 digit chars for NPA
			'((?:[^0-9])+)', // match any none digit chars (if there is one)
			'(\d{3})',  // match 3 digit chars for NPA for NXX
			'((?:[^0-9])*)', // match any none digit chars (if there is one)
			'(\d{4})', // match 4 digit chars for the slid
			'((?:[^0-9])*)', // match any none digit chars (if there is one)
			'|', // OR,
			'\d*', // check if there's leading digit
			'\d\d\d\d\d\d\d\d\d\d', // get the last 10 digits for npa-nxx-slid
			')' // end group
		];
		return /((?:[^0-9])*)(\d{3})((?:[^0-9])+)(\d{3})((?:[^0-9])*)(\d{4})((?:[^0-9])*)|\d*\d\d\d\d\d\d\d\d\d\d/gi;
	};

	var getInternationalRegex = function () {
		var parts = [
			'(', // begin match group
			'[[\\(\\+]?', // optional leading chars: [(+
			'(?:[0-9](?:[[\\]()\\s.\\-', getSpecialChars(), ']|%20)*', ')', // body of number
			'{4,}[0-9]', // at least 5 chars, but no more than 20 ending in a digit
			')' // end capture group
		];
		var intlString = parts.join('');
		return new RegExp(intlString);
	};
	var getSpecialChars = function () {
		var puncts = [
			'\\', 'xAD', // soft hyphen
			'\\', 'xB7', // middle dot
			'\\', 'u2010', // hyphen
			'\\', 'u2011', // non-breaking hyphen
			'\\', 'u2013', // en dash
			'\\', 'u2014', // em dash
			'\\', 'u2015', // horizontal bar
			'\\', 'u2022', // bullet
			'\\', 'u2027', // hyphen point
			'\\', 'u2043', // hyphen bullet
			'\\', 'u2063', // invisible separator
			'\\', 'u2212' // minus
		];
		var punct_str = puncts.join('');
		return punct_str;
	}

	MARCHEX_DNI_SCANNER.INTL_RGX = getInternationalRegex();
	MARCHEX_DNI_SCANNER.NANPA_RGX = getNARegex();
})();

var telmeDniOrgSdk = {
    scriptType: "",
    getCache: function () {
        var cache = localStorage.getItem("telme.js.session");
        if (!cache)
            return {
                sessionData: {},
                replacementCollection: {},
                expires: null
            };
        return telmeBase64.J.deserialize(cache);
    },

    initWithErrotHandling: function () {
        var js,
            id = "telme-error-handler",
            ref = document.getElementsByTagName('script')[0];
        if (window.Sentry || document.getElementById(id)) {
            return;
        }
        js = document.createElement('script');
        js.id = id;
        js.async = true;
        js.src = "https://browser.sentry-cdn.com/5.0.7/bundle.min.js";
        js.crossorigin = "anonymous";
        js.onload = function () {
            Sentry && Sentry.init({
                dsn: "$errorappkey"
            });
            telmeDniOrgSdk.getSdkWithNumbers(document);
        };
        js.onerror = function () {
            telmeDniOrgSdk.getSdkWithNumbers(document);
        };
        ref.parentNode.insertBefore(js, ref);
    },
    getCachedSession: function (d) {
        var session;
        var cache = telmeDniOrgSdk.getCache();
        session = cache && cache.sessionData ? cache.sessionData.SessionIdentifier : "";

        return session;
    },
    getPageVars: function () {
        var pageVarsJson = {};
        var pageVars = '';
        try {
            if (marchex_dni_management && marchex_dni_management.on_page_variables) {
                for (var i in marchex_dni_management.on_page_variables) {
                    pageVarsJson[i] = marchex_dni_management.on_page_variables[i];
                }
            }

            if (mchx_jsrw_args) {
                for (var i in mchx_jsrw_args) {
                    pageVarsJson[i] = mchx_jsrw_args[i];
                }
            }

            if (typeof vs_ref_override !== "undefined" && vs_ref_override !== null) {
                pageVarsJson.vs_ref_override = vs_ref_override;
            }

        } catch (e) { }

        if (Object.entries(pageVarsJson).length > 0) {
            pageVars = telmeBase64.J.serialize(pageVarsJson);
        }
        return pageVars;
    },
    getSdk() {
        var id = "telmeJsSdk"
        var d = document;
        if (typeof MARCHEX_DNI_SCANNER === 'undefined' || d.getElementById(id)) {
            telmeDniOrgSdk.getSdk(d);
            return;
        }

        var session = this.getCachedSession(d);
        var pageVars = this.getPageVars();
        var vanityNumbers = [];

        try {
            var vanityNumbersJson = '[]'
            if (vanityNumbersJson !== 'null') {
                vanityNumbers = telmeBase64.J.deserialize(vanityNumbersJson);
            }
        } catch (e) {
            vanityNumbers = [];
        }

        var foundLookup = MARCHEX_DNI_SCANNER.searchInitialViewPort(false, vanityNumbers);
        var foundHtmlAttrs = this.getHtmlAttributes([]);

        var phoneNumbers = foundLookup.phoneNumbers;
        var body = {
            web2telIdentifier: "bfeeffbc-c680-4b94-ba77-a5df15f7e929",
            pageUrl: d.URL,
            referrerUrl: d.referrer,
            sessionIdentifier: session,
            pageVariablesJson: pageVars,
            scannedPhoneNumbers: phoneNumbers,
            htmlAttributes: foundHtmlAttrs
        };
        var url = 'https://web-2-tel.com/org-jsSdk';
        var xhr = new XMLHttpRequest();
        xhr.open('POST', url, true);
        xhr.setRequestHeader('Content-type', 'application/json');
        xhr.send(telmeBase64.J.serialize(body));
        xhr.onreadystatechange = function () {
            if (xhr.readyState !== 4 || xhr.status !== 200 || xhr.response === '') {
                return;
            }
            var js = document.createElement('script');
            js.text = xhr.response;
            var ref = document.getElementsByTagName('script')[0];

            document.getElementsByTagName('script')[0].parentNode.insertBefore(js, ref);
        }
    },

    getHtmlAttributes(htmlAttrs) {
        if (!htmlAttrs || htmlAttrs.length == 0) {
            return [];
        }
        var shadowHosts = MARCHEX_DNI_SCANNER.getShadowHosts();

        var res = [];
        for (var i = 0; i < htmlAttrs.length; i++) {
            var replacement = htmlAttrs[i];

            var attrName = replacement.AttributeName;
            if (!attrName || attrName.trim() === "") {
                continue;
            }

            var querySelector = replacement.AttributeValue && replacement.AttributeValue.length > 0
                ? "[" + attrName + "~='" + replacement.AttributeValue + "']"
                : "[" + attrName + "]";
            var nodeList = document.querySelectorAll(querySelector);
            var found = false;

            if (nodeList.length > 0) {
                found = true;
            }

            for (var j = 0; j < shadowHosts.length; j++) {
                var shadowNodeList = shadowHosts[j].querySelectorAll(querySelector);
                if (shadowNodeList.length > 0) {
                    found = true; 
                    break;
                }
            }

            if (found) {
                res.push(replacement);
            }
        }

        return res;
    },

    init: function (errorHandling) {
        if (document.readyState === "interactive" || document.readyState === "loaded" || document.readyState === "complete") {
            if (errorHandling) {
                telmeDniOrgSdk.initWithErrotHandling();
            }
            else {
                telmeDniOrgSdk.getSdk();
            }
        }
        else {
            setTimeout(function () {
                telmeDniOrgSdk.init(false);
            }, 100);
        }
    }
}; telmeDniOrgSdk.init(false);