! function(e, n, i) {
    function a() {
        k.addEventHandler(e, "orientationchange", a.orientationChange)
    }

    function r() {
        this.rules = k.filter(k.rules, function(t) {
            return "elementexists" === t.event
        })
    }

    function o() {
        this.rules = k.filter(k.rules, function(t) {
            return "videoplayed" === t.event.substring(0, 11)
        }), this.eventHandler = k.bind(this.onUpdateTime, this)
    }

    function s() {
        var t = this.eventRegex = /^hover\(([0-9]+)\)$/,
            e = this.rules = [];
        k.each(k.rules, function(n) {
            var i = n.event.match(t);
            i && e.push([Number(n.event.match(t)[1]), n.selector])
        })
    }

    function c(t) {
        k.domReady(k.bind(function() {
            this.twttr = t || e.twttr, this.initialize()
        }, this))
    }

    function u(t) {
        this.delay = 250, this.FB = t, k.domReady(k.bind(function() {
            k.poll(k.bind(this.initialize, this), this.delay, 8)
        }, this))
    }

    function l(t) {
        t = t || k.rules, this.rules = k.filter(t, function(t) {
            return "inview" === t.event
        }), this.elements = [], this.eventHandler = k.bind(this.track, this), k.addEventHandler(e, "scroll", this.eventHandler), k.addEventHandler(e, "load", this.eventHandler)
    }

    function d(t) {
        k.BaseTool.call(this, t), this.name = t.name || "VisitorID", this.initialize()
    }

    function f(t) {
        k.BaseTool.call(this, t)
    }

    function h(t) {
        k.BaseTool.call(this, t)
    }

    function g(t) {
        k.BaseTool.call(this, t), this.varBindings = {}, this.events = [], this.products = [], this.customSetupFuns = []
    }

    function p() {
        k.BaseTool.call(this), this.asyncScriptCallbackQueue = [], this.argsForBlockingScripts = []
    }

    function v(t) {
        k.BaseTool.call(this, t), this.styleElements = {}, this.targetPageParamsStore = {}
    }

    function m(t) {
        k.BaseTool.call(this, t), this.name = t.name || "Basic"
    }
    var y = Object.prototype.toString,
        b = e._satellite && e._satellite.override,
        k = {
            $data: function(t, e, n) {
                var a = "__satellite__",
                    r = k.dataCache,
                    o = t[a];
                o || (o = t[a] = k.uuid++);
                var s = r[o];
                return s || (s = r[o] = {}), n === i ? s[e] : void(s[e] = n)
            },
            uuid: 1,
            dataCache: {},
            keys: function(t) {
                var e = [];
                for (var n in t) e.push(n);
                return e
            },
            values: function(t) {
                var e = [];
                for (var n in t) e.push(t[n]);
                return e
            },
            isArray: Array.isArray || function(t) {
                return "[object Array]" === y.apply(t)
            },
            isObject: function(t) {
                return null != t && !k.isArray(t) && "object" == typeof t
            },
            isString: function(t) {
                return "string" == typeof t
            },
            isNumber: function(t) {
                return "[object Number]" === y.apply(t) && !k.isNaN(t)
            },
            isNaN: function(t) {
                return t !== t
            },
            isRegex: function(t) {
                return t instanceof RegExp
            },
            isLinkTag: function(t) {
                return !(!t || !t.nodeName || "a" !== t.nodeName.toLowerCase())
            },
            each: function(t, e, n) {
                for (var i = 0, a = t.length; a > i; i++) e.call(n, t[i], i, t)
            },
            map: function(t, e, n) {
                for (var i = [], a = 0, r = t.length; r > a; a++) i.push(e.call(n, t[a], a, t));
                return i
            },
            filter: function(t, e, n) {
                for (var i = [], a = 0, r = t.length; r > a; a++) {
                    var o = t[a];
                    e.call(n, o, a, t) && i.push(o)
                }
                return i
            },
            any: function(t, e, n) {
                for (var i = 0, a = t.length; a > i; i++) {
                    var r = t[i];
                    if (e.call(n, r, i, t)) return !0
                }
                return !1
            },
            every: function(t, e, n) {
                for (var i = !0, a = 0, r = t.length; r > a; a++) {
                    var o = t[a];
                    i = i && e.call(n, o, a, t)
                }
                return i
            },
            contains: function(t, e) {
                return -1 !== k.indexOf(t, e)
            },
            indexOf: function(t, e) {
                if (t.indexOf) return t.indexOf(e);
                for (var n = t.length; n--;)
                    if (e === t[n]) return n;
                return -1
            },
            find: function(t, e, n) {
                for (var i = 0, a = t.length; a > i; i++) {
                    var r = t[i];
                    if (e.call(n, r, i, t)) return r
                }
                return null
            },
            textMatch: function(t, e) {
                return "string" == typeof e ? t === e : e instanceof RegExp ? e.test(t) : !1
            },
            stringify: function(t, e) {
                if (e = e || [], k.isObject(t)) {
                    if (k.contains(e, t)) return "<Cycle>";
                    e.push(t)
                }
                if (k.isArray(t)) return "[" + k.map(t, function(t) {
                    return k.stringify(t, e)
                }).join(",") + "]";
                if (k.isString(t)) return '"' + String(t) + '"';
                if (k.isObject(t)) {
                    var n = [];
                    for (var i in t) n.push(i + ": " + k.stringify(t[i], e));
                    return "{" + n.join(", ") + "}"
                }
                return String(t)
            },
            trim: function(t) {
                return null == t ? null : t.trim ? t.trim() : t.replace(/^ */, "").replace(/ *$/, "")
            },
            bind: function(t, e) {
                return function() {
                    return t.apply(e, arguments)
                }
            },
            throttle: function(t, e) {
                var n = null;
                return function() {
                    var i = this,
                        a = arguments;
                    clearTimeout(n), n = setTimeout(function() {
                        t.apply(i, a)
                    }, e)
                }
            },
            domReady: function(t) {
                function e(t) {
                    for (f = 1; t = a.shift();) t()
                }
                var i, a = [],
                    r = !1,
                    o = n,
                    s = o.documentElement,
                    c = s.doScroll,
                    u = "DOMContentLoaded",
                    l = "addEventListener",
                    d = "onreadystatechange",
                    f = /^loade|^c/.test(o.readyState);
                return o[l] && o[l](u, i = function() {
                    o.removeEventListener(u, i, r), e()
                }, r), c && o.attachEvent(d, i = function() {
                    /^c/.test(o.readyState) && (o.detachEvent(d, i), e())
                }), t = c ? function(e) {
                    self != top ? f ? e() : a.push(e) : function() {
                        try {
                            s.doScroll("left")
                        } catch (n) {
                            return setTimeout(function() {
                                t(e)
                            }, 50)
                        }
                        e()
                    }()
                } : function(t) {
                    f ? t() : a.push(t)
                }
            }(),
            loadScript: function(t, e) {
                var i = n.createElement("script");
                k.scriptOnLoad(t, i, e), i.src = t, n.getElementsByTagName("head")[0].appendChild(i)
            },
            scriptOnLoad: function(t, e, n) {
                function i(t) {
                    t && k.logError(t), n && n(t)
                }
                "onload" in e ? (e.onload = function() {
                    i()
                }, e.onerror = function() {
                    i(new Error("Failed to load script " + t))
                }) : "readyState" in e && (e.onreadystatechange = function() {
                    var t = e.readyState;
                    ("loaded" === t || "complete" === t) && (e.onreadystatechange = null, i())
                })
            },
            loadScriptOnce: function(t, e) {
                k.loadedScriptRegistry[t] || k.loadScript(t, function(n) {
                    n || (k.loadedScriptRegistry[t] = !0), e && e(n)
                })
            },
            loadedScriptRegistry: {},
            loadScriptSync: function(t) {
                return k.domReadyFired ? void k.notify('Cannot load sync the "' + t + '" script after DOM Ready.', 1) : void n.write('<script src="' + t + '"></script>')
            },
            pushAsyncScript: function(t) {
                k.tools["default"].pushAsyncScript(t)
            },
            pushBlockingScript: function(t) {
                k.tools["default"].pushBlockingScript(t)
            },
            addEventHandler: e.addEventListener ? function(t, e, n) {
                t.addEventListener(e, n, !1)
            } : function(t, e, n) {
                t.attachEvent("on" + e, n)
            },
            preventDefault: e.addEventListener ? function(t) {
                t.preventDefault()
            } : function(t) {
                t.returnValue = !1
            },
            stopPropagation: function(t) {
                t.cancelBubble = !0, t.stopPropagation && t.stopPropagation()
            },
            containsElement: function(t, e) {
                return t.contains ? t.contains(e) : !!(16 & t.compareDocumentPosition(e))
            },
            matchesCss: function(t) {
                function i(t, e) {
                    var n = e.tagName;
                    return n ? t.toLowerCase() === n.toLowerCase() : !1
                }
                var a = t.matchesSelector || t.mozMatchesSelector || t.webkitMatchesSelector || t.oMatchesSelector || t.msMatchesSelector;
                return a ? function(t, i) {
                    if (i === n || i === e) return !1;
                    try {
                        return a.call(i, t)
                    } catch (r) {
                        return !1
                    }
                } : t.querySelectorAll ? function(t, e) {
                    var n = e.parentNode;
                    if (!n) return !1;
                    if (t.match(/^[a-z]+$/i)) return i(t, e);
                    try {
                        for (var a = e.parentNode.querySelectorAll(t), r = a.length; r--;)
                            if (a[r] === e) return !0
                    } catch (o) {}
                    return !1
                } : function(t, e) {
                    if (t.match(/^[a-z]+$/i)) return i(t, e);
                    try {
                        return k.Sizzle.matches(t, [e]).length > 0
                    } catch (n) {
                        return !1
                    }
                }
            }(n.documentElement),
            cssQuery: function(t) {
                return t.querySelectorAll ? function(e, n) {
                    var i;
                    try {
                        i = t.querySelectorAll(e)
                    } catch (a) {
                        i = []
                    }
                    n(i)
                } : function(t, e) {
                    if (k.Sizzle) {
                        var n;
                        try {
                            n = k.Sizzle(t)
                        } catch (i) {
                            n = []
                        }
                        e(n)
                    } else k.sizzleQueue.push([t, e])
                }
            }(n),
            hasAttr: function(t, e) {
                return t.hasAttribute ? t.hasAttribute(e) : t[e] !== i
            },
            inherit: function(t, e) {
                var n = function() {};
                n.prototype = e.prototype, t.prototype = new n, t.prototype.constructor = t
            },
            extend: function(t, e) {
                for (var n in e) e.hasOwnProperty(n) && (t[n] = e[n])
            },
            toArray: function() {
                try {
                    var t = Array.prototype.slice;
                    return t.call(n.documentElement.childNodes, 0)[0].nodeType,
                        function(e) {
                            return t.call(e, 0)
                        }
                } catch (e) {
                    return function(t) {
                        for (var e = [], n = 0, i = t.length; i > n; n++) e.push(t[n]);
                        return e
                    }
                }
            }(),
            equalsIgnoreCase: function(t, e) {
                return null == t ? null == e : null == e ? !1 : String(t).toLowerCase() === String(e).toLowerCase()
            },
            poll: function(t, e, n) {
                function i() {
                    k.isNumber(n) && a++ >= n || t() || setTimeout(i, e)
                }
                var a = 0;
                e = e || 1e3, i()
            },
            escapeForHtml: function(t) {
                return t ? t.replace(/\&/g, "&amp;").replace(/\</g, "&lt;").replace(/\>/g, "&gt;").replace(/\"/g, "&quot;").replace(/\'/g, "&#x27;").replace(/\//g, "&#x2F;") : t
            }
        };
    k.availableTools = {}, k.availableEventEmitters = [], k.fireOnceEvents = ["condition", "elementexists"], k.initEventEmitters = function() {
        k.eventEmitters = k.map(k.availableEventEmitters, function(t) {
            return new t
        })
    }, k.eventEmitterBackgroundTasks = function() {
        k.each(k.eventEmitters, function(t) {
            "backgroundTasks" in t && t.backgroundTasks()
        })
    }, k.initTools = function(t) {
        var e = {
                "default": new p
            },
            n = k.settings.euCookieName || "sat_track";
        for (var i in t) {
            var a, r, o;
            if (a = t[i], a.euCookie) {
                var s = "true" !== k.readCookie(n);
                if (s) continue
            }
            if (r = k.availableTools[a.engine], !r) {
                var c = [];
                for (var u in k.availableTools) c.push(u);
                throw new Error("No tool engine named " + a.engine + ", available: " + c.join(",") + ".")
            }
            o = new r(a), o.id = i, e[i] = o
        }
        return e
    }, k.preprocessArguments = function(t, e, n, i) {
        function a(t) {
            return i && k.isString(t) ? t.toLowerCase() : t
        }

        function r(t) {
            var i = {};
            for (var s in t)
                if (t.hasOwnProperty(s)) {
                    var c = t[s];
                    i[s] = k.isObject(c) ? r(c) : k.isArray(c) ? o(c) : a(k.replace(c, e, n))
                } return i
        }

        function o(t) {
            for (var i = [], o = 0, s = t.length; s > o; o++) {
                var c = t[o];
                k.isString(c) ? c = a(k.replace(c, e, n)) : c && c.constructor === Object && (c = r(c)), i.push(c)
            }
            return i
        }
        return t ? o(t, i) : t
    }, k.execute = function(t, e, n, i) {
        function a(a) {
            var r = i[a || "default"];
            if (r) try {
                r.triggerCommand(t, e, n)
            } catch (o) {
                k.logError(o)
            }
        }
        if (!_satellite.settings.hideActivity)
            if (i = i || k.tools, t.engine) {
                var r = t.engine;
                for (var o in i) {
                    var s = i[o];
                    s.settings && s.settings.engine === r && a(o)
                }
            } else t.tool instanceof Array ? k.each(t.tool, function(t) {
                a(t)
            }) : a(t.tool)
    }, k.notify = e.console ? function(t, e) {
        if (k.settings.notifications) switch (e) {
            case 1:
            case 2:
            case 3:
                console.log("SATELLITE: " + t);
                break;
            case 4:
                console.warn("SATELLITE: " + t);
                break;
            case 5:
                console.error("SATELLITE: " + t);
                break;
            default:
                console.log("SATELLITE: Notify called with incorrect priority.")
        }
    } : function() {}, k.cleanText = function(t) {
        return null == t ? null : k.trim(t).replace(/\s{2,}/g, " ").replace(/[^\000-\177]*/g, "")
    }, k.text = function(t) {
        return t.textContent || t.innerText
    }, k.specialProperties = {
        text: k.text,
        cleanText: function(t) {
            return k.cleanText(k.text(t))
        }
    }, k.getObjectProperty = function(t, e, n) {
        for (var a, r = e.split("."), o = t, s = k.specialProperties, c = 0, u = r.length; u > c; c++) {
            if (null == o) return i;
            var l = r[c];
            if (n && "@" === l.charAt(0)) {
                var d = l.slice(1);
                o = s[d](o)
            } else if (o.getAttribute && (a = l.match(/^getAttribute\((.+)\)$/))) {
                var f = a[1];
                o = o.getAttribute(f)
            } else o = o[l]
        }
        return o
    }, k.getToolsByType = function(e) {
        if (!e) throw new Error("Tool type is missing");
        var n = [];
        for (t in k.tools) {
            var i = k.tools[t];
            i.settings && i.settings.engine === e && n.push(i)
        }
        return n
    }, k.setVar = function() {
        var t = k.data.customVars;
        if (null == t && (k.data.customVars = {}, t = k.data.customVars), "string" == typeof arguments[0]) {
            var e = arguments[0];
            t[e] = arguments[1]
        } else if (arguments[0]) {
            var n = arguments[0];
            for (var i in n) t[i] = n[i]
        }
    }, k.dataElementSafe = function(t, e) {
        if (arguments.length > 2) {
            var n = arguments[2];
            "pageview" === e ? k.dataElementSafe.pageviewCache[t] = n : "session" === e ? k.setCookie("_sdsat_" + t, n) : "visitor" === e && k.setCookie("_sdsat_" + t, n, 730)
        } else {
            if ("pageview" === e) return k.dataElementSafe.pageviewCache[t];
            if ("session" === e || "visitor" === e) return k.readCookie("_sdsat_" + t)
        }
    }, k.dataElementSafe.pageviewCache = {}, k.realGetDataElement = function(t) {
        var n;
        return t.selector ? k.hasSelector && k.cssQuery(t.selector, function(e) {
            if (e.length > 0) {
                var i = e[0];
                "text" === t.property ? n = i.innerText || i.textContent : k.hasAttr(i, t.property) && (n = i[t.property] || i.getAttribute(t.property))
            }
        }) : t.queryParam ? n = t.ignoreCase ? k.getQueryParamCaseInsensitive(t.queryParam) : k.getQueryParam(t.queryParam) : t.cookie ? n = k.readCookie(t.cookie) : t.jsVariable ? n = k.getObjectProperty(e, t.jsVariable) : t.customJS && (n = t.customJS()), n
    }, k.getDataElement = function(t, e, n) {
        n = n || k.dataElements[t];
        var a = k.realGetDataElement(n);
        return a === i && n.storeLength ? a = k.dataElementSafe(t, n.storeLength) : a !== i && n.storeLength && k.dataElementSafe(t, n.storeLength, a), a !== i || e || (a = n["default"] || ""), n.forceLowerCase && (a = a.toLowerCase()), a
    }, k.getVar = function(t, a, r) {
        var o, s, c = k.data.customVars,
            u = r ? r.target || r.srcElement : null,
            l = {
                URI: k.data.URI,
                uri: k.data.URI,
                protocol: n.location.protocol,
                hostname: n.location.hostname
            };
        if (k.dataElements && t in k.dataElements) return k.getDataElement(t);
        if (s = l[t], s === i)
            if ("this." === t.substring(0, 5)) t = t.slice(5), s = k.getObjectProperty(a, t, !0);
            else if ("event." === t.substring(0, 6)) t = t.slice(6), s = k.getObjectProperty(r, t);
        else if ("target." === t.substring(0, 7)) t = t.slice(7), s = k.getObjectProperty(u, t);
        else if ("window." === t.substring(0, 7)) t = t.slice(7), s = k.getObjectProperty(e, t);
        else if ("param." === t.substring(0, 6)) t = t.slice(6), s = k.getQueryParam(t);
        else if (o = t.match(/^rand([0-9]+)$/)) {
            var d = Number(o[1]),
                f = (Math.random() * (Math.pow(10, d) - 1)).toFixed(0);
            s = Array(d - f.length + 1).join("0") + f
        } else s = k.getObjectProperty(c, t);
        return s
    }, k.getVars = function(t, e, n) {
        var i = {};
        return k.each(t, function(t) {
            i[t] = k.getVar(t, e, n)
        }), i
    }, k.replace = function(t, e, n) {
        return "string" != typeof t ? t : t.replace(/%(.*?)%/g, function(t, i) {
            var a = k.getVar(i, e, n);
            return null == a ? t : a
        })
    }, k.searchVariables = function(t, e, n) {
        if (!t || 0 === t.length) return "";
        for (var i = [], a = 0, r = t.length; r > a; a++) {
            var o = t[a],
                s = k.getVar(o, e, n);
            i.push(o + "=" + escape(s))
        }
        return "?" + i.join("&")
    }, k.fireRule = function(t, e, n) {
        var i = t.trigger;
        if (i) {
            for (var a = 0, r = i.length; r > a; a++) {
                var o = i[a];
                k.execute(o, e, n)
            }
            k.contains(k.fireOnceEvents, t.event) && (t.expired = !0)
        }
    }, k.isLinked = function(t) {
        for (var e = t; e; e = e.parentNode)
            if (k.isLinkTag(e)) return !0;
        return !1
    }, k.firePageLoadEvent = function(t) {
        for (var e = n.location, i = {
                type: t,
                target: e
            }, a = k.pageLoadRules, r = a.length; r--;) {
            var o = a[r];
            k.ruleMatches(o, i, e) && (k.notify('Rule "' + o.name + '" fired.', 1), k.fireRule(o, e, i), a.splice(r, 1))
        }
        for (var s in k.tools) {
            var c = k.tools[s];
            c.endPLPhase && c.endPLPhase(t)
        }
    }, k.track = function(t) {
        t = t.replace(/^\s*/, "").replace(/\s*$/, "");
        for (var e = 0; e < k.directCallRules.length; e++) {
            var n = k.directCallRules[e];
            if (n.name === t) return k.notify('Direct call Rule "' + t + '" fired.', 1), void k.fireRule(n, location, {
                type: t
            })
        }
        k.notify('Direct call Rule "' + t + '" not found.', 1)
    }, k.basePath = function() {
        return k.data.host ? ("https:" === n.location.protocol ? "https://" + k.data.host.https : "http://" + k.data.host.http) + "/" : this.settings.basePath
    }, k.setLocation = function(t) {
        e.location = t
    }, k.parseQueryParams = function(t) {
        var e = function(t) {
            var e = t;
            try {
                e = decodeURIComponent(t)
            } catch (n) {}
            return e
        };
        if ("" === t || k.isString(t) === !1) return {};
        0 === t.indexOf("?") && (t = t.substring(1));
        var n = {},
            i = t.split("&");
        return k.each(i, function(t) {
            t = t.split("="), t[1] && (n[e(t[0])] = k.escapeForHtml(e(t[1])))
        }), n
    }, k.getCaseSensitivityQueryParamsMap = function(t) {
        var e = k.parseQueryParams(t),
            n = {};
        for (var i in e) e.hasOwnProperty(i) && (n[i.toLowerCase()] = e[i]);
        return {
            normal: e,
            caseInsensitive: n
        }
    }, k.QueryParams = k.getCaseSensitivityQueryParamsMap(e.location.search), k.getQueryParam = function(t) {
        return k.QueryParams.normal[t]
    }, k.getQueryParamCaseInsensitive = function(t) {
        return k.QueryParams.caseInsensitive[t.toLowerCase()]
    }, k.encodeObjectToURI = function(t) {
        if (k.isObject(t) === !1) return "";
        var e = [];
        for (var n in t) t.hasOwnProperty(n) && e.push(encodeURIComponent(n) + "=" + encodeURIComponent(t[n]));
        return e.join("&")
    }, k.readCookie = function(t) {
        for (var e = t + "=", a = n.cookie.split(";"), r = 0; r < a.length; r++) {
            for (var o = a[r];
                " " == o.charAt(0);) o = o.substring(1, o.length);
            if (0 === o.indexOf(e)) return o.substring(e.length, o.length)
        }
        return i
    }, k.setCookie = function(t, e, i) {
        var a;
        if (i) {
            var r = new Date;
            r.setTime(r.getTime() + 24 * i * 60 * 60 * 1e3), a = "; expires=" + r.toGMTString()
        } else a = "";
        n.cookie = t + "=" + e + a + "; path=/"
    }, k.removeCookie = function(t) {
        k.setCookie(t, "", -1)
    }, k.getElementProperty = function(t, e) {
        if ("@" === e.charAt(0)) {
            var n = k.specialProperties[e.substring(1)];
            if (n) return n(t)
        }
        return "innerText" === e ? k.text(t) : e in t ? t[e] : t.getAttribute ? t.getAttribute(e) : i
    }, k.propertiesMatch = function(t, e) {
        if (t)
            for (var n in t) {
                var i = t[n],
                    a = k.getElementProperty(e, n);
                if ("string" == typeof i && i !== a) return !1;
                if (i instanceof RegExp && !i.test(a)) return !1
            }
        return !0
    }, k.ruleMatches = function(t, e, i, a) {
        var r = (n.location, t.condition),
            o = t.conditions,
            s = t.property,
            c = e.type,
            u = t.value,
            l = e.target || e.srcElement,
            d = i === l;
        if (t.event !== c) return !1;
        if (t.isDefault && a > 0) return !1;
        if (t.expired) return !1;
        if ("inview" === c && e.inviewDelay !== t.inviewDelay) return !1;
        if (!d && (t.bubbleFireIfParent === !1 || 0 !== a && t.bubbleFireIfChildFired === !1)) return !1;
        if (t.selector && !k.matchesCss(t.selector, i)) return !1;
        if (!k.propertiesMatch(s, i)) return !1;
        if (null != u)
            if ("string" == typeof u) {
                if (u !== i.value) return !1
            } else if (!u.test(i.value)) return !1;
        if (r) try {
            if (!r.call(i, e, l)) return k.notify('Condition for rule "' + t.name + '" not met.', 1), !1
        } catch (f) {
            return k.notify('Condition for rule "' + t.name + '" not met. Error: ' + f.message, 1), !1
        }
        if (o) {
            var h = k.find(o, function(n) {
                try {
                    return !n.call(i, e, l)
                } catch (a) {
                    return k.notify('Condition for rule "' + t.name + '" not met. Error: ' + a.message, 1), !0
                }
            });
            if (h) return k.notify("Condition " + h.toString() + ' for rule "' + t.name + '" not met.', 1), !1
        }
        return !0
    }, k.evtHandlers = {}, k.bindEvent = function(t, e) {
        var n = k.evtHandlers;
        n[t] || (n[t] = []), n[t].push(e)
    }, k.whenEvent = k.bindEvent, k.unbindEvent = function(t, e) {
        var n = k.evtHandlers;
        if (n[t]) {
            var i = k.indexOf(n[t], e);
            n[t].splice(i, 1)
        }
    }, k.bindEventOnce = function(t, e) {
        var n = function() {
            k.unbindEvent(t, n), e.apply(null, arguments)
        };
        k.bindEvent(t, n)
    }, k.isVMLPoisoned = function(t) {
        if (!t) return !1;
        try {
            t.nodeName
        } catch (e) {
            if ("Attribute only valid on v:image" === e.message) return !0
        }
        return !1
    }, k.handleEvent = function(t) {
        if (!k.$data(t, "eventProcessed")) {
            var e = t.type.toLowerCase(),
                n = t.target || t.srcElement,
                i = 0,
                a = k.rules,
                r = (k.tools, k.evtHandlers[t.type]);
            if (k.isVMLPoisoned(n)) return void k.notify("detected " + e + " on poisoned VML element, skipping.", 1);
            r && k.each(r, function(e) {
                e(t)
            });
            var o = n && n.nodeName;
            o ? k.notify("detected " + e + " on " + n.nodeName, 1) : k.notify("detected " + e, 1);
            for (var s = n; s; s = s.parentNode) {
                var c = !1;
                if (k.each(a, function(e) {
                        k.ruleMatches(e, t, s, i) && (k.notify('Rule "' + e.name + '" fired.', 1), k.fireRule(e, s, t), i++, e.bubbleStop && (c = !0))
                    }), c) break
            }
            k.$data(t, "eventProcessed", !0)
        }
    }, k.onEvent = n.querySelectorAll ? function(t) {
        k.handleEvent(t)
    } : function() {
        var t = [],
            e = function(e) {
                e.selector ? t.push(e) : k.handleEvent(e)
            };
        return e.pendingEvents = t, e
    }(), k.fireEvent = function(t, e) {
        k.onEvent({
            type: t,
            target: e
        })
    }, k.registerEvents = function(t, e) {
        for (var n = e.length - 1; n >= 0; n--) {
            var i = e[n];
            k.$data(t, i + ".tracked") || (k.addEventHandler(t, i, k.onEvent), k.$data(t, i + ".tracked", !0))
        }
    }, k.registerEventsForTags = function(t, e) {
        for (var i = t.length - 1; i >= 0; i--)
            for (var a = t[i], r = n.getElementsByTagName(a), o = r.length - 1; o >= 0; o--) k.registerEvents(r[o], e)
    }, k.setListeners = function() {
        k.registerEvents(n, ["click", "submit"])
    }, k.setFormListeners = function() {
        k.registerEventsForTags(["input", "select", "textarea", "button"], ["select", "change", "focus", "blur", "keypress"])
    }, k.setVideoListeners = function() {
        k.registerEventsForTags(["video"], ["play", "pause", "ended", "volumechange", "stalled", "timeupdate", "loadeddata"])
    }, k.readStoredSetting = function(t) {
        return e.localStorage ? (t = "sdsat_" + t, e.localStorage.getItem(t)) : null
    }, k.loadStoredSettings = function() {
        var t = k.readStoredSetting("debug"),
            e = k.readStoredSetting("hide_activity");
        t && (k.settings.notifications = "true" === t), e && (k.settings.hideActivity = "true" === e)
    }, k.isRuleActive = function(t, e) {
        function n(t, e) {
            return e = a(e, {
                hour: t[h](),
                minute: t[g]()
            }), Math.floor(Math.abs((t.getTime() - e.getTime()) / 864e5))
        }

        function i(t, e) {
            function n(t) {
                return 12 * t[d]() + t[f]()
            }
            return Math.abs(n(t) - n(e))
        }

        function a(t, e) {
            var n = new Date(t.getTime());
            for (var i in e) {
                var a = e[i];
                switch (i) {
                    case "hour":
                        n[p](a);
                        break;
                    case "minute":
                        n[v](a);
                        break;
                    case "date":
                        n[m](a)
                }
            }
            return n
        }

        function r(t, e) {
            var n = t[h](),
                i = t[g](),
                a = e[h](),
                r = e[g]();
            return 60 * n + i > 60 * a + r
        }

        function o(t, e) {
            var n = t[h](),
                i = t[g](),
                a = e[h](),
                r = e[g]();
            return 60 * a + r > 60 * n + i
        }
        var s = t.schedule;
        if (!s) return !0;
        var c = s.utc,
            u = c ? "getUTCDate" : "getDate",
            l = c ? "getUTCDay" : "getDay",
            d = c ? "getUTCFullYear" : "getFullYear",
            f = c ? "getUTCMonth" : "getMonth",
            h = c ? "getUTCHours" : "getHours",
            g = c ? "getUTCMinutes" : "getMinutes",
            p = c ? "setUTCHours" : "setHours",
            v = c ? "setUTCMinutes" : "setMinutes",
            m = c ? "setUTCDate" : "setDate";
        if (e = e || new Date, s.repeat) {
            if (r(s.start, e)) return !1;
            if (o(s.end, e)) return !1;
            if (e < s.start) return !1;
            if (s.endRepeat && e >= s.endRepeat) return !1;
            if ("daily" === s.repeat) {
                if (s.repeatEvery) {
                    var y = n(s.start, e);
                    if (y % s.repeatEvery !== 0) return !1
                }
            } else if ("weekly" === s.repeat) {
                if (s.days) {
                    if (!k.contains(s.days, e[l]())) return !1
                } else if (s.start[l]() !== e[l]()) return !1;
                if (s.repeatEvery) {
                    var b = n(s.start, e);
                    if (b % (7 * s.repeatEvery) !== 0) return !1
                }
            } else if ("monthly" === s.repeat) {
                if (s.repeatEvery) {
                    var S = i(s.start, e);
                    if (S % s.repeatEvery !== 0) return !1
                }
                if (s.nthWeek && s.mthDay) {
                    if (s.mthDay !== e[l]()) return !1;
                    var E = Math.floor((e[u]() - e[l]() + 1) / 7);
                    if (s.nthWeek !== E) return !1
                } else if (s.start[u]() !== e[u]()) return !1
            } else if ("yearly" === s.repeat) {
                if (s.start[f]() !== e[f]()) return !1;
                if (s.start[u]() !== e[u]()) return !1;
                if (s.repeatEvery) {
                    var b = Math.abs(s.start[d]() - e[d]());
                    if (b % s.repeatEvery !== 0) return !1
                }
            }
        } else {
            if (s.start > e) return !1;
            if (s.end < e) return !1
        }
        return !0
    }, k.isOutboundLink = function(t) {
        if (!t.getAttribute("href")) return !1;
        var e = t.hostname,
            n = (t.href, t.protocol);
        if ("http:" !== n && "https:" !== n) return !1;
        var i = k.any(k.settings.domainList, function(t) {
            return k.isSubdomainOf(e, t)
        });
        return i ? !1 : e !== location.hostname
    }, k.isLinkerLink = function(t) {
        return t.getAttribute && t.getAttribute("href") ? k.hasMultipleDomains() && t.hostname != location.hostname && !t.href.match(/^javascript/i) && !k.isOutboundLink(t) : !1
    }, k.isSubdomainOf = function(t, e) {
        if (t === e) return !0;
        var n = t.length - e.length;
        return n > 0 ? k.equalsIgnoreCase(t.substring(n), e) : !1
    }, k.getVisitorId = function() {
        var t = k.getToolsByType("visitor_id");
        return 0 === t.length ? null : t[0].getInstance()
    }, k.filterRules = function() {
        function t(t) {
            return k.ruleInScope(t, e) && k.isRuleActive(t) ? !0 : !1
        }
        var e = {
            hostname: location.hostname,
            protocol: location.protocol,
            URI: k.data.URI
        };
        k.rules = k.filter(k.rules, t), k.pageLoadRules = k.filter(k.pageLoadRules, t)
    }, k.ruleInScope = function(t, e) {
        function n(t, e) {
            function n(t) {
                return e.match(t)
            }
            var a = t.include,
                r = t.exclude;
            if (a && i(a, e)) return !0;
            if (r) {
                if (k.isString(r) && r === e) return !0;
                if (k.isArray(r) && k.any(r, n)) return !0;
                if (k.isRegex(r) && n(r)) return !0
            }
            return !1
        }

        function i(t, e) {
            function n(t) {
                return e.match(t)
            }
            return k.isString(t) && t !== e ? !0 : k.isArray(t) && !k.any(t, n) ? !0 : k.isRegex(t) && !n(t) ? !0 : !1
        }
        var a = t.scope;
        if (!a) return !0;
        var r = a.URI,
            o = a.subdomains,
            s = a.domains,
            c = a.protocols;
        return r && n(r, e.URI) ? !1 : o && n(o, e.hostname) ? !1 : s && i(s, e.hostname) ? !1 : c && i(c, e.protocol) ? !1 : !0
    }, k.backgroundTasks = function() {
        +new Date;
        k.setFormListeners(), k.setVideoListeners(), k.loadStoredSettings(), k.registerNewElementsForDynamicRules(), k.eventEmitterBackgroundTasks(); + new Date
    }, k.registerNewElementsForDynamicRules = function() {
        function t(e, n) {
            var i = t.cache[e];
            return i ? n(i) : void k.cssQuery(e, function(i) {
                t.cache[e] = i, n(i)
            })
        }
        t.cache = {}, k.each(k.dynamicRules, function(e) {
            t(e.selector, function(t) {
                k.each(t, function(t) {
                    k.$data(t, "dynamicRules.seen") || (k.$data(t, "dynamicRules.seen", !0), k.propertiesMatch(e.property, t) && k.registerEvents(t, [e.event]))
                })
            })
        })
    }, k.ensureCSSSelector = function() {
        return n.querySelectorAll ? void(k.hasSelector = !0) : (k.loadingSizzle = !0, k.sizzleQueue = [], void k.loadScript(k.basePath() + "https://assets.adobedtm.com/353f197638abe79a7d2dc7a7fd522d075d11521d/selector.js", function() {
            if (!k.Sizzle) return void k.logError(new Error("https://assets.adobedtm.com/353f197638abe79a7d2dc7a7fd522d075d11521d/Failed to load selector.js"));
            var t = k.onEvent.pendingEvents;
            k.each(t, function(t) {
                k.handleEvent(t)
            }, this), k.onEvent = k.handleEvent, k.hasSelector = !0, delete k.loadingSizzle, k.each(k.sizzleQueue, function(t) {
                k.cssQuery(t[0], t[1])
            }), delete k.sizzleQueue
        }))
    }, k.errors = [], k.logError = function(t) {
        k.errors.push(t), k.notify(t.name + " - " + t.message, 5)
    }, k.pageBottom = function() {
        k.pageBottomFired = !0, k.firePageLoadEvent("pagebottom")
    }, k.stagingLibraryOverride = function() {
        var t = "true" === k.readStoredSetting("stagingLibrary");
        if (t) {
            for (var e, i, a, r = n.getElementsByTagName("script"), o = /^(.*)satelliteLib-(.*)\.js$/, s = /^(.*)satelliteLib-(.*)-staging\.js$/, c = 0, u = r.length; u > c && (a = r[c].getAttribute("src"), !a || (e || (e = a.match(o)), i || (i = a.match(s)), !i)); c++);
            if (e && !i) {
                var l = e[1] + "satelliteLib-" + e[2] + "https://assets.adobedtm.com/353f197638abe79a7d2dc7a7fd522d075d11521d/-staging.js";
                return n.write('<script src="' + l + '"></script>'), !0
            }
        }
        return !1
    }, k.checkAsyncInclude = function() {
        e.satellite_asyncLoad && k.notify('You may be using the async installation of Satellite. In-page HTML and the "pagebottom" event will not work. Please update your Satellite installation for these features.', 5)
    }, k.hasMultipleDomains = function() {
        return k.settings.domainList.length > 1
    }, k.handleOverrides = function() {
        if (b)
            for (var t in b) b.hasOwnProperty(t) && (k.data[t] = b[t])
    }, k.privacyManagerParams = function() {
        var t = {};
        k.extend(t, k.settings.privacyManagement);
        var e = [];
        for (var n in k.tools) {
            var i = k.tools[n],
                a = i.settings;
            a && "sc" === a.engine && e.push(i)
        }
        var r = k.filter(k.map(e, function(t) {
            return t.getTrackingServer()
        }), function(t) {
            return null != t
        });
        t.adobeAnalyticsTrackingServers = r;
        for (var o = ["bannerText", "headline", "introductoryText", "customCSS"], s = 0; s < o.length; s++) {
            var c = o[s],
                u = t[c];
            if (u)
                if ("text" === u.type) t[c] = u.value;
                else {
                    if ("data" !== u.type) throw new Error("Invalid type: " + u.type);
                    t[c] = k.getVar(u.value)
                }
        }
        return t
    }, k.prepareLoadPrivacyManager = function() {
        function t(t) {
            function e() {
                r++, r === n.length && (i(), clearTimeout(o), t())
            }

            function i() {
                k.each(n, function(t) {
                    k.unbindEvent(t.id + ".load", e)
                })
            }

            function a() {
                i(), t()
            }
            var r = 0;
            k.each(n, function(t) {
                k.bindEvent(t.id + ".load", e)
            });
            var o = setTimeout(a, 5e3)
        }
        var n = k.filter(k.values(k.tools), function(t) {
            return t.settings && "sc" === t.settings.engine
        });
        0 === n.length ? k.addEventHandler(e, "load", k.loadPrivacyManager) : t(k.loadPrivacyManager)
    }, k.loadPrivacyManager = function() {
        var t = k.basePath() + "https://assets.adobedtm.com/353f197638abe79a7d2dc7a7fd522d075d11521d/privacy_manager.js";
        k.loadScript(t, function() {
            var t = k.privacyManager;
            t.configure(k.privacyManagerParams()), t.openIfRequired()
        })
    }, k.init = function(t) {
        if (!k.stagingLibraryOverride()) {
            k.configurationSettings = t;
            var n = t.tools;
            delete t.tools;
            for (var a in t) k[a] = t[a];
            k.data.customVars === i && (k.data.customVars = {}), k.data.queryParams = k.QueryParams.normal, k.handleOverrides(), k.detectBrowserInfo(), k.trackVisitorInfo && k.trackVisitorInfo(), k.loadStoredSettings(), k.checkAsyncInclude(), k.ensureCSSSelector(), k.filterRules(), k.dynamicRules = k.filter(k.rules, function(t) {
                return t.eventHandlerOnElement
            }), k.tools = k.initTools(n), k.initEventEmitters(), k.firePageLoadEvent("aftertoolinit"), k.settings.forceLowerCase && (k.data.URI = k.data.URI.toLowerCase()), k.settings.privacyManagement && k.prepareLoadPrivacyManager(), k.hasSelector && k.domReady(k.eventEmitterBackgroundTasks), k.setListeners(), k.domReady(function() {
                k.poll(function() {
                    k.backgroundTasks()
                }, k.settings.recheckEvery || 3e3)
            }), k.domReady(function() {
                k.domReadyFired = !0, k.pageBottomFired || k.pageBottom(), k.firePageLoadEvent("domready")
            }), k.addEventHandler(e, "load", function() {
                k.firePageLoadEvent("windowload")
            }), k.firePageLoadEvent("pagetop")
        }
    }, k.pageLoadPhases = ["aftertoolinit", "pagetop", "pagebottom", "domready", "windowload"], k.loadEventBefore = function(t, e) {
        return k.indexOf(k.pageLoadPhases, t) <= k.indexOf(k.pageLoadPhases, e)
    }, k.flushPendingCalls = function(t) {
        t.pending && (k.each(t.pending, function(e) {
            var n = e[0],
                i = e[1],
                a = e[2],
                r = e[3];
            n in t ? t[n].apply(t, [i, a].concat(r)) : t.emit ? t.emit(n, i, a, r) : k.notify("Failed to trigger " + n + " for tool " + t.id, 1)
        }), delete t.pending)
    }, k.setDebug = function(t) {
        e.localStorage && e.localStorage.setItem("sdsat_debug", t)
    }, k.detectBrowserInfo = function() {
        function t(t) {
            return function(e) {
                for (var n in t) {
                    var i = t[n],
                        a = i.test(e);
                    if (a) return n
                }
                return "Unknown"
            }
        }
        var e = t({
                OmniWeb: /OmniWeb/,
                "Opera Mini": /Opera Mini/,
                "Opera Mobile": /Opera Mobi/,
                Opera: /Opera/,
                "Mobile Safari": /Mobile(\/[0-9A-z]+)? Safari/,
                Chrome: /Chrome/,
                Firefox: /Firefox/,
                "IE Mobile": /IEMobile/,
                IE: /MSIE|Trident/,
                Safari: /Safari/
            }),
            n = t({
                iOS: /iPhone|iPad|iPod/,
                Blackberry: /BlackBerry/,
                "Symbian OS": /SymbOS/,
                Maemo: /Maemo/,
                Android: /Android [0-9\.]+;/,
                Linux: / Linux /,
                Unix: /FreeBSD|OpenBSD|CrOS/,
                Windows: /[\( ]Windows /,
                MacOS: /Macintosh;/
            }),
            i = t({
                iPhone: /iPhone/,
                iPad: /iPad/,
                iPod: /iPod/,
                Nokia: /SymbOS|Maemo/,
                "Windows Phone": /IEMobile/,
                Blackberry: /BlackBerry/,
                Android: /Android [0-9\.]+;/,
                Desktop: /.*/
            }),
            a = navigator.userAgent;
        k.browserInfo = {
            browser: e(a),
            os: n(a),
            deviceType: i(a)
        }
    }, k.isHttps = function() {
        return "https:" == n.location.protocol
    }, k.BaseTool = function(t) {
        this.settings = t || {}, this.forceLowerCase = k.settings.forceLowerCase, "forceLowerCase" in this.settings && (this.forceLowerCase = this.settings.forceLowerCase)
    }, k.BaseTool.prototype = {
        triggerCommand: function(t, e, n) {
            var i = this.settings || {};
            if (this.initialize && this.isQueueAvailable() && this.isQueueable(t) && n && k.loadEventBefore(n.type, i.loadOn)) return void this.queueCommand(t, e, n);
            var a = k.preprocessArguments(t.arguments, e, n, this.forceLowerCase),
                r = t.command,
                o = this["$" + r];
            o ? o.apply(this, [e, n].concat(a)) : this.$missing$ ? this.$missing$(r, e, n, a) : k.notify("Failed to trigger " + r + " for tool " + this.id, 1)
        },
        endPLPhase: function() {},
        isQueueable: function(t) {
            return "cancelToolInit" !== t.command
        },
        isQueueAvailable: function() {
            return !this.initialized && !this.initializing
        },
        flushQueue: function() {
            this.pending && (k.each(this.pending, function(t) {
                this.triggerCommand.apply(this, t)
            }, this), this.pending = [])
        },
        queueCommand: function(t, e, n) {
            this.pending || (this.pending = []), this.pending.push([t, e, n])
        },
        $cancelToolInit: function() {
            this._cancelToolInit = !0
        }
    }, e._satellite = k, a.orientationChange = function(t) {
        var n = 0 === e.orientation ? "portrait" : "landscape";
        t.orientation = n, k.onEvent(t)
    }, k.availableEventEmitters.push(a), r.prototype.backgroundTasks = function() {
        k.each(this.rules, function(t) {
            k.cssQuery(t.selector, function(t) {
                if (t.length > 0) {
                    var e = t[0];
                    if (k.$data(e, "elementexists.seen")) return;
                    k.$data(e, "elementexists.seen", !0), k.onEvent({
                        type: "elementexists",
                        target: e
                    })
                }
            })
        })
    }, k.availableEventEmitters.push(r), o.prototype = {
        backgroundTasks: function() {
            var t = this.eventHandler;
            k.each(this.rules, function(e) {
                k.cssQuery(e.selector || "video", function(e) {
                    k.each(e, function(e) {
                        k.$data(e, "videoplayed.tracked") || (k.addEventHandler(e, "timeupdate", k.throttle(t, 100)), k.$data(e, "videoplayed.tracked", !0))
                    })
                })
            })
        },
        evalRule: function(t, e) {
            var n = e.event,
                i = t.seekable,
                a = i.start(0),
                r = i.end(0),
                o = t.currentTime,
                s = e.event.match(/^videoplayed\(([0-9]+)([s%])\)$/);
            if (s) {
                var c = s[2],
                    u = Number(s[1]),
                    l = "%" === c ? function() {
                        return 100 * (o - a) / (r - a) >= u
                    } : function() {
                        return o - a >= u
                    };
                !k.$data(t, n) && l() && (k.$data(t, n, !0), k.onEvent({
                    type: n,
                    target: t
                }))
            }
        },
        onUpdateTime: function(t) {
            var e = this.rules,
                n = t.target;
            if (n.seekable && 0 !== n.seekable.length)
                for (var i = 0, a = e.length; a > i; i++) this.evalRule(n, e[i])
        }
    }, k.availableEventEmitters.push(o), s.prototype = {
        backgroundTasks: function() {
            var t = this;
            k.each(this.rules, function(e) {
                var n = e[1],
                    i = e[0];
                k.cssQuery(n, function(e) {
                    k.each(e, function(e) {
                        t.trackElement(e, i)
                    })
                })
            }, this)
        },
        trackElement: function(t, e) {
            var n = this,
                i = k.$data(t, "hover.delays");
            i ? k.contains(i, e) || i.push(e) : (k.addEventHandler(t, "mouseover", function(e) {
                n.onMouseOver(e, t)
            }), k.addEventHandler(t, "mouseout", function(e) {
                n.onMouseOut(e, t)
            }), k.$data(t, "hover.delays", [e]))
        },
        onMouseOver: function(t, e) {
            var n = t.target || t.srcElement,
                i = t.relatedTarget || t.fromElement,
                a = (e === n || k.containsElement(e, n)) && !k.containsElement(e, i);
            a && this.onMouseEnter(e)
        },
        onMouseEnter: function(t) {
            var e = k.$data(t, "hover.delays"),
                n = k.map(e, function(e) {
                    return setTimeout(function() {
                        k.onEvent({
                            type: "hover(" + e + ")",
                            target: t
                        })
                    }, e)
                });
            k.$data(t, "hover.delayTimers", n)
        },
        onMouseOut: function(t, e) {
            var n = t.target || t.srcElement,
                i = t.relatedTarget || t.toElement,
                a = (e === n || k.containsElement(e, n)) && !k.containsElement(e, i);
            a && this.onMouseLeave(e)
        },
        onMouseLeave: function(t) {
            var e = k.$data(t, "hover.delayTimers");
            e && k.each(e, function(t) {
                clearTimeout(t)
            })
        }
    }, k.availableEventEmitters.push(s), c.prototype = {
        initialize: function() {
            var t = this.twttr;
            t && "function" == typeof t.ready && t.ready(k.bind(this.bind, this))
        },
        bind: function() {
            this.twttr.events.bind("tweet", function(t) {
                t && (k.notify("tracking a tweet button", 1), k.onEvent({
                    type: "twitter.tweet",
                    target: n
                }))
            })
        }
    }, k.availableEventEmitters.push(c), u.prototype = {
        initialize: function() {
            return this.FB = this.FB || e.FB, this.FB && this.FB.Event && this.FB.Event.subscribe ? (this.bind(), !0) : void 0
        },
        bind: function() {
            this.FB.Event.subscribe("edge.create", function() {
                k.notify("tracking a facebook like", 1), k.onEvent({
                    type: "facebook.like",
                    target: n
                })
            }), this.FB.Event.subscribe("edge.remove", function() {
                k.notify("tracking a facebook unlike", 1), k.onEvent({
                    type: "facebook.unlike",
                    target: n
                })
            }), this.FB.Event.subscribe("message.send", function() {
                k.notify("tracking a facebook share", 1), k.onEvent({
                    type: "facebook.send",
                    target: n
                })
            })
        }
    }, k.availableEventEmitters.push(u), l.offset = function(t) {
        var i;
        try {
            i = t.getBoundingClientRect()
        } catch (a) {}
        var r = n,
            o = r.documentElement,
            s = r.body,
            c = e,
            u = o.clientTop || s.clientTop || 0,
            l = o.clientLeft || s.clientLeft || 0,
            d = c.pageYOffset || o.scrollTop || s.scrollTop,
            f = c.pageXOffset || o.scrollLeft || s.scrollLeft,
            h = i.top + d - u,
            g = i.left + f - l;
        return {
            top: h,
            left: g
        }
    }, l.getViewportHeight = function() {
        var t = e.innerHeight,
            i = n.compatMode;
        return i && (t = "CSS1Compat" == i ? n.documentElement.clientHeight : n.body.clientHeight), t
    }, l.getScrollTop = function() {
        return n.documentElement.scrollTop ? n.documentElement.scrollTop : n.body.scrollTop
    }, l.prototype = {
        backgroundTasks: function() {
            var t = this.elements;
            k.each(this.rules, function(e) {
                k.cssQuery(e.selector, function(n) {
                    var i = 0;
                    k.each(n, function(e) {
                        k.contains(t, e) || (t.push(e), i++)
                    }), i && k.notify(e.selector + " added " + i + " elements.", 1)
                })
            }), this.track()
        },
        elementIsInView: function(t) {
            var e = l.getViewportHeight(),
                n = l.getScrollTop(),
                i = l.offset(t).top,
                a = t.offsetHeight;
            return !(n > i + a || i > n + e)
        },
        checkInView: function(t, e) {
            var n = k.$data(t, "inview");
            if (this.elementIsInView(t)) {
                n || k.$data(t, "inview", !0);
                var i = this;
                this.processRules(t, function(n, a, r) {
                    if (e || !n.inviewDelay) k.$data(t, a, !0), k.onEvent({
                        type: "inview",
                        target: t,
                        inviewDelay: n.inviewDelay
                    });
                    else if (n.inviewDelay) {
                        var o = k.$data(t, r);
                        o && clearTimeout(o), o = setTimeout(function() {
                            i.checkInView(t, !0)
                        }, n.inviewDelay), k.$data(t, r, o)
                    }
                })
            } else n && k.$data(t, "inview", !1), this.processRules(t, function(e, n, i) {
                var a = k.$data(t, i);
                a && clearTimeout(a)
            })
        },
        track: function() {
            k.each(this.elements, function(t) {
                this.checkInView(t)
            }, this)
        },
        processRules: function(t, e) {
            k.each(this.rules, function(n, i) {
                var a = n.inviewDelay ? "viewed_" + n.inviewDelay : "viewed",
                    r = "inview_timeout_id_" + i;
                k.$data(t, a) || k.matchesCss(n.selector, t) && e(n, a, r)
            })
        }
    }, k.availableEventEmitters.push(l), k.extend(d.prototype, {
        initialize: function() {
            var t, e = this.settings;
            k.notify("Visitor ID: Initializing tool", 1), t = this.createInstance(e.mcOrgId, e.namespace, e.initVars), null !== t && (e.customerIDs && this.applyCustomerIDs(t, e.customerIDs), e.autoRequest && t.getMarketingCloudVisitorID(), this.instance = t)
        },
        createInstance: function(t, e, n) {
            if (!k.isString(t)) return k.notify('Visitor ID: Cannot create instance using mcOrgId: "' + t + '"', 4), null;
            k.notify('Visitor ID: Create instance using mcOrgId: "' + t + '"', 1);
            var i = new Visitor(t, e);
            return this.applyInitVars(i, n), i
        },
        getInstance: function() {
            return this.instance
        },
        applyInitVars: function(t, e) {
            k.isObject(e) !== !1 && (e = this.parseValues(e), k.extend(t, e), k.notify("Visitor ID: Set variables: " + k.stringify(e), 1))
        },
        applyCustomerIDs: function(t, e) {
            k.isObject(e) !== !1 && (e = this.parseValues(e), t.setCustomerIDs(e), k.notify("Visitor ID: Set Customer IDs: " + k.stringify(e), 1))
        },
        parseValues: function(t) {
            var e = {};
            for (var n in t) t.hasOwnProperty(n) && (e[n] = k.replace(t[n]));
            return e
        }
    }), k.availableTools.visitor_id = d, k.inherit(f, k.BaseTool), k.extend(f.prototype, {
        name: "GA",
        initialize: function() {
            var t = this.settings,
                n = e._gaq,
                i = t.initCommands || [],
                a = t.customInit;
            if (n || (_gaq = []), this.isSuppressed()) k.notify("GA: page code not loaded(suppressed).", 1);
            else {
                if (!n && !f.scriptLoaded) {
                    var r = k.isHttps(),
                        o = (r ? "https://ssl" : "http://www") + "https://assets.adobedtm.com/353f197638abe79a7d2dc7a7fd522d075d11521d/.google-analytics.com/ga.js";
                    t.url && (o = r ? t.url.https : t.url.http), k.loadScript(o), f.scriptLoaded = !0, k.notify("GA: page code loaded.", 1)
                } {
                    var s = (t.domain, t.trackerName),
                        c = S.allowLinker(),
                        u = t.account;
                    k.settings.domainList || []
                }
                _gaq.push([this.cmd("setAccount"), u]), c && _gaq.push([this.cmd("setAllowLinker"), c]), _gaq.push([this.cmd("setDomainName"), S.cookieDomain()]), k.each(i, function(t) {
                    var e = [this.cmd(t[0])].concat(t.slice(1));
                    _gaq.push(e)
                }, this), a && (this.suppressInitialPageView = !1 === a(_gaq, s)), t.pageName && this.$overrideInitialPageView(null, null, t.pageName)
            }
            this.initialized = !0, k.fireEvent(this.id + ".configure", _gaq, s)
        },
        isSuppressed: function() {
            return this._cancelToolInit || this.settings.initTool === !1
        },
        tracker: function() {
            return this.settings.trackerName
        },
        cmd: function(t) {
            var e = this.tracker();
            return e ? e + "._" + t : "_" + t
        },
        $overrideInitialPageView: function(t, e, n) {
            this.urlOverride = n
        },
        trackInitialPageView: function() {
            if (!this.isSuppressed() && !this.suppressInitialPageView)
                if (this.urlOverride) {
                    var t = k.preprocessArguments([this.urlOverride], location, null, this.forceLowerCase);
                    this.$missing$("trackPageview", null, null, t)
                } else this.$missing$("trackPageview")
        },
        endPLPhase: function(t) {
            var e = this.settings.loadOn;
            t === e && (k.notify("GA: Initializing at " + t, 1), this.initialize(), this.flushQueue(), this.trackInitialPageView())
        },
        call: function(t, e, n, i) {
            if (!this._cancelToolInit) {
                var a = (this.settings, this.tracker()),
                    r = this.cmd(t),
                    i = i ? [r].concat(i) : [r];
                _gaq.push(i), a ? k.notify("GA: sent command " + t + " to tracker " + a + (i.length > 1 ? " with parameters [" + i.slice(1).join(", ") + "]" : "") + ".", 1) : k.notify("GA: sent command " + t + (i.length > 1 ? " with parameters [" + i.slice(1).join(", ") + "]" : "") + ".", 1)
            }
        },
        $missing$: function(t, e, n, i) {
            this.call(t, e, n, i)
        },
        $postTransaction: function(t, n, i) {
            var a = k.data.customVars.transaction = e[i];
            this.call("addTrans", t, n, [a.orderID, a.affiliation, a.total, a.tax, a.shipping, a.city, a.state, a.country]), k.each(a.items, function(e) {
                this.call("addItem", t, n, [e.orderID, e.sku, e.product, e.category, e.unitPrice, e.quantity])
            }, this), this.call("trackTrans", t, n)
        },
        delayLink: function(t, e) {
            var n = this;
            if (S.allowLinker() && t.hostname.match(this.settings.linkerDomains) && !k.isSubdomainOf(t.hostname, location.hostname)) {
                k.preventDefault(e);
                var i = k.settings.linkDelay || 100;
                setTimeout(function() {
                    n.call("link", t, e, [t.href])
                }, i)
            }
        },
        popupLink: function(t, n) {
            if (e._gat) {
                k.preventDefault(n);
                var i = this.settings.account,
                    a = e._gat._createTracker(i),
                    r = a._getLinkerUrl(t.href);
                e.open(r)
            }
        },
        $link: function(t, e) {
            "_blank" === t.getAttribute("target") ? this.popupLink(t, e) : this.delayLink(t, e)
        },
        $trackEvent: function(t, e) {
            var n = Array.prototype.slice.call(arguments, 2);
            if (n.length >= 4 && null != n[3]) {
                var i = parseInt(n[3], 10);
                k.isNaN(i) && (i = 1), n[3] = i
            }
            this.call("trackEvent", t, e, n)
        }
    }), k.availableTools.ga = f, k.inherit(h, k.BaseTool), k.extend(h.prototype, {
        name: "GAUniversal",
        isPageCodeLoadSuppressed: function() {
            return this.settings.initTool === !1 || this._cancelToolInit === !0
        },
        isCallSuppressed: function() {
            return this._cancelToolInit === !0
        },
        endPLPhase: function(t) {
            var e = this.settings,
                n = e.loadOn;
            if (this.isPageCodeLoadSuppressed()) return void k.notify("GAU: Page code not loaded(suppressed).", 1);
            if (t === n) {
                if (k.notify("GAU: Initializing at " + t, 1), this.initialize(), this.flushQueue(), this.suppressInitialPageView) return;
                this.call("send", "pageview")
            }
        },
        initialize: function() {
            var t = "";
            e[t] = e[t] || this.createGAObject(), e.GoogleAnalyticsObject = t, k.notify("GAU: Page code loaded.", 1), k.loadScriptOnce(this.getToolUrl());
            var n = this.settings;
            if (S.allowLinker() && n.allowLinker !== !1 ? this.createAccountForLinker() : this.createAccount(), this.executeInitCommands(), n.customInit) {
                var i = n.customInit,
                    a = i(e[t], this.getTrackerName());
                a === !1 && (this.suppressInitialPageView = !0)
            }
            this.initialized = !0
        },
        getTrackerName: function() {
            return this.settings.trackerSettings.name || ""
        },
        createGAObject: function() {
            var t = function() {
                t.q.push(arguments)
            };
            return t.q = [], t.l = 1 * new Date, t
        },
        create: function(t) {
            var e = this.settings.trackerSettings;
            e.cookieDomain || (e.cookieDomain = S.cookieDomain()), k.extend(e, t || {}), this.call("create", e)
        },
        createAccount: function() {
            this.create()
        },
        createAccountForLinker: function() {
            var t = {};
            S.allowLinker() && (t.allowLinker = !0), this.create(t), this.call("require", "linker"), this.call("linker:autoLink", this.autoLinkDomains(), !1, !0)
        },
        autoLinkDomains: function() {
            var t = location.hostname;
            return k.filter(k.settings.domainList, function(e) {
                return e !== t
            })
        },
        executeInitCommands: function() {
            var t = this.settings;
            t.initCommands && k.each(t.initCommands, function(t) {
                this.call.apply(this, t)
            }, this)
        },
        call: function() {
            return "function" != typeof ga ? void k.notify("GA Universal function not found!", 4) : void(this.isCallSuppressed() || (arguments[0] = this.cmd(arguments[0]), this.log(k.toArray(arguments)), ga.apply(e, arguments)))
        },
        $missing$: function(t, e, n, i) {
            i = i || [], i = [t].concat(i), this.call.apply(this, i)
        },
        getToolUrl: function() {
            var t = this.settings,
                e = k.isHttps();
            return t.url ? e ? t.url.https : t.url.http : (e ? "https://ssl" : "http://www") + "https://assets.adobedtm.com/353f197638abe79a7d2dc7a7fd522d075d11521d/.google-analytics.com/analytics.js"
        },
        cmd: function(t) {
            var e = ["send", "set", "get"],
                n = this.getTrackerName();
            return n && -1 !== k.indexOf(e, t) ? n + "." + t : t
        },
        log: function(t) {
            var e = t[0],
                n = this.getTrackerName() || "default",
                i = "GA Universal: sent command " + e + " to tracker " + n;
            if (t.length > 1) {
                {
                    k.stringify(t.slice(1))
                }
                i += " with parameters " + k.stringify(t.slice(1))
            }
            i += ".", k.notify(i, 1)
        }
    }), k.availableTools.ga_universal = h;
    var S = {
        allowLinker: function() {
            return k.hasMultipleDomains()
        },
        cookieDomain: function() {
            var t = k.settings.domainList,
                n = k.find(t, function(t) {
                    var n = e.location.hostname;
                    return k.equalsIgnoreCase(n.slice(n.length - t.length), t)
                }),
                i = n ? "." + n : "auto";
            return i
        }
    };
    k.inherit(g, k.BaseTool), k.extend(g.prototype, {
        name: "SC",
        initialize: function(t) {
            if (!this._cancelToolInit)
                if (this.settings.initVars = this.substituteVariables(this.settings.initVars, {
                        type: t
                    }), this.settings.initTool !== !1) {
                    var n = this.settings.sCodeURL || k.basePath() + "https://assets.adobedtm.com/353f197638abe79a7d2dc7a7fd522d075d11521d/s_code.js";
                    "object" == typeof n && (n = "https:" === e.location.protocol ? n.https : n.http), n.match(/^https?:/) || (n = k.basePath() + n), this.settings.initVars && this.$setVars(null, null, this.settings.initVars), k.loadScript(n, k.bind(this.onSCodeLoaded, this)), this.initializing = !0
                } else this.initializing = !0, this.pollForSC()
        },
        onSCodeLoaded: function() {
            this.initialized = !0, this.initializing = !1, k.notify("Adobe Analytics: loaded.", 1), k.fireEvent(this.id + ".load", this.getS()), this.flushQueueExceptTrackLink(), this.sendBeacon(), this.flushQueue()
        },
        pollForSC: function() {
            k.poll(k.bind(function() {
                return "function" == typeof e.s_gi ? (this.initialized = !0, this.initializing = !1, k.notify("Adobe Analytics: loaded (manual).", 1), k.fireEvent(this.id + ".load", this.getS()), this.flushQueue(), !0) : void 0
            }, this))
        },
        flushQueueExceptTrackLink: function() {
            if (this.pending) {
                for (var t = [], e = 0; e < this.pending.length; e++) {
                    var n = this.pending[e],
                        i = n[0];
                    "trackLink" === i.command ? t.push(n) : this.triggerCommand.apply(this, n)
                }
                this.pending = t
            }
        },
        isQueueAvailable: function() {
            return !this.initialized
        },
        substituteVariables: function(t, e) {
            var n = {};
            for (var i in t) {
                var a = t[i];
                n[i] = k.replace(a, location, e)
            }
            return n
        },
        endPLPhase: function(t) {
            var e = this.settings.loadOn;
            t === e && this.initialize(t)
        },
        $setVars: function(t, e, n) {
            for (var i in n) {
                var a = n[i];
                "function" == typeof a && (a = a()), this.varBindings[i] = a
            }
            k.notify("Adobe Analytics: set variables.", 2)
        },
        $customSetup: function(t, e, n) {
            this.customSetupFuns.push(function(i) {
                n.call(t, e, i)
            })
        },
        getAccount: function(t) {
            return e.s_account ? e.s_account : t && this.settings.accountByHost ? this.settings.accountByHost[t] || this.settings.account : this.settings.account
        },
        isValidSCInstance: function(t) {
            return !!t && "function" == typeof t.t && "function" == typeof t.tl
        },
        getS: function(t, n) {
            var i = n && n.hostname || e.location.hostname,
                a = this.concatWithToolVarBindings(n && n.setVars || this.varBindings),
                r = n && n.addEvent || this.events,
                o = this.getAccount(i),
                s = e.s_gi;
            if (!s) return null;
            if (this.isValidSCInstance(t) || (t = null), !o && !t) return k.notify("Adobe Analytics: tracker not initialized because account was not found", 1), null;
            var t = t || s(o),
                c = "D" + k.appVersion;
            "undefined" != typeof t.tagContainerMarker ? t.tagContainerMarker = c : "string" == typeof t.version && t.version.substring(t.version.length - 5) !== "-" + c && (t.version += "-" + c), t.sa && this.settings.skipSetAccount !== !0 && this.settings.initTool !== !1 && t.sa(this.settings.account), this.applyVarBindingsOnTracker(t, a), r.length > 0 && (t.events = r.join(","));
            var u = k.getVisitorId();
            return u && (t.visitor = k.getVisitorId()), t
        },
        concatWithToolVarBindings: function(t) {
            var e = this.settings.initVars || {};
            return k.map(["trackingServer", "trackingServerSecure"], function(n) {
                e[n] && !t[n] && (t[n] = e[n])
            }), t
        },
        applyVarBindingsOnTracker: function(t, e) {
            for (var n in e) t[n] = e[n]
        },
        clearVarBindings: function() {
            this.varBindings = {}
        },
        clearCustomSetup: function() {
            this.customSetupFuns = []
        },
        sendBeacon: function() {
            var t = this.getS(e[this.settings.renameS || "s"]);
            return t ? this.settings.customInit && this.settings.customInit(t) === !1 ? void k.notify("Adobe Analytics: custom init suppressed beacon", 1) : (this.settings.executeCustomPageCodeFirst && this.applyVarBindingsOnTracker(t, this.varBindings), this.executeCustomSetupFuns(t), t.t(), this.clearVarBindings(), this.clearCustomSetup(), void k.notify("Adobe Analytics: tracked page view", 1)) : void k.notify("Adobe Analytics: page code not loaded", 1)
        },
        executeCustomSetupFuns: function(t) {
            k.each(this.customSetupFuns, function(n) {
                n.call(e, t)
            })
        },
        $trackLink: function(t, e, n) {
            n = n || {};
            var i = n.type,
                a = n.linkName;
            !a && t && t.nodeName && "a" === t.nodeName.toLowerCase() && (a = t.innerHTML), a || (a = "link clicked");
            var r = n && n.setVars,
                o = n && n.addEvent || [],
                s = this.getS(null, {
                    setVars: r,
                    addEvent: o
                });
            if (!s) return void k.notify("Adobe Analytics: page code not loaded", 1);
            var c = s.linkTrackVars,
                u = s.linkTrackEvents,
                l = this.definedVarNames(r);
            n && n.customSetup && n.customSetup.call(t, e, s), o.length > 0 && l.push("events"), s.products && l.push("products"), l = this.mergeTrackLinkVars(s.linkTrackVars, l), o = this.mergeTrackLinkVars(s.linkTrackEvents, o), s.linkTrackVars = this.getCustomLinkVarsList(l);
            var d = k.map(o, function(t) {
                return t.split(":")[0]
            });
            s.linkTrackEvents = this.getCustomLinkVarsList(d), s.tl(!0, i || "o", a), k.notify(["Adobe Analytics: tracked link ", "using: linkTrackVars=", k.stringify(s.linkTrackVars), "; linkTrackEvents=", k.stringify(s.linkTrackEvents)].join(""), 1), s.linkTrackVars = c, s.linkTrackEvents = u
        },
        mergeTrackLinkVars: function(t, e) {
            return t && (e = t.split(",").concat(e)), e
        },
        getCustomLinkVarsList: function(t) {
            var e = k.indexOf(t, "None");
            return e > -1 && t.length > 1 && t.splice(e, 1), t.join(",")
        },
        definedVarNames: function(t) {
            t = t || this.varBindings;
            var e = [];
            for (var n in t) /^(eVar[0-9]+)|(prop[0-9]+)$/.test(n) && e.push(n);
            return e
        },
        getTrackingServer: function() {
            var t = this,
                n = t.getS();
            if (n && n.trackingServer) return n.trackingServer;
            var i = t.getAccount(e.location.hostname);
            if (!i) return null;
            var a, r, o, s = "",
                c = n && n.dc;
            return a = i, r = a.indexOf(","), r >= 0 && (a = a.gb(0, r)), a = a.replace(/[^A-Za-z0-9]/g, ""), s || (s = "2o7.net"), c = c ? ("" + c).toLowerCase() : "d1", "2o7.net" == s && ("d1" == c ? c = "112" : "d2" == c && (c = "122"), o = ""), r = a + "." + c + "." + o + s
        },
        $trackPageView: function(t, e, n) {
            var i = n && n.setVars,
                a = n && n.addEvent || [],
                r = this.getS(null, {
                    setVars: i,
                    addEvent: a
                });
            return r ? (r.linkTrackVars = "", r.linkTrackEvents = "", this.executeCustomSetupFuns(r), n && n.customSetup && n.customSetup.call(t, e, r), r.t(), this.clearVarBindings(), this.clearCustomSetup(), void k.notify("Adobe Analytics: tracked page view", 1)) : void k.notify("Adobe Analytics: page code not loaded", 1)
        },
        $postTransaction: function(t, n, i) {
            var a = k.data.transaction = e[i],
                r = this.varBindings,
                o = this.settings.fieldVarMapping;
            if (k.each(a.items, function(t) {
                    this.products.push(t)
                }, this), r.products = k.map(this.products, function(t) {
                    var e = [];
                    if (o && o.item)
                        for (var n in o.item) {
                            var i = o.item[n];
                            e.push(i + "=" + t[n]), "event" === i.substring(0, 5) && this.events.push(i)
                        }
                    var a = ["", t.product, t.quantity, t.unitPrice * t.quantity];
                    return e.length > 0 && a.push(e.join("|")), a.join(";")
                }, this).join(","), o && o.transaction) {
                var s = [];
                for (var c in o.transaction) {
                    var i = o.transaction[c];
                    s.push(i + "=" + a[c]), "event" === i.substring(0, 5) && this.events.push(i)
                }
                r.products.length > 0 && (r.products += ","), r.products += ";;;;" + s.join("|")
            }
        },
        $addEvent: function() {
            for (var t = 2, e = arguments.length; e > t; t++) this.events.push(arguments[t])
        },
        $addProduct: function() {
            for (var t = 2, e = arguments.length; e > t; t++) this.products.push(arguments[t])
        }
    }), k.availableTools.sc = g, k.inherit(p, k.BaseTool), k.extend(p.prototype, {
        name: "Default",
        $loadIframe: function(t, n, i) {
            var a = i.pages,
                r = i.loadOn,
                o = k.bind(function() {
                    k.each(a, function(e) {
                        this.loadIframe(t, n, e)
                    }, this)
                }, this);
            r || o(), "domready" === r && k.domReady(o), "load" === r && k.addEventHandler(e, "load", o)
        },
        loadIframe: function(t, e, i) {
            var a = n.createElement("iframe");
            a.style.display = "none";
            var r = k.data.host,
                o = i.data,
                s = this.scriptURL(i.src),
                c = k.searchVariables(o, t, e);
            r && (s = k.basePath() + s), s += c, a.src = s;
            var u = n.getElementsByTagName("body")[0];
            u ? u.appendChild(a) : k.domReady(function() {
                n.getElementsByTagName("body")[0].appendChild(a)
            })
        },
        scriptURL: function(t) {
            var e = k.settings.scriptDir || "";
            return e + t
        },
        $loadScript: function(t, n, i) {
            var a = i.scripts,
                r = i.sequential,
                o = i.loadOn,
                s = k.bind(function() {
                    r ? this.loadScripts(t, n, a) : k.each(a, function(e) {
                        this.loadScripts(t, n, [e])
                    }, this)
                }, this);
            o ? "domready" === o ? k.domReady(s) : "load" === o && k.addEventHandler(e, "load", s) : s()
        },
        loadScripts: function(t, e, n) {
            function i() {
                if (r.length > 0 && a) {
                    var c = r.shift();
                    c.call(t, e, o)
                }
                var u = n.shift();
                if (u) {
                    var l = k.data.host,
                        d = s.scriptURL(u.src);
                    l && (d = k.basePath() + d), k.loadScript(d, i), a = u
                }
            }
            try {
                var a, n = n.slice(0),
                    r = this.asyncScriptCallbackQueue,
                    o = e.target || e.srcElement,
                    s = this
            } catch (c) {
                console.error("scripts is", k.stringify(n))
            }
            i()
        },
        $loadBlockingScript: function(t, e, n) {
            var i = n.scripts,
                a = (n.loadOn, k.bind(function() {
                    k.each(i, function(n) {
                        this.loadBlockingScript(t, e, n)
                    }, this)
                }, this));
            a()
        },
        loadBlockingScript: function(t, e, n) {
            var i = this.scriptURL(n.src),
                a = k.data.host,
                r = e.target || e.srcElement;
            a && (i = k.basePath() + i), this.argsForBlockingScripts.push([t, e, r]), k.loadScriptSync(i)
        },
        pushAsyncScript: function(t) {
            this.asyncScriptCallbackQueue.push(t)
        },
        pushBlockingScript: function(t) {
            var e = this.argsForBlockingScripts.shift(),
                n = e[0];
            t.apply(n, e.slice(1))
        },
        $writeHTML: function(t, e) {
            if (k.domReadyFired) return void k.notify("Command writeHTML failed. You may be using an async installation of Satellite.", 1);
            if ("pagebottom" !== e.type && "pagetop" !== e.type) return void k.notify("You can only use writeHTML on the `pagetop` and `pagebottom` events.", 1);
            for (var i = 2, a = arguments.length; a > i; i++) {
                var r = arguments[i].html;
                r = k.replace(r, t, e), n.write(r)
            }
        },
        linkNeedsDelayActivate: function(t, n) {
            n = n || e;
            var i = t.tagName,
                a = t.getAttribute("target"),
                r = t.getAttribute("href");
            return i && "a" !== i.toLowerCase() ? !1 : r ? a ? "_blank" === a ? !1 : "_top" === a ? n.top === n : "_parent" === a ? !1 : "_self" === a ? !0 : n.name ? a === n.name : !0 : !0 : !1
        },
        $delayActivateLink: function(t, e) {
            if (this.linkNeedsDelayActivate(t)) {
                k.preventDefault(e);
                var n = k.settings.linkDelay || 100;
                setTimeout(function() {
                    k.setLocation(t.href)
                }, n)
            }
        },
        isQueueable: function(t) {
            return "writeHTML" !== t.command
        }
    }), k.availableTools["default"] = p, k.inherit(v, k.BaseTool), k.extend(v.prototype, {
        name: "tnt",
        endPLPhase: function(t) {
            "aftertoolinit" === t && this.initialize()
        },
        initialize: function() {
            k.notify("Test & Target: Initializing", 1), this.initializeTargetPageParams(), this.load()
        },
        initializeTargetPageParams: function() {
            e.targetPageParams && this.updateTargetPageParams(this.parseTargetPageParamsResult(e.targetPageParams())), this.updateTargetPageParams(this.settings.pageParams), this.setTargetPageParamsFunction()
        },
        load: function() {
            var t = this.getMboxURL(this.settings.mboxURL);
            this.settings.initTool !== !1 ? this.settings.loadSync ? (k.loadScriptSync(t), this.onScriptLoaded()) : (k.loadScript(t, k.bind(this.onScriptLoaded, this)), this.initializing = !0) : this.initialized = !0
        },
        getMboxURL: function(t) {
            var n = t;
            return k.isObject(t) && (n = "https:" === e.location.protocol ? t.https : t.http), n.match(/^https?:/) ? n : k.basePath() + n
        },
        onScriptLoaded: function() {
            k.notify("Test & Target: loaded.", 1), this.flushQueue(), this.initialized = !0, this.initializing = !1
        },
        $addMbox: function(t, e, n) {
            var i = n.mboxGoesAround,
                a = i + "{visibility: hidden;}",
                r = this.appendStyle(a);
            i in this.styleElements || (this.styleElements[i] = r), this.initialized ? this.$addMBoxStep2(null, null, n) : this.initializing && this.queueCommand({
                command: "addMBoxStep2",
                arguments: [n]
            }, t, e)
        },
        $addMBoxStep2: function(t, i, a) {
            var r = this.generateID(),
                o = this;
            k.addEventHandler(e, "load", k.bind(function() {
                k.cssQuery(a.mboxGoesAround, function(t) {
                    var i = t[0];
                    if (i) {
                        var s = n.createElement("div");
                        s.id = r, i.parentNode.replaceChild(s, i), s.appendChild(i), e.mboxDefine(r, a.mboxName);
                        var c = [a.mboxName];
                        a.arguments && (c = c.concat(a.arguments)), e.mboxUpdate.apply(null, c), o.reappearWhenCallComesBack(i, r, a.timeout, a)
                    }
                })
            }, this)), this.lastMboxID = r
        },
        $addTargetPageParams: function(t, e, n) {
            this.updateTargetPageParams(n)
        },
        generateID: function() {
            var t = "_sdsat_mbox_" + String(Math.random()).substring(2) + "_";
            return t
        },
        appendStyle: function(t) {
            var e = n.getElementsByTagName("head")[0],
                i = n.createElement("style");
            return i.type = "text/css", i.styleSheet ? i.styleSheet.cssText = t : i.appendChild(n.createTextNode(t)), e.appendChild(i), i
        },
        reappearWhenCallComesBack: function(t, e, n, i) {
            function a() {
                var t = r.styleElements[i.mboxGoesAround];
                t && (t.parentNode.removeChild(t), delete r.styleElements[i.mboxGoesAround])
            }
            var r = this;
            k.cssQuery('script[src*="omtrdc.net"]', function(t) {
                var e = t[0];
                if (e) {
                    k.scriptOnLoad(e.src, e, function() {
                        k.notify("Test & Target: request complete", 1), a(), clearTimeout(i)
                    });
                    var i = setTimeout(function() {
                        k.notify("Test & Target: bailing after " + n + "ms", 1), a()
                    }, n)
                } else k.notify("Test & Target: failed to find T&T ajax call, bailing", 1), a()
            })
        },
        updateTargetPageParams: function(t) {
            var e = {};
            for (var n in t) t.hasOwnProperty(n) && (e[k.replace(n)] = k.replace(t[n]));
            k.extend(this.targetPageParamsStore, e)
        },
        getTargetPageParams: function() {
            return this.targetPageParamsStore
        },
        setTargetPageParamsFunction: function() {
            e.targetPageParams = k.bind(this.getTargetPageParams, this)
        },
        parseTargetPageParamsResult: function(t) {
            var e = t;
            return k.isArray(t) && (t = t.join("&")), k.isString(t) && (e = k.parseQueryParams(t)), e
        }
    }), k.availableTools.tnt = v, k.inherit(m, k.BaseTool), k.extend(m.prototype, {
        initialize: function() {
            var t = this.settings;
            if (this.settings.initTool !== !1) {
                var e = t.url;
                e = "string" == typeof e ? k.basePath() + e : k.isHttps() ? e.https : e.http, k.loadScript(e, k.bind(this.onLoad, this)), this.initializing = !0
            } else this.initialized = !0
        },
        isQueueAvailable: function() {
            return !this.initialized
        },
        onLoad: function() {
            this.initialized = !0, this.initializing = !1, this.settings.initialBeacon && this.settings.initialBeacon(), this.flushQueue()
        },
        endPLPhase: function(t) {
            var e = this.settings.loadOn;
            t === e && (k.notify(this.name + ": Initializing at " + t, 1), this.initialize())
        },
        $fire: function(t, e, n) {
            return this.initializing ? void this.queueCommand({
                command: "fire",
                arguments: [n]
            }, t, e) : void n.call(this.settings, t, e)
        }
    }), k.availableTools.am = m, k.availableTools.adlens = m, k.ecommerce = {
        addItem: function() {
            var t = [].slice.call(arguments);
            k.onEvent({
                type: "ecommerce.additem",
                target: t
            })
        },
        addTrans: function() {
            var t = [].slice.call(arguments);
            k.data.saleData.sale = {
                orderId: t[0],
                revenue: t[2]
            }, k.onEvent({
                type: "ecommerce.addtrans",
                target: t
            })
        },
        trackTrans: function() {
            k.onEvent({
                type: "ecommerce.tracktrans",
                target: []
            })
        }
    }, _satellite.init({
        tools: {
            "1875dbe29f7bb9ab238fc7489edde34c": {
                engine: "sc",
                loadOn: "pagebottom",
                account: "ncomauth",
                euCookie: !1,
                sCodeURL: "https://assets.adobedtm.com/353f197638abe79a7d2dc7a7fd522d075d11521d/353f197638abe79a7d2dc7a7fd522d075d11521d/s-code-contents-b5fb8c32b9f61016251e19c1d53af49ce5a6c2de.js",
                initVars: {
                    charSet: "UTF-8",
                    currencyCode: "USD",
                    trackingServer: "metrics.nintendo.com",
                    trackingServerSecure: "smetrics.nintendo.com",
                    pageName: "%Page Name%",
                    channel: "oauth",
                    trackInlineStats: !0,
                    trackDownloadLinks: !0,
                    linkDownloadFileTypes: "avi,css,csv,doc,docx,eps,exe,jpg,js,m4v,mov,mp3,pdf,png,ppt,pptx,rar,svg,tab,txt,vsd,vxd,wav,wma,wmv,xls,xlsx,xml,zip",
                    trackExternalLinks: !0,
                    linkInternalFilters: "javascript:,mailto:,tel:",
                    linkLeaveQueryString: !1,
                    dynamicVariablePrefix: "D="
                }
            }
        },
        pageLoadRules: [],
        rules: [],
        directCallRules: [],
        settings: {
            trackInternalLinks: !0,
            libraryName: "satelliteLib-df3d4f52ec08e860f63e4ce57be273a0ed391ab8",
            isStaging: !1,
            allowGATTcalls: !1,
            downloadExtensions: /\.(?:doc|docx|eps|jpg|png|svg|xls|ppt|pptx|pdf|xlsx|tab|csv|zip|txt|vsd|vxd|xml|js|css|rar|exe|wma|mov|avi|wmv|mp3|wav|m4v)($|\&|\?)/i,
            notifications: !1,
            utilVisible: !1,
            domainList: ["nintendo.net"],
            scriptDir: "353f197638abe79a7d2dc7a7fd522d075d11521d/scripts/",
            euCookieName: "smetrics.nintendo.com",
            tagTimeout: 3e3
        },
        data: {
            URI: n.location.pathname + n.location.search,
            browser: {},
            cartItems: [],
            revenue: "",
            host: {
                http: "assets.adobedtm.com",
                https: "assets.adobedtm.com"
            }
        },
        dataElements: {
            "Custom URL": {
                jsVariable: "window.location.href.split('?')[0]",
                storeLength: "pageview"
            },
            "Page Name": {
                customJS: function() {
                    var t = n.createElement("a");
                    return t.href = n.location, "oauth" + t.pathname.replace(/\//g, ":")
                },
                "default": "oauth:unknown",
                storeLength: "pageview"
            }
        },
        appVersion: "4BD",
        buildDate: "2014-11-19 00:52:36 UTC",
        publishDate: "2014-11-19 00:51:44 UTC"
    })
}(window, document);