
Care and Feeding is Slate’s parenting advice column. Have a question for Care and Feeding? Submit it here or post it in the Slate Parenting Facebook group.
Before we get started, I wanted to share a helpful legal clarification to my statement that guardianships in wills still need to be signed off on. There are actually states where this does not apply (Maryland, for example, says that, barring court action or agreement, “The guardian need not be approved by or qualify in any court.”) So, when you’re making a will, spend a little extra time to see what the practices are in your individual state. Thank you to the Maryland lawyer who emailed me!
Dear Care and Feeding,
I have a question about etiquette when receiving unsolicited parenting advice from friends.
My wife and I (34F, 36M) have two little ones, 6 and 3. We share a social bubble with a family of the same age bracket that we have been friends with for years. They have a 10-month-old. We live in a sparsely populated area with minimal COVID-19 risk, but we behave as though we’re in a hot spot just to be safe.
We recently hosted a get-together with them where we played some video games, cooked dinner, went for a walk, and let the kids play in the backyard while we made small talk. Because of the pandemic, we haven’t been able to have a social life at all, so this was also the first time we had hung out with them for the better part of a year, and the first time with their 10-month-old. It was one of the most positive and beneficial (and only) social interactions of our entire summer. We have similar parenting styles, values, and professions. The kids behaved nicely, the conversation flowed smoothly. Textbook summer garden party.
I texted our friends the day after to thank them for their great company and received nothing back. I checked in after a week, and they called me and proceeded to (gently) berate our parenting style and suggested we take anger management courses and seek out therapy to correct and prevent the harm we are doing to ourselves and our children.
I was taken aback—just stunned! I stopped short of saying “mind your business!” Instead, I thanked them for their honesty and said we would go over the events of the evening and try to pick out something that would have stood out as aggressive, abusive, or unsavory and take their notes seriously. They gave no hints as to what they witnessed that they objected to. I am all for self-reflection and improvement. Because we trust and respect our friends, we did just that.
My wife and I have gone over and over the evening (not hard to do—this was a sober gathering), and … we’re still confused! I raised my voice once to correct my 6-year-old from walking into the street so they could hear me over the wind. I corrected my 3-year-old to move off the walking path to maintain physical distance from another group coming the opposite direction. I reminded my 3-year-old that there’s no dessert if her plate isn’t finished. That’s about it.
That seems … like regular parenting to me? No profanity, no name calling, no threats, just … regular. Don’t run into traffic. Make room for others because of the virus. Eat your dinner if you want a cookie. That’s fine, right? Is it possible the other family saw something that we don’t recall? Yes. Am I withholding something and misrepresenting the situation? No.
We talked to our kids about it too. Asked them if their feelings were hurt about anything or if they thought something was wrong. Dead end there too! They had a great time. They want them to come over again soon.
In the meantime, suffering several sleepless nights of fruitless soul-searching, we’re both now in a place of self-doubt, anger, and resentment that their unsolicited advice has triggered. Now my inner dialogue is “Do people hate me? Am I a good parent? Are there a bunch of other folks who think I’m an abusive parent and just not saying anything?” We are struggling to get over the self-righteous audacity of it all. Self-esteem is in the toilet. We’re thinking about removing them from our bubble because every interaction will feel judged. We don’t want to take the nuclear option, but … we’re considering it.
I guess I’m looking for a script on how to address this without ruining the friendship. Or should we just drop our end of the rope and move forward?
—What Did We Do?
Dear WDWD,
I’m going to take this letter at face value and assume you are not, in fact, abusers in need of anger management or parenting classes (bad parents never devote this level of self-reflection about whether they are bad parents, I promise you).
There is no one who believes more strongly that they know everything about children than parents with a first child. They have a 10-month-old, they have never needed to correct or redirect or actually be firm with their baby. Parenting a 3-year-old and a 6-year-old looks very different. I think they’re grossly overreacting.
I would drop the rope. You’ll be overthinking every interaction, every get-together, waiting in terror for a chiding email, etc. This relationship is over, they killed it, let it decompose quietly. If they reach out about getting together, you can say you’re too busy or that you were offended by their nonsensical call and wish to end the relationship.
Now, I would prepare for them to put in a call to CPS. This is extremely aggravating, but still something to do minor prep for: a decently clean house (clutter is fine, food on the floor is not), a fridge with food in it, kids wearing weather-appropriate clothing. If they couldn’t point to a specific incident, CPS may not care in the least, and if you do get a visit, I have confidence you’ll do just fine.
I would lose my mind if I got a call like this, and I’m very sorry.
Dear Care and Feeding,
I love my tiny demon child so much, but I’m sick of nursing. She’s 16-months-old, and everyone from my mom to her pediatrician assured me that she’d naturally wean herself by now, but alas. She wants to nurse ALL THE TIME. We were down to two feeds a day before her molars started coming in, but now that they’re here … she just wants to nurse all the time. Not long sessions except for when we first get home from work/day care, but a sip here, a sip there, a drink and then a nurse maybe every 20 minutes some days!
I give her a milk cup, and she drinks her milk, but she still wants to nurse—sometimes while clutching her cup. When I don’t let her nurse, she’ll scream for 20–30 minutes, lying on the floor, tears and snot streaming, until her voice sounds hoarse and she starts shuddering and hiccuping. I don’t want to torture her, but I just don’t want to nurse anymore. I want to use retinols, eat dairy (she is milk-soy protein intolerant), wear clothing with high necklines, etc. Advice seems to say just cuddle her and give her a cup, but she doesn’t actually like cuddles and again, the cup doesn’t dissuade her from nursing at all.
—The Dairy Wants to Close
Dear TDWtC,
Oh, babe, this sucks. Weaning is hard. You’re going to have to toughen up a little, while also trying to find some hacks to ease the process. She’s too old for a bottle, but I authorize you to cuddle her like she’s nursing and offer her a bottle of somewhat warm milk in the same way she’s used to nursing. Obviously you’ll brush her teeth after, and ideally you’ll transition this to a cup in due course. She already knows how to drink from a cup, of course, but offering a once-a-day (probably before bed) version of nursing over the next little while may help her with the emotional upset.
The other times of the day? You’ll just have to let her have her feelings. This is the phase at which many parents offer a “transitional object,” like a teddy bear, so that your child has a soothing item, which, in turn, eventually assists with self-soothing. Self-soothing has to be learned; it’s difficult, but it’s time.
I’m so sorry that her reaction is so intense and so upsetting to you. Weaning is the right choice for your family, and I promise you’ll emerge on the other side, intact.
• If you missed Sunday’s Care and Feeding column, read it here.
• Discuss this column in the Slate Parenting Facebook group!
Dear Care and Feeding,
My dad is an alcoholic. He is not “himself” when he is drunk, and he says hurtful and incredibly inappropriate things. I’ve struggled with this my entire life: When I’ve tried to confront him, he projects his fury at me and I end up emotionally wiped; when I’ve tried to help him, he refuses and then tries to sabotage me and make it seem like I’m crazy. Essentially, he just doesn’t want to be helped.
I’ve discussed all this with my therapist, and I’ve managed to give myself distance from him in the past few years, but now I have a baby and I’m really not sure what to do. Thankfully all my interactions with my dad are virtual at the moment. He pretends to be “sober and in recovery” (very obviously false), and I don’t want to disagree on the matter with him because it will end up really hurting me. I also feel deeply sorry and sad for him, because I know he has very few joys in life right now (my child being one of them).
Here’s my question: When I pretend not to notice that my dad is drunk and making inappropriate comments to protect my own mental health, am I ultimately hurting my baby? Am I teaching my child that *all this* (including my inaction) is OK?
—Stuck and Sober
Dear SaS,
I don’t think your father should be around your kid. I’m glad you’re in therapy, but I also think you should give a lot of thought (I’m sure you have already) to detaching from your own relationship with your father. It seems to give you an emotional and psychological and time burden, which leaves you so much less energy for your own life and your child. I think you’ve normalized a really bad situation, and having a baby is one of those transitional moments that cause us to question things we’ve just accepted as reality in the past.
I’m very sorry for your father, and his alcoholism, and that he has so few joys in his life, but you can never make choices for your child based on bringing more joy to a third party, especially one who is unreliable, untruthful, often drunk and lying about it.
Good grandparents are a wonderful thing for a child. Bad grandparents can be a real problem. Not having grandparents is fine, in the absence of a good one. I wouldn’t phrase this as a “sobriety for a year or you don’t get to see my kid” sort of thing, because you know he lies about sobriety, but I want you to work on how to detach from him in therapy or, if you’re not ready for that, how to communicate he can’t be with your child.
Again, I’m so sorry.
For more of Slate’s parenting coverage, listen to Mom and Dad Are Fighting
Dear Care and Feeding,
This is a little premature, but when the pandemic is over, we’ll be taking our young son to my husband’s home country for two weeks. It’s common there to give kids coffee with a lot of milk from a very young age, and I’m uncomfortable with it. My husband is not. Is this worth making a fuss about?
—Too Young for Coffee
Dear TYfC,
Not really, no.
—Nicole
More Advice From Slate
My husband and I met very young and had kids right away. It’s now 25 years later and the kids are off to college, our life together is comfortable. We’re still in love, and everything should be perfect. Except it’s not. I have recurring fantasies of just leaving everything behind, moving to the other coast, and starting over all by myself. I dream of finding a small apartment, furnishing it exactly as I want, leaving a mess when I don’t feel like cleaning up, eating whatever and whenever I want, and basically being a single girl in my 20s, minus the dating and insecurities. I have no desire to find another man; I just want to be alone. Is this impulse bizarre and unhealthy? Is it a phase I should just grit my teeth and barrel through? Is it something that will eat away at me until I get off my ass and do it? Can I do it without hurting him too much?
Slate Plus members get more parenting advice every week. They also help support Slate’s journalism.
Join Slate Plus
Join
'));else
if (!0 === d.b.getConfig("enableSendAllBids")) return;
p.native =
title: (t = e.native).products[0].title,
body: t.products[0].description,
sponsoredBy: t.advertiser.description,
icon: t.advertiser.logo,
image: t.products[0].image,
clickUrl: t.products[0].click_url,
privacyLink: t.privacy.optout_click_url,
privacyIcon: t.privacy.optout_image_url,
cta: t.products[0].call_to_action,
price: t.products[0].price,
impressionTrackers: t.impression_pixels.map(function (t)
return t.url;
)
, p.mediaType = h.c;
else e.video ? (p.vastUrl = e.displayurl, p.mediaType = h.d) : p.ad = e.creative;
c.push(p);
}), c;
},
onTimeout: function onTimeout(t)
T() && Criteo.PubTag.Adapters.Prebid.GetAdapter(t.auctionId).handleBidTimeout();
,
onBidWon: function onBidWon(t)
T() && Criteo.PubTag.Adapters.Prebid.GetAdapter(t.auctionId).handleBidWon(t);
,
onSetTargeting: function onSetTargeting(t)
T() && Criteo.PubTag.Adapters.Prebid.GetAdapter(t.auctionId).handleSetTargeting(t);
};
function T()
return "undefined" != typeof Criteo && Criteo.PubTag && Criteo.PubTag.Adapters && Criteo.PubTag.Adapters.Prebid;
function C(t)
function A(t, e)
return Array.isArray(t[0]) ? t.map(function (t)
return e(t);
) : [e(t)];
function S(t)
return t[0] + "x" + t[1];
function I(t)
return void 0 === t[0] && void 0 === t[1] ? "2x2" : t[0] + "x" + t[1];
function R(t)
return void 0 !== f.deepAccess(t, "params.video") && void 0 !== f.deepAccess(t, "mediaTypes.video");
function x()
try
var t,
e,
r,
i,
o,
n = "criteo_fast_bid",
s = "// Hash: ",
a = y.getDataFromLocalStorage(n);
null !== a && (t = a.indexOf("n"), (e = a.substr(0, t).trim()).substr(0, s.length) !== s ? (f.logWarn("No hash found in FastBid"), y.removeDataFromLocalStorage(n)) : (r = e.substr(s.length), i = a.substr(t + 1), Object(p.verify)(i, r, g, b) ? (f.logInfo("Using Criteo FastBid"), (o = document.createElement("script")).type = "text/javascript", o.text = i, f.insertElement(o)) : (f.logWarn("Invalid Criteo FastBid found"), y.removeDataFromLocalStorage(n))));
catch (t)
Object(i.registerBidder)(s);
},
382: function _(t, e, r)
"use strict";
Object.defineProperty(e, "__esModule",
value: !0
);
var a = r(383),
p = r(384);
e.verify = function (t, e, r, i)
var o = new a.BigInteger(a.b64toHex(e)),
n = new a.BigInteger(a.b64toHex(r)),
s = o.modPowInt(i, n);
return a.removeExtraSymbols(s.toHexString()) === p.Sha256.hash(t);
;
,
383: function _(t, e, r) {
"use strict";
var i;
Object.defineProperty(e, "__esModule",
value: !0
);
var o = (g.prototype.toHexString = function ()
if (this.s < 0) return "-" + this.negate().toHexString();
var t,
e = !1,
r = "",
i = this.t,
o = this.DB - i * this.DB % 4;
if (0 < i--) for (o < this.DB && 0 < (t = this[i] >> o) && (e = !0, r = c(t)); 0 <= i;)
o < 4 ? (t = (this[i] & (1 << o) - 1) << 4 - o, t
return e ? r : "0";
, g.prototype.fromHexString = function (t)
if (null !== t)
this.t = 0, this.s = 0;
for (var e = t.length, r = !1, i = 0; 0 <= --e;)
var o = p(t, e);
o < 0 ? "-" == t.charAt(e) && (r = !0) : (r = !1, 0 == i ? this[this.t++] = o : i + 4 > this.DB ? (this[this.t - 1]
this.clamp(), r && g.ZERO.subTo(this, this);
, g.prototype.negate = function ()
var t = T();
return g.ZERO.subTo(this, t), t;
, g.prototype.abs = function ()
return this.s < 0 ? this.negate() : this;
, g.prototype.mod = function (t)
var e = T();
return this.abs().divRemTo(t, null, e), this.s < 0 && 0 < e.compareTo(g.ZERO) && t.subTo(e, e), e;
, g.prototype.copyTo = function (t)
for (var e = this.t - 1; 0 <= e; --e)
t[e] = this[e];
t.t = this.t, t.s = this.s;
, g.prototype.lShiftTo = function (t, e)
for (var r = t % this.DB, i = this.DB - r, o = (1 << i) - 1, n = Math.floor(t / this.DB), s = this.s << r & this.DM, a = this.t - 1; 0 <= a; --a) s, s = (this[a] & o) << r;
for (a = n - 1; 0 <= a; --a)
e[a] = 0;
e[n] = s, e.t = this.t + n + 1, e.s = this.s, e.clamp();
, g.prototype.invDigit = function ()
if (this.t < 1) return 0;
var t = this[0];
if (0 == (1 & t)) return 0;
var e = 3 & t;
return 0 < (e = (e = (e = (e = e * (2 - (15 & t) * e) & 15) * (2 - (255 & t) * e) & 255) * (2 - ((65535 & t) * e & 65535)) & 65535) * (2 - t * e % this.DV) % this.DV) ? this.DV - e : -e;
, g.prototype.dlShiftTo = function (t, e)
for (var r = this.t - 1; 0 <= r; --r)
e[r + t] = this[r];
for (r = t - 1; 0 <= r; --r)
e[r] = 0;
e.t = this.t + t, e.s = this.s;
, g.prototype.squareTo = function (t)
for (var e = this.abs(), r = t.t = 2 * e.t; 0 <= --r;)
t[r] = 0;
for (r = 0; r < e.t - 1; ++r)
var i = e.am(r, e[r], t, 2 * r, 0, 1);
(t[r + e.t] += e.am(r + 1, 2 * e[r], t, 2 * r + 1, i, e.t - r - 1)) >= e.DV && (t[r + e.t] -= e.DV, t[r + e.t + 1] = 1);
0 < t.t && (t[t.t - 1] += e.am(r, e[r], t, 2 * r, 0, 1)), t.s = 0, t.clamp();
, g.prototype.multiplyTo = function (t, e)
var r = this.abs(),
i = t.abs(),
o = r.t;
for (e.t = o + i.t; 0 <= --o;)
e[o] = 0;
for (o = 0; o < i.t; ++o)
e[o + r.t] = r.am(0, i[o], e, o, 0, r.t);
e.s = 0, e.clamp(), this.s != t.s && g.ZERO.subTo(e, e);
, g.prototype.divRemTo = function (t, e, r) {
var i = t.abs();
if (!(i.t <= 0))
var o = this.abs();
if (o.t < i.t) return null != e && e.fromHexString("0"), void (null != r && this.copyTo(r));
null == r && (r = T());
var n = T(),
s = this.s,
a = t.s,
p = this.DB - C(i[i.t - 1]);
0 < p ? (i.lShiftTo(p, n), o.lShiftTo(p, r)) : (i.copyTo(n), o.copyTo(r));
var u = n.t,
c = n[u - 1];
if (0 != c)
var d = c * (1 << this.F1) + (1 < u ? n[u - 2] >> this.F2 : 0),
h = this.FV / d,
f = (1 << this.F1) / d,
l = 1 << this.F2,
m = r.t,
v = m - u,
y = null == e ? T() : e;
for (n.dlShiftTo(v, y), 0 <= r.compareTo(y) && (r[r.t++] = 1, r.subTo(y, r)), g.ONE.dlShiftTo(u, y), y.subTo(n, n); n.t < u;)
n[n.t++] = 0;
for (; 0 <= --v;)
var b = r[--m] == c ? this.DM : Math.floor(r[m] * h + (r[m - 1] + l) * f);
if ((r[m] += n.am(0, b, r, v, 0, u)) < b) for (n.dlShiftTo(v, y), r.subTo(y, r); r[m] < --b;)
r.subTo(y, r);
null != e && (r.drShiftTo(u, e), s != a && g.ZERO.subTo(e, e)), r.t = u, r.clamp(), 0 < p && r.rShiftTo(p, r), s < 0 && g.ZERO.subTo(r, r);
}, g.prototype.rShiftTo = function (t, e)
e.s = this.s;
var r = Math.floor(t / this.DB);
if (r >= this.t) e.t = 0;else = (this.s & n) << o), e.t = this.t - r, e.clamp();
, g.prototype.drShiftTo = function (t, e)
for (var r = t; r < this.t; ++r)
e[r - t] = this[r];
e.t = Math.max(this.t - t, 0), e.s = this.s;
, g.prototype.subTo = function (t, e)
for (var r = 0, i = 0, o = Math.min(t.t, this.t); r < o;)
i += this[r] - t[r], e[r++] = i & this.DM, i >>= this.DB;
if (t.t < this.t) for (i -= t.s; r < this.t;) i += this[r], e[r++] = i & this.DM, i >>= this.DB;
i += this.s;
else
for (i += this.s; r < t.t;)
i -= t[r], e[r++] = i & this.DM, i >>= this.DB;
i -= t.s;
e.s = i < 0 ? -1 : 0, i < -1 ? e[r++] = this.DV + i : 0 < i && (e[r++] = i), e.t = r, e.clamp();
, g.prototype.clamp = function ()
for (var t = this.s & this.DM; 0 < this.t && this[this.t - 1] == t;)
--this.t;
, g.prototype.modPowInt = function (t, e)
var r = new (t < 256 , g.prototype.exp = function (t, e)
if (4294967295 < t , g.prototype.isEven = function ()
return 0 == (0 < this.t ? 1 & this[0] : this.s);
, g.prototype.compareTo = function (t)
var e = this.s - t.s;
if (0 != e) return e;
var r = this.t;
if (0 != (e = r - t.t)) return this.s < 0 ? -e : e;
for (; 0 <= --r;)
if (0 != (e = this[r] - t[r])) return e;
return 0;
, g.prototype.am1 = function (t, e, r, i, o, n)
for (; 0 <= --n;)
var s = e * this[t++] + r[i] + o;
o = Math.floor(s / 67108864), r[i++] = 67108863 & s;
return o;
, g.prototype.am2 = function (t, e, r, i, o, n)
for (var s = 32767 & e, a = e >> 15; 0 <= --n;)
var p = 32767 & this[t],
u = this[t++] >> 15,
c = a * p + u * s;
o = ((p = s * p + ((32767 & c) << 15) + r[i] + (1073741823 & o)) >>> 30) + (c >>> 15) + a * u + (o >>> 30), r[i++] = 1073741823 & p;
return o;
, g.prototype.am3 = function (t, e, r, i, o, n)
for (var s = 16383 & e, a = e >> 14; 0 <= --n;)
var p = 16383 & this[t],
u = this[t++] >> 14,
c = a * p + u * s;
o = ((p = s * p + ((16383 & c) << 14) + r[i] + o) >> 28) + (c >> 14) + a * u, r[i++] = 268435455 & p;
return o;
, g);
function g(t)
null !== t && this.fromHexString(t);
function T()
return new o(null);
function C(t)
var e,
r = 1;
return 0 != (e = t >>> 16) && (t = e, r += 16), 0 != (e = t >> 8) && (t = e, r += 8), 0 != (e = t >> 4) && (t = e, r += 4), 0 != (e = t >> 2) && (t = e, r += 2), 0 != (e = t >> 1) && (t = e, r += 1), r;
e.BigInteger = o, e.nbi = T, e.nbits = C;
for (var n = [], s = "0".charCodeAt(0), a = 0; a <= 9; ++a)
n[s++] = a;
for (s = "a".charCodeAt(0), a = 10; a < 36; ++a)
n[s++] = a;
for (s = "A".charCodeAt(0), a = 10; a < 36; ++a)
n[s++] = a;
function p(t, e)
var r = n[t.charCodeAt(e)];
return null == r ? -1 : r;
e.intAt = p;
var u = "0123456789abcdefghijklmnopqrstuvwxyz";
function c(t)
return u.charAt(t);
e.int2char = c;
e.b64toHex = function (t)
for (var e = "", r = 0, i = 0, o = 0; o < t.length && "=" != t.charAt(o); ++o) n >> 4), i = 15 & n, 2) : 2 == r ? (e += c(i), e += c(n >> 2), i = 3 & n, 3) : (e += c(i << 2
return 1 == r && (e += c(i << 2)), e;
, e.removeExtraSymbols = function (t)
return t.replace(/^1f+00/, "").replace("3031300d060960864801650304020105000420"https://slate.com/human-interest/2020/09/,"");
;
var d = (h.prototype.convert = function (t) 0 <= t.compareTo(this.m) ? t.mod(this.m) : t;
, h.prototype.revert = function (t)
return t;
, h.prototype.reduce = function (t)
t.divRemTo(this.m, null, t);
, h.prototype.mulTo = function (t, e, r)
t.multiplyTo(e, r), this.reduce(r);
, h.prototype.sqrTo = function (t, e)
t.squareTo(e), this.reduce(e);
, h);
function h(t)
this.m = t;
var f = (l.prototype.convert = function (t)
var e = T();
return t.abs().dlShiftTo(this.m.t, e), e.divRemTo(this.m, null, e), t.s < 0 && 0 < e.compareTo(o.ZERO) && this.m.subTo(e, e), e;
, l.prototype.revert = function (t)
var e = T();
return t.copyTo(e), this.reduce(e), e;
, l.prototype.reduce = function (t)
for (; t.t <= this.mt2;)
t[t.t++] = 0;
for (var e = 0; e < this.m.t; ++e)
var r = 32767 & t[e],
i = r * this.mpl + ((r * this.mph + (t[e] >> 15) * this.mpl & this.um) << 15) & t.DM;
for (t[r = e + this.m.t] += this.m.am(0, i, t, e, 0, this.m.t); t[r] >= t.DV;)
t[r] -= t.DV, t[++r]++;
t.clamp(), t.drShiftTo(this.m.t, t), 0 <= t.compareTo(this.m) && t.subTo(this.m, t); , l.prototype.mulTo = function (t, e, r) t.multiplyTo(e, r), this.reduce(r); , l.prototype.sqrTo = function (t, e) t.squareTo(e), this.reduce(e); , l); function l(t) this.m = t, this.mp = t.invDigit(), this.mpl = 32767 & this.mp, this.mph = this.mp >> 15, this.um = (1 << t.DB - 15) - 1, this.mt2 = 2 * t.t; function m(t) var e = T(); return e.fromHexString(t.toString()), e; e.nbv = m, o.ZERO = m(0), o.ONE = m(1), i = "Microsoft Internet Explorer" == navigator.appName ? (o.prototype.am = o.prototype.am2, 30) : "Netscape" != navigator.appName ? (o.prototype.am = o.prototype.am1, 26) : (o.prototype.am = o.prototype.am3, 28), o.prototype.DB = i, o.prototype.DM = (1 << i) - 1, o.prototype.DV = 1 << i; o.prototype.FV = Math.pow(2, 52), o.prototype.F1 = 52 - i, o.prototype.F2 = 2 * i - 52; }, 384: function _(t, e, r) "use strict"; Object.defineProperty(e, "__esModule", value: !0 ); var i = (S.hash = function (t) ""); for (var e = [1116352408, 1899447441, 3049323471, 3921009573, 961987163, 1508970993, 2453635748, 2870763221, 3624381080, 310598401, 607225278, 1426881987, 1925078388, 2162078206, 2614888103, 3248222580, 3835390401, 4022224774, 264347078, 604807628, 770255983, 1249150122, 1555081692, 1996064986, 2554220882, 2821834349, 2952996808, 3210313671, 3336571891, 3584528711, 113926993, 338241895, 666307205, 773529912, 1294757372, 1396182291, 1695183700, 1986661051, 2177026350, 2456956037, 2730485921, 2820302411, 3259730800, 3345764771, 3516065817, 3600352804, 4094571909, 275423344, 430227734, 506948616, 659060556, 883997877, 958139571, 1322822218, 1537002063, 1747873779, 1955562222, 2024104815, 2227730452, 2361852424, 2428436474, 2756734187, 3204031479, 3329325298], r = [1779033703, 3144134277, 1013904242, 2773480762, 1359893119, 2600822924, 528734635, 1541459225], i = (t += String.fromCharCode(128)).length / 4 + 2, o = Math.ceil(i / 16), n = new Array(o), s = 0; s < o; s++) n[s] = new Array(16); for (var a = 0; a < 16; a++) t.charCodeAt(64 * s + 4 * a + 2) << 8 var p = 8 * (t.length - 1) / Math.pow(2, 32), u = 8 * (t.length - 1) >>> 0;
for (n[o - 1][14] = Math.floor(p), n[o - 1][15] = u, s = 0; s < o; s++) for (var c = new Array(64), d = 0; d < 16; d++) c[d] = n[s][d]; for (d = 16; d < 64; d++) c[d] = S.q1(c[d - 2]) + c[d - 7] + S.q0(c[d - 15]) + c[d - 16] >>> 0;
for (var h = r[0], f = r[1], l = r[2], m = r[3], v = r[4], y = r[5], b = r[6], g = r[7], d = 0; d < 64; d++) var T = g + S.z1(v) + S.Ch(v, y, b) + e[d] + c[d], C = S.z0(h) + S.Maj(h, f, l); g = b, b = y, y = v, v = m + T >>> 0, m = l, l = f, f = h, h = T + C >>> 0;
r[0] = r[0] + h >>> 0, r[1] = r[1] + f >>> 0, r[2] = r[2] + l >>> 0, r[3] = r[3] + m >>> 0, r[4] = r[4] + v >>> 0, r[5] = r[5] + y >>> 0, r[6] = r[6] + b >>> 0, r[7] = r[7] + g >>> 0;
for (var A = new Array(r.length), g = 0; g < r.length; g++)
A[g] = ("00000000" + r[g].toString(16)).slice(-8);
return A.join("");
, S.utf8Encode = function (e)
try
return new TextEncoder().encode(e).reduce(function (t, e)
return t + String.fromCharCode(e);
, "");
catch (t)
return unescape(encodeURIComponent(e));
, S.ROTR = function (t, e) e << 32 - t;
, S.z0 = function (t)
return S.ROTR(2, t) ^ S.ROTR(13, t) ^ S.ROTR(22, t);
, S.z1 = function (t)
return S.ROTR(6, t) ^ S.ROTR(11, t) ^ S.ROTR(25, t);
, S.q0 = function (t)
return S.ROTR(7, t) ^ S.ROTR(18, t) ^ t >>> 3;
, S.q1 = function (t)
return S.ROTR(17, t) ^ S.ROTR(19, t) ^ t >>> 10;
, S.Ch = function (t, e, r)
return t & e ^ ~t & r;
, S.Maj = function (t, e, r)
return t & e ^ t & r ^ e & r;
, S);
function S()
e.Sha256 = i;
}, [380]);
pbjsChunk([187], {
481: function _(e, r, t)
e.exports = t(482);
,
482: function _(e, r, t) {
"use strict";
Object.defineProperty(r, "__esModule",
value: !0
), t.d(r, "spec", function ()
return m;
);
var b = t(0),
y = t(2),
h = t(3),
i = t(11),
l = t.n(i),
a = t(483),
n = t.n(a),
s = t(1);
function v(e)
return (v = "function" == typeof Symbol && "symbol" == _typeof(Symbol.iterator) ? function (e)
return _typeof(e);
: function (e)
return e && "function" == typeof Symbol && e.constructor === Symbol && e !== Symbol.prototype ? "symbol" : _typeof(e);
)(e);
var o = [y.b, y.d],
g = 100,
w = 300,
x = 3600,
I = !0,
P =
JPY: 1
;
function p(e)
var r = ;
return r.id = e.bidId, r.ext = , r.ext.siteID = e.params.siteId, !e.params.hasOwnProperty("id")
function d(e)
return Array.isArray(e) && 2 === e.length && n()(e[0]) && n()(e[1]);
function c(e, r)
if (d(e)) return e[0] === r[0] && e[1] === r[1];
for (var t = 0; t < e.length; t++) if (e[t][0] === r[0] && e[t][1] === r[1]) return 1; function u(e, r, t, i) "ix", m = h.b.getConfig(u); if (m) if ("object" === v(m.firstPartyData)) var f = m.firstPartyData, y = "?"; for (var l in f) f.hasOwnProperty(l) && (y += "".concat(encodeURIComponent(l), "=").concat(encodeURIComponent(f[l]), "&")); y = y.slice(0, -1), p.site.page += y; "number" == typeof m.timeout && (c.t = m.timeout); return c.s = e[0].params.siteId, c.v = i, c.r = JSON.stringify(p), c.ac = "j", c.sd = 1, 8.1 === i && (c.nf = 1), method: "GET", url: "https://as-sec.casalemedia.com/cygnus", data: c ; var m = { code: "ix", gvlid: 10, supportedMediaTypes: o, isBidRequestValid: function isBidRequestValid(e) , buildRequests: function buildRequests(e, r) for (var t, i, a = [], n = [], s = [], o = null, d = 0; d < e.length; d++) o.mediaTypes) return 0 < n.length && a.push(u(e, r, n, 7.2)), 0 < s.length && a.push(u(e, r, s, 8.1)), a; , interpretResponse: function interpretResponse(e, r) { var t = []; if (!e.hasOwnProperty("body") || !e.body.hasOwnProperty("seatbid")) return t; for (var i, a, n, s, o = e.body, d = o.seatbid, p = 0; p < d.length; p++) if (d[p].hasOwnProperty("bid")) for (var c = d[p].bid, u = JSON.parse(r.data.r), m = 0; m < c.length; m++) var f = function (r, e) if (r) return l()(e, function (e) return e.id === r; ); (c[m].impid, u.imp); i = c[m], a = o.cur, n = f, s = void 0, s = , P.hasOwnProperty(a) ? s.cpm = i.price / P[a] : s.cpm = i.price / g, s.requestId = i.impid, s.dealId = b.deepAccess(i, "ext.dealid"), s.netRevenue = I, s.currency = a, s.creativeId = i.hasOwnProperty("crid") ? i.crid : "-", b.deepAccess(i, "ext.vasturl") ? (s.vastUrl = i.ext.vasturl, s.width = n.video.w, s.height = n.video.h, s.mediaType = y.d, s.ttl = x) : (s.ad = i.adm, s.width = i.w, s.height = i.h, s.mediaType = y.b, s.ttl = w), s.meta = , s.meta.networkId = b.deepAccess(i, "ext.dspid"), s.meta.brandId = b.deepAccess(i, "ext.advbrandid"), s.meta.brandName = b.deepAccess(i, "ext.advbrand"), t.push(s); return t; }, transformBidParams: function transformBidParams(e) return b.convertTypes( siteID: "number" , e); , getUserSyncs: function getUserSyncs(e) return e.iframeEnabled ? [ type: "iframe", url: "https://js-sec.indexww.com/um/ixmatch.html" ] : []; }; Object(s.registerBidder)(m); } }, [481]); pbjsChunk([184], { 493: function _(e, t, r) e.exports = r(494); , 494: function _(e, t, r) { "use strict"; Object.defineProperty(t, "__esModule", value: !0 ), r.d(t, "spec", function () return l; ); var s = r(0), d = r(3), n = r(1), a = r(9); function g() return (g = Object.assign var o, i, c, u = Object(a.b)(), l = { code: "kargo", isBidRequestValid: function isBidRequestValid(e) !e.params) && !!e.params.placementId; , buildRequests: function buildRequests(e, t) "USD", o = , i = ; s._each(e, function (e) o[e.bidId] = e.params.placementId, i[e.bidId] = e.sizes; ), 0 < e.length && e[0].userId && e[0].userId.tdid && (r = e[0].userId.tdid); var c = g(, sessionId: l._getSessionId(), requestCount: l._getRequestCount(), timeout: t.timeout, currency: a, cpmGranularity: 1, timestamp: new Date().getTime(), cpmRange: floor: 0, ceil: 20 , bidIDs: o, bidSizes: i, prebidRawBidRequests: e , l._getAllMetadata(r, t.uspConsent)), u = encodeURIComponent(JSON.stringify(c)); return g(, t, method: "GET", url: "".concat("https://krk.kargo.com"https://slate.com/human-interest/2020/09/,"/api/v2/bid"), data: "json=".concat(u), currency: a ); , interpretResponse: function interpretResponse(e, t) var r = e.body, n = []; for (var a in r) var o = r[a], i = void 0; o.metadata && o.metadata.landingPageDomain && (i = clickUrl: o.metadata.landingPageDomain ), n.push( requestId: a, cpm: Number(o.cpm), width: o.width, height: o.height, ad: o.adm, ttl: 300, creativeId: o.id, dealId: o.targetingCustom, netRevenue: !0, currency: t.currency, meta: i ); return n; , getUserSyncs: function getUserSyncs(e) var t = [], r = l._generateRandomUuid(), n = l._getClientId(); if (e.iframeEnabled && r && n) for (var a = 0; a < 5; a++) t.push( type: "iframe", url: "https://crb.kargo.com/api/v1/initsyncrnd/UUID?seed=SEED&idx=INDEX".replace("UUID", n).replace("SEED", r).replace("INDEX", a) ); return t; , _readCookie: function _readCookie(e) if (!u.cookiesAreEnabled()) return null; for (var t = "".concat(e, "="), r = document.cookie.split(";"), n = 0; n < r.length; n++) for (var a = r[n]; " " === a.charAt(0);) a = a.substring(1, a.length); if (0 === a.indexOf(t)) return a.substring(t.length, a.length); return null; , _getCrbFromCookie: function _getCrbFromCookie() try var e = JSON.parse(decodeURIComponent(l._readCookie("krg_crb"))); if (e && e.v) var t = JSON.parse(atob(e.v)); if (t) return t; return ; catch (e) return ; , _getCrbFromLocalStorage: function _getCrbFromLocalStorage() try return JSON.parse(atob(l._getLocalStorageSafely("krg_crb"))); catch (e) return ; , _getCrb: function _getCrb() var e = l._getCrbFromLocalStorage(); return Object.keys(e).length ? e : l._getCrbFromCookie(); , _getKruxUserId: function _getKruxUserId() return l._getLocalStorageSafely("kxkar_user"); , _getKruxSegments: function _getKruxSegments() return l._getLocalStorageSafely("kxkar_segs"); , _getKrux: function _getKrux() var e = l._getKruxSegments(), t = []; return e && (t = e.split(",")), userID: l._getKruxUserId(), segments: t ; , _getLocalStorageSafely: function _getLocalStorageSafely(e) try return u.getDataFromLocalStorage(e); catch (e) return null; , _getUserIds: function _getUserIds(e, t) var r = l._getCrb(), n = kargoID: r.userId, clientID: r.clientId, crbIDs: r.syncIds ; return e && (n.tdID = e), n; , _getClientId: function _getClientId() return l._getCrb().clientId; , _getAllMetadata: function _getAllMetadata(e, t) return userIDs: l._getUserIds(e, t), krux: l._getKrux(), pageURL: window.location.href, rawCRB: l._readCookie("krg_crb"), rawCRBLocalStorage: l._getLocalStorageSafely("krg_crb") ; , _getSessionId: function _getSessionId() return o = o , _getRequestCount: function _getRequestCount() return i === window.location.pathname ? ++c : (i = window.location.pathname, c = 0); , _generateRandomUuid: function _generateRandomUuid() try 64, e[8] = -65 & e[8] catch (e) return ""; }; Object(n.registerBidder)(l); } }, [493]); pbjsChunk([110], { 677: function _(e, r, t) e.exports = t(678); , 678: function _(e, r, t) { "use strict"; Object.defineProperty(r, "__esModule", value: !0 ), t.d(r, "FASTLANE_ENDPOINT", function () return o; ), t.d(r, "VIDEO_ENDPOINT", function () return l; ), t.d(r, "SYNC_ENDPOINT", function () return a; ), t.d(r, "spec", function () return h; ), r.hasVideoMediaType = c, r.masSizeOrdering = S, r.determineRubiconVideoSizeId = C, r.getPriceGranularity = j, r.hasValidVideoParams = k, r.hasValidSupplyChainParams = T, r.encodeParam = w, r.resetUserSync = function () R = !1; ; var g = t(0), i = t(1), b = t(3), u = t(2); function v(e, r) function () throw new TypeError("Invalid attempt to destructure non-iterable instance.nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); (); function n(e, r) r > e.length) && (r = e.length);
for (var t = 0, i = new Array(r); t < r; t++) i[t] = e[t]; return i; function y() function p(e, r, t) return r in e ? Object.defineProperty(e, r, value: t, enumerable: !0, configurable: !0, writable: !0 ) : e[r] = t, e; function x(e) return (x = "function" == typeof Symbol && "symbol" == _typeof(Symbol.iterator) ? function (e) return _typeof(e); : function (e) return e && "function" == typeof Symbol && e.constructor === Symbol && e !== Symbol.prototype ? "symbol" : _typeof(e); )(e); var o = "https://fastlane.rubiconproject.com/a/api/fastlane.json", l = "https://prebid-server.rubiconproject.com/openrtb2/auction", a = "https://eus.rubiconproject.com/usync.html", d = FASTLANE: id: "dt.id", keyv: "dt.keyv", pref: "dt.pref" , PREBID_SERVER: id: "id", keyv: "keyv" , f = 1: "468x60", 2: "728x90", 5: "120x90", 8: "120x600", 9: "160x600", 10: "300x600", 13: "200x200", 14: "250x250", 15: "300x250", 16: "336x280", 17: "240x400", 19: "300x100", 31: "980x120", 32: "250x360", 33: "180x500", 35: "980x150", 37: "468x400", 38: "930x180", 39: "750x100", 40: "750x200", 41: "750x300", 42: "2x4", 43: "320x50", 44: "300x50", 48: "300x300", 53: "1024x768", 54: "300x1050", 55: "970x90", 57: "970x250", 58: "1000x90", 59: "320x80", 60: "320x150", 61: "1000x1000", 64: "580x500", 65: "640x480", 66: "930x600", 67: "320x480", 68: "1800x1000", 72: "320x320", 73: "320x160", 78: "980x240", 79: "980x300", 80: "980x400", 83: "480x300", 85: "300x120", 90: "548x150", 94: "970x310", 95: "970x100", 96: "970x210", 101: "480x320", 102: "768x1024", 103: "480x280", 105: "250x800", 108: "320x240", 113: "1000x300", 117: "320x100", 125: "800x250", 126: "200x600", 144: "980x600", 145: "980x150", 152: "1000x250", 156: "640x320", 159: "320x250", 179: "250x600", 195: "600x300", 198: "640x360", 199: "640x200", 213: "1030x590", 214: "980x360", 221: "1x1", 229: "320x180", 230: "2000x1400", 232: "580x400", 234: "6x6", 251: "2x2", 256: "480x820", 257: "400x600", 258: "500x200", 259: "998x200", 264: "970x1000", 265: "1920x1080", 274: "1800x200", 278: "320x500", 282: "320x400", 288: "640x380" ; g._each(f, function (e, r) return f[e] = r; ); var h = { code: "rubicon", gvlid: 52, supportedMediaTypes: [u.b, u.d], isBidRequestValid: function isBidRequestValid(e) , buildRequests: function buildRequests(e, u) { var n, r = e.filter(function (e) return "video" === m(e); ).map(function (e) { e.startTime = new Date().getTime(); var r, t, i = { id: e.transactionId, test: b.b.getConfig("debug") ? 1 : 0, cur: ["USD"], source: tid: e.transactionId , tmax: b.b.getConfig("TTL") || 1e3, imp: [], ext: prebid: cache: vastxml: returnCreative: !1 , targeting: includewinners: !0, includebidderkeys: !1, pricegranularity: j(b.b) , bidders: rubicon: integration: b.b.getConfig("rubicon.int_type") }; "rubicon" !== e.bidder && (i.ext.prebid.aliases = p(, e.bidder, "rubicon")), t = "function" != typeof e.getFloor || b.b.getConfig("rubicon.disableFloors") ? parseFloat(g.deepAccess(e, "params.floor")) : "object" !== x(r = e.getFloor( currency: "USD", mediaType: "video", size: A(e, "video") )) || "USD" !== r.currency || isNaN(parseInt(r.floor)) ? void 0 : parseFloat(r.floor), isNaN(t) || (i.imp[0].bidfloor = t), i.imp[0].ext[e.bidder].video.size_id = C(e), function (r, t, e) if (!r) return; "object" === x(b.b.getConfig("app")) ? r.app = b.b.getConfig("app") : r.site = page: I(t, e) ; "object" === x(b.b.getConfig("device")) && (r.device = b.b.getConfig("device")); t.params.video.language && ["site"https://slate.com/human-interest/2020/09/,"device"].forEach(function (e) r[e] && (r[e].content = y( language: t.params.video.language , r[e].content)); ); (i, e, u), function (e, r) "object" === x(e.imp[0].video) && void 0 === e.imp[0].video.skip && (e.imp[0].video.skip = r.params.video.skip); "object" === x(e.imp[0].video) && void 0 === e.imp[0].video.skipafter && (e.imp[0].video.skipafter = r.params.video.skipdelay); "object" === x(e.imp[0].video) && void 0 === e.imp[0].video.pos && ("atf" === r.params.position ? e.imp[0].video.pos = 1 : "btf" === r.params.position && (e.imp[0].video.pos = 3)); var t = A(r, "video"); e.imp[0].video.w = t[0], e.imp[0].video.h = t[1]; (i, e); var n, o = _(e, "PREBID_SERVER"); o && g.deepSetValue(i, "user.ext.digitrust", o), u.gdprConsent && ("boolean" == typeof u.gdprConsent.gdprApplies && (n = u.gdprConsent.gdprApplies ? 1 : 0), g.deepSetValue(i, "regs.ext.gdpr", n), g.deepSetValue(i, "user.ext.consent", u.gdprConsent.consentString)), u.uspConsent && g.deepSetValue(i, "regs.ext.us_privacy", u.uspConsent), e.userId && "object" === x(e.userId) && (e.userId.tdid || e.userId.pubcid || e.userId.lipb || e.userId.idl_env) && (g.deepSetValue(i, "user.ext.eids", []), e.userId.tdid && i.user.ext.eids.push( source: "adserver.org", uids: [ id: e.userId.tdid, ext: rtiPartner: "TDID" ] ), e.userId.pubcid && i.user.ext.eids.push( source: "pubcommon", uids: [ id: e.userId.pubcid ] ), e.userId.lipb && e.userId.lipb.lipbid && (i.user.ext.eids.push( source: "liveintent.com", uids: [ id: e.userId.lipb.lipbid ] ), i.user.ext.tpid = source: "liveintent.com", uid: e.userId.lipb.lipbid , Array.isArray(e.userId.lipb.segments) && e.userId.lipb.segments.length && g.deepSetValue(i, "rp.target.LIseg", e.userId.lipb.segments)), e.userId.idl_env && i.user.ext.eids.push( source: "liveramp.com", uids: [ id: e.userId.idl_env ] )), !0 === b.b.getConfig("coppa") && g.deepSetValue(i, "regs.coppa", 1), e.schain && T(e.schain) && g.deepSetValue(i, "source.ext.schain", e.schain); var a, s = y(, e.params.inventory, b.b.getConfig("fpd.context")), d = y(, e.params.visitor, b.b.getConfig("fpd.user")); g.isEmpty(s) && g.isEmpty(d) || (a = bidders: [u.bidderCode], config: fpd: , g.isEmpty(s) || (a.config.fpd.site = s), g.isEmpty(d) || (a.config.fpd.user = d), g.deepSetValue(i, "ext.prebid.bidderconfig.0", a)); var c = g.deepAccess(e, "fpd.context.pbAdSlot"); return "string" == typeof c && c && g.deepSetValue(i.imp[0].ext, "context.data.adslot", c), e.storedAuctionResponse && g.deepSetValue(i.imp[0], "ext.prebid.storedauctionresponse.id", e.storedAuctionResponse.toString()), g.deepSetValue(i.imp[0], "ext.prebid.auctiontimestamp", u.auctionStart), method: "POST", url: l, data: i, bidRequest: e ; }); return !0 !== b.b.getConfig("rubicon.singleRequest") ? r.concat(e.filter(function (e) return "banner" === m(e); ).map(function (e) var i = h.createSlotParams(e, u); return method: "GET", url: o, data: h.getOrderedParams(i).reduce(function (e, r) var t = i[r]; return g.isStr(t) && "" !== t , "") + "slots=1&rand=".concat(Math.random()), bidRequest: e ; )) : (n = e.filter(function (e) return "banner" === m(e); ).reduce(function (e, r) , ), r.concat(Object.keys(n).reduce(function (r, e) var t, i; return t = n[e], i = 10, t.map(function (e, r) return r % i == 0 ? t.slice(r, r + i) : null; ).filter(function (e) return e; ).forEach(function (e) var i = h.combineSlotUrlParams(e.map(function (e) return h.createSlotParams(e, u); )); r.push( method: "GET", url: o, data: h.getOrderedParams(i).reduce(function (e, r) , "") + "slots=".concat(e.length, "&rand=").concat(Math.random()), bidRequest: e ); ), r; , []))); }, getOrderedParams: function getOrderedParams(e) var r = /^tg_v/, t = /^tg_i/, i = ["account_id"https://slate.com/human-interest/2020/09/,"site_id"https://slate.com/human-interest/2020/09/,"zone_id"https://slate.com/human-interest/2020/09/,"size_id"https://slate.com/human-interest/2020/09/,"alt_size_ids"https://slate.com/human-interest/2020/09/,"p_pos"https://slate.com/human-interest/2020/09/,"gdpr"https://slate.com/human-interest/2020/09/,"gdpr_consent"https://slate.com/human-interest/2020/09/,"us_privacy"https://slate.com/human-interest/2020/09/,"rp_schain"https://slate.com/human-interest/2020/09/,"tpid_tdid"https://slate.com/human-interest/2020/09/,"tpid_liveintent.com"https://slate.com/human-interest/2020/09/,"tg_v.LIseg"https://slate.com/human-interest/2020/09/,"dt.id"https://slate.com/human-interest/2020/09/,"dt.keyv"https://slate.com/human-interest/2020/09/,"dt.pref"https://slate.com/human-interest/2020/09/,"rf"https://slate.com/human-interest/2020/09/,"p_geo.latitude"https://slate.com/human-interest/2020/09/,"p_geo.longitude"https://slate.com/human-interest/2020/09/,"kw"].concat(Object.keys(e).filter(function (e) return r.test(e); )).concat(Object.keys(e).filter(function (e) return t.test(e); )).concat(["tk_flint"https://slate.com/human-interest/2020/09/,"x_source.tid"https://slate.com/human-interest/2020/09/,"x_source.pchain"https://slate.com/human-interest/2020/09/,"p_screen_res"https://slate.com/human-interest/2020/09/,"rp_floor"https://slate.com/human-interest/2020/09/,"rp_secure"https://slate.com/human-interest/2020/09/,"tk_user_key"]); return i.concat(Object.keys(e).filter(function (e) return -1 === i.indexOf(e); )); , combineSlotUrlParams: function combineSlotUrlParams(n) if (1 === n.length) return n[0]; var i = n.reduce(function (r, t, i) return Object.keys(t).forEach(function (e) r.hasOwnProperty(e) ), r; , ), o = new RegExp("^([^;]*)(;1)+$"); return Object.keys(i).forEach(function (e) var r = i[e].join(";"), t = r.match(o); i[e] = t ? t[1] : r; ), i; , createSlotParams: function createSlotParams(e, r) "btf" === i.position ? i.position : "", e.userId && (e.userId.tdid && (c.tpid_tdid = e.userId.tdid), e.userId.lipb && e.userId.lipb.lipbid && (c["tpid_liveintent.com"] = e.userId.lipb.lipbid, Array.isArray(e.userId.lipb.segments) && e.userId.lipb.segments.length && (c["tg_v.LIseg"] = e.userId.lipb.segments.join(","))), e.userId.idl_env && (c["tpid_liveramp.com"] = e.userId.idl_env)), r.gdprConsent && ("boolean" == typeof r.gdprConsent.gdprApplies && (c.gdpr = Number(r.gdprConsent.gdprApplies)), c.gdpr_consent = r.gdprConsent.consentString), r.uspConsent && (c.us_privacy = encodeURIComponent(r.uspConsent)); var u = y(, i.visitor, b.b.getConfig("fpd.user")); Object.keys(u).forEach(function (e) null != u[e] && "keywords" !== e && (c["tg_v.".concat(e)] = "object" !== x(u[e]) ); var p = y(, i.inventory, b.b.getConfig("fpd.context")); Object.keys(p).forEach(function (e) ); var l = (i.keywords , serializeSupplyChain: function serializeSupplyChain(e) if (!T(e)) return ""; var r = e.ver, t = e.complete, i = e.nodes; return "".concat(r, ",").concat(t, "!").concat(h.serializeSupplyChainNodes(i)); , serializeSupplyChainNodes: function serializeSupplyChainNodes(e) var t = ["asi"https://slate.com/human-interest/2020/09/,"sid"https://slate.com/human-interest/2020/09/,"hp"https://slate.com/human-interest/2020/09/,"rid"https://slate.com/human-interest/2020/09/,"name"https://slate.com/human-interest/2020/09/,"domain"]; return e.map(function (r) return t.map(function (e) ).join(","); ).join("!"); , interpretResponse: function interpretResponse(d, e) { var c = e.bidRequest; if (!(d = d.body) || "object" !== x(d)) return []; if (d.seatbid) var r = g.deepAccess(d, "ext.errors.rubicon"); Array.isArray(r) && 0 < r.length && g.logWarn("Rubicon: Error in video response"); var o = []; return d.seatbid.forEach(function (n) ), o; var t = d.ads; return "object" !== x(c) || Array.isArray(c) || "video" !== m(c) || "object" !== x(t) || (t = t[c.adUnitCode]), !Array.isArray(t) || t.length < 1 ? [] : t.reduce(function (e, r, t) if ("ok" !== r.status) return e; var i, n, o, a, s = Array.isArray(c) ? c[t] : c; return s && "object" === x(s) ? (i = requestId: s.bidId, currency: "USD", creativeId: r.creative_id , r.creative_type && (i.mediaType = r.creative_type), r.creative_type === u.d ? (i.width = s.params.video.playerWidth, i.height = s.params.video.playerHeight, i.vastUrl = r.creative_depot_url, i.impression_id = r.impression_id, i.videoCacheKey = r.impression_id) : (i.ad = (o = r.script, a = r.impression_id, "n
nnx3c!-- Rubicon Project Ad Tag --x3ennn")), n = v(f[r.size_id].split("x").map(function (e)
return Number(e);
), 2), i.width = n[0], i.height = n[1]), i.rubiconTargeting = (Array.isArray(r.targeting) ? r.targeting : []).reduce(function (e, r)
return e[r.key] = r.values[0], e;
,
rpfl_elemid: s.adUnitCode
), e.push(i)) : g.logError("Rubicon: bidRequest undefined at index position:".concat(t), c, d), e;
, []).sort(function (e, r)
return (r.cpm );
},
getUserSyncs: function getUserSyncs(e, r, t, i)
if (!R && e.iframeEnabled)
var n = "";
return t && "string" == typeof t.consentString && ("boolean" == typeof t.gdprApplies ? n += "?gdpr=".concat(Number(t.gdprApplies), "&gdpr_consent=").concat(t.consentString) : n += "?gdpr_consent=".concat(t.consentString)), i && (n += "".concat(n ? "&" : "?"https://slate.com/human-interest/2020/09/,"us_privacy=").concat(encodeURIComponent(i))), R = !0,
type: "iframe",
url: a + n
;
,
transformBidParams: function transformBidParams(e)
return g.convertTypes(
accountId: "number",
siteId: "number",
zoneId: "number"
, e);
};
function _(e, r)
function I(e, r)
function A(e, r)
var t = e.params;
if ("video" === r)
var i = [];
return t.video && t.video.playerWidth && t.video.playerHeight ? i = [t.video.playerWidth, t.video.playerHeight] : Array.isArray(g.deepAccess(e, "mediaTypes.video.playerSize")) && 1 === e.mediaTypes.video.playerSize.length ? i = e.mediaTypes.video.playerSize[0] : Array.isArray(e.sizes) && 0 < e.sizes.length && Array.isArray(e.sizes[0]) && 1 < e.sizes[0].length && (i = e.sizes[0]), i;
var n = [];
return Array.isArray(t.sizes) ? n = t.sizes : void 0 !== g.deepAccess(e, "mediaTypes.banner.sizes") ? n = s(e.mediaTypes.banner.sizes) : Array.isArray(e.sizes) && 0 < e.sizes.length ? n = s(e.sizes) : g.logWarn("Rubicon: no sizes are setup or found"), S(n);
function s(e)
return g.parseSizesInput(e).reduce(function (e, r)
var t = parseInt(f[r], 10);
return t && e.push(t), e;
, []);
function c(e)
return "object" === x(g.deepAccess(e, "params.video")) && void 0 !== g.deepAccess(e, "mediaTypes.".concat(u.d));
function m(e, r)
var t = 1 < arguments.length && void 0 !== r && r;
return c(e) ? -1 === ["outstream"https://slate.com/human-interest/2020/09/,"instream"].indexOf(g.deepAccess(e, "mediaTypes.".concat(u.d, ".context"))) ? void (t && g.logError("Rubicon: mediaTypes.video.context must be outstream or instream")) : A(e, "video").length < 2 ? void (t && g.logError("Rubicon: could not determine the playerSize of the video")) : (t && g.logMessage("Rubicon: making video request for adUnit", e.adUnitCode), "video") : 0 === A(e, "banner").length ? void (t && g.logError("Rubicon: could not determine the sizes for banner request")) : (t && g.logMessage("Rubicon: making banner request for adUnit", e.adUnitCode), "banner");
function S(e)
var n = [15, 2, 9];
return e.sort(function (e, r)
var t = n.indexOf(e),
i = n.indexOf(r);
return -1 < t );
function C(e)
var r = parseInt(g.deepAccess(e, "params.video.size_id"));
return isNaN(r) ? "outstream" === g.deepAccess(e, "mediaTypes.".concat(u.d, ".context")) ? 203 : 201 : r;
function j(e)
return
ranges:
low: [
max: 5,
increment: .5
],
medium: [
max: 20,
increment: .1
],
high: [
max: 20,
increment: .01
],
auto: [
max: 5,
increment: .05
,
min: 5,
max: 10,
increment: .1
,
min: 10,
max: 20,
increment: .5
],
dense: [
max: 3,
increment: .01
,
min: 3,
max: 8,
increment: .05
,
min: 8,
max: 20,
increment: .5
],
custom: e.getConfig("customPriceBucket") && e.getConfig("customPriceBucket").buckets
[e.getConfig("priceGranularity")]
;
function k(r)
var t = !0,
e = Object.prototype.toString.call([]),
i = Object.prototype.toString.call(0),
n =
mimes: e,
protocols: e,
maxduration: i,
linearity: i,
api: e
;
return Object.keys(n).forEach(function (e)
Object.prototype.toString.call(g.deepAccess(r, "mediaTypes.video." + e)) !== n[e] && (t = !1, g.logError("Rubicon: mediaTypes.video." + e + " is required and must be of type: " + n[e]));
), t;
function T(e) g.logError("Rubicon: required schain params missing")), r;
function w(e, r)
return "rp_schain" === e ? "rp_schain=".concat(r) : "".concat(e, "=").concat(encodeURIComponent(r));
var R = !1;
Object(i.registerBidder)(h);
}
}, [677]);
pbjsChunk([93], {
719: function _(e, t, r)
e.exports = r(720);
,
720: function _(e, t, r) {
"use strict";
Object.defineProperty(t, "__esModule",
value: !0
), r.d(t, "spec", function ()
return o;
), r.d(t, "_isInbounds", function ()
return a;
), t._getPlatform = v;
var n = r(1),
y = r(0),
i = r(2),
c = r(3),
g = r(10),
d = r(44);
function h(e, t)
function s(e, t)
function u()
return (u = Object.assign
function p(e, t, r)
return t in e ? Object.defineProperty(e, t,
value: r,
enumerable: !0,
configurable: !0,
writable: !0
) : e[t] = r, e;
var b = "sonobi",
l = Object(y.generateUUID)(),
o = {
code: b,
supportedMediaTypes: [i.b, i.d],
isBidRequestValid: function isBidRequestValid(e)
if (!e.params) return !1;
if (!e.params.ad_unit && !e.params.placement_id) return !1;
if (!Object(y.deepAccess)(e, "mediaTypes.banner") && !Object(y.deepAccess)(e, "mediaTypes.video")) return !1;
if (Object(y.deepAccess)(e, "mediaTypes.banner"))
if (!Object(y.deepAccess)(e, "mediaTypes.banner.sizes") && !e.params.sizes) return !1;
else if (Object(y.deepAccess)(e, "mediaTypes.video"))
if ("outstream" === Object(y.deepAccess)(e, "mediaTypes.video.context") && !e.params.sizes) return !1;
if ("instream" === Object(y.deepAccess)(e, "mediaTypes.video.context") && !Object(y.deepAccess)(e, "mediaTypes.video.playerSize")) return !1;
return !0;
,
buildRequests: function buildRequests(e, t)
var r = e.map(function (e) ").concat(f(e)).concat(m(e))) : void Object(y.logError)("The ad unit code or Sonobi Placement id for slot ".concat(e.bidId, " is invalid"));
),
n = ;
r.forEach(function (e)
u(n, e);
);
var i =
key_maker: JSON.stringify(n),
ref: t.refererInfo.referer,
s: Object(y.generateUUID)(),
pv: l,
vp: v(),
lib_name: "prebid",
lib_v: "3.23.0",
us: 0
;
c.b.getConfig("userSync") && c.b.getConfig("userSync").syncsPerBidder && (i.us = c.b.getConfig("userSync").syncsPerBidder), d.a.canBidderRegisterSync("iframe", b) ? i.ius = 1 : i.ius = 0, Object(y.deepAccess)(e[0], "params.hfa") && (i.hfa = Object(y.deepAccess)(e[0], "params.hfa")), e[0].params.referrer && (i.ref = e[0].params.referrer), t && t.gdprConsent && (i.gdpr = t.gdprConsent.gdprApplies ? "true" : "false", t.gdprConsent.consentString && (i.consent_string = t.gdprConsent.consentString));
var s = function (t) ("fhnS5drwmH");
s && (i.digid = s.id, i.digkeyv = s.keyv), e[0].schain && (i.schain = JSON.stringify(e[0].schain)), Object(y.deepAccess)(e[0], "userId") && 0 < Object.keys(e[0].userId).length && (i.userid = JSON.stringify(e[0].userId));
var o = e[0].params.keywords;
if (o && (i.kw = o), t && t.uspConsent && (i.us_privacy = t.uspConsent), Object(y.isEmpty)(n)) return null;
var a = "https://apex.go.sonobi.com/trinity.json";
return Object(y.deepAccess)(e[0], "params.bid_request_url") && (a = Object(y.deepAccess)(e[0], "params.bid_request_url")),
method: "GET",
url: a,
withCredentials: !0,
data: i,
bidderRequests: e
;
,
interpretResponse: function interpretResponse(e, l) {
var f = e.body,
m = [],
v = l.data.ref;
return 0 === Object.keys(f.slots).length || Object.keys(f.slots).forEach(function (e) ").slice(-1)[0],
n = function (e, t)
for (var r = 0; r < e.length; r++)
if (e[r].bidId === t) return e[r];
(l.bidderRequests, r),
i = null;
"video" === t.sbi_ct && (i = "video"https://slate.com/human-interest/2020/09/,"outstream" === Object(y.deepAccess)(n, "mediaTypes.video.context") && (i = "outstream"));
var s,
o,
a,
c,
d,
u,
p,
b = j(i, v);
t.sbi_aid && t.sbi_mouse && t.sbi_size && (a = void 0 === (o = (s = h(t.sbi_size.split("x"), 2))[0]) ? 1 : o, d = void 0 === (c = s[1]) ? 1 : c, u = , t.sbi_dozer && (u.dealId = t.sbi_dozer), "video" === i ? (u.mediaType = "video", u.vastUrl = b(f.sbi_dc, t.sbi_aid), delete u.ad, delete u.width, delete u.height) : "outstream" === i && n && (u.mediaType = "video", u.vastUrl = b(f.sbi_dc, t.sbi_aid), u.renderer = function (e, t)
var r = 2 < arguments.length && void 0 !== arguments[2] ? arguments[2] : ,
n = g.a.install(
id: t.aid,
url: "https://mtrx.go.sonobi.com/sbi_outstream_renderer.js",
config: r,
loaded: !1,
adUnitCode: e
);
try
n.setRender(O);
catch (e)
Object(y.logWarn)("Prebid Error calling setRender on renderer", e);
return n.setEventHandlers(
impression: function impression()
return Object(y.logMessage)("Sonobi outstream video impression event");
,
loaded: function loaded()
return Object(y.logMessage)("Sonobi outstream video loaded event");
,
ended: function ended()
Object(y.logMessage)("Sonobi outstream renderer video event");
), n;
(n.adUnitCode, u, Object(y.deepAccess)(n, "renderer.options")), p = Object(y.deepAccess)(n, "params.sizes"), Array.isArray(p) && Array.isArray(p[0]) && (p = p[0]), p && (u.width = p[0], u.height = p[1])), m.push(u));
), m;
},
getUserSyncs: function getUserSyncs(e, t)
var r = [];
try
e.pixelEnabled && t[0].body.sbi_px.forEach(function (e)
r.push(
type: e.type,
url: e.url
);
);
catch (e)
return r;
};
function f(e)
return Object(y.deepAccess)(e, "mediaTypes.video") ? "" : e.params.sizes ? Object(y.parseSizesInput)(e.params.sizes).join(",") : Object(y.deepAccess)(e, "mediaTypes.banner.sizes") ? Object(y.parseSizesInput)(Object(y.deepAccess)(e, "mediaTypes.banner.sizes")).join(",") : e.sizes ? Object(y.parseSizesInput)(e.sizes).join(",") : void 0;
function m(e) f=".concat(e.params.floor) : "";
var j = function j(i, s)
return function (e, t)
return "video" === i ;
;
var a = function a(e)
var r = 0 < arguments.length && void 0 !== e ? e : window;
return function ()
var e = 0 < arguments.length && void 0 !== arguments[0] ? arguments[0] : 0,
t = 1 < arguments.length && void 0 !== arguments[1] ? arguments[1] : Number.MAX_SAFE_INTEGER;
return r.innerWidth >= e && r.innerWidth < t;
;
;
function v()
var e = 0 < arguments.length && void 0 !== arguments[0] ? arguments[0] : window,
t = a(e),
r = 992,
n = 768;
return t(0, 768) ? "mobile" : t(n, r) ? "tablet" : "desktop";
function O(i)
i.renderer.push(function ()
var e = h(i.getSize().split("x"), 2),
t = e[0],
r = e[1],
n = new window.SbiOutstreamRenderer();
n.init(
vastUrl: i.vastUrl,
height: r,
width: t
), n.setRootElement(i.adUnitCode);
);
Object(n.registerBidder)(o);
}
}, [719]);
pbjsChunk([85], {
741: function _(e, r, t)
e.exports = t(742);
,
742: function _(e, r, t) {
"use strict";
Object.defineProperty(r, "__esModule",
value: !0
), t.d(r, "spec", function ()
return n;
);
var a = t(1),
d = t(0),
p = 12,
o = 11,
c = 0,
u = 22,
n =
code: "teads",
supportedMediaTypes: ["video"https://slate.com/human-interest/2020/09/,"banner"],
isBidRequestValid: function isBidRequestValid(e) ,
buildRequests: function buildRequests(e, r)
var t = e.map(I),
a =
referrer: function (e)
var r = "";
e && e.refererInfo && e.refererInfo.referer && (r = e.refererInfo.referer);
return r;
(r),
data: t,
deviceWidth: screen.width,
hb_version: "3.23.0"
;
e[0].schain && (a.schain = e[0].schain);
var n,
d,
i,
s = r.gdprConsent;
return r && s && (n = "boolean" == typeof s.gdprApplies, d = "string" == typeof s.consentString, i = n ? function (e, r, t)
var a = p;
e ? function (e, r) (r, t) && (a = o) : a = c;
return a;
(s.gdprApplies, s.vendorData, s.apiVersion) : u, a.gdpr_iab =
consent: d ? s.consentString : "",
status: i,
apiVersion: s.apiVersion
), r && r.uspConsent && (a.us_privacy = r.uspConsent),
method: "POST",
url: "https://a.teads.tv/hb/bid-request",
data: JSON.stringify(a)
;
,
interpretResponse: function interpretResponse(e)
var t = [];
return (e = e.body).responses && e.responses.forEach(function (e)
var r =
cpm: e.cpm,
width: e.width,
height: e.height,
currency: e.currency,
netRevenue: !0,
ttl: e.ttl,
ad: e.ad,
requestId: e.bidId,
creativeId: e.creativeId,
placementId: e.placementId
;
e.dealId && (r.dealId = e.dealId), t.push(r);
), t;
;
function I(e)
var r,
t = ,
a = d.getValue(e.params, "placementId"),
n = d.getValue(e.params, "pageId");
return t.sizes = (r = e, d.parseSizesInput(function (e) d.isArray(r) (r))), t.bidId = d.getBidIdParameter("bidId", e), t.bidderRequestId = d.getBidIdParameter("bidderRequestId", e), t.placementId = parseInt(a, 10), t.pageId = parseInt(n, 10), t.adUnitCode = d.getBidIdParameter("adUnitCode", e), t.auctionId = d.getBidIdParameter("auctionId", e), t.transactionId = d.getBidIdParameter("transactionId", e), t;
function i(e)
return 0 < parseInt(e);
Object(a.registerBidder)(n);
}
}, [741]);
pbjsChunk([76], {
761: function _(r, e, t)
r.exports = t(762);
,
762: function _(r, e, t) {
"use strict";
Object.defineProperty(e, "__esModule",
value: !0
), t.d(e, "tripleliftAdapterSpec", function ()
return s;
);
var n = t(2),
i = t(1),
o = t(0),
u = t(3);
function p(r) function (r)
if ("undefined" != typeof Symbol && Symbol.iterator in Object(r)) return Array.from(r);
(r)
function d(r, e)
(null == e
var a = !0,
c = null,
s = {
code: "triplelift",
supportedMediaTypes: [n.b],
isBidRequestValid: function isBidRequestValid(r)
return void 0 !== r.params.inventoryCode;
,
buildRequests: function buildRequests(r, e) {
var t,
n = "https://tlx.3lift.com/header/auction?",
i = function (r) {
var e = ,
t = r[0].schain;
e.imp = r.map(function (r, e) {
return
id: e,
tagid: r.params.inventoryCode,
floor: r.params.floor,
banner:
format: r.sizes.filter(l).map(function (r)
return
w: r[0],
h: r[1]
;
)
;
});
var n = [].concat(p(function (r)
return f(r, "tdid"https://slate.com/human-interest/2020/09/,"adserver.org"https://slate.com/human-interest/2020/09/,"TDID");
(r)), p(function (r)
return f(r, "idl_env"https://slate.com/human-interest/2020/09/,"liveramp.com"https://slate.com/human-interest/2020/09/,"idl");
(r)), p(function (r)
return f(r, "criteoId"https://slate.com/human-interest/2020/09/,"criteo.com"https://slate.com/human-interest/2020/09/,"criteoId");
(r)));
0 < n.length && (e.user =
ext:
eids: n
);
t && (e.ext =
schain: t
);
return e;
}(r);
return n = o.tryAppendQueryString(n, "lib"https://slate.com/human-interest/2020/09/,"prebid"), n = o.tryAppendQueryString(n, "v"https://slate.com/human-interest/2020/09/,"3.23.0"), e && e.refererInfo && (t = e.refererInfo.referer, n = o.tryAppendQueryString(n, "referrer", t)), e && e.timeout && (n = o.tryAppendQueryString(n, "tmax", e.timeout)), e && e.gdprConsent && (void 0 !== e.gdprConsent.gdprApplies && (a = e.gdprConsent.gdprApplies, n = o.tryAppendQueryString(n, "gdpr", a.toString())), void 0 !== e.gdprConsent.consentString && (c = e.gdprConsent.consentString, n = o.tryAppendQueryString(n, "cmp_cs", c))), e && e.uspConsent && (n = o.tryAppendQueryString(n, "us_privacy", e.uspConsent)), !0 === u.b.getConfig("coppa") && (n = o.tryAppendQueryString(n, "coppa", !0)), n.lastIndexOf("&") === n.length - 1 && (n = n.substring(0, n.length - 1)), o.logMessage("tlCall request built: " + n),
method: "POST",
url: n,
data: i,
bidderRequest: e
;
},
interpretResponse: function interpretResponse(r, e) []).map(function (r)
return function (r, e) (t, r);
);
,
getUserSyncs: function getUserSyncs(r, e, t, n)
var i = function (r)
if (!r) return;
if (r.iframeEnabled) return "iframe";
if (r.pixelEnabled) return "image";
(r);
if (i)
var u = "https://eb2.3lift.com/sync?";
return "image" === i && (u = o.tryAppendQueryString(u, "px", 1), u = o.tryAppendQueryString(u, "src"https://slate.com/human-interest/2020/09/,"prebid")), null !== c && (u = o.tryAppendQueryString(u, "gdpr", a), u = o.tryAppendQueryString(u, "cmp_cs", c)), n && (u = o.tryAppendQueryString(u, "us_privacy", n)), [
type: i,
url: u
];
};
function f(r, e, t, n) {
return r.map((o = e, function (r)
return r && r.userId && r.userId[o];
)).filter(function (r)
return !!r;
).map((i = t, u = n, function (r)
return
source: i,
uids: [
id: r,
ext:
rtiPartner: u
]
;
));
var i, u, o;
}
function l(r)
return 2 === r.length && "number" == typeof r[0] && "number" == typeof r[1];
Object(i.registerBidder)(s);
}
}, [761]);
pbjsChunk([75], {
763: function _(e, r, t)
e.exports = t(764);
,
764: function _(e, r, t) {
"use strict";
Object.defineProperty(r, "__esModule",
value: !0
), t.d(r, "spec", function ()
return v;
);
var m = t(0),
s = t(1),
o = t(10),
c = t(2),
f = "Bid from response has no auid parameter - ",
l = "Bid from response has no adm parameter - ",
p = "Array of bid objects is empty",
g = "Can't find in requested bids the bid with auid - ",
u = "Seatbid array from response has empty item",
y = "Response is empty",
b = "Response has empty seatbid array",
h = "Seatbid from response has no array of bid objects - ",
v = {
code: "trustx",
supportedMediaTypes: [c.b, c.d],
isBidRequestValid: function isBidRequestValid(e)
return !!e.params.uid;
,
buildRequests: function buildRequests(e, r)
var a,
o,
p = [],
u = ,
c = ,
f = ,
l = "net";
(e ,
interpretResponse: function interpretResponse(e, r, t) {
var s = 2 < arguments.length && void 0 !== t ? t : o.a;
e = e && e.body;
var n,
d = [],
i = r.bidsMap,
a = r.data.pt;
return e ? e.seatbid && !e.seatbid.length && (n = b) : n = y, !n && e.seatbid && e.seatbid.forEach(function (e) {
!function (e, d, r, t, s)
if (!e) return;
var n;
e.auid (function (e) (e), i, a, d, s);
}), n && m.logError(n), d;
},
getUserSyncs: function getUserSyncs(e)
if (e.pixelEnabled) return [
type: "image",
url: "https://sofia.trustx.org/push_sync"
];
};
function E(e)
var r;
r = e.value, m.isArray(r) && 0 < r.length && "" === e.value[0] && delete e.value;
function w(e)
e.renderer.push(function ()
window.ANOutstreamVideo.renderAd(
targetId: e.adUnitCode,
adResponse: e.adResponse
);
);
Object(s.registerBidder)(v);
}
}, [763]);
pbjs.processQueue();
}, ];
window.modules["via.legacy"] = [function(require,module,exports){"use strict";
DS.service("via", function () {
"use strict"; // remove `via` from url, to be used after amplitude logs it to prevent users from sharing such urls
function removeFromLocation()
var url = new URL(location.href);
url.searchParams.delete("via");
history.replaceState(null, "", url.toString());
// and add `via` param to any outbound links
function addViaToUrl(href, via) // keys correspond to "page_types" in editable_components.yml
var PREFIXES =
article: "article",
homepage: "homepage",
"vertical front": "section",
"rubric front": "rubric"
;
var pageType;
function setPageType(amplitudePageType)
pageType = PREFIXES[amplitudePageType];
var DELIMITER = "_";
function concatVia(node, via)
var tag = node.dataset && node.dataset.via;
if (tag)
via = (via.length ? tag + DELIMITER : tag) + via;
return via;
function addToClickedLinks()
document.documentElement.addEventListener("click", function (e)
var a;
var via = ""; // detect link nodes and collect via directives to append to the href
var node = e.target; // the element where this event originated may have been removed from the dom, e.g. in the case of the OIL CMP which disappears after you interact with it
while (node && node !== e.currentTarget)
if (node.tagName === "A")
a = node;
via = concatVia(node, via);
node = node.parentNode;
if (a && via)
if (pageType)
via = pageType + DELIMITER + via;
a.href = addViaToUrl(a.href, via);
);
function addToSubmittedForms()
document.documentElement.addEventListener("submit", function (e)
var form = e.target; // collect via directives
var via = "";
var node = e.target;
while (node !== e.currentTarget)
via = concatVia(node, via);
node = node.parentNode;
if (via)
if (pageType)
via = pageType + DELIMITER + via;
// dynamically create a hidden input for the form url
var input = document.createElement("input");
input.type = "hidden";
input.name = "via";
input.value = via;
form.appendChild(input);
);
// start listening only once, when first injected
addToClickedLinks();
addToSubmittedForms();
return
setPageType: setPageType,
removeFromLocation: removeFromLocation
;
});
}, ];
window.modules["visibility.legacy"] = [function(require,module,exports){"use strict";
DS.service("$visibility", ["$document"https://slate.com/human-interest/2020/09/,"$window"https://slate.com/human-interest/2020/09/,"_throttle"https://slate.com/human-interest/2020/09/,"Eventify", function ($document, $window, _throttle, Eventify)
var list = [],
Visible,
VisibleEvent;
/**
* @param number a
* @param number b
* @returns *
* @see http://jsperf.com/math-min-vs-if-condition-vs/8
*/
function min(a, b)
return a < b ? a : b;
/**
* @param number a
* @param number b
* @returns *
* @see http://jsperf.com/math-min-vs-if-condition-vs/8
*/
function max(a, b)
return a > b ? a : b;
/**
* Fast loop through watched elements
*/
function onScroll()
list.forEach(updateVisibility);
/**
* updates seen property
* @param Visble item
* @param evt
* @fires Visible#shown
* @fires Visible#hidden
*/
function updateSeen(item, evt)
var px = evt.visiblePx,
percent = evt.visiblePercent; // if some pixels are visible and we're greater/equal to threshold
if (px && percent >= item.shownThreshold && !item.seen)
item.seen = true;
setTimeout(function ()
item.trigger("shown", new VisibleEvent("shown", evt));
, 15); // if no pixels or percent is less than threshold
else if ((!px
/**
* sets preload property
* @param Visible item
* @param evt
* @param Number innerHeight
* @fires Visible#preload
*/
function updatePreload(item, evt, innerHeight)
if (!item.preload && item.preloadThreshhold && shouldBePreloaded(evt.target, evt.rect, item.preloadThreshhold, innerHeight))
item.preload = true;
setTimeout(function ()
item.trigger("preload", new VisibleEvent("preload", evt));
, 15);
/**
* Trigger events
* @param Visible item
*/
function updateVisibility(item)
/**
* Return normalized viewport height
* @return number
*/
function getViewportHeight()
return $window.innerHeight
/**
* Return normalized viewport width
* @return number
*/
function getViewportWidth()
/**
* make sure an element isn't hidden by styles or etc
* @param Element el
* @return Boolean
*/
function isElementNotHidden(el)
return el && el.offsetParent !== null && !el.getAttribute("hidden") && getComputedStyle(el).display !== "none" && getComputedStyle(el).visibility !== "hidden";
/**
* Apparently the fastest way...
* @param Element el
* @returns boolean
* @example if (!$visibility.isElementInViewport(el)) ...
*/
function isElementInViewport(el)
/**
* @param Element el
* @param ClientRect rect
* @param Number preloadThreshhold
* @param Number innerHeight
* @return Boolean
*/
function shouldBePreloaded(el, rect, preloadThreshhold, innerHeight)
return rect.top <= innerHeight + preloadThreshhold && isElementNotHidden(el);
/**
* Create a one-dimensional spacial hash of x
* @param number x
* @param number stepSize
* @param number optimalK
* @param number base
* @return number
*/
function getLinearSpacialHash(x, stepSize, optimalK, base)
/**
* @param ClientRect rect
* @param number innerHeight
* @returns number
*/
function getVerticallyVisiblePixels(rect, innerHeight)
return min(innerHeight, max(rect.bottom, 0)) - min(max(rect.top, 0), innerHeight);
/**
* Get offset of element relative to entire page
*
* @param Element el
* @returns left: number, top: number
* @see http://jsperf.com/offset-vs-getboundingclientrect/7
*/
function getPageOffset(el)
var offsetLeft = el.offsetLeft,
offsetTop = el.offsetTop;
while (el = el.offsetParent)
offsetLeft += el.offsetLeft;
offsetTop += el.offsetTop;
return
left: offsetLeft,
top: offsetTop
;
/**
* Create a new Visible class to observe when elements enter and leave the viewport
*
* Call destroy function to stop listening (this is until we have better support for watching for Node Removal)
* @param Element el
* @param shownThreshold: number, hiddenThreshold: number [options]
* @class
* @example this.visible = new $visibility.Visible(el);
*/
Visible = function Visible(el, options) 0;
this.shownThreshold = options && options.shownThreshold ;
Visible.prototype =
/**
* Stop triggering.
*/
destroy: function destroy()
// remove from list
list.splice(list.indexOf(this), 1);
/**
* @name Visible#on
* @function
* @param 'shown' e EventName
* @param function cb Callback
*/
/**
* @name Visible#trigger
* @function
* @param 'hidden' e
* @param
*/
;
Eventify.enable(Visible.prototype);
VisibleEvent = function VisibleEvent(type, options)
var _this = this;
this.type = type;
Object.keys(options).forEach(function (key)
_this[key] = options[key];
);
; // listen for scroll events (throttled)
$document.addEventListener("scroll", _throttle(onScroll, 200)); // public
this.getPageOffset = getPageOffset;
this.getLinearSpacialHash = getLinearSpacialHash;
this.getVerticallyVisiblePixels = getVerticallyVisiblePixels;
this.getViewportHeight = getViewportHeight;
this.getViewportWidth = getViewportWidth;
this.isElementNotHidden = isElementNotHidden;
this.isElementInViewport = isElementInViewport;
this.Visible = Visible;
]);
}, ];
require=(function e(t,n,r){function s(o,u){if(!n[o])if(!t[o])var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",fvar l=n[o]=exports:;t[o][0].call(l.exports,function(e)var n=t[o][1][e];return s(n?n:e),l,l.exports,e,t,n,r)return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o