["<!-- Facebook Pixel Code -->\n    <script>\n        function getFBCookie(cname) {\n            let name = cname + \"=\";\n            let decodedCookie = decodeURIComponent(document.cookie);\n            let ca = decodedCookie.split(';');\n            for(let i = 0; i <ca.length; i++) {\n                let c = ca[i];\n                while (c.charAt(0) == ' ') {\n                    c = c.substring(1);\n                }\n                if (c.indexOf(name) == 0) {\n                    return c.substring(name.length, c.length);\n                }\n            }\n            return \"\";\n        }\n\n        function getUrlParameter(param) {\n            const urlParams = new URLSearchParams(window.location.search);\n            return urlParams.get(param);\n        }\n\n                \n        !function(f, b, e, v, n, t, s) {\n          if (f.fbq) return;\n          n = f.fbq = function() {\n            n.callMethod ?\n              n.callMethod.apply(n, arguments) : n.queue.push(arguments);\n          };\n          if (!f._fbq) f._fbq = n;\n          n.push = n;\n          n.loaded = !0;\n          n.version = \"2.0\";\n          n.queue = [];\n          t = b.createElement(e);\n          t.async = !0;\n          t.src = v;\n          s = b.getElementsByTagName(e)[0];\n          s.parentNode.insertBefore(t, s);\n        }(window, document, \"script\",\n            \"https://connect.facebook.net/en_US/fbevents.js\");\n\n        fbq(\"init\", '168964392056876');\n        let eventTime = Date.now();\n        let fbp = getFBCookie('_fbp');\n        let fbc = getFBCookie('_fbc');\n\n                        let txId = getUrlParameter('form_submission_id') ?? eventTime;\n\n                    let event = getUrlParameter('form_submission_id') ? 'Lead' : 'PageView';\n        \n                     eventID = `page.${event}.tx_${txId}`;\n        \n        \n        if (event) {\n            let fbData = {  };\n\n            if (fbp !== \"\") {\n                fbData.fbp = fbp;\n            }\n\n            if (fbc !== \"\") {\n                fbData.fbc = fbc;\n            }\n\n            \n            fbq(\"track\", 'PageView', fbData, { eventID: eventID });\n        }\n\n    </script>\n    <!-- End Facebook Pixel Code -->\n",{"name":"fb","location":"head","consentType":"statistical","content":"<!-- Facebook Pixel Code -->\n    <script>\n        function getFBCookie(cname) {\n            let name = cname + \"=\";\n            let decodedCookie = decodeURIComponent(document.cookie);\n            let ca = decodedCookie.split(';');\n            for(let i = 0; i <ca.length; i++) {\n                let c = ca[i];\n                while (c.charAt(0) == ' ') {\n                    c = c.substring(1);\n                }\n                if (c.indexOf(name) == 0) {\n                    return c.substring(name.length, c.length);\n                }\n            }\n            return \"\";\n        }\n\n        function getUrlParameter(param) {\n            const urlParams = new URLSearchParams(window.location.search);\n            return urlParams.get(param);\n        }\n\n                \n        !function(f, b, e, v, n, t, s) {\n          if (f.fbq) return;\n          n = f.fbq = function() {\n            n.callMethod ?\n              n.callMethod.apply(n, arguments) : n.queue.push(arguments);\n          };\n          if (!f._fbq) f._fbq = n;\n          n.push = n;\n          n.loaded = !0;\n          n.version = \"2.0\";\n          n.queue = [];\n          t = b.createElement(e);\n          t.async = !0;\n          t.src = v;\n          s = b.getElementsByTagName(e)[0];\n          s.parentNode.insertBefore(t, s);\n        }(window, document, \"script\",\n            \"https://connect.facebook.net/en_US/fbevents.js\");\n\n        fbq(\"init\", '168964392056876');\n        let eventTime = Date.now();\n        let fbp = getFBCookie('_fbp');\n        let fbc = getFBCookie('_fbc');\n\n                        let txId = getUrlParameter('form_submission_id') ?? eventTime;\n\n                    let event = getUrlParameter('form_submission_id') ? 'Lead' : 'PageView';\n        \n                     eventID = `page.${event}.tx_${txId}`;\n        \n        \n        if (event) {\n            let fbData = {  };\n\n            if (fbp !== \"\") {\n                fbData.fbp = fbp;\n            }\n\n            if (fbc !== \"\") {\n                fbData.fbc = fbc;\n            }\n\n            \n            fbq(\"track\", 'PageView', fbData, { eventID: eventID });\n        }\n\n    </script>\n    <!-- End Facebook Pixel Code -->\n","attributes":null}]