mmRequestCallbacks[1]({"Scripts":[{"Name":"IntegrationModule","Type":"script","Attrs":{"type":"text/javascript"},"Data":"!function(){function a(){function a(a,b){function i(b){return a=a||\"\",g(\"Integrations.register(\"+a+\"): \"+(b||\"\").toString())}var j,k;return b=e(b)?b:{},(a=(\"string\"==typeof a?a:\"\").toLowerCase().replace(/^\\s+|\\s+$/g,\"\"))?l[a]?(i(m.errors.alreadyRegistered),null):(b.name=a,j=h(b,{}),k={validate:c(j.validate)?j.validate:f,check:c(j.check)?j.check:f,interval:d(j.interval)?j.interval:50,timeout:d(j.timeout)?j.timeout:2e3,exec:c(j.exec)?j.exec:f,options:j},j=h(k,j),l[a]=j):(i(m.errors.missingRegisterName),null)}function i(a,b){b=e(b)?b:{};var c,d,f,g,i=new Deferred;if(a=(a||\"\").toLowerCase(),i.integrationName=a,!l[a])return m.reject(i,m.errors.unregisteredIntegration);if(c=h(l[a],{}),c=h(b,c),(f=c.validate(c))!==!0)return m.reject(i,f);if(d=c.campaign,(g=m.validateCampaignRequired(c,i))!==!0)return m.reject(i,g);if(c.isProduction=m.isProduction(),c.attributeMapRequired){var j=m.isValidAttributeMap(c.attributeMap);if(j!==!0)return m.reject(i,j)}return\"pending\"!==i.state()?i.promise():(\"never\"!==c.timeout&&m.setFailTimeout(c,i),m.check(c).then(function(a){return m.exec(c)}).then(function(a){return c.result=a,m.resolve(i,c)}).fail(function(a){return m.reject(i,a)}),i.promise())}function j(a,b){a=(a||\"\").toLowerCase();var c=l[a];return!!c&&(b=e(b)?b:{},l[a]=h(b,c),this)}function k(a){if(!a)return l;var b=(a||\"\").toLowerCase();return l[b]}var l={},m={errors:{missingRegisterName:\"Invalid integration reigstration. Name argument is required.\",missingRegisterExec:\"Missing `exec` for integration registration\",alreadyRegistered:\"Integration has already been registered\",missingRunName:\"Missing `name` for `integration.run`\",unregisteredIntegration:\"Unknown integration name\",noCampaignExperience:\"Integration was run before the campaign has generated\",noRedirectCampaign:\"Redirect Integration is not in a valid campaign scope\",noRedirectCampaignData:\"Redirect Integration is not on a generation page\",campaignRequired:\"Integration must be deployed within a campaign script\",failedToSaveRedirectData:\"Failed to save redirect data\"},HALFHOUR:1/48,isProduction:function(){function a(a){for(var c,d={},e=\"\",f=0;c=b(a+f++);)e+=c;e=decodeURIComponent(e);try{d=JSON.parse(e)}catch(g){}return d}function b(a){var b=new RegExp(\"(?:^|; )\"+encodeURIComponent(a).replace(/([.$?*|{}()\\[\\]\\\\\\/+^])/g,\"\\\\$1\")+\"=([^;]+)\"),c=(document.cookie.match(b)||[\"\",\"\"])[1];return c}var c=mmsystem.getConfig().storageType;if(\"cookie-key-value\"===c||\"cookie-key-value-secure\"===c)return!/mmapi.p.cfgid/i.test(document.cookie)&&!/mmapi.p.un/i.test(document.cookie);for(var d=a(\"mmcore.store.p.\")||{},e=a(\"mmcore.store.s.\")||{},f=a(\"mmapi.store.p.\")||{},g=a(\"mmapi.store.s.\")||{},h=[d,e,f,g],i={\"mmparams.p\":1,\"mmparams.d\":1},j={un:1,cfgID:1,pruh:1},k=h.length;k--;){var l=h[k];for(var m in i||{})for(var n in j||{})if((l[m]||{})[n])return!1}return!0},isValidIntegrationName:function(a){return\"string\"==typeof a&&/^\\w+/.test(a)},isCampaignScope:function(a){return!!(e(a)&&a.getName&&a.getExperience)},getCampaignExperience:function(a){var b={};return m.isCampaignScope(a)&&(b=a.getExperience&&a.getExperience()||{}),!!Object.keys(b)&&m.formatCampaignExperience(b)},formatCampaignExperience:function(a){a=e(a)?a:{};var b=[];for(var c in a)b.push(c+\":\"+a[c]);return b.join(\"|\")},getData:function(a){a=(a||\"\").toLowerCase();var b=visitor.getData(\"Integrations\");return b=e(b)?b:{},a&&(b[a]=b[a]||{}),b},setRedirectData:function(a,b){if(a=(a||\"\").toLowerCase(),!m.isCampaignScope(b))return!1;var c=m.getData(a),d=b.getName();return c[a][d]=c[a][d]||{},c[a][d].redirectData=b.getExperience(),visitor.setData(\"Integrations\",c,m.HALFHOUR),!0},removeRedirectData:function(a,b){if(a=(a||\"\").toLowerCase(),!m.isCampaignScope(b))return!1;var c=m.getData(a),d=b.getName();return c[a][d]=c[a][d]||{},c[a][d].redirectData=null,visitor.setData(\"Integrations\",c,m.HALFHOUR),!0},getRedirectData:function(a,b){if(a=(a||\"\").toLowerCase(),!m.isCampaignScope(b))return!1;var c=m.getData(a),d=b.getName();if(c[a][d]=c[a][d]||{},!c[a]||!c[a][d])return c[a]=c[a]||{},c[a][d]=c[a][d]||{},c[a][d].redirectData=null,visitor.setData(\"Integrations\",c,m.HALFHOUR),!1;for(var e in c[a])if(e===d)return c[a][e].redirectData;return!1},getSessionDate:function(a,b){var c=m.getData(a),d=c[a][b.getName()]||{},e=d.sessionDate;return e},setSessionDate:function(a,b){var c=m.getData(a),d=b.getName();c[a][d]=c[a][d]||{},c[a][d].sessionDate=(new Date).getTime(),visitor.setData(\"Integrations\",c,m.HALFHOUR)},resolve:function(a,b){return a.resolve(b),a.promise()},reject:function(a,b){var c=a.integrationName||\"unknown name\";return b=b||\"unknown reason\",g(\"Integration [\"+c+\"]: \"+b.toString()),a.reject(b),a.promise()},validateCampaignRequired:function(a,b){if(!a.campaignRequired)return a.oncePerSession?\"campaign option is required when using the oncePerSession option\":!a.redirect||\"campaign option is required when using the redirect option\";var c=a.campaign,d=\"\",e=m.isCampaignScope(c);if(e!==!0)return m.errors.campaignRequired;if(a.campaignExperience=m.getCampaignExperience(c),a.campaignExperience===!1&&!a.redirect)return m.errors.noCampaignExperience(a.name);if(a.oncePerSession&&!a.redirect&&a.oncePerSession&&(d=m.getSessionDate(a.name,c),m.setSessionDate(a.name,c),(new Date).getTime()-m.HALFHOUR>d))return g(\"Integration [\"+a.name+\"]: data has already been sent this session\"),m.resolve(b,a),!0;if(a.redirect){var f=function(){var a=c.getElements();for(var b in a)return!0;return!1}();return f?c.isDefault()?!(a.oncePerSession&&(d=m.getSessionDate(a.name,c),m.setSessionDate(a.name,c),(new Date).getTime()-m.HALFHOUR>d))||(g(\"Integration [\"+a.name+\"]: data has already been sent this session\"),m.resolve(b,a),!0):m.setRedirectData(a.name,c)?(m.resolve(b,a),!0):m.errors.failedToSaveRedirectData:a.oncePerSession&&(d=m.getSessionDate(a.name,c),m.setSessionDate(a.name,c),(new Date).getTime()-m.HALFHOUR>d)?(g(\"Integration [\"+a.name+\"]: data has already been sent this session\"),m.resolve(b,a),!0):(a.campaignExperience=m.getRedirectData(a.name,c),a.campaignExperience=m.formatCampaignExperience(a.campaignExperience),m.removeRedirectData(a.name,c),!!a.campaignExperience||m.errors.noRedirectCampaignData)}return!0},setFailTimeout:function(a,b){!function(b){setTimeout(function(){setTimeout(function(){if(\"pending\"===b.state())return m.reject(b,\"Integration timed out after \"+a.timeout+\"ms\")},0)},a.timeout+1)}(b)},isValidAttributeMap:function(a){if(!a)return\"Missing required attributeMap parameter\";if(!e(a)||!Object.keys(a).length)return\"The attributeMap parameter is empty or not an object\";for(var b in a){var c=a[b];if(\"string\"!=typeof b||!/^[a-zA-Z]+/.test(b))return\"Invalid attribute name in the attributeMap\";if(!e(c))return\"attributeMap values must be stored in an object\";if(!Object.keys(c).length)return\"attributeMap attribute object is empty\";for(var d in c)if(!/^\\w+$/.test(d)&&\"default\"!==d)return\"Invalid attribute ID in attributeMap\"}return!0},check:function(a){var c=new Deferred,d=!1;return function e(){var f=a.check.call(this,a);return b(f)?void setTimeout(function(){f.done(function(){return c.resolve()}).fail(function(a){return c.reject(a)})},0):f?void setTimeout(function(){c.resolve()},0):void(d||setTimeout(e,a.interval))}(),setTimeout(function(){d=!0},a.timeout),c.promise()},exec:function(a){var c=new Deferred,d=a.exec.call(this,a);return b(d)?(setTimeout(function(){d.done(function(a){return c.resolve(a)}).fail(function(a){return c.reject(a)})},0),c.promise()):(d===!0?m.resolve(c,a.result):m.reject(c,d),c.promise())}};return{register:a,run:i,setDefaults:j,get:k}}function b(a){return e(a)&&c(a.then)}function c(a){return\"function\"==typeof a}function d(a){return\"number\"==typeof a&&a>0}function e(a){return\"object\"==typeof a&&!!a}function f(){return!0}function g(a){window.mm_error=window.mm_error||\"\",window.mm_error+=a+\"\\n\"}function h(a,b){a=e(a)?a:{},b=e(b)?b:{};var c={};for(var d in b)c[d]=b[d];for(var f in a)c[f]=a[f];return c}if(\"object\"==typeof modules&&\"function\"==typeof modules.define){var i={autoDefine:!0,singleton:!0};modules.define(\"Integrations\",i,a)}else modules={require:function(){return new a}}}();\n","Order":-100,"HighLevelApiVersion":"1.24"},{"Name":"mParticle","Type":"script","Attrs":{"type":"text/javascript"},"Data":"/*\n  mParticle Integration\n    Utilize the logEvent function to send experience data to mParticle for QL to use for reporting\n  Version: 0.0.1\n    The default is sent in the following order: campaign-element: experience\n  Version: 0.0.2\n    QL/mParticle recommended the sent data is changed so it's separated out like this:\n      campaign name: demo\n      elementN: element1\n      experienceN: experience1\n      campaign type: mvt or a/b\n      traffic source: trafficSource Custom Attribute\n*/\n(function() {\n    var mParticle = {\n        version: '0.0.2',\n        campaignRequired: true,\n        timeout: 5000,\n        validate: function(integration) {\n            if (!integration.logEventLabel) {\n              return supportFunction.noEventLabel;\n            }\n            if (!integration.eventType) {\n              return supportFunction.noEventType;\n            }\n            if (!supportFunction.isEventTypeValid(integration.eventType)) {\n              return supportFunction.eventTypeNaN;\n            }\n            return true;\n        },\n        check: function(integration) {\n            return window.mParticle !== undefined && typeof window.mParticle === 'object'\n            && typeof window.mParticle.logEvent === 'function';\n        },\n        exec: function(integration) {\n            var experience = {},\n            mParticleData = {},\n            mParticleEE = {},\n            element = '',\n            variant = '',\n            parsed = '',\n            keepCount = 0,\n            index = 0;\n\n            var mPData = [];\n\n\n            parsed = integration.campaignExperience.split('|'); // split MVT into each element:variant pair\n\n            parsed.map(function(val, index) {\n                keepCount++;\n                element = val.split(':')[0] || '';\n                variant = val.split(':')[1] || '';\n                //experience[name + '-' + element] = variant;\n                mParticleData[++index + \"_elementName\"] = element;\n                mParticleData[index + \"_experienceName\"] = variant;\n            });\n\n            var name = integration.campaign.getName(); // add prefix to campaign name\n            mParticleData[\"campaignName\"] = name;\n\n            if (keepCount > 1) {\n              mParticleData[\"campaignType\"] = \"MVT\";\n            }\n            else {\n              mParticleData[\"campaignType\"] = \"A/B\";\n            }\n\n            mParticleData[\"trafficSource\"] = visitor.getAttr('TrafficSource');\n\n            window.mParticle.logEvent(integration.logEventLabel, integration.eventType, mParticleData); //experience);\n\n            return true;\n        }\n    };\n\n    var supportFunction = {\n      noEventLabel: 'Integration is missing an Event Label',\n      noEventType: 'Integration is missing the Event Type (1 - 8)',\n      eventTypeNaN: 'Integration Event Type can only be a number from 1 - 8',\n      isEventTypeValid: function(val) {\n        return (val > 0 && val < 9) && (Object.prototype.toString.call(val) === '[object Number]' && val === val);\n      }\n    };\n\n    // Register and export\n    if (typeof modules === 'object' && typeof modules.define === 'function') {\n        modules.require('Integrations').register('mParticle', mParticle);\n    }\n})();\n","Order":-50,"HighLevelApiVersion":"1.24"},{"Name":"tntcookies","Type":"script","Attrs":{"type":"text/javascript"},"Data":"/*(function () {\n    'use strict';\n    window.tntcookies = function (campaign) {\n        /**\n         * IMPORTANT: This MUST be RUN on EVERY campaign, so that all\n         * campaigns and experiences will be recorded in the cookie, in the case\n         * where a client is entered into multiple campaigns.\n         * expeienceAppendElements will get all Maxymiser elements for an experience and | delimit them\n         * cookieAppendUnique takes the name and valueof the cookie to create/update\n         * Append data to a cookie, only if it is not present.\n         * @param string Name of the cookie.\n         * @param string Value to check/append the cookie.\n         * @return string\n         */\n        //Cookie handler\n       /* function cookie(name, value, options) {\n            if (typeof value === 'undefined') {\n                var n, v,\n                    cookies = document.cookie.split(';');\n                for (var i = 0; i < cookies.length; i++) {\n                    n = cookies[i].substr(0, cookies[i].indexOf('=')).trim();\n                    v = cookies[i].substr(cookies[i].indexOf('=') + 1);\n                    if (n === name) {\n                        return window.unescape(v);\n                    }\n                }\n            } else {\n                options = options || {};\n                if (!value) {\n                    value = '';\n                    options.expires = -365;\n                } else {\n                    value = window.escape(value);\n                }\n                if (options.expires) {\n                    var d = new Date();\n                    d.setDate(d.getDate() + options.expires);\n                    value += '; expires=' + d.toUTCString();\n                }\n                if (options.domain) {\n                    value += '; domain=' + options.domain;\n                }\n                if (options.path) {\n                    value += '; path=' + options.path;\n                }\n                document.cookie = name + '=' + value;\n            }\n        }\n\n        var experienceAppendElements = function () {\n            var getExperience = campaign.getExperience();\n\n            var experience = [];\n\n            for (var key in getExperience) {\n                if (getExperience.hasOwnProperty(key)) {\n                    var name = key + ':' + getExperience[key];\n                    experience.push(name);\n                }\n            }\n          console.log(experience);\n            var string = experience.join('|');\n          console.log('string: ' + string);\n            return string;\n        };\n\n        /**\n         * Append data to a cookie, only if it is not present.\n         * @param string Name of the cookie.\n         * @param string Value to check/append the cookie.\n         * @return string\n         */\n       /* var cookieAppendUnique = function (name, value) {\n            var cookieVal, returnValue;\n\n            cookieVal = cookie(name);\n            returnValue = value;\n            // when the cookie is set\n            if (typeof cookieVal === 'string' && cookieVal.length > 0) {\n                // test for the value.\n                if (cookieVal.indexOf(value) === -1) {\n                    returnValue = cookieVal + ',' + value;\n                } else {\n                    returnValue = cookieVal;\n                }\n            }\n            return returnValue;\n        };\n\n        var campaignName = campaign.getName(),\n            experienceName = experienceAppendElements(),\n            cookieDomain = '.' + location.hostname.split('.').slice(-2).join('.'),\n            cookieOptions = {\n                path: '/',\n                domain: cookieDomain\n            },\n            cookieAppendUnique;\n\n        // Set Test and Target campaign cookies.\n        // Set Rocket cookies, same as above but different names/keys.\n        cookie('tnt_id', 'Maxymiser', cookieOptions);\n        cookie('tntPlatform', 'Maxymiser', cookieOptions);\n\n        // Add campaigns name to the cookie, but only once.\n        cookie('tnt_campaign', cookieAppendUnique('tnt_campaign', campaignName), cookieOptions);\n        cookie('tntCampaign', cookieAppendUnique('tntCampaign', campaignName), cookieOptions);\n\n        // Add experience to the cookie, but only once.\n        cookie('tnt_experience', cookieAppendUnique('tnt_experience', experienceName), cookieOptions);\n        cookie('tntExperience', cookieAppendUnique('tntExperience', experienceName), cookieOptions);\n\n    };\n})();*/\n\n\n//clear out cookies from last page load\nlocalStorage.removeItem('tnt_experience');\nlocalStorage.removeItem('tnt_campaign');\n/* Converted cookies to localStorage\ncookies.remove('tnt_campaign');\ncookies.remove('tntCampaign');\ncookies.remove('tnt_experience');\ncookies.remove('tntExperience');\n*/\nwindow.tntcookies = function(campaign) {\n\n    experienceAppendElements = function () {\n        var getExperience = campaign.getExperience();\n        var experience = [];\n        for (var key in getExperience) {\n            if (getExperience.hasOwnProperty(key)) {\n                var name = key + ':' + getExperience[key];\n                experience.push(name);\n            }\n        }\n        var string = experience.join('|');\n        return string;\n    };\n\n    cookieAppendUnique = function (name, value) {\n        var cookieVal, returnValue;\n        cookieVal = cookies.get(name);\n        returnValue = value;\n        // when the cookie is set\n        if (typeof cookieVal === 'string' && cookieVal.length > 0) {\n            // test for the value.\n            if (cookieVal.indexOf(value) === -1) {\n                returnValue = cookieVal + ',' + value;\n            } else {\n                returnValue = cookieVal;\n            }\n        }\n        return returnValue;\n    };\n\n    localStorageAppendUnique = function (name, value) {\n        var storedVal, returnValue;\n        storedVal = localStorage.getItem(name);\n        returnValue = value;\n        // when the cookie is set\n        if (typeof storedVal === 'string' && storedVal.length > 0) {\n            // test for the value.\n            if (storedVal.indexOf(value) === -1) {\n                returnValue = storedVal + ',' + value;\n            } else {\n                returnValue = storedVal;\n            }\n        }\n        return returnValue;\n    };\n\n    var campaignName = campaign.getName(),\n        cookieDomain = '.' + location.hostname.split('.').slice(-2).join('.'),\n        cookieOptions = {\n            path: '/',\n            domain: cookieDomain,\n            expires: 0\n        },\n        cookieAppendUnique,\n        experienceAppendElements,\n        experienceName = experienceAppendElements();\n    /*\n    I was instructed to stop setting the cookies and set localStorage instead. At this time there\n    are no items reading the cookies. The value the cookies represented are being directly sent to\n    the Direct Call Rule in Launch. : Ben Oliver 2/17/2020\n\n    cookies.set('tnt_id', 'Maxymiser', cookieOptions);\n    cookies.set('tntPlatform', 'Maxymiser', cookieOptions);\n\n    // Add campaigns name to the cookie, but only once.\n    cookies.set('tnt_campaign', cookieAppendUnique('tnt_campaign', campaignName), cookieOptions);\n    cookies.set('tntCampaign', cookieAppendUnique('tntCampaign', campaignName), cookieOptions);\n\n    // Add experience to the cookie, but only once.\n    cookies.set('tnt_experience', cookieAppendUnique('tnt_experience', experienceName), cookieOptions);\n    cookies.set('tntExperience', cookieAppendUnique('tntExperience', experienceName), cookieOptions);\n    */\n    localStorage.setItem('tnt_id', 'Maxymiser', cookieOptions);\n    localStorage.setItem('tnt_campaign', localStorageAppendUnique('tnt_campaign', campaignName));\n    localStorage.setItem('tnt_experience', localStorageAppendUnique('tnt_experience', experienceName));\n    var camp_id = campaignName.split(\",\").map(function(campstr){\n      campstr = campstr.substr(0, 6);\n      campstr = campstr.replace(/ /g, '');\n      campstr = campstr.replace(/-/g,\"\");\n      return campstr;\n    }).join(\",\");\n\n\n    var mmDataObject = {\"tnt_campaign\":campaignName,\"tnt_experience\":experienceName,\"camp_id\":camp_id};\n\n    /*\n    The setInterval is being used because the there are instances where MM is NOT\n    being loaded by way of Launch, the _satellite object needs to be available\n    before the call is made to trigger the Direct Call Rule.\n    */\n    function checkingSat() {\n      if(typeof _satellite != \"undefined\"){\n        clearInterval(satCheck);\n        _satellite.track('maxymiserCampaignGeneration',mmDataObject);\n      }\n    }\n\n    var satCheck = setInterval(checkingSat, 500);\n\n};\n","Order":-10,"HighLevelApiVersion":"1.24"},{"Name":"trafficSource_PC","Type":"script","Attrs":{"type":"text/javascript"},"Data":";\n(function trafficSourcePC() {\n    'use strict';\n\n    var searchObj = searchToObject(window.location.search.toLowerCase()),\n        qls, map, source;\n\n    if (searchObj.qls) {\n        qls = searchObj.qls.toUpperCase();\n        map = {\n\n'SocialFB': [/FBK_FBDRREFI\\.DMVAPRSPCT.*\\./gi, /FBK_FBDRREFI\\.DMFHAPRPCT.*\\./gi, /FBK_FBDRREFI\\.DMHARPPSPT.*\\./gi, /FBK_FBDRREFI\\.DMCNVPRPCT.*\\./gi],\n\n'PSFHAPur': [/_FHAFHP1.*\\..+/gi, /_FHPAPON.*\\..+/gi, /_FHPAPPL.*\\..+/gi, /_FHPAPPY.*\\..+/gi, /_FHPARM2.*\\..+/gi, /_FHPBRAN.*\\..+/gi, /_FHPBRKE.*\\..+/gi, /_FHPCNST.*\\..+/gi, /_FHPCOM1.*\\..+/gi, /_FHPCOMP.*\\..+/gi, /_FHPFEDR.*\\..+/gi, /_FHPGOVL.*\\..+/gi, /_FHPHOME.*\\..+/gi, /_FHPHOML.*\\..+/gi, /_FHPHOWA.*\\..+/gi, /_FHPLOAN.*\\..+/gi, /_FHPPROP.*\\..+/gi, /_FHPWOR2.*\\..+/gi],\n\n'PSGoogleBrand': ['_00000048.'],\n\n'PSFirstTimeHomeBuyer': [/_FT1STMO.*\\./gi, /_FT1THB0.*\\./gi, /_FTFHB00.*\\./gi, /_FTFHMOR.*\\./gi, /_FTFSTMO.*\\./gi, /_FTMOFIN.*\\./gi, /_FTFTSTA.*\\./gi, /_FTASSIS.*\\./gi, /_FTCRED0.*\\./gi, /_FTDNPAY.*\\./gi, /_FTBQUAL.*\\./gi, /_FTGRANT.*\\./gi, /_FTFTBYR.*\\./gi, /_FTBHL0P.*\\./gi, /_FTFTHBS.*\\./gi, /_FTFTHLN.*\\./gi, /_FTFTHMO.*\\./gi, /_FTHMOWN.*\\./gi, /_FTLOANS.*\\./gi, /_FTFTMOR.*\\./gi, /_FTPREQU.*\\./gi, /_FTPROG0.*\\./gi, /_FTPROG3.*\\./gi, /_FTPROST.*\\./gi, /_FTQUHOW.*\\./gi, /_FTQUWHO.*\\./gi, /_FTSTEPS.*\\./gi],\n\n'PSHomeLoans': [/_HLLOANS.*\\./gi],\n\n'PSFHARefi': [/_FHAMISC.*\\./gi, /_FHAREMO.*\\./gi,/_FHAREFI.*\\./gi,/_FHASTMS.*\\./gi,/_FHASTLO.*\\./gi,/_FHASTMO.*\\./gi,/_FHASTRF.*\\./gi,/_FHAEASY.*\\./gi],\n\n'PSInsurance': [/_PMIMORT.*\\./gi,/_PMIMORT.*\\./gi,/_PMIMORT.*\\./gi,/_PMIMORT.*\\./gi,/_PMIMORT.*\\./gi],\n\n'PSLoans': [/_LN10YER.*\\./gi,/_LN15YER.*\\./gi,/_LN20YER.*\\./gi, /_LN25YER.*\\./gi,/_LN30YER.*\\./gi,/_LN40YER.*\\./gi,/_LN5YEAR.*\\./gi,/_LNCHEAP.*\\./gi,/_LNFINCL.*\\./gi,/_LNAPPLY.*\\./gi, /_LNCOMPY.*\\./gi,/_LNLENDR.*\\./gi,/_LNPREAP.*\\./gi,/_LNPREQY.*\\./gi,/_LNQUALY.*\\./gi],\n\n'PSRefinance': [/_REF0001.*\\./gi,/_REF0002.*\\./gi,/_REF0003.*\\./gi,/_REF0005.*\\./gi,/_REF0039.*\\./gi,/_REF0006.*\\./gi,/_REF0007.*\\./gi, /_REF0035.*\\./gi,/_REF0034.*\\./gi,/_REF0008.*\\./gi,/_REF0009.*\\./gi,/_REF0010.*\\./gi,/_REF0012.*\\./gi,/_REF0013.*\\./gi, /_REF0014.*\\./gi,/_REF0015.*\\./gi,/_REF0016.*\\./gi,/_REF0028.*\\./gi,/_REF0036.*\\./gi,/_REF0017.*\\./gi,  /_REF0018.*\\./gi,/_REF0019.*\\./gi,/_REF0020.*\\./gi,/_REF0033.*\\./gi,/_REF0021.*\\./gi,/_REF0022.*\\./gi,/_REF0023.*\\./gi,/_REF0024.*\\./gi,/_REF0037.*\\./gi,/_REF0038.*\\./gi,/_REF0025.*\\./gi,/_REF0026.*\\./gi,/_REF0027.*\\./gi,/_REF0004.*\\./gi,/_REF0036.*\\./gi,/_REF0035.*\\./gi],\n\n'PSVALoans': [/_VAMILHL.*\\./gi, /_VAMILCO.*\\./gi,/_VAMILLN.*\\./gi,/_VAMILMG.*\\./gi,/_VAMILVA.*\\./gi,/_VAADJST.*\\./gi,/_VAARM01.*\\./gi,/_VABRAND.*\\./gi,/_VACNQST.*\\./gi,/_VAHLAPP.*\\./gi,/_VAHLINF.*\\./gi,/_VAHLQUL.*\\./gi,/_VAHLREF.*\\./gi,/_VAHMLON.*\\./gi,/_VAHMORT.*\\./gi,/_VAJUMBO.*\\./gi,/_VAJUMML.*\\./gi,/_VALENDR.*\\./gi,/_VALNHML.*\\./gi,/_VALNLON.*\\./gi,/_VALNMRT.*\\./gi,/_VALNSTR.*\\./gi,/_VALNVET.*\\./gi,/_VAAPPLY.*\\./gi,/_VAELGTY.*\\./gi,/_VAPREAP.*\\./gi,/_VAQUALY.*\\./gi,/_VALNREF.*\\./gi,/_VAREQUR.*\\./gi,/_VALOANS.*\\./gi,/_VA30YER.*\\./gi,/_VADISAB.*\\./gi,/_VAGUIDE.*\\./gi,/_VAINFOR.*\\./gi,/_VAMORTG.*\\./gi,/_VAMT30Y.*\\./gi,/_VAMTCOM.*\\./gi,/_VAMTELG.*\\./gi,/_VAMTLON.*\\./gi,/_VAMTREF.*\\./gi,/_VAPREQY.*\\./gi,/_VARTCMP.*\\./gi,/_VARTCUR.*\\./gi,/_VARTCMT.*\\./gi,/_VARTHOL.*\\./gi,/_VARTINT.*\\./gi,/_VARTJML.*\\./gi,/_VARTJMM.*\\./gi,/_VARTLON.*\\./gi,/_VARTLOW.*\\./gi,/_VARTMOR.*\\./gi,/_VARTMRE.*\\./gi,/_VARTREF.*\\./gi,/_VARTSTM.*\\./gi,/_VARTSTR.*\\./gi,/_VART2DY.*\\./gi,/_VARTVET.*\\./gi,/_VARTVHL.*\\./gi,/_VAREFIN.*\\./gi,/_VASTREM.*\\./gi,/_VASTRLN.*\\./gi,/_VASTRMO.*\\./gi,/_VASTRQU.*\\./gi,/_VASTRRE.*\\./gi,/_VAAFFLN.*\\./gi,/_VAAFFMO.*\\./gi,/_VAVTARM.*\\./gi,/_VAATHML.*\\./gi,/_VAVTLON.*\\./gi,/_VAVTMOR.*\\./gi,/_VAVTREF.*\\./gi],\n\n'PSClosingCost': [/_CCAVGCC.*\\./gi,/_CCCOSTS.*\\./gi,/_CCESTIM.*\\./gi,/_CCFEES1.*\\./gi,/_CCHELP1.*\\./gi, /_CCQUEST.*\\./gi,/_CCSELLR.*\\./gi,/_CCSTATE.*\\./gi,/_CCTAXES.*\\./gi,/_CCHOME1.*\\./gi,/_CCHOUSE.*\\./gi,/_CCMORTG.*\\./gi,/_CCMOREF.*\\./gi,/_CCNOCST.*\\./gi,/_CCESTAT.*\\./gi,/_CCREFI1.*\\./gi],\n\n'PSCP': [/_CpHLEx0.*\\./gi,/_CpHLPh0.*\\./gi,/_CpMoEx0.*\\./gi,/_CpMoPh0.*\\./gi,/_CpRfEx0.*\\./gi,/_CpRfPh0.*\\./gi,/_CpRvEx0.*\\./gi,/_CpRvPh0.*\\./gi],\n\n'PSMortgage': [/.*_MORT.*009\\..*/gi,\n  /.*_MORT.*010\\..*/gi,\n  /.*_MORT.*014\\..*/gi,\n  /.*_MORT.*105\\..*/gi,\n  /.*_MORT.*016\\..*/gi,\n  /.*_MORT.*017\\..*/gi,\n  /.*_MORT.*018\\..*/gi,\n  /.*_MORT.*020\\..*/gi,\n  /.*_MORT.*025\\..*/gi,\n  /.*_MORT.*028\\..*/gi,\n  /.*_MORT.*029\\..*/gi,\n  /.*_MORT.*030\\..*/gi,\n  /.*_MORT.*032\\..*/gi,\n  /.*_MORT.*033\\..*/gi,\n  /.*_MORT.*034\\..*/gi,\n  /.*_MORT.*035\\..*/gi,\n  /.*_MORT.*117\\..*/gi,\n  /.*_MORT.*118\\..*/gi,\n  /.*_MORT.*043\\..*/gi,\n  /.*_MORT.*044\\..*/gi,\n  /.*_MORT.*046\\..*/gi,\n  /.*_MORT.*050\\..*/gi,\n  /.*_MORT.*119\\..*/gi,\n  /.*_MORT.*052\\..*/gi,\n  /.*_MORT.*053\\..*/gi,\n  /.*_MORT.*054\\..*/gi,\n  /.*_MORT.*055\\..*/gi,\n  /.*_MORT.*120\\..*/gi,\n  /.*_MORT.*056\\..*/gi,\n  /.*_MORT.*057\\..*/gi,\n  /.*_MORT.*059\\..*/gi,\n  /.*_MORT.*060\\..*/gi,\n  /.*_MORT.*061\\..*/gi,\n  /.*_MORT.*062\\..*/gi,\n  /.*_MORT.*121\\..*/gi,\n  /.*_MORT.*063\\..*/gi,\n  /.*_MORT.*065\\..*/gi,\n  /.*_MORT.*070\\..*/gi,\n  /.*_MORT.*071\\..*/gi,\n  /.*_MORT.*072\\..*/gi,\n  /.*_MORT.*073\\..*/gi,\n  /.*_MORT.*075\\..*/gi,\n  /.*_MORT.*076\\..*/gi,\n  /.*_MORT.*080\\..*/gi,\n  /.*_MORT.*082\\..*/gi,\n  /.*_MORT.*083\\..*/gi,\n  /.*_MORT.*084\\..*/gi,\n  /.*_MORT.*085\\..*/gi,\n  /.*_MORT.*087\\..*/gi,\n  /.*_MORT.*088\\..*/gi,\n  /.*_MORT.*089\\..*/gi,\n  /.*_MORT.*090\\..*/gi,\n  /.*_MORT.*093\\..*/gi,\n  /.*_MORT.*094\\..*/gi,\n  /.*_MORT.*095\\..*/gi,\n  /.*_MORT.*096\\..*/gi,\n  /.*_MORT.*097\\..*/gi,\n  /.*_MORT.*098\\..*/gi,\n  /.*_MORT.*100\\..*/gi,\n  /.*_MORT.*101\\..*/gi,\n  /.*_MORT.*102\\..*/gi,\n  /.*_MORT.*103\\..*/gi,\n  /.*_MORT.*122\\..*/gi,\n  /.*_MORT.*107\\..*/gi,\n  /.*_MORT.*108\\..*/gi,\n  /.*_MORT.*116\\..*/gi, \n  /.*_MORT.*123\\..*/gi],\n\n'PSYahoo': [/YFS_.*\\./gi, /YMO_.*\\./gi, /YBR_.*\\./gi, /YBM_.*\\./gi],\n\n'PSCalculator':[/_CAADJST.*\\./gi,/_CAFHA00.*\\./gi,/_CAMORTG.*\\./gi,/_CAREFIN.*\\./gi,/_CAAMORT.*\\./gi,/_CAAPROV.*\\./gi,/_CABRAND.*\\./gi,/_CACLOSE.*\\./gi,/_CADWNPY.*\\./gi,/_CAHMLON.*\\./gi,/_CAMORLN.*\\./gi,/_CAPAYMT.*\\./gi,/_CAPAYOF.*\\./gi,/_CAPMI00.*\\./gi,/_CAPREAP.*\\./gi,/_CAPREQY.*\\./gi,/_CARLEST.*\\./gi,/_CAVALON.*\\./gi,/_MORCALC.*\\./gi],\n\n'OARocketDisplay': [/DBM_.*\\./gi, /REA_.*\\./gi, /WEA_.*\\./gi, /RRP_.*\\./gi, /RRR_.*\\./gi, /RRT_.*\\./gi, /ALD_.*\\./gi , /AOR_.*\\./gi, /ADX_.*\\./gi],\n\n'DisplayQLAll': [/DCA_.*\\./gi, /DCC_.*\\./gi, /DCK_.*\\./gi, /DBS_.*\\./gi, /DRB_.*\\./gi, /DRC_.*\\./gi, /DRK_.*\\./gi, /TRD_.*\\./gi, /RTG_.*\\./gi, /RSA_.*\\./gi],\n\n'PSBrandGenericAll':[/_brand0c.*\\./gi, /_brandql.*\\./gi, /_branddf.*\\./gi],\n\n'AffiliateZeta': [/ZTA_.*\\./gi],\n\n'AffiliateNerdWallet': [/NDW_.*\\./gi],\n\n'RateTableInforma': [/IFM_.*\\./gi],\n\n'RateTableSmartAsset': [/SMR_.*\\./gi],\n\n'PSonesitelink': [/_SLT1DOWN.*\\./gi],\n\n'RateTableSureHits': [/SRT_.*\\./gi],\n\n'MultiChannelConfidenceCampaign - Rickie Fowler Extension': [/_RICKIEBR.*\\./gi, /_RICKIECONF.*\\./gi],\n\n'ZingBlog': [/ZNG_.*\\./gi, /ZIN_.*\\./gi],\n\n'AffiliateHasOffers': [/HAS_.*\\./gi],\n\n'AffiliateAdcize': [/ADZ_.*\\./gi],\n\n'AffiliateCommissionJunction': [/CJX_.*\\./gi],\n\n'RateTableBrokersWeb': [/BKW_.*\\./gi],\n\n'RateTableBankRate': [/BRT_.*\\./gi],\n\n'RateTableNerdWallet': [/NWR_.*\\./gi],\n\n'AffiliateMediaForce': [/MDF_.*\\./gi],\n\n'AffiliateSureHits': [/SHA_.*\\./gi],\n\n'Affiliate921': [/921_.*\\./gi],\n\n'MultiChannelConfidenceCampaign-Sarah': [/_SARAHCBR.*\\./gi, /_SARAHCDV.*\\./gi, /_SARAHSOC.*\\./gi],\n\n'PSAllRates': [/_R110FXL.*\\./gi,/_R110MOR.*\\./gi,/_R115FXL.*\\./gi,/_R115MOR.*\\./gi,/_R120FXL.*\\./gi,/_R120MOR.*\\./gi,/_R125FXL.*\\./gi,/_R125MOR.*\\./gi,/_R130FXL.*\\./gi,/_R130MOR.*\\./gi,/_R140FXL.*\\./gi,/_R140MOR.*\\./gi,/_R1CHPMO.*\\./gi,/_R1COMPM.*\\./gi,/_R1CURHL.*\\./gi,/_R1CURIN.*\\./gi,/_R1CURMO.*\\./gi,/_R1HLINR.*\\./gi,/_R1HLRAT.*\\./gi,/_R1HMORR.*\\./gi,/_R1INTER.*\\./gi,/_R1INVST.*\\./gi,/_R1LENDR.*\\./gi,/_R1LOANR.*\\./gi,/_R1LWMOR.*\\./gi,/_R1MORIR*/gi,/_R1MORTG.*\\./gi,/_R1STATE.*\\./gi,/_R1TOINT.*\\./gi,/_R1TOMOR.*\\./gi,/_R210FXL.*\\./gi,/_R210MOR.*\\./gi,/_R215FXL.*\\./gi,/_R215MOR.*\\./gi,/_R220FXL.*\\./gi,/_R220MOR.*\\./gi,/_R225FXL.*\\./gi,/_R225MOR.*\\./gi,/_R230FXL.*\\./gi,/_R230MOR.*\\./gi,/_R240FXL.*\\./gi,/_R240MOR.*\\./gi,/_R2CHPMO.*\\./gi,/_R2COMPM.*\\./gi,/_R2CURHL.*\\./gi,/_R2CURIN.*\\./gi,/_R2CURMO.*\\./gi,/_R2HLINR.*\\./gi,/_R2HLRAT.*\\./gi,/_R2HMORR.*\\./gi,/_R2INTER.*\\./gi,/_R2INVST.*\\./gi,/_R2LENDR.*\\./gi,/_R2LOANR.*\\./gi,/_R2LWMOR.*\\./gi,/_R2MORIR.*\\./gi,/_R2MORTR.*\\./gi,/_R2STATE.*\\./gi,/_R2TOINT.*\\./gi,/_R2TOMOR.*\\./gi,/_R310FXL.*\\./gi,/_R310MOR.*\\./gi,/_R315FXL.*\\./gi,/_R315MOR.*\\./gi,/_R320FXL.*\\./gi,/_R320MOR.*\\./gi,/_R325FXL.*\\./gi,/_R325MOR.*\\./gi,/_R330FXL.*\\./gi,/_R330MOR.*\\./gi,/_R340FXL.*\\./gi,/_R340MOR.*\\./gi,/_R3CHPMO.*\\./gi,/_R3COMPM.*\\./gi,/_R3CURHL.*\\./gi,/_R3CURIN.*\\./gi,/_R3CURMO.*\\./gi,/_R3HLINR.*\\./gi,/_R3HLRAT.*\\./gi,/_R3HMORR.*\\./gi,/_R3INTER.*\\./gi,/_R3INVST.*\\./gi,/_R3LENDR.*\\./gi,/_R3LOANR.*\\./gi,/_R3LWMOR.*\\./gi,/_R3MORIR.*\\./gi,/_R3MORTR.*\\./gi,/_R3STATE.*\\./gi,/_R3TOINT.*\\./gi,/_R3TOMOR*/gi],\n\n'PSHarp': [/_Harp.*\\./gi],\n          \n'PSRocket': [/RBA|RBM|RGA|RGM.*\\./gi]\n\n        };\n\n        source = Object.keys(map).filter(function (key) {\n            return map[key].filter(function (attr) {\n                if (typeof attr === 'string') {\n                    if (qls.indexOf(attr) !== -1) {\n                        return true;\n                    }\n                    return false;\n                } else if (typeof attr === 'object') {\n                    if (attr.test(qls)) {\n                        return true;\n                    }\n                    return false;\n                }\n            }).length;\n        });\n\n        if (source.length) {\n            visitor.storeAttr('TrafficSource', source[0]);\n        }\n    }\n\n    function searchToObject(str) {\n        var empty = Object.create(null),\n            start = str.indexOf('?');\n\n        if (start === -1) {\n            return empty;\n        } else {\n            str = str.substr(start + 1);\n        }\n\n        return str\n            .split('&')\n            .map(function (pair) {\n                if (pair !== '') {\n                    return pair.split('=');\n                }\n            })\n            .reduce(function (obj, pair) {\n                obj[decodeURIComponent(pair[0])] = decodeURIComponent(pair[1]);\n\n                return obj;\n            }, empty);\n    }\n}());","Order":-10,"HighLevelApiVersion":"1.24"},{"Name":"pDayForce","Type":"script","Attrs":{"type":"text/javascript"},"Data":"var qlsArray = ['FBK_2019prm1.', 'FBK_2019prm2.', 'TPT_2019prm1.', 'TPT_2019prm2.', 'SNC_2019prm1.', 'SNC_2019prm2.', 'PIN_2019prm1.', 'PIN_2019prm2.', 'EGL_2019prm1.', 'ENL_2019prm1.', 'ESC_2019prm1.', 'SGL_2019prm1.', 'PSC_2019prm1.', 'EGL_2019prm2.', 'ENL_2019prm2.', 'ESC_2019prm2.', 'SGL_2019prm2.', 'PSC_2019prm2.'];\nfor (var i = 0; qlsArray.length > i; i++){\n  if (window.location.search.indexOf(qlsArray[i]) > -1) {\n    visitor.storeAttr('pDayForce', 'yes');\n  }\n}","Order":0,"HighLevelApiVersion":"1.24"},{"Name":"siteActions","Type":"script","Attrs":{"type":"text/javascript"},"Data":"(function() {\n    'use strict';\n  \n    //Account_Creation action\n    events.on('urlchange', function() {\n        var acctCreateFired = visitor.getData('user') || '';\n        if (/rocketaccount\\.com\\/#\\/email\\/instructions/.test(window.location.href) && acctCreateFired !== location.href.split('user=')[1]) {\n\n            actions.send('UnconfirmedAccount', 1);\n            visitor.setData('user', location.href.split('user=')[1]);\n        }\n\n        if (/rocketaccount\\.com\\/#\\/email\\/verify/.test(window.location.href)) {\n            var fail = false;\n            setTimeout(function() { fail = true; }, 3000);\n            when(function() {\n                return document.querySelector('#verify-continue');\n            }, function() {\n                return fail;\n            }).done(function() {\n                if (document.querySelector('#verify-continue') !== null) {\n                    actions.send('ConfirmedAccount', 1);\n                }\n            });\n        }\n\n    });\n\n    events.domReady(function() {\n      \t// WB Lead Submit action\n      \tif(/quickenloans\\.com\\/wb/.test(window.location.href)) {\n            // exposing actions API to Global Object for use in Adobe Launch\n\t    window.mmactions = actions;\n            $(document).on(\"click\", \"button[data-id='accept-button']\", function() {\n                actions.send('WB Lead Submit', 1, 'Accept');\n            });\n            $(document).on(\"click\", \"button[data-id='decline-button']\", function() {\n                actions.send('WB Lead Submit', 1, 'Decline');\n            });\n        }\n      \n        // Lead_Submit action\n        if (/quickenloans\\.com\\/thank-you/.test(window.location.href) || /quickenloans\\.com\\/l2\\/thank-you/.test(window.location.href) || /quickenloans\\.com\\/l\\/insider\\/purchase\\/thankyou/.test(window.location.href) || /quickenloans\\.com\\/l\\/insider\\/refinance\\/thankyou/.test(window.location.href)) {\n            when(function() {\n                    return window._satellite && window._satellite.getVar;\n                    //return true;\n                })\n                .done(function() {\n                    // exposing actions API to Global Object for use in Adobe Launch\n                    window.mmactions = actions;\n                    // using _satellite.getVar as given by QL to collect attr\n                    var newAttr = _satellite.getVar('digitalData - Loan Purpose');\n                    actions.send('Lead_Submit', 1, newAttr);\n                    actions.send('WB Lead Submit', 1, newAttr);\n                    actions.send('Combined_Conversion', 1, newAttr);\n                });\n        }\n\n        // Application Start\n        if (/rocketmortgage\\.com\\/refinance\\/priority/.test(window.location.href)) {\n            // exposing actions API to Global Object for use in Adobe Launch\n\t    window.mmactions = actions;\n            \n//            if (_satellite.readCookie('js-auth')) {\n/*\n              if (_satellite.getVar(\"Global - js-auth Cookie\") == \"accountCreate\") {\n                actions.send('Application_Start', 1, 'Refinance'); //ATTRIBUTE CHANGED FOR DEBUGGING \n              \tactions.send('App_Start_New', 1, 'Refinance');\n                actions.send('Combined_Conversion', 1, 'Refinance');\n                sessionStorage.setItem('ssNewLogIn', true); // drop session flag\n                visitor.storeAttr('newLogIn', true);\n            } else {\n              \tactions.send('App_Start_Return', 1, 'Refinance');\n                actions.send('Sign-In_Return', 1, 'Refinance');\n                if (!sessionStorage.getItem('ssNewLogIn')) {\n                    visitor.storeAttr('newLogIn', false); // only set newLogIn to false if visitor reached this page in new session (session flag is gone)\n                }\n            }\n*/\n\t    \n        }\n\n        //Application_Start action\n        if (/rocketmortgage\\.com\\/purchase\\/application\\/living-situation/.test(window.location.href)) {\n            // exposing actions API to Global Object for use in Adobe Launch\n\t    window.mmactions = actions;\n            \n //           if (_satellite.readCookie('js-auth')) {\n/*\n              if(_satellite.getVar(\"Global - js-auth Cookie\") == \"accountCreate\"){\n                actions.send('Application_Start', 1, 'Purchase');\n              \tactions.send('App_Start_New', 1, 'Purchase');\n                actions.send('Combined_Conversion', 1, 'Purchase');\n                visitor.storeAttr('newLogIn', true);\n                sessionStorage.setItem('ssNewLogIn', true); // drop session flag\n            } else {\n              \tactions.send('App_Start_Return', 1, 'Purchase');\n                actions.send('Sign-In_Return', 1, 'Purchase');\n                if (!sessionStorage.getItem('ssNewLogIn')) {\n                    visitor.storeAttr('newLogIn', false); // only set newLogIn to false if visitor reached this page in new session (session flag is gone)\n                }\n            }\n*/\n\t    \n        }\n    });\n\n}());","Order":5,"HighLevelApiVersion":"1.24"}],"Campaigns":[{"Name":"T142_RocketThankyouPage_CTA","Type":"ABnMVT","CSName":"","HighLevelApiVersion":"1.24","PagePrefix":"","Scripts":[{"Name":"action_AcctCreation","Type":"script","Attrs":{"type":"text/javascript"},"Data":"events.domReady(function() {\n    if (campaign.getData('RckMtgCookie') === 'Yes') {\n        //Account_Creation action Refinance\n        if (/rocket\\.quickenloans\\.com\\/refinance\\/priority/.test(window.location.href) && /register/.test(document.referrer)) {\n            actions.send('T142_AccountCreation', 1, 'Refinance');\n           \tcampaign.clearData('RckMtgCookie');\n        }\n        //Account_Creation action Purchase\n        if (/rocket\\.quickenloans\\.com\\/purchase\\/application\\/living-situation/.test(window.location.href) && /register/.test(document.referrer)) {\n            actions.send('T142_AccountCreation', 1, 'Purchase');\n        \tcampaign.clearData('RckMtgCookie');\n        }\n    }\n\n});","Order":0,"HighLevelApiVersion":"1.24"}],"Elements":[],"Recommendations":[]},{"Name":"R079 - RM v BAM MOP","Type":"ABnMVT","CSName":"","HighLevelApiVersion":"1.24","PagePrefix":"MDY2NTc4","Scripts":[{"Name":"Rendering","Type":"script","Attrs":{"type":"text/javascript"},"Data":"var config = {\n    \"selectorsToHide\": null,\n    \"useSecondRequest\": true,\n    \"elements\": [\n        {\n            \"includedUrls\": [\n                \"http*://www.rocketmortgage.com/?qls=xxx_rmtobamop.9087\",\n                \"http*://www.rocketmortgage.com/?*qls=sgl_elcsprch.smsdy21l2a*\",\n                \"http*://www.rocketmortgage.com/?*qls=snl_ldcnfirm.d1*\",\n                \"http*://www.rocketmortgage.com/?*qls=sgl_elcsrefi.smsday7l2a*\",\n                \"http*://www.rocketmortgage.com/?*qls=sgl_elcsprch.smsday7l2a*\",\n                \"http*://www.rocketmortgage.com/?*qls=sgl_elcsrefi.smsdy11l2a*\",\n                \"http*://www.rocketmortgage.com/?*qls=lla_canem442.c442c1btn1*\",\n                \"http*://www.rocketmortgage.com/?*qls=sgl_elcsrefi.smsdy21l2a*\"\n            ],\n            \"excludedUrls\": [],\n            \"selectors\": \"body { visibility: hidden !important }\"\n        }\n    ]\n};\n\nif (config.useSecondRequest) {\n    activateCampaign();\n} else {\n    render();\n}\n\ncampaign.events.on('urlChange', activateCampaign);\n\nfunction activateCampaign() {\n    if (isRenderRequired()) {\n        var selectorsToHide = getSelectorsToHide();  \n        hide(selectorsToHide);\n        when(isVisitorQualified())\n            .done(function () {\n                renderer.getContent().always(function () {\n                    render();\n                    show(selectorsToHide);\n                })\n            })\n            .fail(function () {\n                show(selectorsToHide);\n            });\n    }\n}\n\nfunction isRenderRequired() {\n    if (config.elements === null) { return true; }\n\n    var url = window.deproxy ? window.deproxy(window.location).href : window.location.href;\n    for (var i = 0; i < config.elements.length; i++) {\n        if (isUrlMatched(url, config.elements[i].includedUrls, config.elements[i].excludedUrls)) {\n            return true;\n        }\n    }\n    return false;\n}\n\nfunction hide(selectorsToHide) {\n    if (selectorsToHide) {\n        renderer.hide(selectorsToHide, 'ucb');\n    }\n}\n\nfunction show(selectorsToHide) {\n    if (selectorsToHide) {\n        renderer.show('ucb');\n    }\n}\n\nfunction getSelectorsToHide() {\n    if (config.elements === null) { return config.selectorsToHide; }\n    \n    var url = window.deproxy ? window.deproxy(window.location).href : window.location.href;\n    var selectors = \"\";\n    for (var i = 0; i < config.elements.length; i++) {\n        if (isUrlMatched(url, config.elements[i].includedUrls, config.elements[i].excludedUrls)) {\n            selectors += \" \" + config.elements[i].selectors;\n        }\n    }\n    return selectors;\n}\n\nfunction render() {\n    renderCss();\n    renderJs();\n    campaign.events.trigger('lastRequest');\n}\n\nfunction renderJs() {\n    var elementsToRender = campaign.getElements();\n    for (var i in elementsToRender) {\n        if (elementsToRender.hasOwnProperty(i)) {\n            var element = elementsToRender[i];\n            renderer.runVariantJs(element);\n        }\n    }\n}\n\nfunction renderCss() {\n    var styles = campaign.getStyles();\n    if (styles.length) {\n        dom.addCss(styles);\n    }\n}\n\nfunction isVisitorQualified() {\n    if (window.isCampaignDesignMode) {\n        return true;\n    }\n    var rules = campaign.scope.qualificationRules || [];\n    var results = [];\n    for (var i = 0; i < rules.length; i++) {\n        var result = rules[i]();\n        if (typeof result.then !== 'function') {\n            result = Deferred()[result ? 'resolve' : 'reject']().promise();\n        }\n        results.push(result);\n    }\n    return when.apply(this, results);\n}\n\nfunction isUrlMatched(url, includedUrls, excludedUrls) {\n    var isIncluded = isMasksMatch(url, includedUrls);\n    var isExcluded = isMasksMatch(url, excludedUrls);\n    return isIncluded && !isExcluded;\n}\n\nfunction isMasksMatch(url, masks) {\n    if (!url) {\n        return false;\n    }\n    url = url.toLowerCase();\n    var matchedMasks = 0;\n\n    for (var i = 0; i < masks.length; i++) {\n        var mask = masks[i].toLowerCase();\n        if (isMaskMatch(url, window.deproxy({\n                href: mask\n            }).href)) {\n            matchedMasks = matchedMasks + 1;\n        }\n    };\n    return matchedMasks > 0;\n}\n\nfunction isMaskMatch(url, originalMask) {\n    var mask = '^';\n    var pos = 0;\n    while (originalMask.length > pos) {\n        var char = originalMask[pos];\n        if (char == '*') {\n            mask = mask + '.*';\n            pos = pos + 1;\n        } else if (char == '(') {\n            var posClosing = originalMask.indexOf(')', pos + 1);\n            var posNextOpening = originalMask.indexOf('(', pos + 1);\n            if (posClosing > pos && (posNextOpening < 0 || posClosing < posNextOpening)) {\n                mask = mask + '.*';\n                pos = posClosing + 1;\n            } else {\n                return false;\n            }\n        } else {\n            mask = mask + char;\n            pos = pos + 1;\n        }\n    }\n    mask = mask + '$';\n    mask = mask.replace('?', \"\\\\?\");\n    var r = new RegExp(mask);\n    return r.test(url);\n}","Order":5999,"HighLevelApiVersion":"1.24"},{"Name":"Routing","Type":"script","Attrs":{"type":"text/javascript"},"Data":"(function () {\n    if(!window.isCampaignDesignMode) {\n       window.deproxy = function(location) {\n           return location;\n       }\n    }\n    var lastUrl = window.deproxy(window.location.href);\n\n    function forceTriggerRouteChange(url) {\n        lastUrl = url;\n        campaign.events.trigger('urlChange', {\n            url: url\n        });\n    }\n\n    function triggerRouteChange(url) {\n        if (url && lastUrl !== url) {\n            forceTriggerRouteChange(url);\n        }\n    }\n\n    function createRouteChange(fn) {\n        return function () {\n            var result = fn.apply(this, arguments);\n            triggerRouteChange(window.deproxy(window.location.href));\n            return result;\n        };\n    }\n\n    history.pushState = createRouteChange(history.pushState);\n\n    history.replaceState = createRouteChange(history.replaceState);\n\n    window.addEventListener('popstate', function (event) {\n        triggerRouteChange(window.deproxy(window.location.href));\n    });\n\n    window.addEventListener('hashchange', function (event) {\n        triggerRouteChange(window.deproxy(window.location.href));\n    });\n})();","Order":5000,"HighLevelApiVersion":"1.24"}],"Elements":[],"Recommendations":[]},{"Name":"SC - Purch Calc CTA WvWB","Type":"ABnMVT","CSName":"","HighLevelApiVersion":"1.24","PagePrefix":"","Scripts":[{"Name":"SessionCam","Type":"script","Attrs":{"type":"text/javascript"},"Data":"campaign.events.on('lastRequest', function(){\n    window.sessioncamConfiguration = window.sessioncamConfiguration || {};\n    window.sessioncamConfiguration.customDataObjects = window.sessioncamConfiguration.customDataObjects || [];\n    var key = 'Maxymiser' + (isProduction() ? '' : ' QA');\n    var value = campaign.getName() + '=' + getExperienceData();\n    var customDataObject = {\n        key: key,\n        value: value\n    };\n    window.sessioncamConfiguration.customDataObjects.push(customDataObject);\n});\n \n \nfunction getExperienceData(){\n    var experience = campaign.getExperience();\n    var variants = [];\n    for(var element in experience) {\n        variants.push(element + ':' + experience[element]);\n    }\n    return variants.join('|');\n}\nfunction isProduction(){\n    if (location.search.toLowerCase().indexOf('mmcore.') > -1) {\n        return false;\n    }\n    function removeExpiration(v) {\n        return v ? v.replace(/^\\d\\|/, '') : '';\n    }\n    var storage = mmsystem.getConfig().storageType;\n    if (storage === 'cookie-key-value' || storage === 'cookie-key-value-secure') {\n        if (/mmapi.p.cfgid/i.test(document.cookie) || /mmapi.p.un/i.test(document.cookie)) {\n            return false;\n        } else {\n            return true;\n        }\n    }\n    var mmcoreP = readCookieStorage('mmcore.store.p.') || {};\n    var mmcoreS = readCookieStorage('mmcore.store.s.') || {};\n    var mmapiP = readCookieStorage('mmapi.store.p.') || {};\n    var mmapiS = readCookieStorage('mmapi.store.s.') || {};\n    var storageTypes = [mmcoreP, mmcoreS, mmapiP, mmapiS];\n    var storageKeys = {\n        'mmparams.p': 1,\n        'mmparams.d': 1\n    };\n    var utils = {\n        'un': 1,\n        'cfgID': 1,\n        'pruh': 1\n    };\n    for (var l = storageTypes.length; l--;) {\n        var storageType = storageTypes[l];\n        for (var storageKey in (storageKeys || {})) {\n            for (var util in (utils || {})) {\n                if ((storageType[storageKey] || {})[util]) {\n                    return false;\n                }\n            }\n        }\n    }\n    function readCookieStorage(name) {\n        var res = {},\n            whole = '',\n            i = 0,\n            chunk;\n        while ((chunk = getCookie(name + i++))) {\n            whole += chunk;\n        }\n        whole = decodeURIComponent(whole);\n        try {\n            res = JSON.parse(whole);\n        } catch (e) {}\n        return res;\n    }\n    function getCookie(name) {\n        var r = new RegExp('(?:^|; )' + encodeURIComponent(name).replace(/([.$?*|{}()\\[\\]\\\\\\/+^])/g, '\\\\$1') + '=([^;]+)'),\n            value = (document.cookie.match(r) || ['', ''])[1];\n        return value;\n    }\n    return true;\n}","Order":5000,"HighLevelApiVersion":"1.24"},{"Name":"Google Universal","Type":"script","Attrs":{"type":"text/javascript"},"Data":"var config = {\n    \"trackerName\": \"QL-4623\",\n    \"customDimensions\": \"\"\n}\ntry { if (window.self !== window.top) { return; } }\ncatch (e) { return; }\ncampaign.events.on('lastRequest', function() {\n    if (!isGenerated()) { return }\n    if (!isNewGeneration()) { return; }\n    waitForGA(function() {\n        if (config.customDimensions) { setDimension(); }\n        sendEvent();\n    });\n});\n\nfunction isGenerated(){\n    var experienceData = getExperienceData();\n    return !!experienceData\n}\n\nfunction isNewGeneration() {\n    var experienceData = getExperienceData();\n    if (campaign.getData('GoogleUniversalExperience') === experienceData) {\n        return false;\n    }\n    campaign.setData('GoogleUniversalExperience', experienceData);\n    return true;\n}\nfunction waitForGA(callback) {\n    var timeout = false;\n    when(function(){\n        if (config.trackerName) {\n            return typeof window[window['GoogleAnalyticsObject']] === 'function'\n                && typeof window[window['GoogleAnalyticsObject']].getByName === 'function'\n                && typeof window[window['GoogleAnalyticsObject']].getByName(config.trackerName) === 'object';\n        } else {\n            return typeof window[window['GoogleAnalyticsObject']] === 'function';\n        }\n    }, function(){\n        return timeout;\n    }).done(function(){\n        callback();\n    });\n    setTimeout(function(){\n        timeout = true;\n    }, 10e3);\n}\nfunction setDimension(){\n    var set = (config.trackerName ? config.trackerName + '.' : '') + 'set';\n    var name = campaign.getName() + (isProduction() ? '' : ' QA');\n    window[window['GoogleAnalyticsObject']](set, 'dimension' + config.customDimensions, name + '=' + getExperienceData());\n}\nfunction sendEvent(){\n    var send = (config.trackerName ? config.trackerName + '.' : '') + 'send';\n    var category = 'Maxymiser' + (isProduction() ? '': ' QA');\n    var action = campaign.getName();\n    window[window['GoogleAnalyticsObject']](send, 'event', category, action, getExperienceData(), {'nonInteraction': 1});\n}\nfunction getExperienceData(){\n    var experience = campaign.getExperience();\n    var variants = [];\n    for(var element in experience) {\n        variants.push(element + ':' + experience[element]);\n    }\n    return variants.join('|');\n}\nfunction isProduction(){\n    if (location.search.toLowerCase().indexOf('mmcore.') > -1) {\n        return false;\n    }\n    function removeExpiration(v) {\n        return v ? v.replace(/^\\d\\|/, '') : '';\n    }\n    var storage = mmsystem.getConfig().storageType;\n    if (storage === 'cookie-key-value' || storage === 'cookie-key-value-secure') {\n        if (/mmapi.p.cfgid/i.test(document.cookie) || /mmapi.p.un/i.test(document.cookie)) {\n            return false;\n        } else {\n            return true;\n        }\n    }\n    var mmcoreP = readCookieStorage('mmcore.store.p.') || {};\n    var mmcoreS = readCookieStorage('mmcore.store.s.') || {};\n    var mmapiP = readCookieStorage('mmapi.store.p.') || {};\n    var mmapiS = readCookieStorage('mmapi.store.s.') || {};\n    var storageTypes = [mmcoreP, mmcoreS, mmapiP, mmapiS];\n    var storageKeys = {\n        'mmparams.p': 1,\n        'mmparams.d': 1\n    };\n    var utils = {\n        'un': 1,\n        'cfgID': 1,\n        'pruh': 1\n    };\n    for (var l = storageTypes.length; l--;) {\n        var storageType = storageTypes[l];\n        for (var storageKey in (storageKeys || {})) {\n            for (var util in (utils || {})) {\n                if ((storageType[storageKey] || {})[util]) {\n                    return false;\n                }\n            }\n        }\n    }\n    function readCookieStorage(name) {\n        var res = {},\n            whole = '',\n            i = 0,\n            chunk;\n        while ((chunk = getCookie(name + i++))) {\n            whole += chunk;\n        }\n        whole = decodeURIComponent(whole);\n        try {\n            res = JSON.parse(whole);\n        } catch (e) {}\n        return res;\n    }\n    function getCookie(name) {\n        var r = new RegExp('(?:^|; )' + encodeURIComponent(name).replace(/([.$?*|{}()\\[\\]\\\\\\/+^])/g, '\\\\$1') + '=([^;]+)');\n        var value = (document.cookie.match(r) || ['', ''])[1];\n        return value;\n    }\n    return true;\n}","Order":5000,"HighLevelApiVersion":"1.24"}],"Elements":[],"Recommendations":[]},{"Name":"LP380 - St Farm","Type":"ABnMVT","CSName":"","HighLevelApiVersion":"1.24","PagePrefix":"MDcyOTE4","Scripts":[{"Name":"Rendering","Type":"script","Attrs":{"type":"text/javascript"},"Data":"var config = {\n    \"selectorsToHide\": null,\n    \"useSecondRequest\": true,\n    \"elements\": [\n        {\n            \"includedUrls\": [\n                \"https://www.rocketmortgage.com/l2/state-farm?*removesfimages*\",\n                \"https://www.rocketmortgage.com/l2/state-farm?removesfimages\",\n                \"https://www.rocketmortgage.com/l2/state-farm/?*\",\n                \"https://www.rocketmortgage.com/l2/state-farm?*\",\n                \"https://www.rocketmortgage.com/l2/state-farm/\",\n                \"https://www.rocketmortgage.com/l2/state-farm\"\n            ],\n            \"excludedUrls\": [],\n            \"selectors\": \"\",\n            \"id\": 172282\n        }\n    ]\n};\n\nif (config.useSecondRequest) {\n    activateCampaign();\n} else {\n    render();\n}\n\ncampaign.events.on(\"urlChange\", activateCampaign);\n\nfunction activateCampaign() {\n    if (isRenderRequired()) {\n        var selectorsToHide = getSelectorsToHide();\n        hide(selectorsToHide);\n        when(isVisitorQualified())\n            .done(function () {\n                renderer.getContent().always(function () {\n                    render();\n                    show(selectorsToHide);\n                });\n            })\n            .fail(function () {\n                show(selectorsToHide);\n            });\n    }\n}\n\nfunction isRenderRequired() {\n    if (config.elements === null) { return true; }\n\n    var url = window.deproxy ? window.deproxy(window.location).href : window.location.href;\n    for (var i = 0; i < config.elements.length; i++) {\n        if (isUrlMatched(url, config.elements[i].includedUrls, config.elements[i].excludedUrls)) {\n            return true;\n        }\n    }\n    return false;\n}\n\nfunction hide(selectorsToHide) {\n    if (selectorsToHide) {\n        renderer.hide(selectorsToHide, \"ucb\");\n    }\n}\n\nfunction show(selectorsToHide) {\n    if (selectorsToHide) {\n        renderer.show(\"ucb\");\n    }\n}\n\nfunction getSelectorsToHide() {\n    if (config.elements === null) { return config.selectorsToHide; }\n\n    var url = window.deproxy ? window.deproxy(window.location).href : window.location.href;\n    var selectors = \"\";\n    for (var i = 0; i < config.elements.length; i++) {\n        if (isUrlMatched(url, config.elements[i].includedUrls, config.elements[i].excludedUrls)) {\n            selectors += \" \" + config.elements[i].selectors;\n        }\n    }\n    return selectors;\n}\n\nfunction render() {\n    renderCss();\n    renderJs();\n    campaign.events.trigger(\"lastRequest\");\n\n    var campaignName = campaign.getName();\n    window.MMExperience = window.MMExperience || {};\n    if(!window.MMExperience[campaignName]){\n        window.MMExperience[campaignName] = campaign.getExperience();\n    }\n}\n\nfunction renderJs() {\n    var elementsToRender = campaign.getElements();\n    for (var i in elementsToRender) {\n        if (elementsToRender.hasOwnProperty(i)) {\n            var element = elementsToRender[i];\n            renderer.runVariantJs(element);\n        }\n    }\n}\n\nfunction renderCss() {\n    var styles = campaign.getStyles();\n    if (styles.length) {\n        dom.addCss(styles);\n    }\n}\n\nfunction isVisitorQualified() {\n    if (window.isCampaignDesignMode) {\n        return true;\n    }\n    var rules = campaign.scope.qualificationRules || [];\n    var results = [];\n    for (var i = 0; i < rules.length; i++) {\n        var result = rules[i]();\n        if (typeof result.then !== \"function\") {\n            result = Deferred()[result ? \"resolve\" : \"reject\"]().promise();\n        }\n        results.push(result);\n    }\n    return when.apply(this, results);\n}\n\nfunction isUrlMatched(url, includedUrls, excludedUrls) {\n    var isIncluded = isMasksMatch(url, includedUrls);\n    var isExcluded = isMasksMatch(url, excludedUrls);\n    return isIncluded && !isExcluded;\n}\n\nfunction isMasksMatch(url, masks) {\n    if (!url) {\n        return false;\n    }\n    url = url.toLowerCase();\n    var matchedMasks = 0;\n\n    for (var i = 0; i < masks.length; i++) {\n        var mask = masks[i].toLowerCase();\n        if (isMaskMatch(url, window.deproxy({\n                href: mask\n            }).href)) {\n            matchedMasks = matchedMasks + 1;\n        }\n    };\n    return matchedMasks > 0;\n}\n\nfunction isMaskMatch(url, originalMask) {\n    var mask = \"^\";\n    var pos = 0;\n    while (originalMask.length > pos) {\n        var char = originalMask[pos];\n        if (char == \"*\") {\n            mask = mask + \".*\";\n            pos = pos + 1;\n        } else if (char == \"(\") {\n            var posClosing = originalMask.indexOf(\")\", pos + 1);\n            var posNextOpening = originalMask.indexOf(\"(\", pos + 1);\n            if (posClosing > pos && (posNextOpening < 0 || posClosing < posNextOpening)) {\n                mask = mask + \".*\";\n                pos = posClosing + 1;\n            } else {\n                return false;\n            }\n        } else {\n            mask = mask + char;\n            pos = pos + 1;\n        }\n    }\n    mask = mask + \"$\";\n    mask = mask.replace(\"?\", \"\\?\");\n    var r = new RegExp(mask);\n    return r.test(url);\n}","Order":5999,"HighLevelApiVersion":"1.24"},{"Name":"Routing","Type":"script","Attrs":{"type":"text/javascript"},"Data":"(function () {\n    if(!window.isCampaignDesignMode) {\n       window.deproxy = function(location) {\n           return location;\n       }\n    }\n    var lastUrl = window.deproxy(window.location.href);\n\n    function forceTriggerRouteChange(url) {\n        lastUrl = url;\n        campaign.events.trigger('urlChange', {\n            url: url\n        });\n    }\n\n    function triggerRouteChange(url) {\n        if (url && lastUrl !== url) {\n            forceTriggerRouteChange(url);\n        }\n    }\n\n    function createRouteChange(fn) {\n        return function () {\n            var result = fn.apply(this, arguments);\n            triggerRouteChange(window.deproxy(window.location.href));\n            return result;\n        };\n    }\n\n    history.pushState = createRouteChange(history.pushState);\n\n    history.replaceState = createRouteChange(history.replaceState);\n\n    window.addEventListener('popstate', function (event) {\n        triggerRouteChange(window.deproxy(window.location.href));\n    });\n\n    window.addEventListener('hashchange', function (event) {\n        triggerRouteChange(window.deproxy(window.location.href));\n    });\n})();","Order":5000,"HighLevelApiVersion":"1.24"}],"Elements":[],"Recommendations":[]},{"Name":"LP389 - TY Page Agent CTA","Type":"ABnMVT","CSName":"","HighLevelApiVersion":"1.24","PagePrefix":"MDczNzM3","Scripts":[{"Name":"C1694980456","Type":"script","Attrs":{"type":"text/javascript"},"Data":"/*configuration block begin*/\nvar config = {\n\t\"actionName\": \"RMButton\",\n\t\"selectorsDefault\": {\n\t\t\".call-now\": {\n\t\t\t\"value\": 1,\n\t\t\t\"attr\": \"\"\n\t\t}\n\t},\n\t\"selectorsAfter\": {\n\t\t\"element1\": {\n\t\t\t\"lp389-agent\": {\n\t\t\t\t\"#RMButtonInsertion\": {\n\t\t\t\t\t\"value\": 1,\n\t\t\t\t\t\"attr\": \"\"\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\t\"urls\": {\n\t\t\"includedUrls\": [\n\t\t\t\"https://www.quickenloans.com/thank-you\",\n\t\t\t\"https://www.quickenloans.com/thank-you?*\"\n\t\t],\n\t\t\"excludedUrls\": []\n\t}\n};\n/*configuration block end*/\n\nvar domReadyDeferred = Deferred();\nevents.domReady(function(){\n    domReadyDeferred.resolve();\n});\n\nvar isUrlMatched = function(url, includedUrls, excludedUrls) {\n    var isIncluded = isMasksMatch(url, includedUrls);\n    var isExcluded = isMasksMatch(url, excludedUrls);\n    return isIncluded && !isExcluded;\n};\n\nvar isMasksMatch = function(url, masks) {\n    if (!url) {\n        return false;\n    }\n    url = url.toLowerCase();\n\n    for (var i = 0; i < masks.length; i++) {\n        var mask = masks[i].toLowerCase();\n        if (isMaskMatch(url, window.deproxy ? window.deproxy({\n            href: mask\n        }).href : mask)) {\n            return true;\n        }\n    }\n    return false;\n};\n\nvar isMaskMatch = function(url, originalMask) {\n    var mask = '^';\n    var pos = 0;\n    while (originalMask.length > pos) {\n        var char = originalMask[pos];\n        if (char == '*') {\n            mask = mask + '.*';\n            pos = pos + 1;\n        } else if (char == '(') {\n            var posClosing = originalMask.indexOf(')', pos + 1);\n            var posNextOpening = originalMask.indexOf('(', pos + 1);\n            if (posClosing > pos && (posNextOpening < 0 || posClosing < posNextOpening)) {\n                mask = mask + '.*';\n                pos = posClosing + 1;\n            } else {\n                return false;\n            }\n        } else {\n            mask = mask + char;\n            pos = pos + 1;\n        }\n    }\n    mask = mask + '$';\n    mask = mask.replace('?', \"\\\\?\");\n    var r = new RegExp(mask);\n    return r.test(url);\n};\n\nvar waitForElement = function(elementSelector, timeoutValue){\n    var elementDeferred = Deferred();\n    var timeout = false;\n    domReadyDeferred.promise().then(function(){\n        setTimeout(function () {\n            timeout = true;\n        }, timeoutValue);\n    });\n\n    renderer.when(function(){\n        return timeout || dom.find(elementSelector).length;\n    })\n        .done(function(){ elementDeferred.resolve(); })\n        .fail(function(){ elementDeferred.reject(); });\n\n    return elementDeferred.promise();\n};\n\nvar getActionElement = function(selector, data) {\n    var deferred = Deferred();\n\n    if (selector) {\n        waitForElement(selector, 2000)\n            .done(function(){\n                var elements = dom.find(selector);\n                if (elements.length) {\n                    var elementData = {\n                        selector: selector,\n                        data: data\n                    };\n                    deferred.resolveWith(this, [elements[0], elementData]);\n                } else {\n                    deferred.reject();\n                }\n            })\n            .fail(function(){\n                deferred.reject();\n            });\n    } else {\n        deferred.reject();\n    }\n\n    return deferred.promise();\n};\n\nvar getCurrentUrl = function() {\n    return window.deproxy\n        ? window.deproxy(window.location).href\n        : window.location.href;\n};\n\nvar isActionRequired = function() {\n    return !config.urls\n        ? true\n        : !!isUrlMatched(\n            getCurrentUrl(),\n            config.urls.includedUrls,\n            config.urls.excludedUrls);\n};\n\nvar trackClicksAction = function(selectors) {\n    if (isActionRequired()) {\n        for(var selector in selectors){\n            getActionElement(selector, selectors[selector]).done(function (element, elementData){\n                if(element && (!element.attachedActions || !element.attachedActions[config.actionName])){\n                    actions.trackClicks(elementData.selector, {name: config.actionName, value:elementData.data.value, attribute:elementData.data.attr});\n                    if (!element.attachedActions) { element.attachedActions = {}; }\n                    element.attachedActions[config.actionName] = true;\n                }\n            });\n        }\n    }\n};\n\ntrackClicksAction(config.selectorsDefault);\n\ncampaign.events.on('urlChange', function(){ trackClicksAction(config.selectorsDefault); });\n\ncampaign.events.variantJsExecuted(function(elementName, variantName){\n    var selectorsAfter = (config.selectorsAfter[elementName] || {})[variantName.toLowerCase()] || {};\n    trackClicksAction(selectorsAfter);\n});\n","Order":4000,"HighLevelApiVersion":"1.24"},{"Name":"Rendering","Type":"script","Attrs":{"type":"text/javascript"},"Data":"var config = {\n    \"selectorsToHide\": null,\n    \"useSecondRequest\": true,\n    \"elements\": [\n        {\n            \"includedUrls\": [\n                \"http*://www.quickenloans.com/thank-you?*\",\n                \"http*://www.quickenloans.com/thank-you\"\n            ],\n            \"excludedUrls\": [],\n            \"selectors\": \"#breadcrumbs, .footer > section > p { visibility: hidden !important }\",\n            \"id\": 174436\n        }\n    ]\n};\n\nif (config.useSecondRequest) {\n    activateCampaign();\n} else {\n    render();\n}\n\ncampaign.events.on(\"urlChange\", activateCampaign);\n\nfunction activateCampaign() {\n    if (isRenderRequired()) {\n        var selectorsToHide = getSelectorsToHide();\n        hide(selectorsToHide);\n        when(isVisitorQualified())\n            .done(function () {\n                renderer.getContent().always(function () {\n                    render();\n                    show(selectorsToHide);\n                });\n            })\n            .fail(function () {\n                show(selectorsToHide);\n            });\n    }\n}\n\nfunction isRenderRequired() {\n    if (config.elements === null) { return true; }\n\n    var url = window.deproxy ? window.deproxy(window.location).href : window.location.href;\n    for (var i = 0; i < config.elements.length; i++) {\n        if (isUrlMatched(url, config.elements[i].includedUrls, config.elements[i].excludedUrls)) {\n            return true;\n        }\n    }\n    return false;\n}\n\nfunction hide(selectorsToHide) {\n    if (selectorsToHide) {\n        renderer.hide(selectorsToHide, \"ucb\");\n    }\n}\n\nfunction show(selectorsToHide) {\n    if (selectorsToHide) {\n        renderer.show(\"ucb\");\n    }\n}\n\nfunction getSelectorsToHide() {\n    if (config.elements === null) { return config.selectorsToHide; }\n\n    var url = window.deproxy ? window.deproxy(window.location).href : window.location.href;\n    var selectors = \"\";\n    for (var i = 0; i < config.elements.length; i++) {\n        if (isUrlMatched(url, config.elements[i].includedUrls, config.elements[i].excludedUrls)) {\n            selectors += \" \" + config.elements[i].selectors;\n        }\n    }\n    return selectors;\n}\n\nfunction render() {\n    renderCss();\n    renderJs();\n    campaign.events.trigger(\"lastRequest\");\n\n    var campaignName = campaign.getName();\n    window.MMExperience = window.MMExperience || {};\n    if(!window.MMExperience[campaignName]){\n        window.MMExperience[campaignName] = campaign.getExperience();\n    }\n}\n\nfunction renderJs() {\n    var elementsToRender = campaign.getElements();\n    for (var i in elementsToRender) {\n        if (elementsToRender.hasOwnProperty(i)) {\n            var element = elementsToRender[i];\n            renderer.runVariantJs(element);\n        }\n    }\n}\n\nfunction renderCss() {\n    var styles = campaign.getStyles();\n    if (styles.length) {\n        dom.addCss(styles);\n    }\n}\n\nfunction isVisitorQualified() {\n    if (window.isCampaignDesignMode) {\n        return true;\n    }\n    var rules = campaign.scope.qualificationRules || [];\n    var results = [];\n    for (var i = 0; i < rules.length; i++) {\n        var result = rules[i]();\n        if (typeof result.then !== \"function\") {\n            result = Deferred()[result ? \"resolve\" : \"reject\"]().promise();\n        }\n        results.push(result);\n    }\n    return when.apply(this, results);\n}\n\nfunction isUrlMatched(url, includedUrls, excludedUrls) {\n    var isIncluded = isMasksMatch(url, includedUrls);\n    var isExcluded = isMasksMatch(url, excludedUrls);\n    return isIncluded && !isExcluded;\n}\n\nfunction isMasksMatch(url, masks) {\n    if (!url) {\n        return false;\n    }\n    url = url.toLowerCase();\n    var matchedMasks = 0;\n\n    for (var i = 0; i < masks.length; i++) {\n        var mask = masks[i].toLowerCase();\n        if (isMaskMatch(url, window.deproxy({\n                href: mask\n            }).href)) {\n            matchedMasks = matchedMasks + 1;\n        }\n    };\n    return matchedMasks > 0;\n}\n\nfunction isMaskMatch(url, originalMask) {\n    var mask = \"^\";\n    var pos = 0;\n    while (originalMask.length > pos) {\n        var char = originalMask[pos];\n        if (char == \"*\") {\n            mask = mask + \".*\";\n            pos = pos + 1;\n        } else if (char == \"(\") {\n            var posClosing = originalMask.indexOf(\")\", pos + 1);\n            var posNextOpening = originalMask.indexOf(\"(\", pos + 1);\n            if (posClosing > pos && (posNextOpening < 0 || posClosing < posNextOpening)) {\n                mask = mask + \".*\";\n                pos = posClosing + 1;\n            } else {\n                return false;\n            }\n        } else {\n            mask = mask + char;\n            pos = pos + 1;\n        }\n    }\n    mask = mask + \"$\";\n    mask = mask.replace(\"?\", \"\\?\");\n    var r = new RegExp(mask);\n    return r.test(url);\n}","Order":5999,"HighLevelApiVersion":"1.24"},{"Name":"Routing","Type":"script","Attrs":{"type":"text/javascript"},"Data":"(function () {\n    if(!window.isCampaignDesignMode) {\n       window.deproxy = function(location) {\n           return location;\n       }\n    }\n    var lastUrl = window.deproxy(window.location.href);\n\n    function forceTriggerRouteChange(url) {\n        lastUrl = url;\n        campaign.events.trigger('urlChange', {\n            url: url\n        });\n    }\n\n    function triggerRouteChange(url) {\n        if (url && lastUrl !== url) {\n            forceTriggerRouteChange(url);\n        }\n    }\n\n    function createRouteChange(fn) {\n        return function () {\n            var result = fn.apply(this, arguments);\n            triggerRouteChange(window.deproxy(window.location.href));\n            return result;\n        };\n    }\n\n    history.pushState = createRouteChange(history.pushState);\n\n    history.replaceState = createRouteChange(history.replaceState);\n\n    window.addEventListener('popstate', function (event) {\n        triggerRouteChange(window.deproxy(window.location.href));\n    });\n\n    window.addEventListener('hashchange', function (event) {\n        triggerRouteChange(window.deproxy(window.location.href));\n    });\n})();","Order":5000,"HighLevelApiVersion":"1.24"},{"Name":"C199069983","Type":"script","Attrs":{"type":"text/javascript"},"Data":"/*configuration block begin*/\nvar config = {\n\t\"actionName\": \"RHButton\",\n\t\"selectorsDefault\": {},\n\t\"selectorsAfter\": {\n\t\t\"element1\": {\n\t\t\t\"lp389-agent\": {\n\t\t\t\t\"#RHButtonInsertion\": {\n\t\t\t\t\t\"value\": 1,\n\t\t\t\t\t\"attr\": \"\"\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\t\"urls\": {\n\t\t\"includedUrls\": [\n\t\t\t\"https://www.quickenloans.com/thank-you\",\n\t\t\t\"https://www.quickenloans.com/thank-you?*\"\n\t\t],\n\t\t\"excludedUrls\": []\n\t}\n};\n/*configuration block end*/\n\nvar domReadyDeferred = Deferred();\nevents.domReady(function(){\n    domReadyDeferred.resolve();\n});\n\nvar isUrlMatched = function(url, includedUrls, excludedUrls) {\n    var isIncluded = isMasksMatch(url, includedUrls);\n    var isExcluded = isMasksMatch(url, excludedUrls);\n    return isIncluded && !isExcluded;\n};\n\nvar isMasksMatch = function(url, masks) {\n    if (!url) {\n        return false;\n    }\n    url = url.toLowerCase();\n\n    for (var i = 0; i < masks.length; i++) {\n        var mask = masks[i].toLowerCase();\n        if (isMaskMatch(url, window.deproxy ? window.deproxy({\n            href: mask\n        }).href : mask)) {\n            return true;\n        }\n    }\n    return false;\n};\n\nvar isMaskMatch = function(url, originalMask) {\n    var mask = '^';\n    var pos = 0;\n    while (originalMask.length > pos) {\n        var char = originalMask[pos];\n        if (char == '*') {\n            mask = mask + '.*';\n            pos = pos + 1;\n        } else if (char == '(') {\n            var posClosing = originalMask.indexOf(')', pos + 1);\n            var posNextOpening = originalMask.indexOf('(', pos + 1);\n            if (posClosing > pos && (posNextOpening < 0 || posClosing < posNextOpening)) {\n                mask = mask + '.*';\n                pos = posClosing + 1;\n            } else {\n                return false;\n            }\n        } else {\n            mask = mask + char;\n            pos = pos + 1;\n        }\n    }\n    mask = mask + '$';\n    mask = mask.replace('?', \"\\\\?\");\n    var r = new RegExp(mask);\n    return r.test(url);\n};\n\nvar waitForElement = function(elementSelector, timeoutValue){\n    var elementDeferred = Deferred();\n    var timeout = false;\n    domReadyDeferred.promise().then(function(){\n        setTimeout(function () {\n            timeout = true;\n        }, timeoutValue);\n    });\n\n    renderer.when(function(){\n        return timeout || dom.find(elementSelector).length;\n    })\n        .done(function(){ elementDeferred.resolve(); })\n        .fail(function(){ elementDeferred.reject(); });\n\n    return elementDeferred.promise();\n};\n\nvar getActionElement = function(selector, data) {\n    var deferred = Deferred();\n\n    if (selector) {\n        waitForElement(selector, 2000)\n            .done(function(){\n                var elements = dom.find(selector);\n                if (elements.length) {\n                    var elementData = {\n                        selector: selector,\n                        data: data\n                    };\n                    deferred.resolveWith(this, [elements[0], elementData]);\n                } else {\n                    deferred.reject();\n                }\n            })\n            .fail(function(){\n                deferred.reject();\n            });\n    } else {\n        deferred.reject();\n    }\n\n    return deferred.promise();\n};\n\nvar getCurrentUrl = function() {\n    return window.deproxy\n        ? window.deproxy(window.location).href\n        : window.location.href;\n};\n\nvar isActionRequired = function() {\n    return !config.urls\n        ? true\n        : !!isUrlMatched(\n            getCurrentUrl(),\n            config.urls.includedUrls,\n            config.urls.excludedUrls);\n};\n\nvar trackClicksAction = function(selectors) {\n    if (isActionRequired()) {\n        for(var selector in selectors){\n            getActionElement(selector, selectors[selector]).done(function (element, elementData){\n                if(element && (!element.attachedActions || !element.attachedActions[config.actionName])){\n                    actions.trackClicks(elementData.selector, {name: config.actionName, value:elementData.data.value, attribute:elementData.data.attr});\n                    if (!element.attachedActions) { element.attachedActions = {}; }\n                    element.attachedActions[config.actionName] = true;\n                }\n            });\n        }\n    }\n};\n\ntrackClicksAction(config.selectorsDefault);\n\ncampaign.events.on('urlChange', function(){ trackClicksAction(config.selectorsDefault); });\n\ncampaign.events.variantJsExecuted(function(elementName, variantName){\n    var selectorsAfter = (config.selectorsAfter[elementName] || {})[variantName.toLowerCase()] || {};\n    trackClicksAction(selectorsAfter);\n});\n","Order":4000,"HighLevelApiVersion":"1.24"}],"Elements":[],"Recommendations":[]},{"Name":"LP390 - TY Page Home Search CTA","Type":"ABnMVT","CSName":"","HighLevelApiVersion":"1.24","PagePrefix":"MDczNzU4","Scripts":[{"Name":"Rendering","Type":"script","Attrs":{"type":"text/javascript"},"Data":"var config = {\n    \"selectorsToHide\": null,\n    \"useSecondRequest\": true,\n    \"elements\": [\n        {\n            \"includedUrls\": [\n                \"http*://www.quickenloans.com/thank-you?*\",\n                \"http*://www.quickenloans.com/thank-you\"\n            ],\n            \"excludedUrls\": [],\n            \"selectors\": \"#breadcrumbs { visibility: hidden !important }\",\n            \"id\": 174498\n        }\n    ]\n};\n\nif (config.useSecondRequest) {\n    activateCampaign();\n} else {\n    render();\n}\n\ncampaign.events.on(\"urlChange\", activateCampaign);\n\nfunction activateCampaign() {\n    if (isRenderRequired()) {\n        var selectorsToHide = getSelectorsToHide();\n        hide(selectorsToHide);\n        when(isVisitorQualified())\n            .done(function () {\n                renderer.getContent().always(function () {\n                    render();\n                    show(selectorsToHide);\n                });\n            })\n            .fail(function () {\n                show(selectorsToHide);\n            });\n    }\n}\n\nfunction isRenderRequired() {\n    if (config.elements === null) { return true; }\n\n    var url = window.deproxy ? window.deproxy(window.location).href : window.location.href;\n    for (var i = 0; i < config.elements.length; i++) {\n        if (isUrlMatched(url, config.elements[i].includedUrls, config.elements[i].excludedUrls)) {\n            return true;\n        }\n    }\n    return false;\n}\n\nfunction hide(selectorsToHide) {\n    if (selectorsToHide) {\n        renderer.hide(selectorsToHide, \"ucb\");\n    }\n}\n\nfunction show(selectorsToHide) {\n    if (selectorsToHide) {\n        renderer.show(\"ucb\");\n    }\n}\n\nfunction getSelectorsToHide() {\n    if (config.elements === null) { return config.selectorsToHide; }\n\n    var url = window.deproxy ? window.deproxy(window.location).href : window.location.href;\n    var selectors = \"\";\n    for (var i = 0; i < config.elements.length; i++) {\n        if (isUrlMatched(url, config.elements[i].includedUrls, config.elements[i].excludedUrls)) {\n            selectors += \" \" + config.elements[i].selectors;\n        }\n    }\n    return selectors;\n}\n\nfunction render() {\n    renderCss();\n    renderJs();\n    campaign.events.trigger(\"lastRequest\");\n\n    var campaignName = campaign.getName();\n    window.MMExperience = window.MMExperience || {};\n    if(!window.MMExperience[campaignName]){\n        window.MMExperience[campaignName] = campaign.getExperience();\n    }\n}\n\nfunction renderJs() {\n    var elementsToRender = campaign.getElements();\n    for (var i in elementsToRender) {\n        if (elementsToRender.hasOwnProperty(i)) {\n            var element = elementsToRender[i];\n            renderer.runVariantJs(element);\n        }\n    }\n}\n\nfunction renderCss() {\n    var styles = campaign.getStyles();\n    if (styles.length) {\n        dom.addCss(styles);\n    }\n}\n\nfunction isVisitorQualified() {\n    if (window.isCampaignDesignMode) {\n        return true;\n    }\n    var rules = campaign.scope.qualificationRules || [];\n    var results = [];\n    for (var i = 0; i < rules.length; i++) {\n        var result = rules[i]();\n        if (typeof result.then !== \"function\") {\n            result = Deferred()[result ? \"resolve\" : \"reject\"]().promise();\n        }\n        results.push(result);\n    }\n    return when.apply(this, results);\n}\n\nfunction isUrlMatched(url, includedUrls, excludedUrls) {\n    var isIncluded = isMasksMatch(url, includedUrls);\n    var isExcluded = isMasksMatch(url, excludedUrls);\n    return isIncluded && !isExcluded;\n}\n\nfunction isMasksMatch(url, masks) {\n    if (!url) {\n        return false;\n    }\n    url = url.toLowerCase();\n    var matchedMasks = 0;\n\n    for (var i = 0; i < masks.length; i++) {\n        var mask = masks[i].toLowerCase();\n        if (isMaskMatch(url, window.deproxy({\n                href: mask\n            }).href)) {\n            matchedMasks = matchedMasks + 1;\n        }\n    };\n    return matchedMasks > 0;\n}\n\nfunction isMaskMatch(url, originalMask) {\n    var mask = \"^\";\n    var pos = 0;\n    while (originalMask.length > pos) {\n        var char = originalMask[pos];\n        if (char == \"*\") {\n            mask = mask + \".*\";\n            pos = pos + 1;\n        } else if (char == \"(\") {\n            var posClosing = originalMask.indexOf(\")\", pos + 1);\n            var posNextOpening = originalMask.indexOf(\"(\", pos + 1);\n            if (posClosing > pos && (posNextOpening < 0 || posClosing < posNextOpening)) {\n                mask = mask + \".*\";\n                pos = posClosing + 1;\n            } else {\n                return false;\n            }\n        } else {\n            mask = mask + char;\n            pos = pos + 1;\n        }\n    }\n    mask = mask + \"$\";\n    mask = mask.replace(\"?\", \"\\?\");\n    var r = new RegExp(mask);\n    return r.test(url);\n}","Order":5999,"HighLevelApiVersion":"1.24"},{"Name":"C1694980456","Type":"script","Attrs":{"type":"text/javascript"},"Data":"/*configuration block begin*/\nvar config = {\n\t\"actionName\": \"RMButton 1\",\n\t\"selectorsDefault\": {\n\t\t\".call-now\": {\n\t\t\t\"value\": 1,\n\t\t\t\"attr\": \"\"\n\t\t}\n\t},\n\t\"selectorsAfter\": {\n\t\t\"element1\": {\n\t\t\t\"lp390-homesearch\": {\n\t\t\t\t\"#RMButtonInsertion\": {\n\t\t\t\t\t\"value\": 1,\n\t\t\t\t\t\"attr\": \"\"\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\t\"urls\": {\n\t\t\"includedUrls\": [\n\t\t\t\"https://www.quickenloans.com/thank-you\",\n\t\t\t\"https://www.quickenloans.com/thank-you?*\"\n\t\t],\n\t\t\"excludedUrls\": []\n\t}\n};\n/*configuration block end*/\n\nvar domReadyDeferred = Deferred();\nevents.domReady(function(){\n    domReadyDeferred.resolve();\n});\n\nvar isUrlMatched = function(url, includedUrls, excludedUrls) {\n    var isIncluded = isMasksMatch(url, includedUrls);\n    var isExcluded = isMasksMatch(url, excludedUrls);\n    return isIncluded && !isExcluded;\n};\n\nvar isMasksMatch = function(url, masks) {\n    if (!url) {\n        return false;\n    }\n    url = url.toLowerCase();\n\n    for (var i = 0; i < masks.length; i++) {\n        var mask = masks[i].toLowerCase();\n        if (isMaskMatch(url, window.deproxy ? window.deproxy({\n            href: mask\n        }).href : mask)) {\n            return true;\n        }\n    }\n    return false;\n};\n\nvar isMaskMatch = function(url, originalMask) {\n    var mask = '^';\n    var pos = 0;\n    while (originalMask.length > pos) {\n        var char = originalMask[pos];\n        if (char == '*') {\n            mask = mask + '.*';\n            pos = pos + 1;\n        } else if (char == '(') {\n            var posClosing = originalMask.indexOf(')', pos + 1);\n            var posNextOpening = originalMask.indexOf('(', pos + 1);\n            if (posClosing > pos && (posNextOpening < 0 || posClosing < posNextOpening)) {\n                mask = mask + '.*';\n                pos = posClosing + 1;\n            } else {\n                return false;\n            }\n        } else {\n            mask = mask + char;\n            pos = pos + 1;\n        }\n    }\n    mask = mask + '$';\n    mask = mask.replace('?', \"\\\\?\");\n    var r = new RegExp(mask);\n    return r.test(url);\n};\n\nvar waitForElement = function(elementSelector, timeoutValue){\n    var elementDeferred = Deferred();\n    var timeout = false;\n    domReadyDeferred.promise().then(function(){\n        setTimeout(function () {\n            timeout = true;\n        }, timeoutValue);\n    });\n\n    renderer.when(function(){\n        return timeout || dom.find(elementSelector).length;\n    })\n        .done(function(){ elementDeferred.resolve(); })\n        .fail(function(){ elementDeferred.reject(); });\n\n    return elementDeferred.promise();\n};\n\nvar getActionElement = function(selector, data) {\n    var deferred = Deferred();\n\n    if (selector) {\n        waitForElement(selector, 2000)\n            .done(function(){\n                var elements = dom.find(selector);\n                if (elements.length) {\n                    var elementData = {\n                        selector: selector,\n                        data: data\n                    };\n                    deferred.resolveWith(this, [elements[0], elementData]);\n                } else {\n                    deferred.reject();\n                }\n            })\n            .fail(function(){\n                deferred.reject();\n            });\n    } else {\n        deferred.reject();\n    }\n\n    return deferred.promise();\n};\n\nvar getCurrentUrl = function() {\n    return window.deproxy\n        ? window.deproxy(window.location).href\n        : window.location.href;\n};\n\nvar isActionRequired = function() {\n    return !config.urls\n        ? true\n        : !!isUrlMatched(\n            getCurrentUrl(),\n            config.urls.includedUrls,\n            config.urls.excludedUrls);\n};\n\nvar trackClicksAction = function(selectors) {\n    if (isActionRequired()) {\n        for(var selector in selectors){\n            getActionElement(selector, selectors[selector]).done(function (element, elementData){\n                if(element && (!element.attachedActions || !element.attachedActions[config.actionName])){\n                    actions.trackClicks(elementData.selector, {name: config.actionName, value:elementData.data.value, attribute:elementData.data.attr});\n                    if (!element.attachedActions) { element.attachedActions = {}; }\n                    element.attachedActions[config.actionName] = true;\n                }\n            });\n        }\n    }\n};\n\ntrackClicksAction(config.selectorsDefault);\n\ncampaign.events.on('urlChange', function(){ trackClicksAction(config.selectorsDefault); });\n\ncampaign.events.variantJsExecuted(function(elementName, variantName){\n    var selectorsAfter = (config.selectorsAfter[elementName] || {})[variantName.toLowerCase()] || {};\n    trackClicksAction(selectorsAfter);\n});\n","Order":4000,"HighLevelApiVersion":"1.24"},{"Name":"Routing","Type":"script","Attrs":{"type":"text/javascript"},"Data":"(function () {\n    if(!window.isCampaignDesignMode) {\n       window.deproxy = function(location) {\n           return location;\n       }\n    }\n    var lastUrl = window.deproxy(window.location.href);\n\n    function forceTriggerRouteChange(url) {\n        lastUrl = url;\n        campaign.events.trigger('urlChange', {\n            url: url\n        });\n    }\n\n    function triggerRouteChange(url) {\n        if (url && lastUrl !== url) {\n            forceTriggerRouteChange(url);\n        }\n    }\n\n    function createRouteChange(fn) {\n        return function () {\n            var result = fn.apply(this, arguments);\n            triggerRouteChange(window.deproxy(window.location.href));\n            return result;\n        };\n    }\n\n    history.pushState = createRouteChange(history.pushState);\n\n    history.replaceState = createRouteChange(history.replaceState);\n\n    window.addEventListener('popstate', function (event) {\n        triggerRouteChange(window.deproxy(window.location.href));\n    });\n\n    window.addEventListener('hashchange', function (event) {\n        triggerRouteChange(window.deproxy(window.location.href));\n    });\n})();","Order":5000,"HighLevelApiVersion":"1.24"},{"Name":"C199069983","Type":"script","Attrs":{"type":"text/javascript"},"Data":"/*configuration block begin*/\nvar config = {\n\t\"actionName\": \"RHButton 1\",\n\t\"selectorsDefault\": {},\n\t\"selectorsAfter\": {\n\t\t\"element1\": {\n\t\t\t\"lp390-homesearch\": {\n\t\t\t\t\"#RHButtonInsertion\": {\n\t\t\t\t\t\"value\": 1,\n\t\t\t\t\t\"attr\": \"\"\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\t\"urls\": {\n\t\t\"includedUrls\": [\n\t\t\t\"https://www.quickenloans.com/thank-you\",\n\t\t\t\"https://www.quickenloans.com/thank-you?*\"\n\t\t],\n\t\t\"excludedUrls\": []\n\t}\n};\n/*configuration block end*/\n\nvar domReadyDeferred = Deferred();\nevents.domReady(function(){\n    domReadyDeferred.resolve();\n});\n\nvar isUrlMatched = function(url, includedUrls, excludedUrls) {\n    var isIncluded = isMasksMatch(url, includedUrls);\n    var isExcluded = isMasksMatch(url, excludedUrls);\n    return isIncluded && !isExcluded;\n};\n\nvar isMasksMatch = function(url, masks) {\n    if (!url) {\n        return false;\n    }\n    url = url.toLowerCase();\n\n    for (var i = 0; i < masks.length; i++) {\n        var mask = masks[i].toLowerCase();\n        if (isMaskMatch(url, window.deproxy ? window.deproxy({\n            href: mask\n        }).href : mask)) {\n            return true;\n        }\n    }\n    return false;\n};\n\nvar isMaskMatch = function(url, originalMask) {\n    var mask = '^';\n    var pos = 0;\n    while (originalMask.length > pos) {\n        var char = originalMask[pos];\n        if (char == '*') {\n            mask = mask + '.*';\n            pos = pos + 1;\n        } else if (char == '(') {\n            var posClosing = originalMask.indexOf(')', pos + 1);\n            var posNextOpening = originalMask.indexOf('(', pos + 1);\n            if (posClosing > pos && (posNextOpening < 0 || posClosing < posNextOpening)) {\n                mask = mask + '.*';\n                pos = posClosing + 1;\n            } else {\n                return false;\n            }\n        } else {\n            mask = mask + char;\n            pos = pos + 1;\n        }\n    }\n    mask = mask + '$';\n    mask = mask.replace('?', \"\\\\?\");\n    var r = new RegExp(mask);\n    return r.test(url);\n};\n\nvar waitForElement = function(elementSelector, timeoutValue){\n    var elementDeferred = Deferred();\n    var timeout = false;\n    domReadyDeferred.promise().then(function(){\n        setTimeout(function () {\n            timeout = true;\n        }, timeoutValue);\n    });\n\n    renderer.when(function(){\n        return timeout || dom.find(elementSelector).length;\n    })\n        .done(function(){ elementDeferred.resolve(); })\n        .fail(function(){ elementDeferred.reject(); });\n\n    return elementDeferred.promise();\n};\n\nvar getActionElement = function(selector, data) {\n    var deferred = Deferred();\n\n    if (selector) {\n        waitForElement(selector, 2000)\n            .done(function(){\n                var elements = dom.find(selector);\n                if (elements.length) {\n                    var elementData = {\n                        selector: selector,\n                        data: data\n                    };\n                    deferred.resolveWith(this, [elements[0], elementData]);\n                } else {\n                    deferred.reject();\n                }\n            })\n            .fail(function(){\n                deferred.reject();\n            });\n    } else {\n        deferred.reject();\n    }\n\n    return deferred.promise();\n};\n\nvar getCurrentUrl = function() {\n    return window.deproxy\n        ? window.deproxy(window.location).href\n        : window.location.href;\n};\n\nvar isActionRequired = function() {\n    return !config.urls\n        ? true\n        : !!isUrlMatched(\n            getCurrentUrl(),\n            config.urls.includedUrls,\n            config.urls.excludedUrls);\n};\n\nvar trackClicksAction = function(selectors) {\n    if (isActionRequired()) {\n        for(var selector in selectors){\n            getActionElement(selector, selectors[selector]).done(function (element, elementData){\n                if(element && (!element.attachedActions || !element.attachedActions[config.actionName])){\n                    actions.trackClicks(elementData.selector, {name: config.actionName, value:elementData.data.value, attribute:elementData.data.attr});\n                    if (!element.attachedActions) { element.attachedActions = {}; }\n                    element.attachedActions[config.actionName] = true;\n                }\n            });\n        }\n    }\n};\n\ntrackClicksAction(config.selectorsDefault);\n\ncampaign.events.on('urlChange', function(){ trackClicksAction(config.selectorsDefault); });\n\ncampaign.events.variantJsExecuted(function(elementName, variantName){\n    var selectorsAfter = (config.selectorsAfter[elementName] || {})[variantName.toLowerCase()] || {};\n    trackClicksAction(selectorsAfter);\n});\n","Order":4000,"HighLevelApiVersion":"1.24"}],"Elements":[],"Recommendations":[]},{"Name":"LP391 - RH Opt Legal Lst Step","Type":"ABnMVT","CSName":"","HighLevelApiVersion":"1.24","PagePrefix":"MDczODc3","Scripts":[{"Name":"Rendering","Type":"script","Attrs":{"type":"text/javascript"},"Data":"events.domReady(function() {\n  document.querySelector('[data-analytics-click=\"Options: Next\"]').onclick = function() {\n    \nvar config = {\n    \"selectorsToHide\": null,\n    \"useSecondRequest\": true,\n    \"elements\": [\n        {\n            \"includedUrls\": [\n                \"http*://www.rockethomes.com/l2/options\",\n                \"http*://www.rockethomes.com/l2/options?*\"\n            ],\n            \"excludedUrls\": [],\n            \"selectors\": \".LegalSubmissionCopy { visibility: hidden !important }\",\n            \"id\": 174774\n        }\n    ]\n};\n\nif (config.useSecondRequest) {\n    activateCampaign();\n} else {\n    render();\n}\n\ncampaign.events.on(\"urlChange\", activateCampaign);\n\nfunction activateCampaign() {\n    if (isRenderRequired()) {\n        var selectorsToHide = getSelectorsToHide();\n        hide(selectorsToHide);\n        when(isVisitorQualified())\n            .done(function () {\n                renderer.getContent().always(function () {\n                    render();\n                    show(selectorsToHide);\n                });\n            })\n            .fail(function () {\n                show(selectorsToHide);\n            });\n    }\n}\n\nfunction isRenderRequired() {\n    if (config.elements === null) { return true; }\n\n    var url = window.deproxy ? window.deproxy(window.location).href : window.location.href;\n    for (var i = 0; i < config.elements.length; i++) {\n        if (isUrlMatched(url, config.elements[i].includedUrls, config.elements[i].excludedUrls)) {\n            return true;\n        }\n    }\n    return false;\n}\n\nfunction hide(selectorsToHide) {\n    if (selectorsToHide) {\n        renderer.hide(selectorsToHide, \"ucb\");\n    }\n}\n\nfunction show(selectorsToHide) {\n    if (selectorsToHide) {\n        renderer.show(\"ucb\");\n    }\n}\n\nfunction getSelectorsToHide() {\n    if (config.elements === null) { return config.selectorsToHide; }\n\n    var url = window.deproxy ? window.deproxy(window.location).href : window.location.href;\n    var selectors = \"\";\n    for (var i = 0; i < config.elements.length; i++) {\n        if (isUrlMatched(url, config.elements[i].includedUrls, config.elements[i].excludedUrls)) {\n            selectors += \" \" + config.elements[i].selectors;\n        }\n    }\n    return selectors;\n}\n\nfunction render() {\n    renderCss();\n    renderJs();\n    campaign.events.trigger(\"lastRequest\");\n\n    var campaignName = campaign.getName();\n    window.MMExperience = window.MMExperience || {};\n    if(!window.MMExperience[campaignName]){\n        window.MMExperience[campaignName] = campaign.getExperience();\n    }\n}\n\nfunction renderJs() {\n    var elementsToRender = campaign.getElements();\n    for (var i in elementsToRender) {\n        if (elementsToRender.hasOwnProperty(i)) {\n            var element = elementsToRender[i];\n            renderer.runVariantJs(element);\n        }\n    }\n}\n\nfunction renderCss() {\n    var styles = campaign.getStyles();\n    if (styles.length) {\n        dom.addCss(styles);\n    }\n}\n\nfunction isVisitorQualified() {\n    if (window.isCampaignDesignMode) {\n        return true;\n    }\n    var rules = campaign.scope.qualificationRules || [];\n    var results = [];\n    for (var i = 0; i < rules.length; i++) {\n        var result = rules[i]();\n        if (typeof result.then !== \"function\") {\n            result = Deferred()[result ? \"resolve\" : \"reject\"]().promise();\n        }\n        results.push(result);\n    }\n    return when.apply(this, results);\n}\n\nfunction isUrlMatched(url, includedUrls, excludedUrls) {\n    var isIncluded = isMasksMatch(url, includedUrls);\n    var isExcluded = isMasksMatch(url, excludedUrls);\n    return isIncluded && !isExcluded;\n}\n\nfunction isMasksMatch(url, masks) {\n    if (!url) {\n        return false;\n    }\n    url = url.toLowerCase();\n    var matchedMasks = 0;\n\n    for (var i = 0; i < masks.length; i++) {\n        var mask = masks[i].toLowerCase();\n        if (isMaskMatch(url, window.deproxy({\n                href: mask\n            }).href)) {\n            matchedMasks = matchedMasks + 1;\n        }\n    };\n    return matchedMasks > 0;\n}\n\nfunction isMaskMatch(url, originalMask) {\n    var mask = \"^\";\n    var pos = 0;\n    while (originalMask.length > pos) {\n        var char = originalMask[pos];\n        if (char == \"*\") {\n            mask = mask + \".*\";\n            pos = pos + 1;\n        } else if (char == \"(\") {\n            var posClosing = originalMask.indexOf(\")\", pos + 1);\n            var posNextOpening = originalMask.indexOf(\"(\", pos + 1);\n            if (posClosing > pos && (posNextOpening < 0 || posClosing < posNextOpening)) {\n                mask = mask + \".*\";\n                pos = posClosing + 1;\n            } else {\n                return false;\n            }\n        } else {\n            mask = mask + char;\n            pos = pos + 1;\n        }\n    }\n    mask = mask + \"$\";\n    mask = mask.replace(\"?\", \"\\?\");\n    var r = new RegExp(mask);\n    return r.test(url);\n}\n};\n});\n\nevents.domReady(function() {\n  campaign.events.on('lastRequest', function() {\n      window.tntcookies(campaign);\n  });\n});","Order":5999,"HighLevelApiVersion":"1.24"},{"Name":"Routing","Type":"script","Attrs":{"type":"text/javascript"},"Data":"(function () {\n    if(!window.isCampaignDesignMode) {\n       window.deproxy = function(location) {\n           return location;\n       }\n    }\n    var lastUrl = window.deproxy(window.location.href);\n\n    function forceTriggerRouteChange(url) {\n        lastUrl = url;\n        campaign.events.trigger('urlChange', {\n            url: url\n        });\n    }\n\n    function triggerRouteChange(url) {\n        if (url && lastUrl !== url) {\n            forceTriggerRouteChange(url);\n        }\n    }\n\n    function createRouteChange(fn) {\n        return function () {\n            var result = fn.apply(this, arguments);\n            triggerRouteChange(window.deproxy(window.location.href));\n            return result;\n        };\n    }\n\n    history.pushState = createRouteChange(history.pushState);\n\n    history.replaceState = createRouteChange(history.replaceState);\n\n    window.addEventListener('popstate', function (event) {\n        triggerRouteChange(window.deproxy(window.location.href));\n    });\n\n    window.addEventListener('hashchange', function (event) {\n        triggerRouteChange(window.deproxy(window.location.href));\n    });\n})();","Order":5000,"HighLevelApiVersion":"1.24"},{"Name":"Qualifying","Type":"script","Attrs":{"type":"text/javascript"},"Data":"function isQualified(){\n    //Questions\n    let questions = $('.t_smart-form-page'); // Grabs all questions in the form\n    let currentQuestion = questions.not('.u-Hide'); // Grabs the current question shown\n    let currentQuestionName = currentQuestion.data('sfVirtualName'); //The name of the current question\n\n    // Answers\n    let responses = currentQuestion.find('.t-smart-form-answer'); //All the responses in the current question\n    let exampleResponseValue = $(responses[0]).find('input').val(); // Grabbing a specific value of a resoponse\n\n    // Click event\n    $('body').on('click', '.t_smart-form-next-button', () => {\n      let questions = $('.t_smart-form-page'); //Grabs the questions\n      let currentQuestion = $(questions).not('.u-Hide'); // Filters the current question shown\n      console.log(currentQuestion.find('.t-smart-form-answer-active > input').val()); // Logs the selected responses value when clicked\n    });\n  \n  if (document.querySelector('[data-sf-page=\"16\"]').classList.value.indexOf('u-Hide') == -1) {\n  \treturn true;\n  } else {\n  \treturn false;\n  }\n}\n\ncampaign.scope.qualificationRules = campaign.scope.qualificationRules || [];\ncampaign.scope.qualificationRules.push(isQualified);","Order":5000,"HighLevelApiVersion":"1.24"},{"Name":"C1451032778","Type":"script","Attrs":{"type":"text/javascript"},"Data":"/*configuration block begin*/\nvar config = {\n\t\"actionName\": \"SubmitBtn 1\",\n\t\"selectorsDefault\": {\n\t\t\"[data-sf-nav=\\\"submit\\\"]\": {\n\t\t\t\"value\": 1,\n\t\t\t\"attr\": \"\"\n\t\t}\n\t},\n\t\"selectorsAfter\": {},\n\t\"urls\": {\n\t\t\"includedUrls\": [\n\t\t\t\"https://www.rockethomes.com/l2/options\",\n\t\t\t\"https://www.rockethomes.com/l2/options?*\"\n\t\t],\n\t\t\"excludedUrls\": []\n\t}\n};\n/*configuration block end*/\n\nvar domReadyDeferred = Deferred();\nevents.domReady(function(){\n    domReadyDeferred.resolve();\n});\n\nvar isUrlMatched = function(url, includedUrls, excludedUrls) {\n    var isIncluded = isMasksMatch(url, includedUrls);\n    var isExcluded = isMasksMatch(url, excludedUrls);\n    return isIncluded && !isExcluded;\n};\n\nvar isMasksMatch = function(url, masks) {\n    if (!url) {\n        return false;\n    }\n    url = url.toLowerCase();\n\n    for (var i = 0; i < masks.length; i++) {\n        var mask = masks[i].toLowerCase();\n        if (isMaskMatch(url, window.deproxy ? window.deproxy({\n            href: mask\n        }).href : mask)) {\n            return true;\n        }\n    }\n    return false;\n};\n\nvar isMaskMatch = function(url, originalMask) {\n    var mask = '^';\n    var pos = 0;\n    while (originalMask.length > pos) {\n        var char = originalMask[pos];\n        if (char == '*') {\n            mask = mask + '.*';\n            pos = pos + 1;\n        } else if (char == '(') {\n            var posClosing = originalMask.indexOf(')', pos + 1);\n            var posNextOpening = originalMask.indexOf('(', pos + 1);\n            if (posClosing > pos && (posNextOpening < 0 || posClosing < posNextOpening)) {\n                mask = mask + '.*';\n                pos = posClosing + 1;\n            } else {\n                return false;\n            }\n        } else {\n            mask = mask + char;\n            pos = pos + 1;\n        }\n    }\n    mask = mask + '$';\n    mask = mask.replace('?', \"\\\\?\");\n    var r = new RegExp(mask);\n    return r.test(url);\n};\n\nvar waitForElement = function(elementSelector, timeoutValue){\n    var elementDeferred = Deferred();\n    var timeout = false;\n    domReadyDeferred.promise().then(function(){\n        setTimeout(function () {\n            timeout = true;\n        }, timeoutValue);\n    });\n\n    renderer.when(function(){\n        return timeout || dom.find(elementSelector).length;\n    })\n        .done(function(){ elementDeferred.resolve(); })\n        .fail(function(){ elementDeferred.reject(); });\n\n    return elementDeferred.promise();\n};\n\nvar getActionElement = function(selector, data) {\n    var deferred = Deferred();\n\n    if (selector) {\n        waitForElement(selector, 2000)\n            .done(function(){\n                var elements = dom.find(selector);\n                if (elements.length) {\n                    var elementData = {\n                        selector: selector,\n                        data: data\n                    };\n                    deferred.resolveWith(this, [elements[0], elementData]);\n                } else {\n                    deferred.reject();\n                }\n            })\n            .fail(function(){\n                deferred.reject();\n            });\n    } else {\n        deferred.reject();\n    }\n\n    return deferred.promise();\n};\n\nvar getCurrentUrl = function() {\n    return window.deproxy\n        ? window.deproxy(window.location).href\n        : window.location.href;\n};\n\nvar isActionRequired = function() {\n    return !config.urls\n        ? true\n        : !!isUrlMatched(\n            getCurrentUrl(),\n            config.urls.includedUrls,\n            config.urls.excludedUrls);\n};\n\nvar trackClicksAction = function(selectors) {\n    if (isActionRequired()) {\n        for(var selector in selectors){\n            getActionElement(selector, selectors[selector]).done(function (element, elementData){\n                if(element && (!element.attachedActions || !element.attachedActions[config.actionName])){\n                    actions.trackClicks(elementData.selector, {name: config.actionName, value:elementData.data.value, attribute:elementData.data.attr});\n                    if (!element.attachedActions) { element.attachedActions = {}; }\n                    element.attachedActions[config.actionName] = true;\n                }\n            });\n        }\n    }\n};\n\ntrackClicksAction(config.selectorsDefault);\n\ncampaign.events.on('urlChange', function(){ trackClicksAction(config.selectorsDefault); });\n\ncampaign.events.variantJsExecuted(function(elementName, variantName){\n    var selectorsAfter = (config.selectorsAfter[elementName] || {})[variantName.toLowerCase()] || {};\n    trackClicksAction(selectorsAfter);\n});\n","Order":4000,"HighLevelApiVersion":"1.24"}],"Elements":[],"Recommendations":[]},{"Name":"LP402 - W TY Page HS vs Agent","Type":"ABnMVT","CSName":"","HighLevelApiVersion":"1.24","PagePrefix":"MDc0MDk4","Scripts":[{"Name":"Rendering","Type":"script","Attrs":{"type":"text/javascript"},"Data":"var config = {\n    \"selectorsToHide\": null,\n    \"useSecondRequest\": true,\n    \"elements\": [\n        {\n            \"includedUrls\": [\n                \"http*://www.quickenloans.com/l2/thank-you?*\",\n                \"http*://www.quickenloans.com/l2/thank-you\"\n            ],\n            \"excludedUrls\": [],\n            \"selectors\": \".o-WrapperM > .o-PanelTwo, .o-WrapperM > .o-PanelTwo.o-PanelTwo--no-stack > svg, .agentInsertion, .c-qdc-disclaimers { visibility: hidden !important }\",\n            \"id\": 175431\n        }\n    ]\n};\n\nif (config.useSecondRequest) {\n    activateCampaign();\n} else {\n    render();\n}\n\ncampaign.events.on(\"urlChange\", activateCampaign);\n\nfunction activateCampaign() {\n    if (isRenderRequired()) {\n        var selectorsToHide = getSelectorsToHide();\n        hide(selectorsToHide);\n        when(isVisitorQualified())\n            .done(function () {\n                renderer.getContent().always(function () {\n                    render();\n                    show(selectorsToHide);\n                });\n            })\n            .fail(function () {\n                show(selectorsToHide);\n            });\n    }\n}\n\nfunction isRenderRequired() {\n    if (config.elements === null) { return true; }\n\n    var url = window.deproxy ? window.deproxy(window.location).href : window.location.href;\n    for (var i = 0; i < config.elements.length; i++) {\n        if (isUrlMatched(url, config.elements[i].includedUrls, config.elements[i].excludedUrls)) {\n            return true;\n        }\n    }\n    return false;\n}\n\nfunction hide(selectorsToHide) {\n    if (selectorsToHide) {\n        renderer.hide(selectorsToHide, \"ucb\");\n    }\n}\n\nfunction show(selectorsToHide) {\n    if (selectorsToHide) {\n        renderer.show(\"ucb\");\n    }\n}\n\nfunction getSelectorsToHide() {\n    if (config.elements === null) { return config.selectorsToHide; }\n\n    var url = window.deproxy ? window.deproxy(window.location).href : window.location.href;\n    var selectors = \"\";\n    for (var i = 0; i < config.elements.length; i++) {\n        if (isUrlMatched(url, config.elements[i].includedUrls, config.elements[i].excludedUrls)) {\n            selectors += \" \" + config.elements[i].selectors;\n        }\n    }\n    return selectors;\n}\n\nfunction render() {\n    renderCss();\n    renderJs();\n    campaign.events.trigger(\"lastRequest\");\n\n    var campaignName = campaign.getName();\n    window.MMExperience = window.MMExperience || {};\n    if(!window.MMExperience[campaignName]){\n        window.MMExperience[campaignName] = campaign.getExperience();\n    }\n}\n\nfunction renderJs() {\n    var elementsToRender = campaign.getElements();\n    for (var i in elementsToRender) {\n        if (elementsToRender.hasOwnProperty(i)) {\n            var element = elementsToRender[i];\n            renderer.runVariantJs(element);\n        }\n    }\n}\n\nfunction renderCss() {\n    var styles = campaign.getStyles();\n    if (styles.length) {\n        dom.addCss(styles);\n    }\n}\n\nfunction isVisitorQualified() {\n    if (window.isCampaignDesignMode) {\n        return true;\n    }\n    var rules = campaign.scope.qualificationRules || [];\n    var results = [];\n    for (var i = 0; i < rules.length; i++) {\n        var result = rules[i]();\n        if (typeof result.then !== \"function\") {\n            result = Deferred()[result ? \"resolve\" : \"reject\"]().promise();\n        }\n        results.push(result);\n    }\n    return when.apply(this, results);\n}\n\nfunction isUrlMatched(url, includedUrls, excludedUrls) {\n    var isIncluded = isMasksMatch(url, includedUrls);\n    var isExcluded = isMasksMatch(url, excludedUrls);\n    return isIncluded && !isExcluded;\n}\n\nfunction isMasksMatch(url, masks) {\n    if (!url) {\n        return false;\n    }\n    url = url.toLowerCase();\n    var matchedMasks = 0;\n\n    for (var i = 0; i < masks.length; i++) {\n        var mask = masks[i].toLowerCase();\n        if (isMaskMatch(url, window.deproxy({\n                href: mask\n            }).href)) {\n            matchedMasks = matchedMasks + 1;\n        }\n    };\n    return matchedMasks > 0;\n}\n\nfunction isMaskMatch(url, originalMask) {\n    var mask = \"^\";\n    var pos = 0;\n    while (originalMask.length > pos) {\n        var char = originalMask[pos];\n        if (char == \"*\") {\n            mask = mask + \".*\";\n            pos = pos + 1;\n        } else if (char == \"(\") {\n            var posClosing = originalMask.indexOf(\")\", pos + 1);\n            var posNextOpening = originalMask.indexOf(\"(\", pos + 1);\n            if (posClosing > pos && (posNextOpening < 0 || posClosing < posNextOpening)) {\n                mask = mask + \".*\";\n                pos = posClosing + 1;\n            } else {\n                return false;\n            }\n        } else {\n            mask = mask + char;\n            pos = pos + 1;\n        }\n    }\n    mask = mask + \"$\";\n    mask = mask.replace(\"?\", \"\\?\");\n    var r = new RegExp(mask);\n    return r.test(url);\n}","Order":5999,"HighLevelApiVersion":"1.24"},{"Name":"Routing","Type":"script","Attrs":{"type":"text/javascript"},"Data":"(function () {\n    if(!window.isCampaignDesignMode) {\n       window.deproxy = function(location) {\n           return location;\n       }\n    }\n    var lastUrl = window.deproxy(window.location.href);\n\n    function forceTriggerRouteChange(url) {\n        lastUrl = url;\n        campaign.events.trigger('urlChange', {\n            url: url\n        });\n    }\n\n    function triggerRouteChange(url) {\n        if (url && lastUrl !== url) {\n            forceTriggerRouteChange(url);\n        }\n    }\n\n    function createRouteChange(fn) {\n        return function () {\n            var result = fn.apply(this, arguments);\n            triggerRouteChange(window.deproxy(window.location.href));\n            return result;\n        };\n    }\n\n    history.pushState = createRouteChange(history.pushState);\n\n    history.replaceState = createRouteChange(history.replaceState);\n\n    window.addEventListener('popstate', function (event) {\n        triggerRouteChange(window.deproxy(window.location.href));\n    });\n\n    window.addEventListener('hashchange', function (event) {\n        triggerRouteChange(window.deproxy(window.location.href));\n    });\n})();","Order":5000,"HighLevelApiVersion":"1.24"},{"Name":"C2040518068","Type":"script","Attrs":{"type":"text/javascript"},"Data":"/*configuration block begin*/\nvar config = {\n\t\"actionName\": \"RHHomeSearchBtn\",\n\t\"selectorsDefault\": {\n\t\t\".RH-TY-HomeSearch\": {\n\t\t\t\"value\": 1,\n\t\t\t\"attr\": \"\"\n\t\t}\n\t},\n\t\"selectorsAfter\": {},\n\t\"urls\": {\n\t\t\"includedUrls\": [\n\t\t\t\"https://www.quickenloans.com/l2/thank-you\",\n\t\t\t\"https://www.quickenloans.com/l2/thank-you?*\"\n\t\t],\n\t\t\"excludedUrls\": []\n\t}\n};\n/*configuration block end*/\n\nvar domReadyDeferred = Deferred();\nevents.domReady(function(){\n    domReadyDeferred.resolve();\n});\n\nvar isUrlMatched = function(url, includedUrls, excludedUrls) {\n    var isIncluded = isMasksMatch(url, includedUrls);\n    var isExcluded = isMasksMatch(url, excludedUrls);\n    return isIncluded && !isExcluded;\n};\n\nvar isMasksMatch = function(url, masks) {\n    if (!url) {\n        return false;\n    }\n    url = url.toLowerCase();\n\n    for (var i = 0; i < masks.length; i++) {\n        var mask = masks[i].toLowerCase();\n        if (isMaskMatch(url, window.deproxy ? window.deproxy({\n            href: mask\n        }).href : mask)) {\n            return true;\n        }\n    }\n    return false;\n};\n\nvar isMaskMatch = function(url, originalMask) {\n    var mask = '^';\n    var pos = 0;\n    while (originalMask.length > pos) {\n        var char = originalMask[pos];\n        if (char == '*') {\n            mask = mask + '.*';\n            pos = pos + 1;\n        } else if (char == '(') {\n            var posClosing = originalMask.indexOf(')', pos + 1);\n            var posNextOpening = originalMask.indexOf('(', pos + 1);\n            if (posClosing > pos && (posNextOpening < 0 || posClosing < posNextOpening)) {\n                mask = mask + '.*';\n                pos = posClosing + 1;\n            } else {\n                return false;\n            }\n        } else {\n            mask = mask + char;\n            pos = pos + 1;\n        }\n    }\n    mask = mask + '$';\n    mask = mask.replace('?', \"\\\\?\");\n    var r = new RegExp(mask);\n    return r.test(url);\n};\n\nvar waitForElement = function(elementSelector, timeoutValue){\n    var elementDeferred = Deferred();\n    var timeout = false;\n    domReadyDeferred.promise().then(function(){\n        setTimeout(function () {\n            timeout = true;\n        }, timeoutValue);\n    });\n\n    renderer.when(function(){\n        return timeout || dom.find(elementSelector).length;\n    })\n        .done(function(){ elementDeferred.resolve(); })\n        .fail(function(){ elementDeferred.reject(); });\n\n    return elementDeferred.promise();\n};\n\nvar getActionElement = function(selector, data) {\n    var deferred = Deferred();\n\n    if (selector) {\n        waitForElement(selector, 2000)\n            .done(function(){\n                var elements = dom.find(selector);\n                if (elements.length) {\n                    var elementData = {\n                        selector: selector,\n                        data: data\n                    };\n                    deferred.resolveWith(this, [elements[0], elementData]);\n                } else {\n                    deferred.reject();\n                }\n            })\n            .fail(function(){\n                deferred.reject();\n            });\n    } else {\n        deferred.reject();\n    }\n\n    return deferred.promise();\n};\n\nvar getCurrentUrl = function() {\n    return window.deproxy\n        ? window.deproxy(window.location).href\n        : window.location.href;\n};\n\nvar isActionRequired = function() {\n    return !config.urls\n        ? true\n        : !!isUrlMatched(\n            getCurrentUrl(),\n            config.urls.includedUrls,\n            config.urls.excludedUrls);\n};\n\nvar trackClicksAction = function(selectors) {\n    if (isActionRequired()) {\n        for(var selector in selectors){\n            getActionElement(selector, selectors[selector]).done(function (element, elementData){\n                if(element && (!element.attachedActions || !element.attachedActions[config.actionName])){\n                    actions.trackClicks(elementData.selector, {name: config.actionName, value:elementData.data.value, attribute:elementData.data.attr});\n                    if (!element.attachedActions) { element.attachedActions = {}; }\n                    element.attachedActions[config.actionName] = true;\n                }\n            });\n        }\n    }\n};\n\ntrackClicksAction(config.selectorsDefault);\n\ncampaign.events.on('urlChange', function(){ trackClicksAction(config.selectorsDefault); });\n\ncampaign.events.variantJsExecuted(function(elementName, variantName){\n    var selectorsAfter = (config.selectorsAfter[elementName] || {})[variantName.toLowerCase()] || {};\n    trackClicksAction(selectorsAfter);\n});\n","Order":4000,"HighLevelApiVersion":"1.24"},{"Name":"C389804669","Type":"script","Attrs":{"type":"text/javascript"},"Data":"/*configuration block begin*/\nvar config = {\n\t\"actionName\": \"RHButtonAgent\",\n\t\"selectorsDefault\": {\n\t\t\".RH-Button-Agent\": {\n\t\t\t\"value\": 1,\n\t\t\t\"attr\": \"\"\n\t\t}\n\t},\n\t\"selectorsAfter\": {},\n\t\"urls\": {\n\t\t\"includedUrls\": [\n\t\t\t\"https://www.quickenloans.com/l2/thank-you\",\n\t\t\t\"https://www.quickenloans.com/l2/thank-you?*\"\n\t\t],\n\t\t\"excludedUrls\": []\n\t}\n};\n/*configuration block end*/\n\nvar domReadyDeferred = Deferred();\nevents.domReady(function(){\n    domReadyDeferred.resolve();\n});\n\nvar isUrlMatched = function(url, includedUrls, excludedUrls) {\n    var isIncluded = isMasksMatch(url, includedUrls);\n    var isExcluded = isMasksMatch(url, excludedUrls);\n    return isIncluded && !isExcluded;\n};\n\nvar isMasksMatch = function(url, masks) {\n    if (!url) {\n        return false;\n    }\n    url = url.toLowerCase();\n\n    for (var i = 0; i < masks.length; i++) {\n        var mask = masks[i].toLowerCase();\n        if (isMaskMatch(url, window.deproxy ? window.deproxy({\n            href: mask\n        }).href : mask)) {\n            return true;\n        }\n    }\n    return false;\n};\n\nvar isMaskMatch = function(url, originalMask) {\n    var mask = '^';\n    var pos = 0;\n    while (originalMask.length > pos) {\n        var char = originalMask[pos];\n        if (char == '*') {\n            mask = mask + '.*';\n            pos = pos + 1;\n        } else if (char == '(') {\n            var posClosing = originalMask.indexOf(')', pos + 1);\n            var posNextOpening = originalMask.indexOf('(', pos + 1);\n            if (posClosing > pos && (posNextOpening < 0 || posClosing < posNextOpening)) {\n                mask = mask + '.*';\n                pos = posClosing + 1;\n            } else {\n                return false;\n            }\n        } else {\n            mask = mask + char;\n            pos = pos + 1;\n        }\n    }\n    mask = mask + '$';\n    mask = mask.replace('?', \"\\\\?\");\n    var r = new RegExp(mask);\n    return r.test(url);\n};\n\nvar waitForElement = function(elementSelector, timeoutValue){\n    var elementDeferred = Deferred();\n    var timeout = false;\n    domReadyDeferred.promise().then(function(){\n        setTimeout(function () {\n            timeout = true;\n        }, timeoutValue);\n    });\n\n    renderer.when(function(){\n        return timeout || dom.find(elementSelector).length;\n    })\n        .done(function(){ elementDeferred.resolve(); })\n        .fail(function(){ elementDeferred.reject(); });\n\n    return elementDeferred.promise();\n};\n\nvar getActionElement = function(selector, data) {\n    var deferred = Deferred();\n\n    if (selector) {\n        waitForElement(selector, 2000)\n            .done(function(){\n                var elements = dom.find(selector);\n                if (elements.length) {\n                    var elementData = {\n                        selector: selector,\n                        data: data\n                    };\n                    deferred.resolveWith(this, [elements[0], elementData]);\n                } else {\n                    deferred.reject();\n                }\n            })\n            .fail(function(){\n                deferred.reject();\n            });\n    } else {\n        deferred.reject();\n    }\n\n    return deferred.promise();\n};\n\nvar getCurrentUrl = function() {\n    return window.deproxy\n        ? window.deproxy(window.location).href\n        : window.location.href;\n};\n\nvar isActionRequired = function() {\n    return !config.urls\n        ? true\n        : !!isUrlMatched(\n            getCurrentUrl(),\n            config.urls.includedUrls,\n            config.urls.excludedUrls);\n};\n\nvar trackClicksAction = function(selectors) {\n    if (isActionRequired()) {\n        for(var selector in selectors){\n            getActionElement(selector, selectors[selector]).done(function (element, elementData){\n                if(element && (!element.attachedActions || !element.attachedActions[config.actionName])){\n                    actions.trackClicks(elementData.selector, {name: config.actionName, value:elementData.data.value, attribute:elementData.data.attr});\n                    if (!element.attachedActions) { element.attachedActions = {}; }\n                    element.attachedActions[config.actionName] = true;\n                }\n            });\n        }\n    }\n};\n\ntrackClicksAction(config.selectorsDefault);\n\ncampaign.events.on('urlChange', function(){ trackClicksAction(config.selectorsDefault); });\n\ncampaign.events.variantJsExecuted(function(elementName, variantName){\n    var selectorsAfter = (config.selectorsAfter[elementName] || {})[variantName.toLowerCase()] || {};\n    trackClicksAction(selectorsAfter);\n});\n","Order":4000,"HighLevelApiVersion":"1.24"}],"Elements":[],"Recommendations":[]},{"Name":"SC EF Step 1 Rates","Type":"ABnMVT","CSName":"","HighLevelApiVersion":"1.24","PagePrefix":"MDc0MTEx","Scripts":[{"Name":"Rendering","Type":"script","Attrs":{"type":"text/javascript"},"Data":"var config = {\n    \"selectorsToHide\": null,\n    \"useSecondRequest\": true,\n    \"elements\": [\n        {\n            \"includedUrls\": [\n                \"https://landing.edisonfinancial.ca/l2/easy-start*\",\n                \"https://landing-development.edisonfinancial.ca/l2/easy-start*\"\n            ],\n            \"excludedUrls\": [],\n            \"selectors\": \"\",\n            \"id\": 173519\n        }\n    ]\n};\n\nif (config.useSecondRequest) {\n    activateCampaign();\n} else {\n    render();\n}\n\ncampaign.events.on(\"urlChange\", activateCampaign);\n\nfunction activateCampaign() {\n    if (isRenderRequired()) {\n        var selectorsToHide = getSelectorsToHide();\n        hide(selectorsToHide);\n        when(isVisitorQualified())\n            .done(function () {\n                renderer.getContent().always(function () {\n                    render();\n                    show(selectorsToHide);\n                });\n            })\n            .fail(function () {\n                show(selectorsToHide);\n            });\n    }\n}\n\nfunction isRenderRequired() {\n    if (config.elements === null) { return true; }\n\n    var url = window.deproxy ? window.deproxy(window.location).href : window.location.href;\n    for (var i = 0; i < config.elements.length; i++) {\n        if (isUrlMatched(url, config.elements[i].includedUrls, config.elements[i].excludedUrls)) {\n            return true;\n        }\n    }\n    return false;\n}\n\nfunction hide(selectorsToHide) {\n    if (selectorsToHide) {\n        renderer.hide(selectorsToHide, \"ucb\");\n    }\n}\n\nfunction show(selectorsToHide) {\n    if (selectorsToHide) {\n        renderer.show(\"ucb\");\n    }\n}\n\nfunction getSelectorsToHide() {\n    if (config.elements === null) { return config.selectorsToHide; }\n\n    var url = window.deproxy ? window.deproxy(window.location).href : window.location.href;\n    var selectors = \"\";\n    for (var i = 0; i < config.elements.length; i++) {\n        if (isUrlMatched(url, config.elements[i].includedUrls, config.elements[i].excludedUrls)) {\n            selectors += \" \" + config.elements[i].selectors;\n        }\n    }\n    return selectors;\n}\n\nfunction render() {\n    renderCss();\n    renderJs();\n    campaign.events.trigger(\"lastRequest\");\n\n    var campaignName = campaign.getName();\n    window.MMExperience = window.MMExperience || {};\n    if(!window.MMExperience[campaignName]){\n        window.MMExperience[campaignName] = campaign.getExperience();\n    }\n}\n\nfunction renderJs() {\n    var elementsToRender = campaign.getElements();\n    for (var i in elementsToRender) {\n        if (elementsToRender.hasOwnProperty(i)) {\n            var element = elementsToRender[i];\n            renderer.runVariantJs(element);\n        }\n    }\n}\n\nfunction renderCss() {\n    var styles = campaign.getStyles();\n    if (styles.length) {\n        dom.addCss(styles);\n    }\n}\n\nfunction isVisitorQualified() {\n    if (window.isCampaignDesignMode) {\n        return true;\n    }\n    var rules = campaign.scope.qualificationRules || [];\n    var results = [];\n    for (var i = 0; i < rules.length; i++) {\n        var result = rules[i]();\n        if (typeof result.then !== \"function\") {\n            result = Deferred()[result ? \"resolve\" : \"reject\"]().promise();\n        }\n        results.push(result);\n    }\n    return when.apply(this, results);\n}\n\nfunction isUrlMatched(url, includedUrls, excludedUrls) {\n    var isIncluded = isMasksMatch(url, includedUrls);\n    var isExcluded = isMasksMatch(url, excludedUrls);\n    return isIncluded && !isExcluded;\n}\n\nfunction isMasksMatch(url, masks) {\n    if (!url) {\n        return false;\n    }\n    url = url.toLowerCase();\n    var matchedMasks = 0;\n\n    for (var i = 0; i < masks.length; i++) {\n        var mask = masks[i].toLowerCase();\n        if (isMaskMatch(url, window.deproxy({\n                href: mask\n            }).href)) {\n            matchedMasks = matchedMasks + 1;\n        }\n    };\n    return matchedMasks > 0;\n}\n\nfunction isMaskMatch(url, originalMask) {\n    var mask = \"^\";\n    var pos = 0;\n    while (originalMask.length > pos) {\n        var char = originalMask[pos];\n        if (char == \"*\") {\n            mask = mask + \".*\";\n            pos = pos + 1;\n        } else if (char == \"(\") {\n            var posClosing = originalMask.indexOf(\")\", pos + 1);\n            var posNextOpening = originalMask.indexOf(\"(\", pos + 1);\n            if (posClosing > pos && (posNextOpening < 0 || posClosing < posNextOpening)) {\n                mask = mask + \".*\";\n                pos = posClosing + 1;\n            } else {\n                return false;\n            }\n        } else {\n            mask = mask + char;\n            pos = pos + 1;\n        }\n    }\n    mask = mask + \"$\";\n    mask = mask.replace(\"?\", \"\\?\");\n    var r = new RegExp(mask);\n    return r.test(url);\n}","Order":5999,"HighLevelApiVersion":"1.24"},{"Name":"Routing","Type":"script","Attrs":{"type":"text/javascript"},"Data":"(function () {\n    if(!window.isCampaignDesignMode) {\n       window.deproxy = function(location) {\n           return location;\n       }\n    }\n    var lastUrl = window.deproxy(window.location.href);\n\n    function forceTriggerRouteChange(url) {\n        lastUrl = url;\n        campaign.events.trigger('urlChange', {\n            url: url\n        });\n    }\n\n    function triggerRouteChange(url) {\n        if (url && lastUrl !== url) {\n            forceTriggerRouteChange(url);\n        }\n    }\n\n    function createRouteChange(fn) {\n        return function () {\n            var result = fn.apply(this, arguments);\n            triggerRouteChange(window.deproxy(window.location.href));\n            return result;\n        };\n    }\n\n    history.pushState = createRouteChange(history.pushState);\n\n    history.replaceState = createRouteChange(history.replaceState);\n\n    window.addEventListener('popstate', function (event) {\n        triggerRouteChange(window.deproxy(window.location.href));\n    });\n\n    window.addEventListener('hashchange', function (event) {\n        triggerRouteChange(window.deproxy(window.location.href));\n    });\n})();","Order":5000,"HighLevelApiVersion":"1.24"},{"Name":"C173639311","Type":"script","Attrs":{"type":"text/javascript"},"Data":"/*configuration block begin*/\nvar config = {\n\t\"actionName\": \"EF004 - View Step 1\",\n\t\"value\": 1,\n\t\"attr\": \"\",\n\t\"urls\": {\n\t\t\"includedUrls\": [\n\t\t\t\"*edisonfinancial.ca/l2/easy-start/step/2*\"\n\t\t],\n\t\t\"excludedUrls\": []\n\t}\n};\n/*configuration block end*/\n\n// actions.set(config.actionName, config.value, config.attr).send();\n\nvar domReadyDeferred = Deferred();\nevents.domReady(function(){\n    domReadyDeferred.resolve();\n});\n\nvar toUngroupedNumber = function(input, decimalDelimiter) {\n    var groupSymbolsMatches = input.match(/[\\.,' ]/g);\n    //if the numbers are grouped\n    if (groupSymbolsMatches) {\n        //delimiter for decimal cannot be used as groups delimiter\n        var allowedSymbols = \".,' \".replace(decimalDelimiter, '');\n        var groupsDelim = groupSymbolsMatches[0];\n        //groups delimiter is allowed\n        if (allowedSymbols.indexOf(groupsDelim) == -1) {\n            return null;\n        }\n        //only one symbol used for grouping\n        for (var i = 0; i < groupSymbolsMatches.length; i++) {\n            if (groupSymbolsMatches[i] != groupsDelim) {\n                return null;\n            }\n        }\n    }\n    return input.replace(/[\\.,' ]/g, '');\n};\n\nvar getDecimalDelimiter = function(input) {\n    var decimalPartWithDelim = /[\\.,]\\d{1,2}$/.exec(input);\n    if (decimalPartWithDelim) {\n        return decimalPartWithDelim[0][0];\n    } else {\n        return \"\";\n    }\n};\n\nvar getDecimalPart = function(input) {\n    var decimalPartWithDelim = /[\\.,]\\d{1,2}$/.exec(input);\n    if (decimalPartWithDelim) {\n        return decimalPartWithDelim[0].substr(1);\n    } else {\n        return \"0\";\n    }\n};\n\nvar getIntegerPart = function(input) {\n    return input.replace(/[\\.,]\\d{1,2}$/, '');\n};\n\nvar parseValue = function(value) {\n    //get numbers part\n    var numberString = (/.?\\d+([\\S\\s]*\\d)?/).exec(value);\n    if (numberString == null) {\n        return null;\n    }\n    numberString = numberString[0];\n    //is negative value\n    if (numberString[0] === \"-\") {\n        return null;\n    }\n    //remove first character if it is not number\n    if (/^\\D/.test(numberString)) {\n        numberString = numberString.substr(1);\n    }\n    //number with wrong format\n    if (!(/^((\\d{1,3}([\\.,' ]\\d{3})*)|(\\d+))([\\.,]\\d{1,2})?$/.test(numberString))) {\n        return null;\n    }\n\n    var delimSymbol = getDecimalDelimiter(numberString);\n    var decimalPart = getDecimalPart(numberString);\n    var integerPart = getIntegerPart(numberString);\n    integerPart = toUngroupedNumber(integerPart, delimSymbol);\n    if (integerPart == null) {\n        return null;\n    }\n\n    return Math.floor((integerPart + \".\" + decimalPart) * config.multiplier);\n};\n\nvar isUrlMatched = function(url, includedUrls, excludedUrls) {\n    var isIncluded = isMasksMatch(url, includedUrls);\n    var isExcluded = isMasksMatch(url, excludedUrls);\n    return isIncluded && !isExcluded;\n};\n\nvar isMasksMatch = function(url, masks) {\n    if (!url) {\n        return false;\n    }\n    url = url.toLowerCase();\n\n    for (var i = 0; i < masks.length; i++) {\n        var mask = masks[i].toLowerCase();\n        if (isMaskMatch(url, window.deproxy ? window.deproxy({\n                href: mask\n            }).href : mask)) {\n            return true;\n        }\n    }\n    return false;\n};\n\nvar isMaskMatch = function(url, originalMask) {\n    var mask = '^';\n    var pos = 0;\n    while (originalMask.length > pos) {\n        var char = originalMask[pos];\n        if (char == '*') {\n            mask = mask + '.*';\n            pos = pos + 1;\n        } else if (char == '(') {\n            var posClosing = originalMask.indexOf(')', pos + 1);\n            var posNextOpening = originalMask.indexOf('(', pos + 1);\n            if (posClosing > pos && (posNextOpening < 0 || posClosing < posNextOpening)) {\n                mask = mask + '.*';\n                pos = posClosing + 1;\n            } else {\n                return false;\n            }\n        } else {\n            mask = mask + char;\n            pos = pos + 1;\n        }\n    }\n    mask = mask + '$';\n    mask = mask.replace('?', \"\\\\?\");\n    var r = new RegExp(mask);\n    return r.test(url);\n};\n\nvar waitForElement = function(elementSelector, timeoutValue){\n    var elementDeferred = Deferred();\n    var timeout = false;\n    \n    domReadyDeferred.promise().then(function(){\n        setTimeout(function () {\n            timeout = true;\n        }, timeoutValue);    \n    });\n\n    renderer.when(function(){\n        return timeout || dom.find(elementSelector).length;\n    })\n    .done(function(){ elementDeferred.resolve(); })\n    .fail(function(){ elementDeferred.reject(); });\n\n    return elementDeferred.promise();\n};\n\nvar getActionValue = function() {\n    var deferred = Deferred();\n\n    if (config.trackValueSelector) {\n        waitForElement(config.trackValueSelector, 2000)\n            .done(function(){\n                var elements = dom.find(config.trackValueSelector);\n                if (elements.length) {\n                    deferred.resolveWith(this, [parseValue(elements[0].textContent)]);\n                } else {\n                    deferred.reject();\n                }\n            })\n            .fail(function(){\n                deferred.reject();\n            });\n    } else {\n        deferred.resolveWith(this, [config.value]);\n    }\n\n    return deferred.promise();\n};\n\nvar getCurrentUrl = function() {\n    return window.deproxy\n        ? window.deproxy(window.location).href\n        : window.location.href;\n};\n\nvar isActionRequired = function() {\n    return !config.urls\n        ? true\n        : !!isUrlMatched(\n            getCurrentUrl(),\n            config.urls.includedUrls,\n            config.urls.excludedUrls);\n};\n\nvar trackViewAction = function() {\n    if (isActionRequired()) {\n        getActionValue().done(function (trackValue) {\n            if (trackValue && !campaign.scope.EF004ActionSent) {\n                campaign.scope.EF004ActionSent = true;\n                actions.send(config.actionName, trackValue, config.attr);\n            }\n        });\n    }\n};\n\ntrackViewAction();\ncampaign.events.on('urlChange', trackViewAction);","Order":4000,"HighLevelApiVersion":"1.24"},{"Name":"C1705042007","Type":"script","Attrs":{"type":"text/javascript"},"Data":"/*configuration block begin*/\nvar config = {\n\t\"actionName\": \"EF004 - View TY 1\",\n\t\"value\": 1,\n\t\"attr\": \"\",\n\t\"urls\": {\n\t\t\"includedUrls\": [\n\t\t\t\"*edisonfinancial.ca/l2/easy-start-thank-you\",\n\t\t\t\"*edisonfinancial.ca/l2/easy-start-thank-you?*\"\n\t\t],\n\t\t\"excludedUrls\": []\n\t}\n};\n/*configuration block end*/\n\nvar domReadyDeferred = Deferred();\nevents.domReady(function(){\n    domReadyDeferred.resolve();\n});\n\nvar toUngroupedNumber = function(input, decimalDelimiter) {\n    var groupSymbolsMatches = input.match(/[\\.,' ]/g);\n    //if the numbers are grouped\n    if (groupSymbolsMatches) {\n        //delimiter for decimal cannot be used as groups delimiter\n        var allowedSymbols = \".,' \".replace(decimalDelimiter, '');\n        var groupsDelim = groupSymbolsMatches[0];\n        //groups delimiter is allowed\n        if (allowedSymbols.indexOf(groupsDelim) == -1) {\n            return null;\n        }\n        //only one symbol used for grouping\n        for (var i = 0; i < groupSymbolsMatches.length; i++) {\n            if (groupSymbolsMatches[i] != groupsDelim) {\n                return null;\n            }\n        }\n    }\n    return input.replace(/[\\.,' ]/g, '');\n};\n\nvar getDecimalDelimiter = function(input) {\n    var decimalPartWithDelim = /[\\.,]\\d{1,2}$/.exec(input);\n    if (decimalPartWithDelim) {\n        return decimalPartWithDelim[0][0];\n    } else {\n        return \"\";\n    }\n};\n\nvar getDecimalPart = function(input) {\n    var decimalPartWithDelim = /[\\.,]\\d{1,2}$/.exec(input);\n    if (decimalPartWithDelim) {\n        return decimalPartWithDelim[0].substr(1);\n    } else {\n        return \"0\";\n    }\n};\n\nvar getIntegerPart = function(input) {\n    return input.replace(/[\\.,]\\d{1,2}$/, '');\n};\n\nvar parseValue = function(value) {\n    //get numbers part\n    var numberString = (/.?\\d+([\\S\\s]*\\d)?/).exec(value);\n    if (numberString == null) {\n        return null;\n    }\n    numberString = numberString[0];\n    //is negative value\n    if (numberString[0] === \"-\") {\n        return null;\n    }\n    //remove first character if it is not number\n    if (/^\\D/.test(numberString)) {\n        numberString = numberString.substr(1);\n    }\n    //number with wrong format\n    if (!(/^((\\d{1,3}([\\.,' ]\\d{3})*)|(\\d+))([\\.,]\\d{1,2})?$/.test(numberString))) {\n        return null;\n    }\n\n    var delimSymbol = getDecimalDelimiter(numberString);\n    var decimalPart = getDecimalPart(numberString);\n    var integerPart = getIntegerPart(numberString);\n    integerPart = toUngroupedNumber(integerPart, delimSymbol);\n    if (integerPart == null) {\n        return null;\n    }\n\n    return Math.floor((integerPart + \".\" + decimalPart) * config.multiplier);\n};\n\nvar isUrlMatched = function(url, includedUrls, excludedUrls) {\n    var isIncluded = isMasksMatch(url, includedUrls);\n    var isExcluded = isMasksMatch(url, excludedUrls);\n    return isIncluded && !isExcluded;\n};\n\nvar isMasksMatch = function(url, masks) {\n    if (!url) {\n        return false;\n    }\n    url = url.toLowerCase();\n\n    for (var i = 0; i < masks.length; i++) {\n        var mask = masks[i].toLowerCase();\n        if (isMaskMatch(url, window.deproxy ? window.deproxy({\n                href: mask\n            }).href : mask)) {\n            return true;\n        }\n    }\n    return false;\n};\n\nvar isMaskMatch = function(url, originalMask) {\n    var mask = '^';\n    var pos = 0;\n    while (originalMask.length > pos) {\n        var char = originalMask[pos];\n        if (char == '*') {\n            mask = mask + '.*';\n            pos = pos + 1;\n        } else if (char == '(') {\n            var posClosing = originalMask.indexOf(')', pos + 1);\n            var posNextOpening = originalMask.indexOf('(', pos + 1);\n            if (posClosing > pos && (posNextOpening < 0 || posClosing < posNextOpening)) {\n                mask = mask + '.*';\n                pos = posClosing + 1;\n            } else {\n                return false;\n            }\n        } else {\n            mask = mask + char;\n            pos = pos + 1;\n        }\n    }\n    mask = mask + '$';\n    mask = mask.replace('?', \"\\\\?\");\n    var r = new RegExp(mask);\n    return r.test(url);\n};\n\nvar waitForElement = function(elementSelector, timeoutValue){\n    var elementDeferred = Deferred();\n    var timeout = false;\n    \n    domReadyDeferred.promise().then(function(){\n        setTimeout(function () {\n            timeout = true;\n        }, timeoutValue);    \n    });\n\n    renderer.when(function(){\n        return timeout || dom.find(elementSelector).length;\n    })\n    .done(function(){ elementDeferred.resolve(); })\n    .fail(function(){ elementDeferred.reject(); });\n\n    return elementDeferred.promise();\n};\n\nvar getActionValue = function() {\n    var deferred = Deferred();\n\n    if (config.trackValueSelector) {\n        waitForElement(config.trackValueSelector, 2000)\n            .done(function(){\n                var elements = dom.find(config.trackValueSelector);\n                if (elements.length) {\n                    deferred.resolveWith(this, [parseValue(elements[0].textContent)]);\n                } else {\n                    deferred.reject();\n                }\n            })\n            .fail(function(){\n                deferred.reject();\n            });\n    } else {\n        deferred.resolveWith(this, [config.value]);\n    }\n\n    return deferred.promise();\n};\n\nvar getCurrentUrl = function() {\n    return window.deproxy\n        ? window.deproxy(window.location).href\n        : window.location.href;\n};\n\nvar isActionRequired = function() {\n    return !config.urls\n        ? true\n        : !!isUrlMatched(\n            getCurrentUrl(),\n            config.urls.includedUrls,\n            config.urls.excludedUrls);\n};\n\nvar trackViewAction = function() {\n    if (isActionRequired()) {\n        getActionValue().done(function (trackValue) {\n            if (trackValue) {\n                actions.send(config.actionName, trackValue, config.attr);\n            }\n        });\n    }\n};\n\ntrackViewAction();\n\ncampaign.events.on('urlChange', trackViewAction);","Order":4000,"HighLevelApiVersion":"1.24"}],"Elements":[],"Recommendations":[]},{"Name":"EF006 - One Step Left","Type":"ABnMVT","CSName":"","HighLevelApiVersion":"1.24","PagePrefix":"MDc0MTYx","Scripts":[{"Name":"Rendering","Type":"script","Attrs":{"type":"text/javascript"},"Data":"var config = {\n    \"selectorsToHide\": null,\n    \"useSecondRequest\": true,\n    \"elements\": [\n        {\n            \"includedUrls\": [\n                \"https://landing.edisonfinancial.ca/l2/easy-start/step/8*\"\n            ],\n            \"excludedUrls\": [],\n            \"selectors\": \"\",\n            \"id\": 175120\n        }\n    ]\n};\n\nif (config.useSecondRequest) {\n    activateCampaign();\n} else {\n    render();\n}\n\ncampaign.events.on(\"urlChange\", activateCampaign);\n\nfunction activateCampaign() {\n    if (isRenderRequired()) {\n        var selectorsToHide = getSelectorsToHide();\n        hide(selectorsToHide);\n        when(isVisitorQualified())\n            .done(function () {\n                renderer.getContent().always(function () {\n                    render();\n                    show(selectorsToHide);\n                });\n            })\n            .fail(function () {\n                show(selectorsToHide);\n            });\n    }\n}\n\nfunction isRenderRequired() {\n    if (config.elements === null) { return true; }\n\n    var url = window.deproxy ? window.deproxy(window.location).href : window.location.href;\n    for (var i = 0; i < config.elements.length; i++) {\n        if (isUrlMatched(url, config.elements[i].includedUrls, config.elements[i].excludedUrls)) {\n            return true;\n        }\n    }\n    return false;\n}\n\nfunction hide(selectorsToHide) {\n    if (selectorsToHide) {\n        renderer.hide(selectorsToHide, \"ucb\");\n    }\n}\n\nfunction show(selectorsToHide) {\n    if (selectorsToHide) {\n        renderer.show(\"ucb\");\n    }\n}\n\nfunction getSelectorsToHide() {\n    if (config.elements === null) { return config.selectorsToHide; }\n\n    var url = window.deproxy ? window.deproxy(window.location).href : window.location.href;\n    var selectors = \"\";\n    for (var i = 0; i < config.elements.length; i++) {\n        if (isUrlMatched(url, config.elements[i].includedUrls, config.elements[i].excludedUrls)) {\n            selectors += \" \" + config.elements[i].selectors;\n        }\n    }\n    return selectors;\n}\n\nfunction render() {\n    renderCss();\n    renderJs();\n    campaign.events.trigger(\"lastRequest\");\n\n    var campaignName = campaign.getName();\n    window.MMExperience = window.MMExperience || {};\n    if(!window.MMExperience[campaignName]){\n        window.MMExperience[campaignName] = campaign.getExperience();\n    }\n}\n\nfunction renderJs() {\n    var elementsToRender = campaign.getElements();\n    for (var i in elementsToRender) {\n        if (elementsToRender.hasOwnProperty(i)) {\n            var element = elementsToRender[i];\n            renderer.runVariantJs(element);\n        }\n    }\n}\n\nfunction renderCss() {\n    var styles = campaign.getStyles();\n    if (styles.length) {\n        dom.addCss(styles);\n    }\n}\n\nfunction isVisitorQualified() {\n    if (window.isCampaignDesignMode) {\n        return true;\n    }\n    var rules = campaign.scope.qualificationRules || [];\n    var results = [];\n    for (var i = 0; i < rules.length; i++) {\n        var result = rules[i]();\n        if (typeof result.then !== \"function\") {\n            result = Deferred()[result ? \"resolve\" : \"reject\"]().promise();\n        }\n        results.push(result);\n    }\n    return when.apply(this, results);\n}\n\nfunction isUrlMatched(url, includedUrls, excludedUrls) {\n    var isIncluded = isMasksMatch(url, includedUrls);\n    var isExcluded = isMasksMatch(url, excludedUrls);\n    return isIncluded && !isExcluded;\n}\n\nfunction isMasksMatch(url, masks) {\n    if (!url) {\n        return false;\n    }\n    url = url.toLowerCase();\n    var matchedMasks = 0;\n\n    for (var i = 0; i < masks.length; i++) {\n        var mask = masks[i].toLowerCase();\n        if (isMaskMatch(url, window.deproxy({\n                href: mask\n            }).href)) {\n            matchedMasks = matchedMasks + 1;\n        }\n    };\n    return matchedMasks > 0;\n}\n\nfunction isMaskMatch(url, originalMask) {\n    var mask = \"^\";\n    var pos = 0;\n    while (originalMask.length > pos) {\n        var char = originalMask[pos];\n        if (char == \"*\") {\n            mask = mask + \".*\";\n            pos = pos + 1;\n        } else if (char == \"(\") {\n            var posClosing = originalMask.indexOf(\")\", pos + 1);\n            var posNextOpening = originalMask.indexOf(\"(\", pos + 1);\n            if (posClosing > pos && (posNextOpening < 0 || posClosing < posNextOpening)) {\n                mask = mask + \".*\";\n                pos = posClosing + 1;\n            } else {\n                return false;\n            }\n        } else {\n            mask = mask + char;\n            pos = pos + 1;\n        }\n    }\n    mask = mask + \"$\";\n    mask = mask.replace(\"?\", \"\\?\");\n    var r = new RegExp(mask);\n    return r.test(url);\n}","Order":5999,"HighLevelApiVersion":"1.24"},{"Name":"V1530890157","Type":"script","Attrs":{"type":"text/javascript"},"Data":"/*configuration block begin*/\nvar config = {\n\t\"actionName\": \"EF005 - View TY 1\",\n\t\"value\": 1,\n\t\"attr\": \"\",\n\t\"multiplier\": 100,\n\t\"trackValueSelector\": \"\",\n\t\"urls\": {\n\t\t\"includedUrls\": [\n\t\t\t\"*.edisonfinancial.ca/l2/easy-start-thank-you*\"\n\t\t],\n\t\t\"excludedUrls\": []\n\t}\n};\n/*configuration block end*/\n\nvar domReadyDeferred = Deferred();\nevents.domReady(function(){\n    domReadyDeferred.resolve();\n});\n\nvar toUngroupedNumber = function(input, decimalDelimiter) {\n    var groupSymbolsMatches = input.match(/[\\.,' ]/g);\n    //if the numbers are grouped\n    if (groupSymbolsMatches) {\n        //delimiter for decimal cannot be used as groups delimiter\n        var allowedSymbols = \".,' \".replace(decimalDelimiter, '');\n        var groupsDelim = groupSymbolsMatches[0];\n        //groups delimiter is allowed\n        if (allowedSymbols.indexOf(groupsDelim) == -1) {\n            return null;\n        }\n        //only one symbol used for grouping\n        for (var i = 0; i < groupSymbolsMatches.length; i++) {\n            if (groupSymbolsMatches[i] != groupsDelim) {\n                return null;\n            }\n        }\n    }\n    return input.replace(/[\\.,' ]/g, '');\n};\n\nvar getDecimalDelimiter = function(input) {\n    var decimalPartWithDelim = /[\\.,]\\d{1,2}$/.exec(input);\n    if (decimalPartWithDelim) {\n        return decimalPartWithDelim[0][0];\n    } else {\n        return \"\";\n    }\n};\n\nvar getDecimalPart = function(input) {\n    var decimalPartWithDelim = /[\\.,]\\d{1,2}$/.exec(input);\n    if (decimalPartWithDelim) {\n        return decimalPartWithDelim[0].substr(1);\n    } else {\n        return \"0\";\n    }\n};\n\nvar getIntegerPart = function(input) {\n    return input.replace(/[\\.,]\\d{1,2}$/, '');\n};\n\nvar parseValue = function(value) {\n    //get numbers part\n    var numberString = (/.?\\d+([\\S\\s]*\\d)?/).exec(value);\n    if (numberString == null) {\n        return null;\n    }\n    numberString = numberString[0];\n    //is negative value\n    if (numberString[0] === \"-\") {\n        return null;\n    }\n    //remove first character if it is not number\n    if (/^\\D/.test(numberString)) {\n        numberString = numberString.substr(1);\n    }\n    //number with wrong format\n    if (!(/^((\\d{1,3}([\\.,' ]\\d{3})*)|(\\d+))([\\.,]\\d{1,2})?$/.test(numberString))) {\n        return null;\n    }\n\n    var delimSymbol = getDecimalDelimiter(numberString);\n    var decimalPart = getDecimalPart(numberString);\n    var integerPart = getIntegerPart(numberString);\n    integerPart = toUngroupedNumber(integerPart, delimSymbol);\n    if (integerPart == null) {\n        return null;\n    }\n\n    return Math.floor((integerPart + \".\" + decimalPart) * config.multiplier);\n};\n\nvar isUrlMatched = function(url, includedUrls, excludedUrls) {\n    var isIncluded = isMasksMatch(url, includedUrls);\n    var isExcluded = isMasksMatch(url, excludedUrls);\n    return isIncluded && !isExcluded;\n};\n\nvar isMasksMatch = function(url, masks) {\n    if (!url) {\n        return false;\n    }\n    url = url.toLowerCase();\n\n    for (var i = 0; i < masks.length; i++) {\n        var mask = masks[i].toLowerCase();\n        if (isMaskMatch(url, window.deproxy ? window.deproxy({\n                href: mask\n            }).href : mask)) {\n            return true;\n        }\n    }\n    return false;\n};\n\nvar isMaskMatch = function(url, originalMask) {\n    var mask = '^';\n    var pos = 0;\n    while (originalMask.length > pos) {\n        var char = originalMask[pos];\n        if (char == '*') {\n            mask = mask + '.*';\n            pos = pos + 1;\n        } else if (char == '(') {\n            var posClosing = originalMask.indexOf(')', pos + 1);\n            var posNextOpening = originalMask.indexOf('(', pos + 1);\n            if (posClosing > pos && (posNextOpening < 0 || posClosing < posNextOpening)) {\n                mask = mask + '.*';\n                pos = posClosing + 1;\n            } else {\n                return false;\n            }\n        } else {\n            mask = mask + char;\n            pos = pos + 1;\n        }\n    }\n    mask = mask + '$';\n    mask = mask.replace('?', \"\\\\?\");\n    var r = new RegExp(mask);\n    return r.test(url);\n};\n\nvar waitForElement = function(elementSelector, timeoutValue){\n    var elementDeferred = Deferred();\n    var timeout = false;\n    \n    domReadyDeferred.promise().then(function(){\n        setTimeout(function () {\n            timeout = true;\n        }, timeoutValue);    \n    });\n\n    renderer.when(function(){\n        return timeout || dom.find(elementSelector).length;\n    })\n    .done(function(){ elementDeferred.resolve(); })\n    .fail(function(){ elementDeferred.reject(); });\n\n    return elementDeferred.promise();\n};\n\nvar getActionValue = function() {\n    var deferred = Deferred();\n\n    if (config.trackValueSelector) {\n        waitForElement(config.trackValueSelector, 2000)\n            .done(function(){\n                var elements = dom.find(config.trackValueSelector);\n                if (elements.length) {\n                    deferred.resolveWith(this, [parseValue(elements[0].textContent)]);\n                } else {\n                    deferred.reject();\n                }\n            })\n            .fail(function(){\n                deferred.reject();\n            });\n    } else {\n        deferred.resolveWith(this, [config.value]);\n    }\n\n    return deferred.promise();\n};\n\nvar getCurrentUrl = function() {\n    return window.deproxy\n        ? window.deproxy(window.location).href\n        : window.location.href;\n};\n\nvar isActionRequired = function() {\n    return !config.urls\n        ? true\n        : !!isUrlMatched(\n            getCurrentUrl(),\n            config.urls.includedUrls,\n            config.urls.excludedUrls);\n};\n\nvar trackViewAction = function() {\n    if (isActionRequired()) {\n        getActionValue().done(function (trackValue) {\n            if (trackValue) {\n                actions.send(config.actionName, trackValue, config.attr);\n            }\n        });\n    }\n};\n\ntrackViewAction();\n\ncampaign.events.on('urlChange', trackViewAction);","Order":4000,"HighLevelApiVersion":"1.24"},{"Name":"Routing","Type":"script","Attrs":{"type":"text/javascript"},"Data":"(function () {\n    if(!window.isCampaignDesignMode) {\n       window.deproxy = function(location) {\n           return location;\n       }\n    }\n    var lastUrl = window.deproxy(window.location.href);\n\n    function forceTriggerRouteChange(url) {\n        lastUrl = url;\n        campaign.events.trigger('urlChange', {\n            url: url\n        });\n    }\n\n    function triggerRouteChange(url) {\n        if (url && lastUrl !== url) {\n            forceTriggerRouteChange(url);\n        }\n    }\n\n    function createRouteChange(fn) {\n        return function () {\n            var result = fn.apply(this, arguments);\n            triggerRouteChange(window.deproxy(window.location.href));\n            return result;\n        };\n    }\n\n    history.pushState = createRouteChange(history.pushState);\n\n    history.replaceState = createRouteChange(history.replaceState);\n\n    window.addEventListener('popstate', function (event) {\n        triggerRouteChange(window.deproxy(window.location.href));\n    });\n\n    window.addEventListener('hashchange', function (event) {\n        triggerRouteChange(window.deproxy(window.location.href));\n    });\n})();","Order":5000,"HighLevelApiVersion":"1.24"},{"Name":"V1577286443","Type":"script","Attrs":{"type":"text/javascript"},"Data":"/*configuration block begin*/\nvar config = {\n\t\"actionName\": \"EF005 - View Step 1\",\n\t\"value\": 1,\n\t\"attr\": \"\",\n\t\"multiplier\": 100,\n\t\"trackValueSelector\": \"\",\n\t\"urls\": {\n\t\t\"includedUrls\": [\n\t\t\t\"*.edisonfinancial.ca/l2/easy-start/step/9*\"\n\t\t],\n\t\t\"excludedUrls\": []\n\t}\n};\n/*configuration block end*/\n\nvar domReadyDeferred = Deferred();\nevents.domReady(function(){\n    domReadyDeferred.resolve();\n});\n\nvar toUngroupedNumber = function(input, decimalDelimiter) {\n    var groupSymbolsMatches = input.match(/[\\.,' ]/g);\n    //if the numbers are grouped\n    if (groupSymbolsMatches) {\n        //delimiter for decimal cannot be used as groups delimiter\n        var allowedSymbols = \".,' \".replace(decimalDelimiter, '');\n        var groupsDelim = groupSymbolsMatches[0];\n        //groups delimiter is allowed\n        if (allowedSymbols.indexOf(groupsDelim) == -1) {\n            return null;\n        }\n        //only one symbol used for grouping\n        for (var i = 0; i < groupSymbolsMatches.length; i++) {\n            if (groupSymbolsMatches[i] != groupsDelim) {\n                return null;\n            }\n        }\n    }\n    return input.replace(/[\\.,' ]/g, '');\n};\n\nvar getDecimalDelimiter = function(input) {\n    var decimalPartWithDelim = /[\\.,]\\d{1,2}$/.exec(input);\n    if (decimalPartWithDelim) {\n        return decimalPartWithDelim[0][0];\n    } else {\n        return \"\";\n    }\n};\n\nvar getDecimalPart = function(input) {\n    var decimalPartWithDelim = /[\\.,]\\d{1,2}$/.exec(input);\n    if (decimalPartWithDelim) {\n        return decimalPartWithDelim[0].substr(1);\n    } else {\n        return \"0\";\n    }\n};\n\nvar getIntegerPart = function(input) {\n    return input.replace(/[\\.,]\\d{1,2}$/, '');\n};\n\nvar parseValue = function(value) {\n    //get numbers part\n    var numberString = (/.?\\d+([\\S\\s]*\\d)?/).exec(value);\n    if (numberString == null) {\n        return null;\n    }\n    numberString = numberString[0];\n    //is negative value\n    if (numberString[0] === \"-\") {\n        return null;\n    }\n    //remove first character if it is not number\n    if (/^\\D/.test(numberString)) {\n        numberString = numberString.substr(1);\n    }\n    //number with wrong format\n    if (!(/^((\\d{1,3}([\\.,' ]\\d{3})*)|(\\d+))([\\.,]\\d{1,2})?$/.test(numberString))) {\n        return null;\n    }\n\n    var delimSymbol = getDecimalDelimiter(numberString);\n    var decimalPart = getDecimalPart(numberString);\n    var integerPart = getIntegerPart(numberString);\n    integerPart = toUngroupedNumber(integerPart, delimSymbol);\n    if (integerPart == null) {\n        return null;\n    }\n\n    return Math.floor((integerPart + \".\" + decimalPart) * config.multiplier);\n};\n\nvar isUrlMatched = function(url, includedUrls, excludedUrls) {\n    var isIncluded = isMasksMatch(url, includedUrls);\n    var isExcluded = isMasksMatch(url, excludedUrls);\n    return isIncluded && !isExcluded;\n};\n\nvar isMasksMatch = function(url, masks) {\n    if (!url) {\n        return false;\n    }\n    url = url.toLowerCase();\n\n    for (var i = 0; i < masks.length; i++) {\n        var mask = masks[i].toLowerCase();\n        if (isMaskMatch(url, window.deproxy ? window.deproxy({\n                href: mask\n            }).href : mask)) {\n            return true;\n        }\n    }\n    return false;\n};\n\nvar isMaskMatch = function(url, originalMask) {\n    var mask = '^';\n    var pos = 0;\n    while (originalMask.length > pos) {\n        var char = originalMask[pos];\n        if (char == '*') {\n            mask = mask + '.*';\n            pos = pos + 1;\n        } else if (char == '(') {\n            var posClosing = originalMask.indexOf(')', pos + 1);\n            var posNextOpening = originalMask.indexOf('(', pos + 1);\n            if (posClosing > pos && (posNextOpening < 0 || posClosing < posNextOpening)) {\n                mask = mask + '.*';\n                pos = posClosing + 1;\n            } else {\n                return false;\n            }\n        } else {\n            mask = mask + char;\n            pos = pos + 1;\n        }\n    }\n    mask = mask + '$';\n    mask = mask.replace('?', \"\\\\?\");\n    var r = new RegExp(mask);\n    return r.test(url);\n};\n\nvar waitForElement = function(elementSelector, timeoutValue){\n    var elementDeferred = Deferred();\n    var timeout = false;\n    \n    domReadyDeferred.promise().then(function(){\n        setTimeout(function () {\n            timeout = true;\n        }, timeoutValue);    \n    });\n\n    renderer.when(function(){\n        return timeout || dom.find(elementSelector).length;\n    })\n    .done(function(){ elementDeferred.resolve(); })\n    .fail(function(){ elementDeferred.reject(); });\n\n    return elementDeferred.promise();\n};\n\nvar getActionValue = function() {\n    var deferred = Deferred();\n\n    if (config.trackValueSelector) {\n        waitForElement(config.trackValueSelector, 2000)\n            .done(function(){\n                var elements = dom.find(config.trackValueSelector);\n                if (elements.length) {\n                    deferred.resolveWith(this, [parseValue(elements[0].textContent)]);\n                } else {\n                    deferred.reject();\n                }\n            })\n            .fail(function(){\n                deferred.reject();\n            });\n    } else {\n        deferred.resolveWith(this, [config.value]);\n    }\n\n    return deferred.promise();\n};\n\nvar getCurrentUrl = function() {\n    return window.deproxy\n        ? window.deproxy(window.location).href\n        : window.location.href;\n};\n\nvar isActionRequired = function() {\n    return !config.urls\n        ? true\n        : !!isUrlMatched(\n            getCurrentUrl(),\n            config.urls.includedUrls,\n            config.urls.excludedUrls);\n};\n\nvar trackViewAction = function() {\n    if (isActionRequired()) {\n        getActionValue().done(function (trackValue) {\n            if (trackValue) {\n                actions.send(config.actionName, trackValue, config.attr);\n            }\n        });\n    }\n};\n\ntrackViewAction();\n\ncampaign.events.on('urlChange', trackViewAction);","Order":4000,"HighLevelApiVersion":"1.24"}],"Elements":[],"Recommendations":[]}],"MRRules":[],"PersistData":[{"Name":"srv","IsGlobal":false,"Value":"prodiadcgus01","Expiration":365},{"Name":"bid","IsGlobal":false,"Value":"prodiadcgus01","Expiration":0.00694},{"Name":"pd","IsGlobal":false,"Value":"-76817621|AQAAAApVAwDj+oY4lhOo/AABEgABQgBjVEr7AQAUr7NxVl/YSBSvs3FWX9hIAAAAAP//////////AAZEaXJlY3QBlhMBAAAAAAAAAAAA////////////////AAAKABXAAABOEgQBAJY7BAEAMtYcAQAMCSABAFgeIAEAKJUgAQDGciEBALR/IQEAbrEhAQA8AAAAAUU=","Expiration":365}],"SiteInfo":[{"Url":"quickenloans.com","ID":498}],"SystemData":[{"Version":"1.0","RequestId":1,"ResponseId":1}],"GenInfo":{},"ServerAttributes":{"TrafficSource":"","BuyRefi":""},"Iteration":"1wLpUbnE29JNwy9s05irPyPVKgc","Packages":["mmpackage-1.24.js"]});