Skip to content

Instantly share code, notes, and snippets.

@fraszczakszymon
Last active February 12, 2016 13:51
Show Gist options
  • Save fraszczakszymon/d93540ea162e11e88752 to your computer and use it in GitHub Desktop.
Save fraszczakszymon/d93540ea162e11e88752 to your computer and use it in GitHub Desktop.
/* LEGAL NOTICE: COPYRIGHT 2015 THE RUBICON PROJECT, INC. ALL RIGHTS RESERVED. THIS CODE CONTAINS TRADE SECRETS OR OTHERWISE CONFIDENTIAL AND/OR PROPRIETARY INFORMATION THAT IS THE EXCLUSIVE INTELLECTUAL PROPERTY OF THE RUBICON PROJECT, INC. AND IS PROTECTED BY COPYRIGHT, TRADE SECRET AND/OR OTHER STATE AND FEDERAL LAW. SEE http://bit.ly/1g7QAOO FOR FULL TERMS AND CONDITIONS. */ ! function a(b, c, d) {
function e(g, h) {
if (!c[g]) {
if (!b[g]) {
var i = "function" == typeof require && require;
if (!h && i) return i(g, !0);
if (f) return f(g, !0);
var j = new Error("Cannot find module '" + g + "'");
throw j.code = "MODULE_NOT_FOUND", j
}
var k = c[g] = {
exports: {}
};
b[g][0].call(k.exports, function(a) {
var c = b[g][1][a];
return e(c ? c : a)
}, k, k.exports, a, b, c, d)
}
return c[g].exports
}
for (var f = "function" == typeof require && require, g = 0; g < d.length; g++) e(d[g]);
return e
}({
1: [function(a, b, c) {
! function(a, c) {
"use strict";
"object" == typeof b && "object" == typeof b.exports ? b.exports = c() : "function" == typeof define && define.amd ? define([], c) : a.objectPath = c()
}(this, function() {
"use strict";
function a(a) {
if (!a) return !0;
if (l(a) && 0 === a.length) return !0;
if (!d(a)) {
for (var b in a)
if (k.call(a, b)) return !1;
return !0
}
return !1
}
function b(a) {
return j.call(a)
}
function c(a) {
return "number" == typeof a || "[object Number]" === b(a)
}
function d(a) {
return "string" == typeof a || "[object String]" === b(a)
}
function e(a) {
return "object" == typeof a && "[object Object]" === b(a)
}
function f(a) {
return "boolean" == typeof a || "[object Boolean]" === b(a)
}
function g(a) {
var b = parseInt(a);
return b.toString() === a ? b : a
}
function h(b, e, f, i) {
if (c(e) && (e = [e]), a(e)) return b;
if (d(e)) return h(b, e.split(".").map(g), f, i);
var j = e[0];
if (1 === e.length) {
var k = b[j];
return void 0 !== k && i || (b[j] = f), k
}
return void 0 === b[j] && (c(e[1]) ? b[j] = [] : b[j] = {}), h(b[j], e.slice(1), f, i)
}
function i(b, e) {
if (c(e) && (e = [e]), !a(b)) {
if (a(e)) return b;
if (d(e)) return i(b, e.split("."));
var f = g(e[0]),
h = b[f];
if (1 === e.length) void 0 !== h && (l(b) ? b.splice(f, 1) : delete b[f]);
else if (void 0 !== b[f]) return i(b[f], e.slice(1));
return b
}
}
var j = Object.prototype.toString,
k = Object.prototype.hasOwnProperty,
l = Array.isArray || function(a) {
return "[object Array]" === j.call(a)
},
m = function(a) {
return Object.keys(m).reduce(function(b, c) {
return "function" == typeof m[c] && (b[c] = m[c].bind(m, a)), b
}, {})
};
return m.has = function(b, f) {
if (a(b)) return !1;
if (c(f) ? f = [f] : d(f) && (f = f.split(".")), a(f) || 0 === f.length) return !1;
for (var g = 0; g < f.length; g++) {
var h = f[g];
if (!e(b) && !l(b) || !k.call(b, h)) return !1;
b = b[h]
}
return !0
}, m.ensureExists = function(a, b, c) {
return h(a, b, c, !0)
}, m.set = function(a, b, c, d) {
return h(a, b, c, d)
}, m.insert = function(a, b, c, d) {
var e = m.get(a, b);
d = ~~d, l(e) || (e = [], m.set(a, b, e)), e.splice(d, 0, c)
}, m.empty = function(b, g) {
if (a(g)) return b;
if (!a(b)) {
var h, i;
if (!(h = m.get(b, g))) return b;
if (d(h)) return m.set(b, g, "");
if (f(h)) return m.set(b, g, !1);
if (c(h)) return m.set(b, g, 0);
if (l(h)) h.length = 0;
else {
if (!e(h)) return m.set(b, g, null);
for (i in h) k.call(h, i) && delete h[i]
}
}
}, m.push = function(a, b) {
var c = m.get(a, b);
l(c) || (c = [], m.set(a, b, c)), c.push.apply(c, Array.prototype.slice.call(arguments, 2))
}, m.coalesce = function(a, b, c) {
for (var d, e = 0, f = b.length; f > e; e++)
if (void 0 !== (d = m.get(a, b[e]))) return d;
return c
}, m.get = function(b, e, f) {
if (c(e) && (e = [e]), a(e)) return b;
if (a(b)) return f;
if (d(e)) return m.get(b, e.split("."), f);
var h = g(e[0]);
return 1 === e.length ? void 0 === b[h] ? f : b[h] : m.get(b[h], e.slice(1), f)
}, m.del = function(a, b) {
return i(a, b)
}, m
})
}, {}],
2: [function(a, b, c) {
var d = a(18),
e = a(13);
b.exports.rubicontag = new e, void 0 !== d && (d.rubicontag && (d.origrubicontag = d.rubicontag), d.rubicontag = b.exports.rubicontag)
}, {
13: 13,
18: 18
}],
3: [function(a, b, c) {
"use strict";
var d = a(19),
e = a(11),
f = a(17),
g = function() {
var a, b = this,
c = new d;
b.requestTime = 0;
var g = null,
h = null,
i = null,
j = {
url: "",
type: "post",
cache: !1,
async: !0,
dataType: "json",
data: null,
timeout: 0,
jsonpCallback: "",
jsonpCallbackParam: ""
};
b.ajax = function(d) {
if (j = f.mergeObjects(j, d, !0), "jsonp" === j.dataType.toLowerCase()) {
if (j.type = "GET", !j.jsonpCallback) {
if (!j.jsonpCallbackParam) return f.error("cannot create a jsonp request with no callback or callbackParam specified:", j), b;
var h = "rp_callback_" + parseInt(1e8 * Math.random(), 10);
j.data = j.data || {}, j.data[j.jsonpCallbackParam] = h, j.jsonpCallback = h
}
c = new e(j.jsonpCallback)
}
var i = [];
if ("get" === j.type.toLowerCase() && j.data)
for (var k in j.data) j.data.hasOwnProperty(k) && i.push(encodeURIComponent(k) + "=" + encodeURIComponent(j.data[k]));
return j.cache !== !0 && "get" === j.type.toLowerCase() && i.push(1e18 * Math.random()), i.length > 0 && (j.url += j.url.indexOf("?") > 0 ? "&" : "?", j.url += i.join("&")), c.open(j.type, j.url, j.async), c.withCredentials = !0, j.timeout && j.async && (c.timeout = j.timeout), "post" === j.type.toLowerCase() && c.setRequestHeader("Content-type", "application/x-www-form-urlencoded"), c.onreadystatechange = g, a = (new Date).getTime(), c.send("get" !== j.type.toLowerCase() ? j.data : null), b
}, g = function() {
if (4 === c.readyState)
if (b.requestTime = (new Date).getTime() - a, 200 === c.status)
for (; h.length;) h.shift()(c);
else
for (; i.length;) i.shift()(c)
}, h = [], i = [], b.done = function(a) {
return c && 4 === c.readyState && 200 === c.status ? a(c) : h.push(a), b
}, b.fail = function(a) {
return c && 4 === c.readyState && 200 !== c.status ? a(c) : i.push(a), b
}, b.always = function(a) {
return c && 4 === c.readyState ? a(c) : (h.push(a), i.push(a)), b
}, b.abort = function() {
return c.abort(), b
}
};
b.exports = g
}, {
11: 11,
17: 17,
19: 19
}],
4: [function(a, b, c) {
"use strict";
var d = a(6),
e = a(17),
f = a(3),
g = function() {
var a = this,
b = !1,
c = null,
g = null,
h = e.browserSupportsXHR(),
i = {
nAccountId: null,
oBatching: {
bEnabled: !0,
nBatchSize: 100,
nBatchWindow: 3e3
},
sHost: "stats.aws.rubiconproject.com/stats/",
sBucket: "fastlane"
},
j = [],
k = null,
l = function(b) {
var c = b[0];
i.nAccountId = c.accountId;
var d = c && c.configuration && c.configuration.analytics ? c.configuration.analytics : {};
return i.sBucket = d.bucket ? d.bucket : i.sBucket, i.sHost = d.host ? d.host : i.sHost, i.sHost.match(/^http(s)?:/) || (i.sHost = e.getProtocol() + i.sHost), d.batching && (i.oBatching.bEnabled = "boolean" == typeof d.batching.enabled ? d.batching.enabled : i.oBatching.bEnabled, i.oBatching.nBatchSize = isNaN(d.batching.batchSize) ? i.oBatching.nBatchSize : d.batching.batchSize, i.oBatching.nBatchWindow = isNaN(d.batching.batchWindow) ? i.oBatching.nBatchWindow : d.batching.batchWindow), e.addUserDistractionEventListener(function() {
a.flushEvents()
}), a
};
a.publish = function(e, f) {
return b || (b = !0, l(d.getConfigs())), i.oBatching.bEnabled && h ? c(e, f) : g([{
sEventCode: e,
sLine: f
}]), a
}, c = function(b, c) {
j.push({
sEventCode: b,
sLine: c
}), j.length >= i.oBatching.nBatchSize ? a.flushEvents() : null === k && (k = setTimeout(function() {
a.flushEvents()
}, i.oBatching.nBatchWindow))
}, g = function(a) {
var b = [],
c = 0;
if (h) {
for (c = 0; c < a.length; c++) b.push(encodeURIComponent(i.sBucket + "/" + a[c].sLine));
var d = b.join("|"),
e = new f;
e.ajax({
url: i.sHost,
type: "POST",
async: !0,
data: d
})
} else
for (c = 0; c < a.length; c++) {
var g = i.sHost;
g += encodeURIComponent(i.sBucket) + "/";
var j = encodeURIComponent(a[c].sLine);
j = j.replace(/%2F/g, "/"), (new Image).src = g + j + "?rnd=" + Math.random()
}
}, a.flushEvents = function() {
var a = j;
j = [], null !== k && (clearTimeout(k), k = null), a.length && g(a)
}
};
b.exports = new g
}, {
17: 17,
3: 3,
6: 6
}],
5: [function(a, b, c) {
"use strict";
var d = (a(18), function() {
var a = this;
a.push = function(a) {
a()
}
});
b.exports = new d
}, {
18: 18
}],
6: [function(a, b, c) {
"use strict";
var d = function() {
var b = this,
c = [],
d = [],
e = a(1);
b.getConfigs = function() {
return c
}, b.hasConfig = function() {
return c.length > 0
}, b.addConfig = function(a) {
c.push(a);
for (var b = 0; b < d.length; b++) d[b]()
}, b.onLoad = function(a) {
"[object Function]" === Object.prototype.toString.call(a) && d.push(a)
}, b.getConfigValue = function(a, b, d) {
return a >= c.length ? d : e.get(c[a], b, d)
}
};
b.exports = new d
}, {
1: 1
}],
7: [function(a, b, c) {
"use strict";
var d = a(17),
e = a(15),
f = (a(8), function() {
var a = this,
b = new e,
c = {},
f = {},
g = null;
a.setFPI = function(a, b) {
d.isArray(b) || (b = [b]), c[a] = b
}, a.addFPI = function(a, b) {
c.hasOwnProperty(a) && d.isArray(c[a]) || (c[a] = []), d.isArray(b) || (b = [b]);
for (var e = 0; e < b.length; e++) {
var f = b[e];
d.inArray(f, c[a]) || c[a].push(f)
}
}, a.getFPI = function() {
return g(c)
}, a.setFPV = function(a, b) {
d.isArray(b) || (b = [b]), f[a] = b
}, a.addFPV = function(a, b) {
f.hasOwnProperty(a) && d.isArray(f[a]) || (f[a] = []), d.isArray(b) || (b = [b]);
for (var c = 0; c < b.length; c++) {
var e = b[c];
d.inArray(e, f[a]) || f[a].push(e)
}
}, a.getFPV = function() {
return g(f)
}, a.addKW = function(a) {
d.isArray(a) || (a = [a]);
for (var c = 0; c < a.length; c++) b.add(a[c])
}, a.getKWs = function() {
return b.toArray()
}, g = function(a) {
return d.convertKeyValuePairObjectToArray(a)
}
});
b.exports = f
}, {
15: 15,
17: 17,
8: 8
}],
8: [function(a, b, c) {
"use strict";
var d = a(6),
e = a(4),
f = a(17),
g = {},
h = {
LOG_DISABLE: 1 / 0,
LOG_ALWAYS: 0,
LOG_ERROR: 1,
LOG_WARN: 2,
LOG_INFO: 3,
LOG_DEBUG: 4
},
i = {
BAD_EVENT: {
sLabel: "badEvent",
sAnalyticsPattern: "bad-event/{sEventType}",
sLogPattern: "Unknown event triggered: {sEventType}",
nAnalyticsLevel: h.LOG_ERROR,
nLogLevel: h.LOG_ERROR
},
HL_INIT: {
sLabel: "init",
sAnalyticsPattern: "init/{nAccountId}/{sVersion}",
sLogPattern: "initialized account: {nAccountId}",
nAnalyticsLevel: h.LOG_ALWAYS,
nLogLevel: h.LOG_DEBUG
},
HL_RUN_CALLED: {
sLabel: "runCalled",
sAnalyticsPattern: "run-called/{nAccountId}",
sLogPattern: "rubicontag.run() function called",
nAnalyticsLevel: h.LOG_DEBUG,
nLogLevel: h.LOG_DEBUG
},
HL_RUN_BAD_CALLBACK: {
sLabel: "badRunCallback",
sAnalyticsPattern: "",
sLogPattern: "Missing or invalid callback provided to rubicontag.run(). Overiding with empty function.",
nAnalyticsLevel: h.LOG_DISABLE,
nLogLevel: h.LOG_ERROR
},
HL_BAD_TIMEOUT: {
sLabel: "badTimeout",
sAnalyticsPattern: "badtimeout/{nTimeout}",
sLogPattern: "Invalid timeout value: {nTimeout}. Must be at least 300",
nAnalyticsLevel: h.LOG_ERROR,
nLogLevel: h.LOG_ERROR
},
HL_BAD_DEFINE_SLOT: {
sLabel: "badDefineSlot",
sAnalyticsPattern: "",
sLogPattern: "Too few arguments passed to defineSlot. Name: {sSlotName}; sizes list: {aDimensions}; element ID: {sElementId}.",
nAnalyticsLevel: h.LOG_WARN,
nLogLevel: h.LOG_WARN
},
HL_BAD_DEFINE_SLOT_FROM_OBJ: {
sLabel: "badDefineSlotFromObj",
sAnalyticsPattern: "",
sLogPattern: "Incorrect object params passed to defineSlot. SiteId: {nSiteId}; zoneId: {nZoneId}; sizes list: {aSizes}; unique id: {nId}.",
nAnalyticsLevel: h.LOG_WARN,
nLogLevel: h.LOG_WARN
},
SLOT_BAD_DIMENSIONS: {
sLabel: "badDimensions",
sAnalyticsPattern: "",
sLogPattern: "Given dimensions {sGivenDimensions} were parsed to {sParsedDimensions}.",
nAnalyticsLevel: h.LOG_DISABLE,
nLogLevel: h.LOG_DEBUG
},
SLOT_SPECIFICITY_START: {
sLabel: "slotSpecificityStart",
sAnalyticsPattern: "",
sLogPattern: "Starting slot specificity calculation for slot name: {sSlotName}, element ID: {sElementId}, contexts: {sContexts}.",
nAnalyticsLevel: h.LOG_DISABLE,
nLogLevel: h.LOG_DEBUG
},
SLOT_SPECIFICITY_SLOTNAME_EXACT: {
sLabel: "slotSpecificitySlotExact",
sAnalyticsPattern: "",
sLogPattern: "Exact slot name match. slot name: {sSlotName}, pattern: {sSlotNamePattern}, points: {nPoints}.",
nAnalyticsLevel: h.LOG_DISABLE,
nLogLevel: h.LOG_DEBUG
},
SLOT_SPECIFICITY_SLOTNAME_PATTERN: {
sLabel: "slotSpecificitySlotPattern",
sAnalyticsPattern: "",
sLogPattern: "Partial slot name match. slot name: {sSlotName}, pattern: {sSlotNamePattern}, points: {nPoints}.",
nAnalyticsLevel: h.LOG_DISABLE,
nLogLevel: h.LOG_DEBUG
},
SLOT_SPECIFICITY_SLOTNAME_FAILED: {
sLabel: "slotSpecificitySlotFailed",
sAnalyticsPattern: "",
sLogPattern: "Slot name match failed. Slot name: {sSlotName}, pattern: {sSlotNamePattern}. Skipping.",
nAnalyticsLevel: h.LOG_DISABLE,
nLogLevel: h.LOG_DEBUG
},
SLOT_SPECIFICITY_ELEMENT_EXACT: {
sLabel: "slotSpecificityElementIdExact",
sAnalyticsPattern: "",
sLogPattern: "Exact element ID match. element ID: {sElementId}, pattern: {sElementIdPattern}, points: {nPoints}.",
nAnalyticsLevel: h.LOG_DISABLE,
nLogLevel: h.LOG_DEBUG
},
SLOT_SPECIFICITY_ELEMENT_PATTERN: {
sLabel: "slotSpecificityElementIdPattern",
sAnalyticsPattern: "",
sLogPattern: "Partial element ID match. element ID: {sElementId}, pattern: {sElementIdPattern}, points: {nPoints}.",
nAnalyticsLevel: h.LOG_DISABLE,
nLogLevel: h.LOG_DEBUG
},
SLOT_SPECIFICITY_ELEMENT_FAILED: {
sLabel: "slotSpecificityElementIdFailed",
sAnalyticsPattern: "",
sLogPattern: "Element Id match failed. Element Id: {sElementId}, pattern: {sElementIdPattern}. Skipping.",
nAnalyticsLevel: h.LOG_DISABLE,
nLogLevel: h.LOG_DEBUG
},
SLOT_SPECIFICITY_POSITION: {
sLabel: "slotSpecificityPosition",
sAnalyticsPattern: "",
sLogPattern: "Position match. Position: {sPosition}, points: {nPoints}.",
nAnalyticsLevel: h.LOG_DISABLE,
nLogLevel: h.LOG_DEBUG
},
SLOT_SPECIFICITY_POSITION_FAILED: {
sLabel: "slotSpecificityPositionFailed",
sAnalyticsPattern: "",
sLogPattern: "Position match failed. Slot position: {sSlotPosition}, configured: {sPosition}. Skipping.",
nAnalyticsLevel: h.LOG_DISABLE,
nLogLevel: h.LOG_DEBUG
},
SLOT_SPECIFICITY_DEVICE_TYPE: {
sLabel: "slotSpecificityDeviceType",
sAnalyticsPattern: "",
sLogPattern: "Device type match. Device type: {sDeviceType}, configured: {sDeviceTypes}, points: {nPoints}.",
nAnalyticsLevel: h.LOG_DISABLE,
nLogLevel: h.LOG_DEBUG
},
SLOT_SPECIFICITY_DEVICE_TYPE_FAILED: {
sLabel: "slotSpecificityDeviceTypeFailed",
sAnalyticsPattern: "",
sLogPattern: "Device type match failed. Device type: {sDeviceType}, configured: {sDeviceTypes}. Skipping.",
nAnalyticsLevel: h.LOG_DISABLE,
nLogLevel: h.LOG_DEBUG
},
SLOT_SPECIFICITY_URL_PATTERN: {
sLabel: "slotSpecificityUrlPattern",
sAnalyticsPattern: "",
sLogPattern: "Partial URL match. URL: {sUrl}, pattern: {sUrlPattern}, points: {nPoints}.",
nAnalyticsLevel: h.LOG_DISABLE,
nLogLevel: h.LOG_DEBUG
},
SLOT_SPECIFICITY_URL_FAILED: {
sLabel: "slotSpecificityUrlFailed",
sAnalyticsPattern: "",
sLogPattern: "URL match failed. URL: {sUrl}, pattern: {sUrlPattern}. Skipping.",
nAnalyticsLevel: h.LOG_DISABLE,
nLogLevel: h.LOG_DEBUG
},
SLOT_SPECIFICITY_CONTEXT: {
sLabel: "slotSpecificityContext",
sAnalyticsPattern: "",
sLogPattern: "Context matching. Page contexts: {sPageContexts}, configured contexts: {sConfiguredContexts}, matches: {nMatches}, points: {nPoints}.",
nAnalyticsLevel: h.LOG_DISABLE,
nLogLevel: h.LOG_DEBUG
},
SLOT_SPECIFICITY_CONTEXT_FAILED: {
sLabel: "slotSpecificityContextFailed",
sAnalyticsPattern: "",
sLogPattern: "Context match failed. Page contexts: {sPageContexts}, configured contexts: {sConfiguredContexts}. Skipping.",
nAnalyticsLevel: h.LOG_DISABLE,
nLogLevel: h.LOG_DEBUG
},
SLOT_SPECIFICITY_END: {
sLabel: "slotSpecificityEnd",
sAnalyticsPattern: "",
sLogPattern: "End slot specificity calculation for slot name: {sSlotName}, element ID: {sElementId}, contexts: {sContexts}. Points: {nPoints}.",
nAnalyticsLevel: h.LOG_DISABLE,
nLogLevel: h.LOG_DEBUG
},
SLOT_USING_CATCH_ALL: {
sLabel: "slotCatchAllConfig",
sAnalyticsPattern: "",
sLogPattern: "No configuration match found for slot: {sSlotName}, element ID: {sElementId}. Using catch-all.",
nAnalyticsLevel: h.LOG_DISABLE,
nLogLevel: h.LOG_DEBUG
},
SLOT_SIZE_NOT_MAPPED: {
sLabel: "slotSizeNotMapped",
sAnalyticsPattern: "slot-size-not-mapped/{sDimensions}/{sSlotName}",
sLogPattern: "Could not map dimension: {sDimensions} for slot: {sSlotName}.",
nAnalyticsLevel: h.LOG_DEBUG,
nLogLevel: h.LOG_DEBUG
},
SLOT_GPT_TARGETING_SET: {
sLabel: "gptTargetingSet",
sAnalyticsPattern: "gpt-targeting-set/{nAccountId}/{nSiteId}/{nZoneId}/{nSizeId}/{sTier}/{sValue}",
sLogPattern: "Setting key/value pair for GPT Slot. Key: {sKey} Value: {sValue}.",
nAnalyticsLevel: h.LOG_ALWAYS,
nLogLevel: h.LOG_INFO
},
HL_CREATIVE_RENDERED: {
sLabel: "creativeRenderCalled",
sAnalyticsPattern: "render/{nAccountId}/{nSiteId}/{nZoneId}/{nSizeId}/{sTier}/{nCpm}/{sAuctionId}",
sLogPattern: "Creative rendering called for size: {nSizeId}, element: {sElementId}, account: {nAccountId}.",
nAnalyticsLevel: h.LOG_ALWAYS,
nLogLevel: h.LOG_DEBUG
},
HL_CREATIVE_RENDER_SLOT_NOT_FOUND: {
sLabel: "creativeRenderSlotNotFound",
sAnalyticsPattern: "render-no-slot/{nSizeId}/{sElementId}/{nAccountId}",
sLogPattern: "Creative rendering could not find slot for size: {nSizeId}, element: {sElementId}, account: {nAccountId}.",
nAnalyticsLevel: h.LOG_ERROR,
nLogLevel: h.LOG_ERROR
},
HL_CREATIVE_RENDER_CREATIVE_NOT_FOUND: {
sLabel: "creativeRenderCreativeNotFound",
sAnalyticsPattern: "render-no-creative/{nSizeId}/{sElementId}/{nAccountId}",
sLogPattern: "Creative rendering could not find creative for size: {nSizeId}, element: {sElementId}, account: {nAccountId}.",
nAnalyticsLevel: h.LOG_ERROR,
nLogLevel: h.LOG_ERROR
},
FL_RESPONSE_SUCCESS: {
sLabel: "responseSuccess",
sAnalyticsPattern: "response/success/{nStatusCode}/{sRequestType}/{nTimeout}/{nRequestTime}/{nAccountId}/{nSiteId}/{nZoneId}/{nSizeId}",
sLogPattern: "Auction request finished successfully before timeout {nTimeout} in {nRequestTime} ms, elementId: {sElementId}, sizeId: {nSizeId}.",
nAnalyticsLevel: h.LOG_INFO,
nLogLevel: h.LOG_DEBUG
},
FL_RESPONSE_TIMEOUT: {
sLabel: "responseTimeout",
sAnalyticsPattern: "response/timeout/{nStatusCode}/{sRequestType}/{nTimeout}/{nRequestTime}/{nAccountId}/{nSiteId}/{nZoneId}/{nSizeId}",
sLogPattern: "Auction request finished AFTER timeout {nTimeout} in {nRequestTime} ms, elementId: {sElementId}, sizeId: {nSizeId}.",
nAnalyticsLevel: h.LOG_INFO,
nLogLevel: h.LOG_DEBUG
},
FL_RESPONSE_FAILURE: {
sLabel: "responseFailure",
sAnalyticsPattern: "response/failure/{nStatusCode}/{sRequestType}/{nTimeout}/{nRequestTime}/{nAccountId}/{nSiteId}/{nZoneId}/{nSizeId}",
sLogPattern: "Auction request failed: {sStatus}, with status code {nStatusCode}, elementId: {sElementId}, sizeId: {nSizeId}.",
nAnalyticsLevel: h.LOG_WARN,
nLogLevel: h.LOG_WARN
},
FL_RESPONSE_PARSE_ERROR: {
sLabel: "responseParseError",
sAnalyticsPattern: "parse-error/{sSlotName}/size/{nSizeId}/response/{sRequestData}",
sLogPattern: "Error parsing response data: {sRequestData}.",
nAnalyticsLevel: h.LOG_INFO,
nLogLevel: h.LOG_DEBUG
},
FL_BAD_RESPONSE_STATUS: {
sLabel: "badResponseStatus",
sAnalyticsPattern: "status/{sStatus}",
sLogPattern: "Invalid auction ad: {sStatus} / {sReason}",
nAnalyticsLevel: h.LOG_WARN,
nLogLevel: h.LOG_DEBUG
},
FL_AUCTION_CPM_OVERRIDE: {
sLabel: "auctionCpmOverride",
sAnalyticsPattern: "cpm-override/{nOriginalCpm}/{nOverrideCpm}",
sLogPattern: "Overriding Auction CPM. Original: {nOriginalCpm}. Override: {nOverrideCpm}",
nAnalyticsLevel: h.LOG_ERROR,
nLogLevel: h.LOG_ERROR
},
FL_NO_ADS: {
sLabel: "noAds",
sAnalyticsPattern: "no-ads/{sSlotName}",
sLogPattern: "No ads found for slot: {sSlotName}",
nAnalyticsLevel: h.LOG_DEBUG,
nLogLevel: h.LOG_DEBUG
},
FL_TIER_MAPPED: {
sLabel: "tierMapped",
sAnalyticsPattern: "tier-mapped/{nAccountId}/{nSiteId}/{nZoneId}/{nSizeId}/{sTier}/{nCpm}",
sLogPattern: "Tier mapped. Price: {nCpm}. Tier: {sTier}. Slot: {sElementId}.",
nAnalyticsLevel: h.LOG_ALWAYS,
nLogLevel: h.LOG_INFO
},
FL_TIER_NOT_MAPPED: {
sLabel: "tierNotMapped",
sAnalyticsPattern: "tier-not-mapped/{nAccountId}/{nSiteId}/{nZoneId}/{nSizeId}/{nPrice}",
sLogPattern: 'Could not map "{nPrice}" to any tier for slot "{sSlotName}".',
nAnalyticsLevel: h.LOG_WARN,
nLogLevel: h.LOG_DEBUG
},
FL_TIER_SPECIFICITY_PRICE: {
sLabel: "tierSpecificityPrice",
sAnalyticsPattern: "",
sLogPattern: "Price matched for tier: {sTierMapping}. Bounds: {nFloor} <= {nAuctionCpm} <= {nCeiling}. Points: {nPoints}.",
nAnalyticsLevel: h.LOG_DISABLE,
nLogLevel: h.LOG_INFO
},
FL_TIER_SPECIFICITY_PRICE_FAILED: {
sLabel: "tierSpecificityPriceFailed",
sAnalyticsPattern: "",
sLogPattern: "Price did not match for tier: {sTierMapping}. Bounds: {nFloor} <= {nAuctionCpm} <= {nCeiling}.",
nAnalyticsLevel: h.LOG_DISABLE,
nLogLevel: h.LOG_DEBUG
},
FL_TIER_SPECIFICITY_DEAL_WILDCARD: {
sLabel: "tierSpecificityDealWildcard",
sAnalyticsPattern: "",
sLogPattern: "Deal wildcard matched for tier: {sTierMapping}. Deal ID: {nDeal}. Points: {nPoints}.",
nAnalyticsLevel: h.LOG_DISABLE,
nLogLevel: h.LOG_INFO
},
FL_TIER_SPECIFICITY_DEAL_EXACT: {
sLabel: "tierSpecificityDealExact",
sAnalyticsPattern: "",
sLogPattern: "Deal matched for tier: {sTierMapping}. Deal ID: {nDeal}. Points: {nPoints}.",
nAnalyticsLevel: h.LOG_DISABLE,
nLogLevel: h.LOG_INFO
},
FL_TIER_SPECIFICITY_DEAL_FAILED: {
sLabel: "tierSpecificityDealFailed",
sAnalyticsPattern: "",
sLogPattern: "Deal did not match for tier: {sTierMapping}. Deal ID: {nDeal}.",
nAnalyticsLevel: h.LOG_DISABLE,
nLogLevel: h.LOG_INFO
},
FL_EXCEEDED_REQUESTS_PER_SLOT: {
sLabel: "exceededReqPerSlotLimit",
sAnalyticsPattern: "exceed-slot-requests/{sSlotName}/limit/{nLimit}",
sLogPattern: "Exceeded size limit per slot for slot: {sSlotName}. Limit: {nLimit}.",
nAnalyticsLevel: h.LOG_WARN,
nLogLevel: h.LOG_WARN
},
FL_EXCEEDED_REQUESTS_PER_PAGE: {
sLabel: "exceededReqPerPageLimit",
sAnalyticsPattern: "exceed-page-requests/{nLimit}",
sLogPattern: "Exceeded requests-per-page limit: {nLimit}.",
nAnalyticsLevel: h.LOG_WARN,
nLogLevel: h.LOG_WARN
},
FL_USING_JSONP_REQUEST: {
sLabel: "usingJsonpRequest",
sAnalyticsPattern: "using-jsonp-request/{nAccountId}",
sLogPattern: "Using JSONP rather than xhr for auction requests.",
nAnalyticsLevel: h.LOG_INFO,
nLogLevel: h.LOG_INFO
},
FL_CREATIVE_CACHED: {
sLabel: "creativeCached",
sAnalyticsPattern: "creative-cached/{nAccountId}/{nSiteId}/{nZoneId}/{nSizeId}",
sLogPattern: "Found creative for slot: {sSlotName}, size: {nSizeId}. Skipping auction.",
nAnalyticsLevel: h.LOG_WARN,
nLogLevel: h.LOG_WARN
},
FL_SLOT_AUCTION: {
sLabel: "slotAuction",
sAnalyticsPattern: "slot-auction/{nAccountId}/{nSiteId}/{nZoneId}/{nSizeId}",
sLogPattern: "Running auction for slot: {sSlotName}, size: {nSizeId}.",
nAnalyticsLevel: h.LOG_ALWAYS,
nLogLevel: h.LOG_DEBUG
}
},
j = !1,
k = function() {
j || (j = !0, g.nAnalyticsLevel = d.getConfigValue(0, "configuration.analyticsLevel"), g.nAccountId = d.getConfigValue(0, "accountId"), g.nLogLevel = parseInt(f.getUrlCookieParam("rp_loglevel"), 10), isNaN(g.nLogLevel) && (g.nLogLevel = d.getConfigValue(0, "configuration.logLevel", 0)))
},
l = function(a, b) {
var c = this;
k();
var d, j = !1;
c.publish = function() {
if (!j) {
j = !0, i.hasOwnProperty(a) || (b = {
sEventType: a
}, a = "BAD_EVENT");
var c = i[a];
c.nAnalyticsLevel <= g.nAnalyticsLevel && (d = f.formatString(c.sAnalyticsPattern, b, !0), d = "account/" + g.nAccountId + "/" + d, e.publish(c.sLabel, d)), c.nLogLevel <= g.nLogLevel && (d = f.formatString(c.sLogPattern, b), c.nLogLevel === h.LOG_ERROR ? f.error(d) : c.nLogLevel === h.LOG_WARN ? f.warn(d) : c.nLogLevel === h.LOG_INFO ? f.info(d) : c.nLogLevel === h.LOG_DEBUG && f.debug(d))
}
}
};
l.factory = function(a, b, c) {
var d = new l(a, b);
return (arguments.length <= 2 || c) && d.publish(), d
}, b.exports = l
}, {
17: 17,
4: 4,
6: 6
}],
9: [function(a, b, c) {
"use strict";
var d = a(3),
e = a(12),
f = a(15),
g = a(8),
h = function() {
var b = this,
c = null,
h = 0,
i = 0,
j = null,
k = a(6),
l = a(17),
m = (a(10), []),
n = [],
o = null,
p = null,
q = null,
r = null,
s = null,
t = null,
u = null,
v = null,
w = 0,
x = {
nPrice: 10,
nDealWildcard: 25,
nDealExact: 50
},
y = !l.browserSupportsXHR();
b.init = function(a) {
if (i = a, m = k.getConfigValue(i, "tiers", m), j = k.getConfigValue(i, "accountId"), h = v(m), n = k.getConfigValue(i, "fastlane.optimizedHosts", ["optimized-by.rubiconproject.com/a/api/fastlane.json"]), y)
for (var b = 0; b < n.length; b++) n[b] += "p"
};
var z = function(a, b, c) {
var d;
try {
d = "object" == typeof c ? c : JSON.parse(c)
} catch (e) {
return void g.factory("FL_RESPONSE_PARSE_ERROR", {
sSlotName: a.getSlotName(),
nSizeId: b,
sRequestData: c
})
}
if (!d || !d.ads || d.ads.length < 1) return void g.factory("FL_NO_ADS", {
sSlotName: a.getSlotName(),
nSizeId: b
});
if ("ok" !== d.ads[0].status) return void g.factory("FL_BAD_RESPONSE_STATUS", {
sStatus: d.ads[0].status,
sReason: d.ads[0].reason
});
var f = parseFloat(l.getUrlCookieParam("rp_cpm_override"));
f && (g.factory("FL_AUCTION_CPM_OVERRIDE", {
nOriginalCpm: d.ads[0].cpm,
nOverrideCpm: f
}), d.ads[0].cpm = f);
var i = d.ads[0].cpm;
if (h > i) return void g.factory("FL_BAD_RESPONSE_STATUS", {
sStatus: d.ads[0].status,
sReason: d.ads[0].reason
});
var k = p(d, m),
n = k.nPoints ? k.oTier.mapping : !1;
n !== !1 ? (o(a, d.size_id, n), a.storeCreative(d.account_id, d.size_id, d.ads[0], n), g.factory("FL_TIER_MAPPED", {
nAccountId: j,
sElementId: a.getElementId(),
nSiteId: a.getSiteId(j),
nZoneId: a.getZoneId(j),
nSizeId: b,
sTier: n,
nCpm: i
})) : g.factory("FL_TIER_NOT_MAPPED", {
sSlotName: a.getSlotName(),
sElementId: a.getElementId(),
nAccountId: j,
nSiteId: a.getSiteId(j),
nZoneId: a.getZoneId(j),
nSizeId: b,
nPrice: i
})
};
o = function(a, b, c) {
var d = "rpfl_" + j;
a.addAdServerTargeting(d, [b, "_", c].join("")), a.addAdServerTargeting("rpfl_elemid", a.getElementId())
}, p = function(a, b) {
var c = {
nPoints: 0,
oTier: {}
};
for (var d in b)
if (b.hasOwnProperty(d)) {
var e = q(a, b[d]);
e > c.nPoints && (c.nPoints = e, c.oTier = b[d])
}
return c
}, q = function(a, b) {
var c = 0,
d = Math.round(100 * a.ads[0].cpm) / 100;
if (b.hasOwnProperty("floor") && b.hasOwnProperty("ceiling")) {
if (!(d >= b.floor && d <= b.ceiling)) return g.factory("FL_TIER_SPECIFICITY_PRICE_FAILED", {
nAuctionCpm: d,
sTierMapping: b.mapping,
nFloor: b.floor,
nCeiling: b.ceiling
}), 0;
c += x.nPrice, g.factory("FL_TIER_SPECIFICITY_PRICE", {
nAuctionCpm: d,
sTierMapping: b.mapping,
nFloor: b.floor,
nCeiling: b.ceiling,
nPoints: c
})
}
if (b.hasDeals) {
var e = a.ads[0].deal ? parseInt(a.ads[0].deal, 10) : !1;
if (b.hasDeals !== !0 || !e) return g.factory("FL_TIER_SPECIFICITY_DEAL_FAILED", {
sTierMapping: b.mapping,
nDeal: e
}), 0;
c += x.nDealWildcard, g.factory("FL_TIER_SPECIFICITY_DEAL_WILDCARD", {
sTierMapping: b.mapping,
nDeal: e,
nPoints: c
})
} else if (b.deals) {
var f = a.ads[0].deal ? parseInt(a.ads[0].deal, 10) : !1;
if (b.deals === !0 && f) c += x.nDealWildcard, g.factory("FL_TIER_SPECIFICITY_DEAL_WILDCARD", {
sTierMapping: b.mapping,
nDeal: f,
nPoints: c
});
else {
if (!l.isArray(b.deals) || !l.inArray(f, b.deals)) return g.factory("FL_TIER_SPECIFICITY_DEAL_FAILED", {
sTierMapping: b.mapping,
nDeal: f
}), 0;
c += x.nDealExact, g.factory("FL_TIER_SPECIFICITY_DEAL_EXACT", {
sTierMapping: b.mapping,
nDeal: f,
nPoints: c
})
}
}
return c
}, b.run = function(a, c) {
if ("function" != typeof a) throw new Error("first argument to 'run' must be a callback function");
if (!u()) return void a([]);
var h = new e(15e3),
i = new f,
m = {
bTimedout: !1,
nTimeout: c.nTimeout || 2e3
};
m.oTimeout = setTimeout(function() {
l.info("fastlane:", " timeout after " + m.nTimeout + " ms. " + h.getSuccessfulRequests().length + "/" + h.totalRequests() + " requests finished successfully before timeout"), m.bTimedout = !0, a(i.toArray())
}, m.nTimeout);
var n = {
url: "",
type: "GET",
cache: !0,
async: !0,
dataType: "",
data: null
};
y && (n.dataType = "jsonp", n.jsonpCallbackParam = "cb", g.factory("FL_USING_JSONP_REQUEST", {
nAccountId: j
}));
for (var o = k.getConfigValue(0, "configuration.maximumRequestsPerPage", 100), p = k.getConfigValue(0, "configuration.maximumSizesPerSlot", 10), q = k.getConfigValue(0, "configuration.cacheResponses", !1), v = l.getNow(), w = 0; w < c.aSlots.length; w++) {
for (var x = c.aSlots[w], z = x.getRubiconSizeIds(j), A = 0; A < z.length; A++) {
var B = z[A],
C = x.getCreative(j, B);
if (null !== C) {
if (q && !(C.nExpires <= v)) {
g.factory("FL_CREATIVE_CACHED", {
sSlotName: x.getSlotName(),
nAccountId: j,
nSiteId: x.getSiteId(j),
nZoneId: x.getZoneId(j),
nSizeId: B
});
break
}
x.purgeCreative(j, B)
}
if (h.totalRequests() >= o) break;
if (A >= p) {
g.factory("FL_EXCEEDED_REQUESTS_PER_SLOT", {
sSlotName: x.getSlotName(),
nLimit: p
});
break
}
g.factory("FL_SLOT_AUCTION", {
sSlotName: x.getSlotName(),
nAccountId: j,
nSiteId: x.getSiteId(j),
nZoneId: x.getZoneId(j),
nSizeId: B
}), n.url = t(x, B);
var D = new d;
h.addRequest(D.ajax(n).done(r(x, B, i, D, m)).fail(s(x, B, D, m)))
}
if (h.totalRequests() >= o) {
g.factory("FL_EXCEEDED_REQUESTS_PER_PAGE", {
nLimit: o
});
break
}
}
h.allRequestsAdded(), l.info("fastlane:", "sent ", h.totalRequests(), " auction request(s)"), h.finished(function() {
m.bTimedout || (l.info("fastlane:", h.getSuccessfulRequests().length + "/" + h.totalRequests() + " requests finished successfully before timeout (" + m.nTimeout + " ms)"), clearTimeout(m.oTimeout), a(i.toArray()))
}), setTimeout(function() {
b.purgeExpiredCreatives(c.aSlots, j)
}, 3e5)
}, b.purgeExpiredCreatives = function(a, b) {
for (var c = l.getNow(), d = 0; d < a.length; d++)
for (var e = a[d], f = e.getRubiconSizeIds(b), g = 0; g < f.length; g++) {
var h = e.getCreative(b, f[g]);
h && h.nExpires <= c && e.purgeCreative(b, f[g])
}
}, r = function(a, b, c, d, e) {
return function(f) {
e.bTimedout ? g.factory("FL_RESPONSE_TIMEOUT", {
nAccountId: j,
sElementId: a.getElementId(),
nSiteId: a.getSiteId(j),
nZoneId: a.getZoneId(j),
nSizeId: b,
nTimeout: e.nTimeout,
nRequestTime: d.requestTime,
sRequestType: f.isJsonp ? "jsonp" : "xhr",
nStatusCode: f.status
}) : g.factory("FL_RESPONSE_SUCCESS", {
nAccountId: j,
sElementId: a.getElementId(),
nSiteId: a.getSiteId(j),
nZoneId: a.getZoneId(j),
nSizeId: b,
nTimeout: e.nTimeout,
nRequestTime: d.requestTime,
sRequestType: f.isJsonp ? "jsonp" : "xhr",
nStatusCode: f.status
}), c.add(a.getPublicVersion()), z(a, b, f.responseText)
}
}, s = function(a, b, c, d) {
return function(e) {
g.factory("FL_RESPONSE_FAILURE", {
nAccountId: j,
sElementId: a.getElementId(),
nSiteId: a.getSiteId(j),
nZoneId: a.getZoneId(j),
nSizeId: b,
nTimeout: d.nTimeout,
nRequestTime: c.requestTime,
sRequestType: e.isJsonp ? "jsonp" : "xhr",
nStatusCode: e.status,
sStatus: e.statusText || ""
})
}
};
var A = function() {
return w++, w >= n.length && (w = 0), n[w]
};
t = function(a, b) {
var c = l.getProtocol(),
d = A(),
e = h,
f = Math.random(),
g = a.getKWs(),
i = a.getFPV(),
k = a.getFPI(),
m = {
account_id: j,
site_id: a.getSiteId(j),
zone_id: a.getZoneId(j),
size_id: b,
p_pos: a.getPosition(),
rp_floor: Math.max(e, .01),
rf: l.getFullPageUrl(),
p_screen_res: l.getScreenResolution()
};
if (g.push("rp.fastlane"), m.kw = g.join(","), i.length) {
var n = l.generateComplexQueryStringObject(i, "tg_v");
m = l.mergeObjects(m, n, !0)
}
if (k.length) {
var o = l.generateComplexQueryStringObject(k, "tg_i");
m = l.mergeObjects(m, o, !0)
}
return m.rand = f, [c, d, "?", l.convertObjectToQueryString(m)].join("")
}, u = function() {
if ("boolean" == typeof c) return c;
var a = parseInt(k.getConfigValue(i, "fastlane.pageSampling", 1), 10);
return c = a > Math.random()
}, v = function(a) {
var b = [];
for (var c in a) a.hasOwnProperty(c) && b.push(parseFloat(a[c].floor));
return b.sort(function(a, b) {
return a - b
}), b.length ? b[0] : 0
}
};
b.exports = h
}, {
10: 10,
12: 12,
15: 15,
17: 17,
3: 3,
6: 6,
8: 8
}],
10: [function(a, b, c) {
"use strict";
var d = a(18),
e = a(16),
f = a(9),
g = a(6),
h = a(7),
i = a(17),
j = a(8),
k = (a(4), a(14)),
l = function() {
var a = this,
b = null,
c = null,
l = null,
m = {},
n = new h,
o = !1,
p = [],
q = [],
r = 1e3,
s = 300,
t = '<!doctype html>\n\n<html lang="en"><head><meta charset="utf-8"><title></title><script type="text/javascript">var inDapIF = true;</script></head><body style="margin: 0px; padding: 0px;"><script type="text/javascript">',
u = "</script></body></html>";
a.loadConfiguration = function(a) {
o || g.addConfig(a)
}, a.init = function() {
if (!o) {
o = !0, a.writeDnsPrefetchElements();
var c = g.getConfigValue(0, "sizeMap", !1);
c && (i.oSizeMap = c), p = b(), d.origrubicontag && d.origrubicontag.cmd && i.isArray(d.origrubicontag.cmd) && a.processCommands(d.origrubicontag.cmd), j.factory("HL_INIT", {
nAccountId: g.getConfigValue(0, "accountId"),
sVersion: g.getConfigValue(0, "configuration.version")
})
}
}, a.writeDnsPrefetchElements = function() {
var a = d.document.createElement("link");
a.rel = "dns-prefetch", a.href = "//optimized-by.rubiconproject.com/";
var b = d.document.getElementsByTagName("script")[0];
b && b.parentNode.appendChild(a)
}, b = function() {
for (var a = [], b = g.getConfigs(), c = 0; c < b.length; c++)
for (var d = g.getConfigValue(c, "services", []), e = 0; e < d.length; e++) {
var h = d[e];
if ("fastlane" === h) {
var i = new f;
i.init(c), a.push(i)
}
}
return a
}, a.run = function(a, b) {
j.factory("HL_RUN_CALLED", {
nAccountId: g.getConfigValue(0, "accountId")
}), "function" != typeof a && (j.factory("HL_RUN_BAD_CALLBACK"), a = function() {});
var d = c(b);
k.run(p, a, d)
}, c = function(b) {
if (b = b || {}, b && i.isInteger(b)) {
var c = b;
b = {
timeout: c
}
}
var d = b.slots ? !0 : !1,
e = {
nTimeout: b.timeout ? b.timeout : g.getConfigValue(0, "configuration.timeout", r),
aSlots: b.slots ? b.slots : !1,
bSlotsSpecified: d
};
e.nTimeout < s && (j.factory("HL_BAD_TIMEOUT", {
nTimeout: e.nTimeout
}), e.nTimeout = s);
var f = [];
if (e.bSlotsSpecified) {
if (i.isArray(e.aSlots))
for (var h = 0; h < e.aSlots.length; h++)
if (e.aSlots[h] && "function" == typeof e.aSlots[h].getElementId) {
var k = a.getSlot(e.aSlots[h].getElementId());
k && f.push(k)
}
} else f = a.getAllSlots();
return e.aSlots = f, e
}, a.processCommands = function(a) {
for (var b = 0; b < a.length; b++) a[b]()
}, a.defineSlot = function(b, c, d) {
if (1 === arguments.length && i.isObject(b)) return l(b);
if (arguments.length < 3) return j.factory("HL_BAD_DEFINE_SLOT", {
sSlotName: b,
aDimensions: c,
sElementId: d
}), new e(b || null, c || [], d || null);
var f = a.getSlot(d);
return f === !1 && (f = new e(b, c, d), m[d] = f), f
}, l = function(b) {
if (!(i.isObject(b) && i.isArray(b.sizes) && b.siteId && b.zoneId && b.id)) return j.factory("HL_BAD_DEFINE_SLOT_FROM_OBJ", {
aSizes: b.sizes,
nSiteId: b.siteId,
nZoneId: b.zoneId,
nId: b.id
}), new e(b.id ? b.id : null, [], b.id || null);
var c = a.getSlot(b.id);
if (c === !1) {
c = new e(b.id, [], b.id);
var d = g.getConfigValue(0, "accountId");
c.loadSlotConfiguration(d, {
siteId: b.siteId,
zoneId: b.zoneId,
sizes: b.sizes
}), m[b.id] = c
}
return c
}, a.getAllSlots = function() {
var a = [];
for (var b in m) m.hasOwnProperty(b) && a.push(m[b]);
return a
}, a.getSlot = function(a) {
for (var b in m)
if (m.hasOwnProperty(b) && b === a) return m[b];
return !1
}, a.setTargetingForGPTSlot = function(b) {
if (!(b && i.isObject(b) && i.isFunction(b.getSlotElementId) && i.isFunction(b.setTargeting))) return !1;
var c = a.getSlot(b.getSlotElementId());
return c && i.isObject(c) && i.isFunction(c.getAdServerTargeting) ? c.setTargetingForGPTSlot(b) : !1
}, a.renderCreative = function(b, c, d, e) {
arguments.length < 4 && (e = g.getConfigValue(0, "accountId"));
var f, h = d && d.match && d.match(/^([0-9]+)_.+$/);
f = i.isArray(h) && 2 === h.length ? h[1] : d;
var k = a.getSlot(c);
if (k === !1) return void j.factory("HL_CREATIVE_RENDER_SLOT_NOT_FOUND", {
sElementId: c,
nSizeId: f,
nAccountId: e
});
var l = k.getCreative(e, f);
if (null === l) return void j.factory("HL_CREATIVE_RENDER_CREATIVE_NOT_FOUND", {
sElementId: c,
nSizeId: f,
nAccountId: e
});
k.purgeCreative(e, f), j.factory("HL_CREATIVE_RENDERED", {
nAccountId: e,
sElementId: c,
nSiteId: k.getSiteId(e),
nZoneId: k.getZoneId(e),
nSizeId: f,
sTier: l.sTier,
nCpm: l.oResponse.cpm,
sAuctionId: l.oResponse.impression_id
});
var m = ["rpfl", e, k.getSlotName().replace(/[^a-zA-Z0-9]/g, "_"), f].join("_");
a.writeContentToFriendlyIFrame(b, l.oResponse.script, m)
}, a.writeContentToFriendlyIFrame = function(a, b, c) {
try {
c = c ? c : "rp_ct_" + Math.round(1e15 * Math.random());
var e = d.document.createElement("iframe");
e.setAttribute("scrolling", "no"), e.src = "about:blank", e.style.cssText = "width: 100%; height: 100%; border: 0; margin: 0; padding: 0; overflow: hidden;", e.id = c, e.className = "rp-creative-iframe-wrapper", a.appendChild(e);
var f = e.contentWindow.document;
f.open(), f.write(t + b + u), f.close()
} catch (g) {
i.error(g)
}
}, a.setFPI = function(b, c) {
return n.setFPI(b, c), a
}, a.addFPI = function(b, c) {
return n.addFPI(b, c), a
}, a.getFPI = function() {
return n.getFPI()
}, a.setFPV = function(b, c) {
return n.setFPV(b, c), a
}, a.addFPV = function(b, c) {
return n.addFPV(b, c), a
}, a.getFPV = function() {
return n.getFPV()
}, a.addKW = function(b) {
return n.addKW(b), a
}, a.getKWs = function() {
return n.getKWs()
}, a.addContext = function() {
for (var b = 0; b < arguments.length; b++) q.push(arguments[b]);
return a
}, a.getContexts = function() {
return q
}
};
b.exports = new l
}, {
14: 14,
16: 16,
17: 17,
18: 18,
4: 4,
6: 6,
7: 7,
8: 8,
9: 9
}],
11: [function(a, b, c) {
"use strict";
var d = a(17),
e = a(18),
f = function(a) {
d.debug("creating jsonp request object with callback:", a);
var b, c, f, g, h = this,
i = !1,
j = null,
k = null,
l = null,
m = null,
n = null,
o = null,
p = null;
h.readyState = 0, h.status = 0, h.statusText = "", h.responseText = "", h.timeout = 0, h.onreadystatechange = function() {
d.debug('jsonp "onreadystatechange" function called for request:', h, ", url:", b)
}, h.isJsonp = !0, h.jsonpArgs = [], h.open = function(a, c) {
b = c
}, h.send = function() {
return i ? void d.warn('"send" called multiple times for jsonp request:', b) : (i = !0, b ? a ? (d.debug("sending jsonp request:", b), j(), n(), void(h.timeout && (g = setTimeout(o, h.timeout)))) : (d.error("no callback given for jsonp request"), void p(0, "jsonp: no callback")) : (d.error("no url given for jsonp request"), void p(0, "jsonp: no url")))
}, h.abort = function() {
p(0, "jsonp aborted")
}, j = function() {
var b = k().contentWindow;
b[a] = m
};
var q = function() {
f && f.contentWindow && delete f.contentWindow[a]
};
k = function() {
for (var b = e.rp_fl_iframes = e.rp_fl_iframes || [], c = 0; c < b.length; c++)
if (!b[c].contentWindow[a]) {
f = b[c];
break
}
return f || (f = l(), b.push(f)), f
}, l = function() {
var a = "rp_fl_iframe_" + parseInt(1e8 * Math.random(), 10),
b = d.createInvisibleIframe(a),
c = document.getElementsByTagName("head")[0];
c.insertBefore(b, c.firstChild);
var e = '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><base target="_top" /><script>inDapIF=true;</script></head><body></body></html>',
f = b.contentWindow.document;
return f.open(), f.write(e), f.close(), b
}, m = function() {
for (var a = 0; a < arguments.length; a++) h.jsonpArgs.push(arguments[a]);
var b = arguments.length > 0 ? arguments[0] : "";
p(200, "success", b)
}, n = function() {
var a = f.contentWindow.document;
c = a.createElement("script");
var d = a.getElementsByTagName("script")[0];
c.async = 1, c.src = b, d.parentNode.insertBefore(c, d)
}, o = function() {
p(0, "jsonp timeout")
}, p = function(a, e, f) {
4 !== h.readyState && (200 === a ? d.info("jsonp request finished successfully:", b, "arguments: ", h.jsonpArgs) : d.warn(e, ": closing jsonp request:", b), h.readyState = 4, h.status = a, h.statusText = e || "", h.responseText = f || "", clearTimeout(g), q(), c && c.parentNode && c.parentNode.removeChild(c), "function" == typeof h.onreadystatechange && h.onreadystatechange())
}
};
b.exports = f
}, {
17: 17,
18: 18
}],
12: [function(a, b, c) {
"use strict";
var d = a(15),
e = a(17),
f = function(a) {
var b, c = this,
f = new d,
g = new d,
h = new d,
i = new d,
j = !1,
k = !1,
l = [],
m = null,
n = null;
c.setTimeout = function(a) {
b = setTimeout(function() {
e.warn("RequestManager:", "timeout (after " + a + "ms)"), c.abort()
}, a)
}, a && c.setTimeout(a), c.addRequest = function(a) {
return f.contains(a) || g.contains(a) ? !0 : j ? !1 : f.add(a) ? (a.always(function(b) {
m(a, b)
}), k && a.abort(), !0) : !1
}, m = function(a, b) {
return f.remove(a) && g.add(a) ? (200 === b.status ? h.add(a) : i.add(a), n(), !0) : !1
}, c.allRequestsAdded = function() {
j = !0, n()
}, c.allRequestsFinished = function() {
return j && !c.haveOpenRequests() ? !0 : !1
}, c.haveOpenRequests = function() {
return !f.isEmpty()
}, c.finished = function(a) {
return "function" == typeof a ? (l.push(a), !0) : !1
};
var o = function() {
for (; l.length;) l.shift()();
l = {
length: 0,
push: function(a) {
a()
}
}
};
n = function() {
c.allRequestsFinished() && (clearTimeout(b), o())
}, c.abort = function() {
e.warn("RequestManager:", "aborting " + f.length() + " open request(s)");
for (var a = f.toArray(), b = 0; b < a.length; b++) a[b].abort();
k = !0, o()
}, c.getOpenRequests = function() {
return f.toArray()
}, c.getClosedRequests = function() {
return g.toArray()
}, c.totalRequests = function() {
return f.length() + g.length()
}, c.getSuccessfulRequests = function() {
return h.toArray()
}, c.getFailedRequests = function() {
return i.toArray()
}
};
b.exports = f
}, {
15: 15,
17: 17
}],
13: [function(a, b, c) {
"use strict";
var d = a(10),
e = a(5),
f = function() {
var a = this;
a.loadConfiguration = function() {
return d.loadConfiguration.apply(a, arguments), a
}, a.init = function() {
return d.init.apply(a, arguments), a
}, a.run = function() {
return d.run.apply(a, arguments), a
}, a.cmd = e, a.getSlot = function() {
var b = d.getSlot.apply(a, arguments);
return b === !1 ? null : b.getPublicVersion()
}, a.defineSlot = function() {
return d.defineSlot.apply(a, arguments).getPublicVersion()
}, a.getAllSlots = function() {
for (var b = d.getAllSlots.apply(a, arguments), c = [], e = 0; e < b.length; e++) c.push(b[e].getPublicVersion());
return c
}, a.setFPI = function() {
return d.setFPI.apply(a, arguments), a
}, a.addFPI = function() {
return d.addFPI.apply(a, arguments), a
}, a.setFPV = function() {
return d.setFPV.apply(a, arguments), a
}, a.addFPV = function() {
return d.addFPV.apply(a, arguments), a
}, a.addKW = function() {
return d.addKW.apply(a, arguments), a
}, a.addContext = function() {
return d.addContext.apply(a, arguments), a
}, a.renderCreative = function() {
d.renderCreative.apply(a, arguments)
}, a.setTargetingForGPTSlot = function() {
d.setTargetingForGPTSlot.apply(a, arguments)
}
};
b.exports = f
}, {
10: 10,
5: 5
}],
14: [function(a, b, c) {
"use strict";
var d = (a(4), function() {
var a = this,
b = [],
c = 0,
d = function() {},
e = null,
f = !1,
g = {},
h = null,
i = null;
a.execute = function(a, j, k) {
b = a, g = k, c = 0, f = !1, d = j, e = setTimeout(function() {
i()
}, g.nTimeout);
for (var l = 0; l < g.aSlots.length; l++) g.aSlots[l].configure();
for (var m = 0; m < b.length; m++) b[m].run(h, g)
}, h = function(a) {
c++, c >= b.length && i()
}, i = function() {
f || (f = !0, clearTimeout(e), d(g))
}
});
d.run = function(a, b, c) {
var e = new d;
return e.execute(a, b, c), e
}, b.exports = d
}, {
4: 4
}],
15: [function(a, b, c) {
"use strict";
var d = function() {
var a = this,
b = [];
a.add = function(c) {
return a.contains(c) ? !1 : (b.push(c), !0)
}, a.remove = function(a) {
for (var c = 0; c < b.length; c++)
if (b[c] === a) return b.splice(c, 1), !0;
return !1
}, a.removeByIndex = function(a) {
return a < b.length && a >= 0 ? (b.splice(a, 1), !0) : !1
}, a.contains = function(a) {
for (var c = 0; c < b.length; c++)
if (b[c] === a) return !0;
return !1
}, a.isEmpty = function() {
return 0 === b.length
}, a.length = function() {
return b.length
}, a.get = function(a) {
return b[a]
}, a.toArray = function() {
return b.slice(0)
}
};
b.exports = d
}, {}],
16: [function(a, b, c) {
"use strict";
var d = a(18),
e = a(7),
f = a(15),
g = a(17),
h = a(8),
i = a(6),
j = function(a) {
var b = this,
c = a;
b.setFPI = function() {
return c.setFPI.apply(b, arguments), b
}, b.addFPI = function() {
return c.addFPI.apply(b, arguments), b
}, b.setFPV = function() {
return c.setFPV.apply(b, arguments), b
}, b.addFPV = function() {
return c.addFPV.apply(b, arguments), b
}, b.addKW = function() {
return c.addKW.apply(b, arguments), b
}, b.setPosition = function() {
return c.setPosition.apply(b, arguments), b
}, b.getElementId = c.getElementId, b.getSlotName = c.getSlotName, b.getAdServerTargeting = c.getAdServerTargeting, b.getAdServerTargetingByKey = c.getAdServerTargetingByKey, b.getRawResponses = c.getRawResponses, b.getRawResponseBySize = c.getRawResponseBySize, b.isConfigured = c.isConfigured
},
k = function(b, c, k) {
var l = this,
m = null,
n = null,
o = !1,
p = null,
q = {
nUrlPattern: 10,
nDeviceType: 50,
nContextKeyword: 100,
nPosition: 500,
nSlotIdPattern: 1e3,
nSlotIdExact: 2e3,
nElementIdPattern: 1e4,
nElementIdExact: 2e4
},
r = new e,
s = a(10),
t = {},
u = {},
v = {
sElementId: null,
sSlotName: null,
sPos: "btf",
oAccountConfigs: {},
aBaseDimensions: [],
aBaseRubiconSizeIds: []
};
l.init = function(a, b, c) {
v.sSlotName = a, v.sElementId = c;
var d = g.cleanseDimensionsList(b);
b != d && [b] != d && h.factory("SLOT_BAD_DIMENSIONS", {
sGivenDimensions: b.toString(),
sParsedDimensions: d.toString()
}), v.aBaseDimensions = d, v.aBaseRubiconSizeIds = [];
for (var e = 0; e < d.length; e++) {
var f = g.convertDimensionsToSizeId(d[e]);
f === !1 || g.inArray(f, v.aBaseRubiconSizeIds) ? h.factory("SLOT_SIZE_NOT_MAPPED", {
sDimensions: d[e].toString(),
sSlotName: l.getSlotName()
}) : v.aBaseRubiconSizeIds.push(f)
}
}, l.isConfigured = function() {
return o
}, l.setFPI = function(a, b) {
return r.setFPI(a, b), l
}, l.addFPI = function(a, b) {
return r.addFPI(a, b), l
}, l.getFPI = function(a) {
return arguments.length < 1 && (a = !0), p("getFPI", a)
}, l.setFPV = function(a, b) {
return r.setFPV(a, b), l
}, l.addFPV = function(a, b) {
return r.addFPV(a, b), l
}, l.getFPV = function(a) {
return arguments.length < 1 && (a = !0), p("getFPV", a)
}, p = function(a, b) {
if ("getFPV" !== a && "getFPI" !== a) return g.error("Passing in undefined first party data accessor: " + a), [];
var c = [];
if (b) {
var d = g.convertKeyValuePairArrayToObject(s[a]()),
e = g.convertKeyValuePairArrayToObject(r[a]());
for (var f in e) e.hasOwnProperty(f) && (d.hasOwnProperty(f) ? d[f] = d[f].concat(e[f]) : d[f] = e[f]);
c = g.convertKeyValuePairObjectToArray(d)
} else c = r[a]();
return c
}, l.addKW = function(a) {
return r.addKW(a), l
}, l.getKWs = function(a) {
arguments.length < 1 && (a = !0);
var b, c = new f,
d = r.getKWs(),
e = a ? s.getKWs() : [];
for (b = 0; b < d.length; b++) c.add(d[b]);
for (b = 0; b < e.length; b++) c.add(e[b]);
return c.toArray()
}, l.setPosition = function(a) {
return ("atf" === a || "btf" === a) && (v.sPos = a), l
}, l.getPosition = function() {
return v.sPos
}, l.getElementId = function() {
return v.sElementId
}, l.getSlotName = function() {
return v.sSlotName
}, l.getSiteId = function(a) {
return v.oAccountConfigs.hasOwnProperty(a) ? v.oAccountConfigs[a].nSiteId : null
}, l.getZoneId = function(a) {
return v.oAccountConfigs.hasOwnProperty(a) ? v.oAccountConfigs[a].nZoneId : null
}, l.getRubiconSizeIds = function(a) {
return v.oAccountConfigs.hasOwnProperty(a) ? v.oAccountConfigs[a].aRubiconSizeIds : []
}, l.storeCreative = function(a, b, c, d) {
t.hasOwnProperty(a) || (t[a] = {});
var e = g.getNow() + i.getConfigValue(0, "configuration.creativeTTL", 18e4);
t[a][b] = {
oResponse: c,
nExpires: e,
sTier: d
}
}, l.removeCreative = function(a, b) {
t.hasOwnProperty(a) && delete t[a][b]
}, l.purgeCreative = function(a, b) {
l.removeCreative(a, b), l.removeAdServerTargetingForSize("rpfl_" + a, b);
var c = n || l.findMatchingGPTSlot();
c && l.setTargetingForGPTSlot(c)
}, l.findMatchingGPTSlot = function() {
var a = !1;
if (d.googletag && d.googletag.apiReady)
for (var b = d.googletag.pubads().getSlots(), c = 0; c < b.length; c++)
if (b[c].getSlotElementId() === l.getElementId()) {
a = b[c];
break
}
return a
}, l.getCreative = function(a, b) {
return t.hasOwnProperty(a) && t[a].hasOwnProperty(b) ? t[a][b] : null
}, l.addAdServerTargeting = function(a, b) {
u.hasOwnProperty(a) ? u[a].add(b) : (u[a] = new f, u[a].add(b))
}, l.removeAdServerTargetingByKey = function(a) {
delete u[a]
}, l.removeAdServerTargetingForSize = function(a, b) {
var c = new RegExp("^" + b + "_");
if (u[a])
for (var d = u[a].length(); d >= 0; d--)
if (c.test(u[a].get(d))) {
u[a].removeByIndex(d);
break
}
}, l.getAdServerTargeting = function() {
var a = [];
for (var b in u) u.hasOwnProperty(b) && a.push({
key: b,
values: u[b].toArray()
});
return a
}, l.getAdServerTargetingByKey = function(a) {
return u.hasOwnProperty(a) ? u[a].toArray() : []
}, l.configure = function() {
if (!o) {
for (var a = i.getConfigs(), b = 0; b < a.length; b++) {
var c = l.findBestMatchForConfig(b);
c !== !1 ? l.loadSlotConfiguration(i.getConfigValue(b, "accountId"), c) : (h.factory("SLOT_USING_CATCH_ALL", {
sSlotName: l.getSlotName(),
sElementId: l.getElementId()
}), l.loadSlotConfiguration(i.getConfigValue(b, "accountId"), i.getConfigValue(b, "catchAll")))
}
return l
}
}, l.findBestMatchForConfig = function(a) {
for (var b = i.getConfigValue(a, "slots", []), c = s.getContexts(), d = {
nPoints: 0,
oConfig: !1
}, e = 0; e < b.length; e++) {
var f = b[e];
h.factory("SLOT_SPECIFICITY_START", {
sSlotName: l.getSlotName(),
sElementId: l.getElementId(),
sContexts: c.toString() || "(none)"
});
var g = l.calculateSlotConfigurationPoints(f, c);
h.factory("SLOT_SPECIFICITY_END", {
sSlotName: l.getSlotName(),
sElementId: l.getElementId(),
sContexts: c.toString() || "(none)",
nPoints: g
}), g > d.nPoints && (d.nPoints = g, d.oConfig = f)
}
return d.oConfig
}, l.calculateSlotConfigurationPoints = function(a, b) {
var c = null,
d = 0;
if (a.slotId)
if (c = new RegExp(a.slotId), a.slotId === l.getSlotName()) d += q.nSlotIdExact, h.factory("SLOT_SPECIFICITY_SLOTNAME_EXACT", {
sSlotName: l.getSlotName(),
sSlotNamePattern: a.slotId,
nPoints: d
});
else {
if (!c.test(l.getSlotName())) return h.factory("SLOT_SPECIFICITY_SLOTNAME_FAILED", {
sSlotName: l.getSlotName(),
sSlotNamePattern: a.slotId
}), 0;
d += q.nSlotIdPattern, h.factory("SLOT_SPECIFICITY_SLOTNAME_PATTERN", {
sSlotName: l.getSlotName(),
sSlotNamePattern: a.slotId,
nPoints: d
})
}
if (a.elementIdPattern)
if (c = new RegExp(a.elementIdPattern), a.elementIdPattern === l.getElementId()) d += q.nElementIdExact, h.factory("SLOT_SPECIFICITY_ELEMENT_EXACT", {
sElementId: l.getElementId(),
sElementIdPattern: a.elementIdPattern,
nPoints: d
});
else {
if (!c.test(l.getElementId())) return h.factory("SLOT_SPECIFICITY_ELEMENT_FAILED", {
sElementId: l.getElementId(),
sElementIdPattern: a.elementIdPattern
}), 0;
d += q.nElementIdPattern, h.factory("SLOT_SPECIFICITY_ELEMENT_PATTERN", {
sElementId: l.getElementId(),
sElementIdPattern: a.elementIdPattern,
nPoints: d
})
}
if (a.position) {
if (a.position !== l.getPosition()) return h.factory("SLOT_SPECIFICITY_POSITION_FAILED", {
sPosition: a.position,
sSlotPosition: l.getPosition()
}), 0;
d += q.nPosition, h.factory("SLOT_SPECIFICITY_POSITION", {
sPosition: a.position,
nPoints: d
})
}
var e = g.getDeviceType();
if (a.deviceType) {
if (!g.inArray(e, a.deviceType)) return h.factory("SLOT_SPECIFICITY_DEVICE_TYPE_FAILED", {
sDeviceType: e,
sDeviceTypes: a.deviceType.join(",")
}), 0;
d += q.nDeviceType, h.factory("SLOT_SPECIFICITY_DEVICE_TYPE", {
sDeviceType: e,
sDeviceTypes: a.deviceType.join(","),
nPoints: d
})
}
var f = g.getFullPageUrl();
if (a.urlPattern) {
if (c = new RegExp(a.urlPattern), !c.test(f)) return h.factory("SLOT_SPECIFICITY_URL_FAILED", {
sUrl: f,
sUrlPattern: a.urlPattern
}), 0;
d += q.nUrlPattern, h.factory("SLOT_SPECIFICITY_URL_PATTERN", {
sUrl: f,
sUrlPattern: a.urlPattern,
nPoints: d
})
}
if (a.contextKeywords) {
var i = g.getArrayIntersection(a.contextKeywords, b);
if (!i.length) return h.factory("SLOT_SPECIFICITY_CONTEXT_FAILED", {
sConfiguredContexts: a.contextKeywords ? a.contextKeywords.toString() : "(none)",
sPageContexts: b.toString() || "(none)"
}), 0;
d += i.length * q.nContextKeyword, h.factory("SLOT_SPECIFICITY_CONTEXT", {
sConfiguredContexts: a.contextKeywords ? a.contextKeywords.toString() : "(none)",
sPageContexts: b.toString() || "(none)",
nMatches: i.length,
nPoints: d
})
}
return d
}, l.loadSlotConfiguration = function(a, b) {
o = !0;
var c = {
siteId: "nSiteId",
zoneId: "nZoneId",
sizes: "aRubiconSizeIds"
};
v.oAccountConfigs[a] = {
nSiteId: null,
nZoneId: null,
aRubiconSizeIds: v.aBaseRubiconSizeIds.slice()
};
for (var d in b) b.hasOwnProperty(d) && v.oAccountConfigs[a].hasOwnProperty(c[d]) && (v.oAccountConfigs[a][c[d]] = b[d])
}, l.setTargetingForGPTSlot = function(a) {
n = a;
for (var b = l.getAdServerTargeting(), c = 0; c < b.length; c++)
if (n.setTargeting(b[c].key, b[c].values), b[c].key.match(/^rpfl_[0-9]+$/))
for (var d = b[c].key.replace(/^rpfl_/, ""), e = 0; e < b[c].values.length; e++) {
var f = b[c].values[e].match(/^([0-9]+)_(.*)$/);
h.factory("SLOT_GPT_TARGETING_SET", {
nAccountId: d,
nSiteId: l.getSiteId(d),
nZoneId: l.getZoneId(d),
nSizeId: f[1],
sTier: f[2],
sValue: b[c].values[e],
sKey: b[c].key
})
}
return !0
}, l.getRawResponses = function(a) {
var b = [];
if (!i.getConfigValue(0, "configuration.exposeRawResponses", !1)) return b;
a = a || i.getConfigValue(0, "accountId");
for (var c in t[a]) t[a].hasOwnProperty(c) && b.push(l.getRawResponseBySizeId(c));
return b
}, l.getRawResponseBySize = function(a, b) {
var c = g.convertDimensionsToSizeId(a);
return l.getRawResponseBySizeId(c)
}, l.getRawResponseBySizeId = function(a, b) {
var c = {};
if (!i.getConfigValue(0, "configuration.exposeRawResponses", !1)) return c;
if (b = b || i.getConfigValue(0, "accountId"), t.hasOwnProperty(b) && t[b].hasOwnProperty(a) && t[b][a].hasOwnProperty("oResponse")) {
var d = t[b][a].oResponse;
c.advertiser = d.advertiser, c.cpm = d.cpm, c.dimensions = g.convertSizeIdToDimensions(a), d.hasOwnProperty("deal") && (c.deal = d.deal)
}
return c
}, l.getPublicVersion = function() {
return null === m && (m = new j(l)), m
}, l.init(b, c, k)
};
b.exports = k
}, {
10: 10,
15: 15,
17: 17,
18: 18,
6: 6,
7: 7,
8: 8
}],
17: [function(a, b, c) {
"use strict";
var d = a(18),
e = a(6),
f = function() {
var a, b, c = this,
f = [],
g = null,
h = null,
i = null,
j = null;
c.oSizeMap = {
"728x90": 2,
"160x600": 9,
"300x600": 10,
"300x250": 15,
"320x50": 43,
"300x1050": 54,
"970x250": 57
}, c.DEVICE_DESKTOP = "desktop", c.DEVICE_TABLET = "tablet", c.DEVICE_PHONE = "phone", c.init = function(d) {
a = b = g(d), c.hookUserDistractionEvents(), h(d)
}, g = function(a) {
var b = "http:";
try {
a.location.protocol.match(/^http/) && (b = a.location.protocol)
} catch (c) {}
return b + "//"
}, c.getProtocol = function() {
return b
}, c.setProtocol = function(a) {
a && a.match(/^http(s)?:\/\/$/) && (b = a)
}, c.getFullPageUrl = function() {
return d.location.toString()
}, c.getScreenResolution = function() {
return d.screen.width + "x" + d.screen.height
}, c.debug = function() {}, c.info = function() {}, c.warn = function() {}, c.error = function() {}, h = function(a) {
i(a);
var b = parseInt(c.getUrlCookieParam("rp_loglevel"));
isNaN(b) && !e.hasConfig() && e.onLoad(function() {
h(a)
}), j(b)
}, i = function(a) {
if (a.console)
for (var b = {
debug: "log",
info: "info",
warn: "warn",
error: "error"
}, d = ["debug", "info", "warn", "error"], e = 0; e < d.length; e++) {
var f = d[e],
g = b[f];
if (a.console[g]) try {
c[f] = Function.prototype.bind.call(a.console[g], a.console, "RP:")
} catch (h) {} else e > 0 && (c[f] = c[d[e - 1]])
}
}, j = function(a) {
var b = 0,
d = 1,
f = 2,
g = 3,
h = 4;
a = isNaN(a) ? e.getConfigValue(0, "configuration.logLevel", b) : a, h > a && (c.debug = function() {}), g > a && (c.info = function() {}), f > a && (c.warn = function() {}), d > a && (c.error = function() {})
}, c.getUrlCookieParam = function(a) {
if (a) {
var b = c.getQueryStringParam(a);
b = null === b ? c.getHashParam(a) : b;
var d = "rp_param_" + a;
return b ? c.setCookie(d, b, {
path: "/"
}) : null === b ? b = c.getCookie(d) : c.setCookie(d, "", {
path: "/",
exp: -1e4
}), b || null
}
}, c.getCookie = function(a) {
if (!a) return null;
var b = new RegExp("\\b" + a + "=([^;]*)"),
c = b.exec(d.document.cookie || "");
return c && c.length > 1 ? c[1] : null
}, c.setCookie = function(a, b, c) {
if (a) {
var e = [a + "=" + b];
if (c = c || {}, c.domain && e.push("domain=" + c.domain), c.exp || 0 === c.exp) {
var f = new Date((new Date).getTime() + c.exp);
e.push("expires=" + f.toUTCString())
}
var g = c.path || "/";
e.push("path=" + g), d.document.cookie = e.join(";")
}
}, c.getQueryStringParam = function(a) {
if (!a) return null;
var b = new RegExp("[?&]" + a + "((=([^&]*))|(&|$))"),
c = b.exec(d.location.search || "");
return !c || c.length < 5 ? null : c[3] || ""
}, c.queryStringParamExists = function(a) {
if (!a) return !1;
var b = new RegExp("[?&]" + a + "([=&]|$)");
return b.test(d.location.search || "")
}, c.getHashParam = function(a) {
if (!a) return null;
var b = new RegExp("[#&]" + a + "((=([^&]*))|(&|$))"),
c = b.exec(d.location.hash || "");
return !c || c.length < 5 ? null : c[3] || ""
}, c.hashParamExists = function(a) {
if (!a) return !1;
var b = new RegExp("[#&]" + a + "([=&]|$)");
return b.test(d.location.hash || "")
}, c.mergeObjects = function(a, b, c) {
var d, e = {};
if (c)
for (var f = 0; 2 > f; f++)
for (d in arguments[f]) arguments[f].hasOwnProperty(d) && (e[d] = arguments[f][d]);
else
for (d in a) a.hasOwnProperty(d) && (e[d] = b.hasOwnProperty(d) ? b[d] : a[d]);
return e
}, c.isInteger = function(a) {
return /string|number/.test(typeof a) && /^[0-9]+$/.test(a.toString())
}, c.isSingleSlotSize = function(a) {
return c.isArray(a) && 2 === a.length && c.isInteger(a[0]) && c.isInteger(a[1])
}, c.isArray = function(a) {
return (a || !1) && c.isObject(a) && a.hasOwnProperty("length") && "number" == typeof a.length && a.length > -1 && "[object Array]" === Object.prototype.toString.call(a)
}, c.inArray = function(a, b) {
if (!c.isArray(b)) return !1;
for (var d = 0; d < b.length; d++)
if (b[d] == a) return !0;
return !1
}, c.getArrayIntersection = function(a, b) {
var d = [];
if (!c.isArray(a) || !c.isArray(b)) return d;
for (var e = 0; e < a.length; e++) c.inArray(a[e], b) && d.push(a[e]);
return d
}, c.isObject = function(a) {
return "object" == typeof a
}, c.isFunction = function(a) {
return (a || !1) && "[object Function]" === Object.prototype.toString.call(a)
}, c.generateComplexQueryStringObject = function(a, b) {
for (var c = {}, d = null, e = 0; e < a.length; e++) d = b + "." + a[e].key, c[d] = a[e].value.join(",");
return c
}, c.convertObjectToQueryString = function(a) {
var b = [];
for (var c in a) a.hasOwnProperty(c) && b.push(encodeURIComponent(c) + "=" + encodeURIComponent(a[c]));
return b.join("&")
}, c.convertKeyValuePairArrayToObject = function(a) {
for (var b = {}, c = 0; c < a.length; c++) b[a[c].key] = a[c].value;
return b
}, c.convertKeyValuePairObjectToArray = function(a) {
var b = [];
for (var c in a) a.hasOwnProperty(c) && b.push({
key: c,
value: a[c]
});
return b
}, c.formatString = function(a, b, c) {
var d = a;
c = c || !1;
for (var e in b) b.hasOwnProperty(e) && (d = d.replace(new RegExp("{" + e + "}", "g"), c ? encodeURIComponent(b[e]) : b[e]));
return d
}, c.convertDimensionsToSizeId = function(a) {
if (!c.isSingleSlotSize(a)) return !1;
var b = a[0] + "x" + a[1];
return c.oSizeMap.hasOwnProperty(b) ? c.oSizeMap[b] : !1
}, c.convertSizeIdToDimensions = function(a) {
for (var b in c.oSizeMap)
if (c.oSizeMap.hasOwnProperty(b) && parseInt(c.oSizeMap[b], 10) === parseInt(a, 10)) {
var d = b.split("x");
return d[0] = parseInt(d[0], 10), d[1] = parseInt(d[1], 10), d
}
return !1
}, c.cleanseDimensionsList = function(a) {
var b = [];
if (c.isArray(a) && 0 !== a.length)
if (c.isSingleSlotSize(a)) b = [a];
else
for (var d = 0; d < a.length; d++) c.isSingleSlotSize(a[d]) && b.push(a[d]);
else;
return b
}, c.addUserDistractionEventListener = function(a) {
f.push(a)
}, c.hookUserDistractionEvents = function() {
var a = function(a) {
c.userDistractionEventOccurred(a)
};
d.addEventListener ? (d.addEventListener("unload", a, !1), d.addEventListener("blur", a, !1)) : d.attachEvent && (d.attachEvent("onunload", a), d.attachEvent("onblur", a))
}, c.userDistractionEventOccurred = function(a) {
for (var b = 0; b < f.length; b++) f[b](a)
}, c.getNow = function() {
return (new Date).getTime()
}, c.browserSupportsXHR = function() {
var a = c.isIE();
return a && 10 > a ? !1 : !0
}, c.isIE = function() {
var a = d.navigator.userAgent.toLowerCase();
return -1 !== a.indexOf("msie") ? parseInt(a.split("msie")[1]) : !1
}, c.getDeviceType = function() {
var a = d.screen.height || 1025,
b = d.screen.width || 1025,
e = Math.max(a, b),
f = c.DEVICE_DESKTOP;
return 640 >= e ? f = c.DEVICE_PHONE : 1024 >= e && (f = c.DEVICE_TABLET), f
}, c.createInvisibleIframe = function(a) {
var b = document.createElement("iframe");
return b.id = a, b.height = 0, b.width = 0, b.border = "0px", b.hspace = "0", b.vspace = "0", b.marginWidth = "0", b.marginHeight = "0", b.style.border = "0", b.scrolling = "no", b.frameBorder = "0", c.isIE() && c.isIE() < 10 ? b.src = 'javascript:(function(){document.open();document.domain="' + document.domain + '";document.close();})()' : b.src = "about:self", b.style.display = "none", b
}
},
g = new f;
g.init(d), b.exports = g
}, {
18: 18,
6: 6
}],
18: [function(a, b, c) {
"use strict";
b.exports = "undefined" != typeof window ? window : void 0
}, {}],
19: [function(a, b, c) {
"use strict";
b.exports = "undefined" != typeof XMLHttpRequest ? XMLHttpRequest : void 0
}, {}]
}, {}, [2]);
window.rubicontag.loadConfiguration({
"accountId": 7450,
"services": ["fastlane"],
"configuration": {
"analyticsLevel": 4,
"logLevel": 1,
"timeout": 400,
"exposeRawResponses": 1
},
"fastlane": {
"pageSampling": 1
},
"catchAll": {
"siteId": 41686,
"zoneId": 367714
},
"slots": [{
"elementIdPattern": "^.{0,5}TOP",
"siteId": 41686,
"zoneId": 175094
}, {
"slotId": "^((?!MOBILE|TOP).)*$",
"siteId": 41686,
"zoneId": 194452
}, {
"slotId": "MOBILE",
"siteId": 23565,
"zoneId": 87671
}],
"tiers": [{
"deals": true,
"floor": 0.01,
"ceiling": 0.04,
"mapping": "tier0001deals"
}, {
"deals": true,
"floor": 0.05,
"ceiling": 0.09,
"mapping": "tier0005deals"
}, {
"deals": true,
"floor": 0.1,
"ceiling": 0.14,
"mapping": "tier0010deals"
}, {
"deals": true,
"floor": 0.15,
"ceiling": 0.19,
"mapping": "tier0015deals"
}, {
"deals": true,
"floor": 0.2,
"ceiling": 0.24,
"mapping": "tier0020deals"
}, {
"deals": true,
"floor": 0.25,
"ceiling": 0.29,
"mapping": "tier0025deals"
}, {
"deals": true,
"floor": 0.3,
"ceiling": 0.34,
"mapping": "tier0030deals"
}, {
"deals": true,
"floor": 0.35,
"ceiling": 0.39,
"mapping": "tier0035deals"
}, {
"deals": true,
"floor": 0.4,
"ceiling": 0.44,
"mapping": "tier0040deals"
}, {
"deals": true,
"floor": 0.45,
"ceiling": 0.49,
"mapping": "tier0045deals"
}, {
"deals": true,
"floor": 0.5,
"ceiling": 0.54,
"mapping": "tier0050deals"
}, {
"deals": true,
"floor": 0.55,
"ceiling": 0.59,
"mapping": "tier0055deals"
}, {
"deals": true,
"floor": 0.6,
"ceiling": 0.64,
"mapping": "tier0060deals"
}, {
"deals": true,
"floor": 0.65,
"ceiling": 0.69,
"mapping": "tier0065deals"
}, {
"deals": true,
"floor": 0.7,
"ceiling": 0.74,
"mapping": "tier0070deals"
}, {
"deals": true,
"floor": 0.75,
"ceiling": 0.79,
"mapping": "tier0075deals"
}, {
"deals": true,
"floor": 0.8,
"ceiling": 0.84,
"mapping": "tier0080deals"
}, {
"deals": true,
"floor": 0.85,
"ceiling": 0.89,
"mapping": "tier0085deals"
}, {
"deals": true,
"floor": 0.9,
"ceiling": 0.94,
"mapping": "tier0090deals"
}, {
"deals": true,
"floor": 0.95,
"ceiling": 0.99,
"mapping": "tier0095deals"
}, {
"deals": true,
"floor": 1,
"ceiling": 1.09,
"mapping": "tier0100deals"
}, {
"deals": true,
"floor": 1.1,
"ceiling": 1.19,
"mapping": "tier0110deals"
}, {
"deals": true,
"floor": 1.2,
"ceiling": 1.29,
"mapping": "tier0120deals"
}, {
"deals": true,
"floor": 1.3,
"ceiling": 1.39,
"mapping": "tier0130deals"
}, {
"deals": true,
"floor": 1.4,
"ceiling": 1.49,
"mapping": "tier0140deals"
}, {
"deals": true,
"floor": 1.5,
"ceiling": 1.59,
"mapping": "tier0150deals"
}, {
"deals": true,
"floor": 1.6,
"ceiling": 1.69,
"mapping": "tier0160deals"
}, {
"deals": true,
"floor": 1.7,
"ceiling": 1.79,
"mapping": "tier0170deals"
}, {
"deals": true,
"floor": 1.8,
"ceiling": 1.89,
"mapping": "tier0180deals"
}, {
"deals": true,
"floor": 1.9,
"ceiling": 1.99,
"mapping": "tier0190deals"
}, {
"deals": true,
"floor": 2,
"ceiling": 2.09,
"mapping": "tier0200deals"
}, {
"deals": true,
"floor": 2.1,
"ceiling": 2.19,
"mapping": "tier0210deals"
}, {
"deals": true,
"floor": 2.2,
"ceiling": 2.29,
"mapping": "tier0220deals"
}, {
"deals": true,
"floor": 2.3,
"ceiling": 2.39,
"mapping": "tier0230deals"
}, {
"deals": true,
"floor": 2.4,
"ceiling": 2.49,
"mapping": "tier0240deals"
}, {
"deals": true,
"floor": 2.5,
"ceiling": 2.59,
"mapping": "tier0250deals"
}, {
"deals": true,
"floor": 2.6,
"ceiling": 2.69,
"mapping": "tier0260deals"
}, {
"deals": true,
"floor": 2.7,
"ceiling": 2.79,
"mapping": "tier0270deals"
}, {
"deals": true,
"floor": 2.8,
"ceiling": 2.89,
"mapping": "tier0280deals"
}, {
"deals": true,
"floor": 2.9,
"ceiling": 2.99,
"mapping": "tier0290deals"
}, {
"deals": true,
"floor": 3,
"ceiling": 3.09,
"mapping": "tier0300deals"
}, {
"deals": true,
"floor": 3.1,
"ceiling": 3.19,
"mapping": "tier0310deals"
}, {
"deals": true,
"floor": 3.2,
"ceiling": 3.29,
"mapping": "tier0320deals"
}, {
"deals": true,
"floor": 3.3,
"ceiling": 3.39,
"mapping": "tier0330deals"
}, {
"deals": true,
"floor": 3.4,
"ceiling": 3.49,
"mapping": "tier0340deals"
}, {
"deals": true,
"floor": 3.5,
"ceiling": 3.59,
"mapping": "tier0350deals"
}, {
"deals": true,
"floor": 3.6,
"ceiling": 3.69,
"mapping": "tier0360deals"
}, {
"deals": true,
"floor": 3.7,
"ceiling": 3.79,
"mapping": "tier0370deals"
}, {
"deals": true,
"floor": 3.8,
"ceiling": 3.89,
"mapping": "tier0380deals"
}, {
"deals": true,
"floor": 3.9,
"ceiling": 3.99,
"mapping": "tier0390deals"
}, {
"deals": true,
"floor": 4,
"ceiling": 4.09,
"mapping": "tier0400deals"
}, {
"deals": true,
"floor": 4.1,
"ceiling": 4.19,
"mapping": "tier0410deals"
}, {
"deals": true,
"floor": 4.2,
"ceiling": 4.29,
"mapping": "tier0420deals"
}, {
"deals": true,
"floor": 4.3,
"ceiling": 4.39,
"mapping": "tier0430deals"
}, {
"deals": true,
"floor": 4.4,
"ceiling": 4.49,
"mapping": "tier0440deals"
}, {
"deals": true,
"floor": 4.5,
"ceiling": 4.59,
"mapping": "tier0450deals"
}, {
"deals": true,
"floor": 4.6,
"ceiling": 4.69,
"mapping": "tier0460deals"
}, {
"deals": true,
"floor": 4.7,
"ceiling": 4.79,
"mapping": "tier0470deals"
}, {
"deals": true,
"floor": 4.8,
"ceiling": 4.89,
"mapping": "tier0480deals"
}, {
"deals": true,
"floor": 4.9,
"ceiling": 4.99,
"mapping": "tier0490deals"
}, {
"deals": true,
"floor": 5,
"ceiling": 5.09,
"mapping": "tier0500deals"
}, {
"deals": true,
"floor": 5,
"ceiling": 5.49,
"mapping": "tier0500deals"
}, {
"deals": true,
"floor": 5.5,
"ceiling": 5.99,
"mapping": "tier0550deals"
}, {
"deals": true,
"floor": 6,
"ceiling": 6.49,
"mapping": "tier0600deals"
}, {
"deals": true,
"floor": 6.5,
"ceiling": 6.99,
"mapping": "tier0650deals"
}, {
"deals": true,
"floor": 7,
"ceiling": 7.49,
"mapping": "tier0700deals"
}, {
"deals": true,
"floor": 7.5,
"ceiling": 7.99,
"mapping": "tier0750deals"
}, {
"deals": true,
"floor": 8,
"ceiling": 8.49,
"mapping": "tier0800deals"
}, {
"deals": true,
"floor": 8.5,
"ceiling": 8.99,
"mapping": "tier0850deals"
}, {
"deals": true,
"floor": 9,
"ceiling": 9.49,
"mapping": "tier0900deals"
}, {
"deals": true,
"floor": 9.5,
"ceiling": 9.99,
"mapping": "tier0950deals"
}, {
"deals": true,
"floor": 10,
"ceiling": 10.49,
"mapping": "tier1000deals"
}, {
"deals": true,
"floor": 10.5,
"ceiling": 10.99,
"mapping": "tier1050deals"
}, {
"deals": true,
"floor": 11,
"ceiling": 11.49,
"mapping": "tier1100deals"
}, {
"deals": true,
"floor": 11.5,
"ceiling": 11.99,
"mapping": "tier1150deals"
}, {
"deals": true,
"floor": 12,
"ceiling": 12.49,
"mapping": "tier1200deals"
}, {
"deals": true,
"floor": 12.5,
"ceiling": 12.99,
"mapping": "tier1250deals"
}, {
"deals": true,
"floor": 13,
"ceiling": 13.49,
"mapping": "tier1300deals"
}, {
"deals": true,
"floor": 13.5,
"ceiling": 13.99,
"mapping": "tier1350deals"
}, {
"deals": true,
"floor": 14,
"ceiling": 14.49,
"mapping": "tier1400deals"
}, {
"deals": true,
"floor": 14.5,
"ceiling": 14.99,
"mapping": "tier1450deals"
}, {
"deals": true,
"floor": 15,
"ceiling": 15.49,
"mapping": "tier1500deals"
}, {
"deals": true,
"floor": 15.5,
"ceiling": 15.99,
"mapping": "tier1550deals"
}, {
"deals": true,
"floor": 16,
"ceiling": 16.49,
"mapping": "tier1600deals"
}, {
"deals": true,
"floor": 16.5,
"ceiling": 16.99,
"mapping": "tier1650deals"
}, {
"deals": true,
"floor": 17,
"ceiling": 17.49,
"mapping": "tier1700deals"
}, {
"deals": true,
"floor": 17.5,
"ceiling": 17.99,
"mapping": "tier1750deals"
}, {
"deals": true,
"floor": 18,
"ceiling": 18.49,
"mapping": "tier1800deals"
}, {
"deals": true,
"floor": 18.5,
"ceiling": 18.99,
"mapping": "tier1850deals"
}, {
"deals": true,
"floor": 19,
"ceiling": 19.49,
"mapping": "tier1900deals"
}, {
"deals": true,
"floor": 19.5,
"ceiling": 19.99,
"mapping": "tier1950deals"
}, {
"deals": true,
"floor": 20,
"ceiling": 9999,
"mapping": "tier2000deals"
}, {
"floor": 0,
"ceiling": 0,
"mapping": "tier0000"
}, {
"floor": 0.01,
"ceiling": 0.04,
"mapping": "tier0001"
}, {
"floor": 0.05,
"ceiling": 0.09,
"mapping": "tier0005"
}, {
"floor": 0.1,
"ceiling": 0.14,
"mapping": "tier0010"
}, {
"floor": 0.15,
"ceiling": 0.19,
"mapping": "tier0015"
}, {
"floor": 0.2,
"ceiling": 0.24,
"mapping": "tier0020"
}, {
"floor": 0.25,
"ceiling": 0.29,
"mapping": "tier0025"
}, {
"floor": 0.3,
"ceiling": 0.34,
"mapping": "tier0030"
}, {
"floor": 0.35,
"ceiling": 0.39,
"mapping": "tier0035"
}, {
"floor": 0.4,
"ceiling": 0.44,
"mapping": "tier0040"
}, {
"floor": 0.45,
"ceiling": 0.49,
"mapping": "tier0045"
}, {
"floor": 0.5,
"ceiling": 0.54,
"mapping": "tier0050"
}, {
"floor": 0.55,
"ceiling": 0.59,
"mapping": "tier0055"
}, {
"floor": 0.6,
"ceiling": 0.64,
"mapping": "tier0060"
}, {
"floor": 0.65,
"ceiling": 0.69,
"mapping": "tier0065"
}, {
"floor": 0.7,
"ceiling": 0.74,
"mapping": "tier0070"
}, {
"floor": 0.75,
"ceiling": 0.79,
"mapping": "tier0075"
}, {
"floor": 0.8,
"ceiling": 0.84,
"mapping": "tier0080"
}, {
"floor": 0.85,
"ceiling": 0.89,
"mapping": "tier0085"
}, {
"floor": 0.9,
"ceiling": 0.94,
"mapping": "tier0090"
}, {
"floor": 0.95,
"ceiling": 0.99,
"mapping": "tier0095"
}, {
"floor": 1,
"ceiling": 1.09,
"mapping": "tier0100"
}, {
"floor": 1.1,
"ceiling": 1.19,
"mapping": "tier0110"
}, {
"floor": 1.2,
"ceiling": 1.29,
"mapping": "tier0120"
}, {
"floor": 1.3,
"ceiling": 1.39,
"mapping": "tier0130"
}, {
"floor": 1.4,
"ceiling": 1.49,
"mapping": "tier0140"
}, {
"floor": 1.5,
"ceiling": 1.59,
"mapping": "tier0150"
}, {
"floor": 1.6,
"ceiling": 1.69,
"mapping": "tier0160"
}, {
"floor": 1.7,
"ceiling": 1.79,
"mapping": "tier0170"
}, {
"floor": 1.8,
"ceiling": 1.89,
"mapping": "tier0180"
}, {
"floor": 1.9,
"ceiling": 1.99,
"mapping": "tier0190"
}, {
"floor": 2,
"ceiling": 2.09,
"mapping": "tier0200"
}, {
"floor": 2.1,
"ceiling": 2.19,
"mapping": "tier0210"
}, {
"floor": 2.2,
"ceiling": 2.29,
"mapping": "tier0220"
}, {
"floor": 2.3,
"ceiling": 2.39,
"mapping": "tier0230"
}, {
"floor": 2.4,
"ceiling": 2.49,
"mapping": "tier0240"
}, {
"floor": 2.5,
"ceiling": 2.59,
"mapping": "tier0250"
}, {
"floor": 2.6,
"ceiling": 2.69,
"mapping": "tier0260"
}, {
"floor": 2.7,
"ceiling": 2.79,
"mapping": "tier0270"
}, {
"floor": 2.8,
"ceiling": 2.89,
"mapping": "tier0280"
}, {
"floor": 2.9,
"ceiling": 2.99,
"mapping": "tier0290"
}, {
"floor": 3,
"ceiling": 3.09,
"mapping": "tier0300"
}, {
"floor": 3.1,
"ceiling": 3.19,
"mapping": "tier0310"
}, {
"floor": 3.2,
"ceiling": 3.29,
"mapping": "tier0320"
}, {
"floor": 3.3,
"ceiling": 3.39,
"mapping": "tier0330"
}, {
"floor": 3.4,
"ceiling": 3.49,
"mapping": "tier0340"
}, {
"floor": 3.5,
"ceiling": 3.59,
"mapping": "tier0350"
}, {
"floor": 3.6,
"ceiling": 3.69,
"mapping": "tier0360"
}, {
"floor": 3.7,
"ceiling": 3.79,
"mapping": "tier0370"
}, {
"floor": 3.8,
"ceiling": 3.89,
"mapping": "tier0380"
}, {
"floor": 3.9,
"ceiling": 3.99,
"mapping": "tier0390"
}, {
"floor": 4,
"ceiling": 4.09,
"mapping": "tier0400"
}, {
"floor": 4.1,
"ceiling": 4.19,
"mapping": "tier0410"
}, {
"floor": 4.2,
"ceiling": 4.29,
"mapping": "tier0420"
}, {
"floor": 4.3,
"ceiling": 4.39,
"mapping": "tier0430"
}, {
"floor": 4.4,
"ceiling": 4.49,
"mapping": "tier0440"
}, {
"floor": 4.5,
"ceiling": 4.59,
"mapping": "tier0450"
}, {
"floor": 4.6,
"ceiling": 4.69,
"mapping": "tier0460"
}, {
"floor": 4.7,
"ceiling": 4.79,
"mapping": "tier0470"
}, {
"floor": 4.8,
"ceiling": 4.89,
"mapping": "tier0480"
}, {
"floor": 4.9,
"ceiling": 4.99,
"mapping": "tier0490"
}, {
"floor": 5,
"ceiling": 5.09,
"mapping": "tier0500"
}, {
"floor": 5,
"ceiling": 5.49,
"mapping": "tier0500"
}, {
"floor": 5.5,
"ceiling": 5.99,
"mapping": "tier0550"
}, {
"floor": 6,
"ceiling": 6.49,
"mapping": "tier0600"
}, {
"floor": 6.5,
"ceiling": 6.99,
"mapping": "tier0650"
}, {
"floor": 7,
"ceiling": 7.49,
"mapping": "tier0700"
}, {
"floor": 7.5,
"ceiling": 7.99,
"mapping": "tier0750"
}, {
"floor": 8,
"ceiling": 8.49,
"mapping": "tier0800"
}, {
"floor": 8.5,
"ceiling": 8.99,
"mapping": "tier0850"
}, {
"floor": 9,
"ceiling": 9.49,
"mapping": "tier0900"
}, {
"floor": 9.5,
"ceiling": 9.99,
"mapping": "tier0950"
}, {
"floor": 10,
"ceiling": 10.49,
"mapping": "tier1000"
}, {
"floor": 10.5,
"ceiling": 10.99,
"mapping": "tier1050"
}, {
"floor": 11,
"ceiling": 11.49,
"mapping": "tier1100"
}, {
"floor": 11.5,
"ceiling": 11.99,
"mapping": "tier1150"
}, {
"floor": 12,
"ceiling": 12.49,
"mapping": "tier1200"
}, {
"floor": 12.5,
"ceiling": 12.99,
"mapping": "tier1250"
}, {
"floor": 13,
"ceiling": 13.49,
"mapping": "tier1300"
}, {
"floor": 13.5,
"ceiling": 13.99,
"mapping": "tier1350"
}, {
"floor": 14,
"ceiling": 14.49,
"mapping": "tier1400"
}, {
"floor": 14.5,
"ceiling": 14.99,
"mapping": "tier1450"
}, {
"floor": 15,
"ceiling": 15.49,
"mapping": "tier1500"
}, {
"floor": 15.5,
"ceiling": 15.99,
"mapping": "tier1550"
}, {
"floor": 16,
"ceiling": 16.49,
"mapping": "tier1600"
}, {
"floor": 16.5,
"ceiling": 16.99,
"mapping": "tier1650"
}, {
"floor": 17,
"ceiling": 17.49,
"mapping": "tier1700"
}, {
"floor": 17.5,
"ceiling": 17.99,
"mapping": "tier1750"
}, {
"floor": 18,
"ceiling": 18.49,
"mapping": "tier1800"
}, {
"floor": 18.5,
"ceiling": 18.99,
"mapping": "tier1850"
}, {
"floor": 19,
"ceiling": 19.49,
"mapping": "tier1900"
}, {
"floor": 19.5,
"ceiling": 19.99,
"mapping": "tier1950"
}, {
"floor": 20,
"ceiling": 9999,
"mapping": "tier2000"
}],
"version": 1
});
window.rubicontag.init();
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment