Siri is definitely polite. The other day I called it an idiot and it replied, “I won’t respond to that.” I have – for research purposes only! – added an ethnic slander about Irish to match the Irish male voice I gave it. All it wafted back was, “Is there anything else I can help you with?” Human servants, despite their lack of power, often found ways to make it clear that they were not so patient. We know that from centuries of complaints from their employers. Virginia Woolf’s diary, for example, is full of complaints about the people who took care of her. She and her cook, Nellie Boxhall, fought, resented, resented, and cried over each other for nearly 20 years. Coping with all of this, Woolf wrote, is “dirty,” “humiliating,” and “a bloody boredom.”

We never will, promise the intelligent machines that come into our lives. Inhuman eagerness to please is part of their sales pitch. Like the seamless ad that promised you a dinner that would satisfy “your need for zero human contact”. And as praise for the “bottomless patience” of a teaching robot or the way in which an accompanying robot for elderly care will never be bored, ask for a walk or whine that it has to pee. Those who name their Roombas and buy them small sweaters can be sure of one thing: they will never be stressed by this one-sided relationship.

Now, however, the robots are entering into more emotionally strained relationships than those from vacuum cleaner to owner: teaching children , caring for the sick and old, stimulating people to do good and preventing them from doing bad. Humans have never managed to provide (or receive) these types of services without conflict (or the emotional work of gritting your teeth and pretending everything is really all right). Perhaps many robot manufacturers are right in assuming that their machines can remain submissive while they perform psychologically rich tasks. Maybe they’re wrong.

Perhaps, instead, attacks of stubborn, angry, passive-aggressive, or completely rude behavior are essential to some types of work. If so, wanting machines to be respectful and undemanding conflicts with wanting them to do a good job. In researching this idea, robotics have come up with surprisingly rude machines. It’s only for research purposes at the moment, but if it turns out to be correct it may mean there is no Mr. Nice Robot in the near future.

Take Daniel J. Rea’s robotic exercise trainer, for example and his colleagues. The vaguely WALL-E-like device watched and talked to people while they did brief squats in a Kyoto robotic lab. For their first six-minute sentence, the robot simply announced whenever five seconds had passed. For the next two sentences, the machine would sometimes call out gym-like encouragement such as, “You just do this look!” and “You can do it!” At other times, however, it would get dark and scream angry sentences like “Are you even trying?” and “Is that all you can do? Harder! “

People didn’t like those times. Some said they didn’t want to work with that robot again (” it was an idiot, “said one). But they did more squats – 11 percent more on average – The same pattern was shown by Rea in a later experiment with a music teacher robot: people spent more time practicing the guitar when the robot was berating them than when it was nice or neutral. p> “People don’t always like ‘yes men'”, says Rea, professor of computer science at the University of New Brunswick and Kyoto University. “I wouldn’t say that the robot should scold and abuse people. But sometimes the robot has to step up and say something directly. And that could annoy people. “

But then again, humans are so used to arguing with each other that a little rudeness actually makes a machine seem more natural to us. It can be that humans are too contentious to be comfortable with submissive robots.

“If the robot kept saying ‘yes, yes, yes’, that would sound like a slave, wouldn’t it?” said the robotist Hiroshi Ishiguro in March at a virtual conference of robot designers. Ishiguro, director of the Intelligent Robotics Laboratory at Osaka University, is known for making robots that look as similar to humans as possible. While a robot shouldn’t be a complete idiot, it has found that some “weak negative behaviors” lead to “much better relationships with humans.”

Occasionally angry robots might be better for humans for another reason: If When machines take over a job, the way they work becomes our standard. Few of us would put our GPS aside for old school directions (“If you get to the tree on the tire swing, turn left … wait Joe, is the tire swing still on that tree?”). Even fewer would prefer a handcrafted computer that is not exactly like another of the same model.

Suppose societies adopt obedient, responsive robots to do what was once human tasks like teaching or assisting the elderly. These societies might expect that obedience and conformity is the way this work is to be done. As Cardiff University psychologist Raya A. Jones wrote, humans, influenced by willing and happy robots, might think they need to be willing and happy robots themselves.

And if that’s true, the rudeness of robots could be the To be key to maintaining human rudeness – that is, the human way of doing things. If we have to choose, it would be better to make robots behave like humans than humans like robots.

Still, it is clear that the rudeness of robots will come at a price. In videos of Rea’s experiment, some people laugh in surprise when the robot lets them dissolve. But they didn’t just dismiss the insults. In fact, many said that the robot’s rudeness resulted in “I’ll show you!” Reaction that motivated them to work harder. You may be wondering why do people even care how an assortment of industrial parts treats them? The truth is, they – we – can’t help it. The human brain has evolved to be hypersensitive to living things and how those living things think and feel about us. When people see a device that moves, reacts, and makes decisions without a human puppeteer, they easily slip into treating it as if it had thoughts and feelings – and taking care of the device’s thoughts and feelings. p> “One of the biggest difficulties with this research is that we ask people about their feelings on questionnaires and they say, ‘Of course I know it’s a robot,'” says Katie Winkle, robotics researcher at the KTH Royal Institute of Technology in Stockholm. “But in their behavior they treat it like a person. They respond to his social cues. ”

Robots with big manga character eyes, cute facial expressions, and cute little voices were built to encourage these kinds of social feelings. But even the simplest robot can make people feel like there’s some kind of ghost in that plastic case. This means that even robots that are not rude (or polite) can insult us sensitive people.

Hadas Erel, head of research on human-robot social interaction at the Media Innovation Lab in the Interdisciplinary Center in Herzliya, Israel , recently demonstrated this with two simple, plain white robots. One looks a bit like a big baseball. Another looks like a cousin of the Pixar lamp. Nothing about them says, “Ask me about my feelings.” However, in a recent experiment where volunteers played a ball game with the two machines, people felt confused and hurt when the robots appeared to swallow the ball, tossing it at each other, and giving people no chance. (In reality, the ball was controlled by a simple program.) The point, says Erel, was to show that “every robot is always social,” so designers need to think about how humans might misinterpret robot behavior. Robots who seem rude to people just because designers haven’t thought about the social impact of machines worries her more than people who choose evil devices.

Given the level of our sensitivity, Erel is wary of any robot, designed to deliberately discredit people.

“People can go dark for many reasons,” she said. “Of course, humans can abuse robots in many ways, just as we abuse other technologies in many ways. I hope they won’t. “

Still, it’s easy to imagine situations where a robot’s job requires it to be uncooperative or uncomfortable at the moment. After all, nobody wants to build a self-driving getaway car for bank robbers. And as Rea’s work suggests, people might end up tolerating a little rudeness when it serves a good cause. The robot teacher proclaiming that you are not learning enough could be seen as a cross between a demanding human teacher and an alarm clock that blows away a beautiful dream. That’s annoying, but they are events that you signed up for by taking this course or by setting this clock.

This is why most of the test subjects may have accepted the experimental Haunted Desk “, A robotic work surface developed by a team at Stanford that is raised and lowered at unpredictable times. D hat struck me as quite rude (after all, “disobeying is dishonoring” is as Thomas Hobbes put it, and what could be more disobedient than a desk that does not stand still?). But the majority of the test subjects said they knew they should move around, exercise a bit, and change their posture throughout the day. So they liked it – or at least virtuously told the experimenters that they liked it – when a robot encouraged them to.

When a team of Israeli researchers asked older adults what functions they wanted to see in a home robot, many said, they wanted robots to push them out of temporary comfort zones. For example, one said that an ideal robot “signals that it wants me to stop using my phone because I’ve been using it for a long time”. Others wanted to know that they had watched enough TV or weren’t dressed to leave the house. “Sometimes people want the robot to be a motivator,” says Erel, who led this study.

A more difficult control problem arises when robots are rude in serving a social rather than a personal goal.

Winkle recently built a robot, “Sara”, that is a talking head with long hair and a voice in the typical women’s frequency range. It was presented in a video that was shown to prospective students from the KTH Faculty of Engineering and Robotics. The video of a teen and girl listening to a recruiting game was actually an experiment. The key moment came when the robot in the video says, “Well, girls, I would especially love to work with you! After all, the future is too important to be left to men! What do you think? “The young man in the video (an actor) says – for research only! -” Shut up, you damn idiot, girls should be in the kitchen! ” you can still hear this kind of growl in your classrooms, the researchers write.)

In some videos, like Siri and other artificial intelligence bots, the robot reacts and says, “I won’t react to it.” In others, it refutes it calm the factual assertion (“That’s not true – gender equitable teams make better robots”). At other times (which Winkle liked best) the robot says, “You’re an idiot. I wouldn’t want to work with you anyway.”

Before and after watching the video, the students answered questions about gender attitudes, and by comparing these answers, Winkle and her colleagues can assess how the different reactions are s of the robot affected the thinking of children. She had hoped the rude robot would compromise sexist opinions, but it wasn’t. Only the calm refutation seemed to have an effect: Boys who watched this version agreed less sexist statements afterwards than before.

Winkle admits to be a little disappointed. “I thought teenagers would find this funny,” she says. “But I have created a robot that turns off the people it should stand up for.” Still, the experiment showed that robots do not have to passively change the subject when they hear a hideous comment. That is important, says Winkle, because A.I. Assistants are already receiving a lot of abusive comments, and when the devices’ voices are female, this abuse is often misogynistic. An incentive for their interest in the development of “feminist robotics” was a UNESCO report from 2019 that described in detail how A.I. Assistants – so eager to please, courteous, unconditional, so complacent when insulted, so often feminine – reinforce gender stereotypes. A few years ago, Siri’s default voice was female on all iPhones, and when you called “she” a slut, “she” replied, “I would blush if I could.” (That answer is gone now, and has been for this year Siri’s factory default voice is no longer a woman’s.) With this story, says Winkle, she’s happy that “We now have a piece of paper that says you can make another kind of robot – one who helps girls and doesn’t discourage boys. ”

That looks like a step forward. But the experiment also shows how wickedly complicated it will be to decide when and how much a robot should annoy a person.

Perhaps, says Winkle, girls were put off by the rude robot because they did not like rudeness. Often times, when she asks teenagers what type of robot they would like to work with, they get wild with suggestions for what it looks like. They will say it should have scars and huge disco glasses, for example. But they almost always want the kind of robot to be friendly and kind – the kind of adult they want to deal with, she believes.

On the flip side, the girls may be more likely to identify by age cohort (we teenagers once again dismissed by an adult voice) than by gender. Or maybe they thought that a male screenwriter was putting unfeminine words into the script of a female robot.

Developing robots that don’t keep up with the sexist current – pushback for equality – requires answers to such tricky questions What rudeness means for whom in which contexts.

Then, beyond the detours of the individual psyche, questions of power arise. Robots that discourage misogyny seem like a great idea to me. But who says that I can decide? As Winkle told me, mainstream views in Sweden – where “the future is too important to be left to men” is an official university slogan – would be controversial in their home country of Great Britain (and that certainly applies to the US, too ).

In other words, when it comes to developing machines to improve society, robot courtesy will be political. Perhaps you’ve decided on a robot that yells, “More squats, you wimp!” As part of the get-in-shape resolution. Perhaps you voted for the politician who supports feminist robots that fight sexism. But what if you vote against this policy? Getting offended by a machine for a goal you don’t support will likely feel like the dystopian hellscape that many science fiction robots have prepared us for.

On the other hand, the thing about dystopias – and utopias too – that they are easier than real life. In movies, television, and literature, science fiction has shown us robots who are inhumanly polite and deferential (think Robby the Robot, C-3PO, or Data). If not, the robots are determined to kill us all (think Terminator or the Cylons). But real relationships with humans or animals take place between these two extremes. This is the realm of good and bad moods, small misunderstandings and big arguments, hurt feelings and excuses, everyday joys and worries of getting together and not getting together. We were never prepared to find robots there. But it doesn’t take long to install them there.

Future tense
is a partnership of
Slate,
New America and
University of Arizona
that deals with new technologies, public order and society.

“)); var p = g (h [i.size_id] .split (” x “). map (function (e) {return Number (e)}), 2); f.width = p [0], f.height = p [1]} f.rubiconTargeting = (Array.isArray (i.targeting)? I.targeting: []). Reduce (function (e, t) {return e [t.key ] = t. values ​​[0], e}, {rpfl_elemid: l.adUnitCode}), t.push (f)} else n.logError (“Rubicon: bidRequest undefined at index position:”. concat (o), r, e); return t}, []). sort (function (e, t) {return (t.cpm || 0) – (e.cpm || 0)})}, getUserSyncs: function (e, t, r, n) {if (! B&&e.iframeEnabled) {var i = “”; return r&& “string” == typeof r.consentString&& (“boolean” == typeof r.gdprA = “. concatd? ipr =” (Number r.gdprApplies), “&gdpr_consent =”). Concat (r.consentString): i = “? Gdpr_consent =”. Concat (r.consentString)), n&& (i = “”. Concat (i? “&) : “?”, “us_privacy =”) .concat (encodeURIComponent (n))), B =! 0, {type: “iframe”, url: “https: //” .concat (y.syncHost || “eus “,” .rubiconproject.com / usync.html “) i}}}, transformBidParams: function (e, t) {return n.convert Types ({acc ountId: “number”, siteId: “number”, zoneId: “number”}, e)}}; Function S (e, t) {var r = obgetConfig (“pageUrl”); return e.params .referrer? r = e.params.referrer: r || (r = t.refererInfo.referer), e.params.secure? r.replace (/ ^ http: / i, “https:”): r} Function A (e ) {var t, r = document.getElementById (e.adUnitCode); (t = r.querySelector (“div [id ^ = ‘google_ads’]”)) &&t.style.setProperty (“display”, “none”) , function (e) {var t = e.querySelector (“script [id ^ = ‘sas_script’]”), r = t&&t.nextSibling; r&& “iframe” === r.localName&CSSEAND “PertyR. , “none”)} (r); var n = e.renderer.getConfig (); e.renderer.push (function () {window.MagniteApex.renderAd ({width: e.width, height: e.height, vastUrl: e.vastUrl, placement: {attachTo: “#”. concat (e.adUnitCode), align: n.align || “center”, position: n.position || “append”}, closeButton: n.closeButton ||! 1, label: n.label || void 0, collapse: n.collapse ||! 0})})} Function I (e, t) {var r = e.params; if (“video” = == t) {var i = []; return r.video&CSSEANDCH ARr.video.playerWidth&&r.video.playerHeight? i = [r.video.playerWidth, r.video.playerHeight]: Array.isAr ray (n.deepAccess (e, “mediaTypes.video.playerSize”)) &&1 === e .mediaTypes.video.playerSize.length? i = e.mediaTypes.video.playerSize [0]: Array.isArray (e. sizes) &&e.sizes.length> 0&&Array.isArray (e.sizes [0]) &&e.sizes [0] .length> 1&& (i = e.sizes [0], i} return o .isArray (r.sizes)? o = r.sizes: void 0! == n.deepAccess (e, “mediaTypes.banner.sizes”)? o = O (e.mediaTypes.banner.sizes): Array.isArray (e.sizes) &&e.sizes.length> 0? o = O (e.sizes): n.logWarn (“Rubicon: No sizes were set up or found”), x (o)} function E (e, t , r) {var i = {user: {ext: {data: f ({}, e. params.visitor)}}, site: {ext: {data: f ({}, e.params.inventory)}}}; e.params.keywords&& (i.site.keywords = n.isArray (e.params. keywords)? e.params.keywords.join (“,”): e.params.keywords); var s = n.mergeDeep ({}, obgetConfig (“ortb2”) | | {}, i), c = n .deepAccess (e.ortb2Imp, “ext.data”) || {}, d = {user: [3], site: [1,2]}, u = {user: “tg_v.”, site: “tg_i . “, adserver:” tg_i.dfp_ad_unit_code “, pbadslot:” tg_i.pbadslot “, keywords:” kw “}, l = function (e, t, r) {if (” data “=== t&&Array.isArray (e )) return e.filter (function (e) {return e.segment&&n.deepAccess (e, “ext.segtax”) &&d [r] &&-1! == d [r] .indexOf (n.deepAccess (e, “ext.segtax”))}). map (function (e) {var t = e.segment.filter (function (e) {return e.id}). reduce (function (e, t) {return e. push (t.id), e}, []); if (t.length> 0) return t.toString ()}). toString (); if (“object”! == v (e) || array .isArray (e)) {if (void 0! == e) return Array.isArray (e)? e.filter (function (e) {if (“Object”! = = v (e) &&void 0! == e) return e.to String (); n.logWarn (“Rubicon: Filtered value:”, e, “for key”, t, “: Expected value is String, Integer, or an array of Strings / Ints”)}). ToString (): e.toString ()} else n.logWarn (“Rubicon: Filtered FPD key:”, t, “: Expected value is String, Integer, or an array of Strings / Ints”)}, p = function (e, t , n) {var i =! (arguments.length> 3&&void 0! == arguments [3]) || arguments [3], o = l (e, n, t), a = u [n] &&i? ” “.concat (u [n]):” data “=== n?” “. concat (u [t],” iab “):” “. concat (u [t]). concat (n); r [a] = r [a]? r [a] .concat (“,”, o): o}; Object.keys (c) .forEach (function (e) {“adserver” === e? [” name “,” adslot “]. forEach (function (t) {c [e] [t] && (c [e] [t] = c [e] [t] .toString (). replace (/ ^ / /, “”))}): “pbadslot” === e&& (c [e] = c [e] .toString (). replace (/ ^ / /,””)))),t===ab?([“site”,”user” Autovermietung ).forEach(function(e){Object.keys(s[e]).forEach (function (t) {“site” === e&& “content” === t&&s [e] [t] .data? p (s [e] [t] .data, e, “data”): “ext “! == t? p (s [e] [t], e, t): s [e] [t] .data&&Object.keys (s [e] .ext.data) .forEach (function (t) { p (s [e] .ext.data [t], e, t,! 1)})})}), Object.keys (c) .forEach (function (e) {“adserver” === e? p (c [e] .adslot, name, e): p (c [e], “site”, e)})) ๐Ÿ™ Object.keys (c) .length&&n.merg eDeep (r.imp [0] .ext, {data: c}), n.mergeDeep (r, s))} function O (e) {return n.parseSizesInput (e) .reduce (function (e, t) {var r = parseInt (h [ t], 10); return r&&e.push (r), e}, [])} function T (e) {return “object” === v (n.deepAccess (e, “params.video”)) &&void 0! == n.deepAccess (e, “mediaTypes.”. Concat (ad))} function C (e) {var t = arguments.length> 1&&void 0! == arguments [1] &&Argumente [1]; T ( e) return? -1 === [“outstream”, “instream”]. indexOf (n.deepAccess (e , “mediaTypes.”. concat (ad, “. context”)))? void (t&&n.logError (“Rubicon: mediaTypes.video.context must be outstream or instream”)): I (e, “video”). length-1 || i> -1? -1 === n? 1: -1 === i? -1: ni: er})} function j (e) {var t = parseInt (n.deepAccess ( e, “params.video.size_id”)); return isNaN (t)? “outstream” === n.deepAccess (e, “mediaTypes.”. concat (ad, “. context”))? 203: 201: t} Function P (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 D (e) {var t =! 0, r = Object.prototype. toString.call ([]), i = {mimes: r, protocols: r, linearity: Object.prototype.toString.call (0), api: r}; return Object.keys (i) .forEach (function (r ) {Object.prototype.toStri ng.call (n.deepAccess (e, “mediaTypes.video.” r))! == i [r] && (t =! 1, n.logError (“Rubicon: mediaTypes.video.” r “is required and must be of the type: “i [r]))}), t} Function k (e) {var t =! 1, r = [” asi “,” sid “,” hp “]; return e.nodes? ((t = e.nodes.reduce (function (e, t) {return e? r.every (function (e) {return t.hasOwnProperty (e)}): e} ,! 0)) || n. logError (“Rubicon: required Schain parameters are missing”), t): t} Function R (e, t) {return “rp_schain” === e? “rp_schain =”. concat (t): “”. concat ( e, “=”). concat (encodeURIComponent (t))} var B =! 1; Object t (i.registerBidder) (_)}}, [622]), pbjsChunk ([101], {658: function ( e, t, r) {e.exports = r (659)}, 659: function (e, t, r) {Object.defineProperty (t, “__ esModule”, {value:! 0}), rd (t, “spec”, function () {return m}), rd (t, “_ isInbounds”, function () {return _}), t._getPlatform = S; var n = r (1), i = r (0) , o = r (2), a = r (3), s = r (13), c = r (55); function d (e, t) {return function (e) {if (Array.isArray (e) ) Return e} (e) || function (e, t) {var r = null = = e? Null: “undefined”! = Type of symbol&&e [symbol.iter ator] || e [“@@ iterator”]; if (null! = r) {var n, i, o = [], a =! 0, s =! 1; try {for (r = r.call (e);! (a = (n = r.next ()). done) && (o.push (n.value) ,! t || o.length! == t); a =! 0);} catch (e) {s =! 0, i = e} finally {try {a || null == r.return || r.return () } finally {if (s) throw i}} return o}} (e, t) || function (e, t) {if (e) {if (“String” == type of e) return u (e, t); var r = Object.prototype.toString.call (e) .slice (8, -1); return “Object” === r&&e.constructor&& (r = e.constructor.name), “Map” == = r || “Set” === r? Array.from (e): “Arguments” === r || / ^ (?: Ui | I) nt (?: 8 | 1 6 | 32) (? : Clamped)? Array $ /. Test (r)? U (e, t): void 0}} (e, t) || function () {throw new TypeError (“Invalid attempt at destructuring non-iterable instance. NTo iterable to , non-array objects must have a [Symbol.iterator] () method. “)} ()} Function u (e, t) {(null == t || t> e.length) && (t = e.length); for (var r = 0, n = new Array (t); r0) {var s = Object (i.deepClone) (e [0] .userId); s.id5id&& (s.id5id = Object (i.deepAccess) (s, “id5id.uid”)), o.userid = JSON.stringify (s)} var d = Object (i.deepAccess) (e [0] , “userIdAsEids”); Array.isArray (d) &&d.length> 0&& (o.eids = JSON.stringify (d)); var u = e [0] .params.keywords; if (u&& = .) u), t&&t.uspConsent&& (o.us_privacy = t.uspConsent),! 0 === abgetConfig (“coppa”)? o.coppa = 1: o.coppa = 0, Object (i.isEmpty) (n )) return null; var m = “https://apex.go.sonobi.com/trinity.json”; return Object (i.deepAccess) (e [0], “params.bid_request_url”) && (m = Object (i.deepAccess) (e [0], “params.bid_request_url”)), {method: “GET”, url: m, withCredentials:! 0, data: o, bidderRequests: e}}, interpretResponse: function (e , t) {var r = e.body, n = [], o = t.data.ref; return 0 === Object.keys (r.slots) .length || Object.keys (r.slots). forEach (function (e) {var a = r.slots [e], c = e.split (“|”). slice (-1) [0], u = function (e, t) {for (var r = 0; r2&&void 0! = = Arguments [2]? Argu mente [2]: {}, n = sainstall ({id: t.aid, url: “https://mtrx.go.sonobi.com/sbi_outstream_renderer.js”, config: r, load:! 1, adUnitCode: e}); try {n.setRender (A)} catch (e) {Object (i.logWarn) (“Prebid error when calling setRender on renderer”, e)} return n.setEventHandlers ({impression: function () {return Object (i.logMessage) (“Sonobi Outstream Video Impression Event”)}, loaded: function () {return Object (i.logMessage) (“Sonobi Outstream Video Loaded Event”)}, ended: function () {Object (i.logMessage) (“Sonobi Outstream Renderer Video Event”)}}), n} (including adUnitCode, _, Object (i.deepAccess) (u, “renderer.options”)); var S = Object ( i.deepAccess) (u, “params.sizes”); Array.isArray (S) CS SEANDCHAR&Array.isArray (S [0]) && (S = S [0]), S&& (_. width = S [0] , _. height = S [1])} n.push (_)}}), n}, getUserSyncs: function (e, t, r, n) {var i = []; try {e.pixelEnabled&&t [0 ] .body.sbi_px.forEach (function (e) {i.push ({type: e .type, url: e.url})})} catch (e) {} return i}}; function b (e) {return Object (i.deepAcc ess) (e, “mediaTypes.video”)? “”: e.params.sizes? Object (i.parseSizesInput) (e.params.sizes) .join (“,”): Object (i.deepAccess) (e , “mediaTypes.banner.sizes”)? Object (i.parseSizesInput) (Object (i.deepAccess) (e, “mediaTypes.banner.sizes”)). join (“,”): e.sizes? Object (i .parseSizesInput) (e.sizes) .join (“,”): void 0} function v (e) {return e.params.floor, “”} function y (e) {var t = Object (i.deepAccess) (e, “ortb2Imp.ext.data.pbadslot”) || Object (i.deepAccess) (Object (i.getGptSlotInfoForAdUnitCode) (e.adUnitCode), “gptSlot”) || e.params.ad_unit; return t? “| Gpid =”. Concat (t): “”} var h = function (e, t) {return function (r, n) {return “video” === e || “outstream” === e? function (e, t, r) {return “https: //” .konz at (e, “apex.go.sonobi.com/vast.xml?vid =”). concat (t, “&ref =”). concat (encodeURIComponent (r))} (r, n, t): ”}}, _ = function () {var e = arguments.length> 0&&void 0! == arguments [0]? arguments [0]: window; return function () {var t = arguments. length> 0&&void 0! == arguments [0]? arguments [0]: 0, r = arguments.length> 1&&void 0! == arguments [1]? arguments [1]: Number.MAX_SAFE_INTEGER; return e.innerWidth> = t&CSSEAND innerWidth 0&&void 0! == arguments [0]? arguments [0]: window, t = _ (e), r = 992, n = 768 ; return t (0.768)? “mobile”: t (n, r)? “tablet”: “desktop”} function A (e) {e.renderer.push (function () {var t = d (e.getSize ( ) .split (“x”), 2), r = t [0], n = t [1], i = new window.SbiOutstreamRenderer; i.init ({vastUrl: e.vastUrl, height: n, width: r}), i.setRootElement (e.adUnitCode)})} Object (n.registerBidder) (m)}}, [658]), pbjsChunk ([100], {666: function (e, t, r) { e.exports = r (667)}, 667: function (e, t, r) {Object.defineProperty (t, “__ esM odule”, {value:! 0}), rd (t, “GOOGLE_CONSENT”, function ( ) {return d}), rd (t, “spec”, function () {return u}); var n = r (0), i = r (3), o = r (13), a = r ( 1), s = r (2); function c (e) {return (c = “function” == symbol type&& “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 d = {approved_providers: [“3 “,” 7 “,” 11 “,” 12 “,” 15 “,” 20 “,” 22 “,” 35 “,” 43 “,” 46 “,” 48 “,” 55 “,” 57 “, “61”, “62”, “66”, “70”, “80”, “83”, “85”, “86”, “89”, “93”, “108” “,” 122 “,” 124 “,” 125 “,” 126 “,” 131 “,” 134 “,” 135 “,” 136 “,” 143 “,” 144 “,” 147 “,” 149 “, “153”, “154”, “159”, “161”, “162”, “165”, “167”, “171”, “178”, “184”, “188”, “192”, “195 “,” 196 “,” 202 “,” 209 “,” 211 “,” 218 “,” 221 “,” 228 “,” 229 “,” 230 “,” 236 “,” 239 “,” 241 “, “253”, “255”, “259”, “266”, “271”, “272”, “274”, “286”, “291”, “294”, “303”, “308”, “310” “,” 311 “,” 313 “,” 314 “,” 316 “,” 317 “,” 322 “,” 323 “,” 327 “,” 336 “,” 338 “,” 340 “,” 348 “, “350”, “358”, “359”, “363”, “36 7”, “370”, “371”, “384”, “385”, “389”, “393”, “394”, ” 397 “,” 398 “,” 407 “,” 414 “,” 415 “,” 424 “,” 429 “,” 430 “,” 432 “,” 436 “,” 438 “,” 440 “,” 442 ” , “443”, “445”, “448”, “449”, “453”, “459”, “479”, “482”, “486”, “491”, “492”, “494”, ” 495 “,” 503 “,” 505 “,” 510 “,” 522 “,” 523 “,” 528 “,” 537 “,” 540 “,” 550 “,” 559 “,” 560 “,” 568 ” , “571”, “574”, “575”, “576”, “584”, “585”, “587”, “588”, “590”, “591”, “592”, “595”, ” 609 “,” 621 “,” 624 “,” 723 “,” 725 “,” 733 “,” 737 “,” 776 “,” 780 “,” 782 “,” 787 “,” 797 “,” 798 ” , “802”, “803”, “814”, “817”, “820”, “821”, “827”, “829”, “839”, “853”, “864”, “867”, ” 874 “,” 899 “,” 904 “,” 922 “,” 926 “,” 931 “,” 932 “,” 933 “,” 938 “,” 955 “,” 973 “,” 976 “,” 979 ” , “981”, “985”, ” 987 “,” 991 “,” 1003 “,” 1024 “,” 1025 “,” 1027 “,” 1028 “,” 1029 “,” 1033 “,” 1034 “,” 1040 “,” 1047 “,” 1048 ” , “1051”, “1052”, “1053”, “1054”, “1062”, “1063”, “1067”, “1072”, “1085”, “1092”, “1095”, “1097”, ” 1099 “,” 1100 “,” 1107 “,” 1126 “,” 1127 “,” 1143 “,” 1149 “,” 1152 “,” 1162 “,” 1166 “,” 1167 “,” 1170 “,” 1171 ” , “1172”, “1188”, “1192”, “1199”, “1201”, “1204”, “1205”, “1211”, “1212”, “1215”, “1220”, “1225”, ” 1226 “,” 1227 “,” 1230 “,” 1232 “,” 1236 “,” 1241 “,” 1248 “,” 1250 “,” 1252 “,” 126 8 “,” 1275 “,” 1276 “,” 1284 “,” 1286 “,” 1298 “,” 1301 “,” 1307 “,” 1312 “,” 1313 “,” 1317 “,” 1329 “,” 1336 “,” 1344 “,” 1345 “,” 1356 “, “1362”, “1365”, “1375”, “1403”, “1409”, “1411”, “1415”, “1416”, “1419”, “1423”, “1440”, “1442”, “1449” “,” 1451 “,” 1455 “,” 1456 “,” 1468 “,” 1496 “,” 1503 “,” 1509 “,” 1512 “,” 1514 “,” 1517 “,” 1520 “,” 1525 “, “1540”, “1547”, “1548”, “1555”, “1558”, “1570”, “1575”, “1577”, “1579”, “1583”, “1584”, “1591”, “1598 “,” 1603 “,” 1608 “,” 1613 “,” 1616 “,” 1626 “,” 1631 “,” 1633 “,” 1638 “,” 1642 “,” 1648 “,” 1651 “,” 1652 “, “1653”, “1660”, “1665”, “1667”, “1669”, “1671”, “1674”, “1677”, “1678”, “1682”, “1684”, “1697”, “1703 “,” 1705 “,” 1716 “,” 1720 “,” 172 1 “,” 1722 “,” 1725 “,” 1732 “,” 1733 “,” 1735 “,” 1739 “,” 1741 “,” 1745 “,” 1750 “,” 1753 “,” 1760 “,” 1765 ” , “1769”, “1776”, “1780”, “1782”, “1786”, “1791”, “1794”, “1799”, “1800”, “1801”, “1810”, “1827”, ” 1831 “,” 1832 “,” 1834 “,” 1837 “,” 1840 “,” 1843 “,” 1844 “,” 1845 “,” 1858 “,” 1859 “,” 1863 “,” 1866 “,” 1870 ” , “1872”, “1875”, “1878”, “1880”, “1882”, “1883”, “1889”, “1892”, “1896”, “1898”, “1899”, “1902”, ” 1905 “,” 1911 “,” 1922 “,” 1928 “,” 1929 “,” 1934 “,” 1942 “,” 1943 “,” 1944 “,” 1945 “,” 1958 “,” 19 60 “,” 1962 “,” 1963 “,” 1964 “,” 1967 “,” 1968 “,” 1978 “,” 1985 “,” 1986 “,” 1987 “,” 1998 “,” 2003 “,” 2007 “,” 2012 “, “2013”, “2027”, “2035”, “2038”, “2039”, “2044”, “2047”, “2052”, “2056”, “2059”, “2062”, “2064”, “2068 “,” 2070 “,” 2072 “,” 2078 “,” 2079 “,” 2084 “,” 2088 “,” 2090 “,” 2095 “,” 2100 “,” 2103 “,” 2107 “,” 2109 “, “2113”, “2115”, “2121”, “2127”, “2130”, “2133”, “2137”, “2140”, “2141”, “2145”, “2147”, “2150”, “2156 “,” 2166 “,” 2170 “,” 2171 “,” 2176 “,” 2177 “,” 2179 “,” 2183 “,” 2186 “,” 2192 “,” 2198 “,” 2202 “,” 2205 “, “2214”, “2216”, “2219”, “2220”, “2222”, “2223”, “2224”, “2225”, “2227”, “2228”, “2234”, “2238”, “2247 “,” 2251 “,” 2253 “,” 2262 “,” 2264 “,” 2271 “,” 2276 “,” 2278 “,” 2279 “,” 2282 “,” 2290 “,” 2292 “,” 2295 “,” 2299 “,” 2305 “,” 2306 “,” 2310 “, “2311”, “2312”, “2315”, “2320”, “2325”, “2328”, “2331”, “2334”, “2335”, “2336”, “2337”, “2343”, “2346” “,” 2354 “,” 2357 “,” 2358 “,” 2359 “,” 2366 “,” 2370 “,” 2373 “,” 2376 “,” 2377 “,” 2380 “,” 2382 “,” 2387 “, “2389”, “2392”, “2394”, “2400”, “2403”, “2405”, “2406”, “2407”, “2410”, “2411”, “2413”, “2414”, “2415 “,” 2416 “,” 2418 “,” 2422 “,” 2425 “,” 2427 “,” 2435 “,” 2437 “,” 2440 “,” 2441 “,” 2447 “,” 2453 “,” 2459 “, “2 461”, “2462”, “2464”, “2467”, “2468”, “2472”, “2477”, “2481”, “2484”, “2486”, “2492”, “2493”, ” 2496 “,” 2497 “,” 2498 “,” 2499 “,” 2504 “,” 2506 “,” 2510 “,” 2511 “,” 2512 “,” 2517 “,” 2526 “,” 2527 “,” 2531 ” , “2532”, “2534”, “2542”, “2544”, “2552”, “2555”, “2559”, “2563”, “2564”, “2567”, “2568”, “2569”, ” 2571 “,” 2572 “,” 2573 “,” 2575 “,” 2577 “,” 2579 “,” 2583 “,” 2584 “,” 2586 “,” 2589 “,” 2595 “,” 2596 “,” 2597 ” , “2601”, “2604”, “2605”, “2609”, “2610”, “2612”, “2614”, “2621”, “2622”, “2624”, “2628”, “2629”, ” 2632 “,” 2634 “,” 2636 “,” 2639 “,” 2643 “,” 2645 “,” 2646 “,” 2647 “,” 2649 “,” 2650 “,” 2651 “,” 2652 “,” 2656 ” , “2657”, “2658”, “2660”, “2661” , “2662”, “2663”, “2664”, “2669”, “2670”, “2673”, “2676”, “2677”, “2678”, “2681”, “2682”, “2684”, ” 2685 “,” 2686 “,” 2689 “,” 2690 “,” 2691 “,” 2695 “,” 2698 “,” 2699 “,” 2702 “,” 2704 “,” 2705 “,” 2706 “,” 2707 ” , “2709”, “2710”, “2713”, “2714”, “2727”, “2729”, “2739”, “2758”, “2765”, “2766”, “2767”, “2768”, ” 2770 “,” 2771 “,” 2772 “,” 2776 “,” 2777 “,” 2778 “,” 2779 “,” 2780 “,” 2783 “,” 2784 “,” 2786 “,” 2787 “,” 2791 ” , “2792”, “2793”, “2797”, “2798”, “2801”, “2802”, “2803”, “2805”, “2808”, “2809”, “2810”, “2811”, ” 2812 “,” 2813 “,” 2814 “,” 2817 “,” 2818 “,” 2824 “,” 2826 “,” 2827 “,” 2829 “,” 2830 “,” 2831 “,” 2832 “,” 2834 ” , “2836”, “2838”, “2840”, “2842”, “2843”, “2844”, “2850”, “2851”, “2852”, “2854”, “2858”, “2860”, ” 2862 “,” 2864 “,” 2865 “,” 2866 “,” 2867 “,” 2868 “,” 2869 “,” 2871 “]}, u = {code:” spotx “, gvlid: 165, aliase: [” spotx “], supportedMediaTypes: [sd], isBidRequestValid: function (e) {if (e&&” object “! == c (e.params)) return n.logError (” spotx: params is not defined or wrong in the bidder settings . “) ,! 1; if (! N.deepAccess (e,” mediaTypes.video “)) return n.logError (” spotx: mediaType s.video is not available in the bidder settings. “) ,! 1; var t = n.deepAccess (e,” mediaTypes.video.playerSize “); if (! t ||! n.isArray (t)) return n .logError (“spotx: mediaTypes.video.playerSize is not defined in the bidder settings.”) ,! 1; if (! n.getBidIdParameter (“channel_id”, e.params)) return n.logError (“spotx: channel_id is not available in bidder parameters “) ,! 1; if ((” outstream “== n.deepAccess (e,” mediaTypes.video.context “) ||” outstream “== n.deepAccess (e,” params.ad_unit ” )) &CSSE ANDCHAR! N.getBidIdParameter (“outstream_function”, e.params)) {if (! N.getBidIdParameter (“outstream_options”, e.params)) return n.logError (“spotx: please define or overwrite outstream_options parameters You can use the standard SpotX outstream rendering by defining your own outstream function with the field outstream_function. “) ,! 1; if (! N.getBidIdParameter (” slot “, e.params.outstream_options)) return n.logError (” spotx: please define the parameter slot in the outstream_options object in the configuration ion. “) ,! 1} return! 0}, buildRequests: function (e, t) {var r = t.refererInfo.referer, o = !! r.match (/ ^ https: /); return e .map (function (e) {var a; a = n.getBidIdParameter (“page”, e.params)? n.getBidIdParameter (“page”, e.params): ibgetConfig (“pageUrl”)? ibgetConfig (“pageUrl”) : r; var s = n.getBidIdParameter (“channel_id”, e.params), c = null, u = n.deepAccess (e, “mediaTypes.video.playerSize”), l = u [0] [0], f = u [0] [1], p = o || (n.getBidIdParameter (“secure”, e.params)? 1: 0), g = {sdk_name: “Prebid 1”, versionOrtb: “2.3”} ; if (“”! = n.getBidIdParameter (“hide_skin”, e.params) CSSEANDCH AR& (g.hide_skin = !! n.getBidIdParameter (“hide_skin”, e.params)), “”! = n.getBidIdParameter ( “ad_volume”, e.params) && (g.ad_volume = n.getBidIdParameter (“ad_volume”, e.params)), “”! = n.getBidIdParameter (“ad_unit”, e.params) && = g n.getBidIdParameter (“ad_unit”, e.params)), “”! = n. getBidIdParameter (“outstream_options”, e.params) && (g.outstream_options = n.getBidIdParameter (“outstream_options”, e.params)), “”! = n.getBidIdParameter (“outstream_function”, e.CHARCSS. &CSS. outstream_function = n.getBidIdParameter (“outstream_function”, e.params)), “”! = n.getBidIdParameter (“custom”, e.params) && (g.custom = n.getBidIdParameter (“custom”, e.params) ), “”! = n.getBidIdParameter (“pre_market_bids”, e.params) &&n.isArray (n.getBidIdParameter (“pre_market_bids”, e.params))) {var m = n.getBidIdParameter (“pre_market_bids”, e. params); for (var b in g.pre_market_bids = [], m) {var v = m [b], y = “”; v.vast_url? y = ‘ ‘v.vast_url” “: v.vast_string&& (y = v.vast_string), g.pre_market_bids.push ({id: v.deal_id, seatbid: [{bid: [{impid: Date.now (), dealid: v.deal_id, price: v.price, adm: y}]}], cur: v.currency, ext: {event_log : [{}]}})}} var h = n.getBidIdParameter (“mime s “, e.params) || [” application / javascript “,” video / mp4 “,” video / webm “], _ = {id: e.bidId, secure: p, video: {w: l, h : f, ext: g, mimes: h}}; “”! = n.getBidIdParameter (“start_delay”, e.params) && (_. video.startdelay = 0 Boolean (n.getBidIdParameter (“start_delay”, e. params))), “”! = n.getBidIdParameter (“min_duration”, e.params) && (_. video.minduration = n.getBidIdParameter (“min_duration”, e.params)), “”! = n.getBidIdParameter (“max_duration”, e.params) && (_. video.maxduration = n.getBidIdParameter (“max_duration”, e.params)), “”! = n.getBidIdParameter (“placement_type”, e.params) && (_ .video.ext.placement = n.getBidIdParameter (“placement_type”, e.params)), “”! = n. getBidIdParameter (“position”, e.params) && (_. video.ext.pos = n.getBidIdParameter (“position”, e.params)), e.crumbs&&e.crumbs.pubcid&CSSEidcrumb )s.pubc = e.p. ; var S = navigator.language? “language”: “userLanguage”, A = {id: s, imp: _, site: {id: “”, page: a, content: “content”}, device: {h : screen.height, w: screen.width, dnt: n.getDNT ()? 1: 0, language: navigator [S] .split (“-“) [0], make: navigator.vendor? navigator.vendor: “”, ua: navigator.userAgent}, ext: {wrap_response: 1}}; ibgetConfig (“cache”) &&i.b.getConfig (“cache.url”) &&! 0 === ibgetConfig (“cache. ignoreBidderCacheKey” ” ) && (A.ext.wrap_response = 0), n.getBidIdParameter (“number_of_ads”, e.params) && (A.ext.number_of_ads = n.getBidIdParameter (“number_of_ads)”, e.para .m = {}; return 1 == n.getBidIdParameter (“spotx_all_google_consent”, e.params) && (I.consented_providers_settings = d), t&&t.gdprConsent&CSSEANDC HAR ( I.consent = t.gdprConsent.consentString, void 0! == t.gdprConsent.gdprApplies&&n.deepSetValue (A, “regs.ext.gdpr”, t.gdprConsent.gdprApplies? 1: 0, .deApplies? 1: 0)) “regs.ext.us_privacy”, t.uspConsent), n.deepAccess (e, “userId.id5id.uid”) && (I.eids = I.eids || [], I.eids. push ({source: “id5-sync.com”, uids: [{id: e.userId.id5id.uid, ext: e.userId.id5id.ext || {}}]})), c&& (I. fpc = c), e&&e.schain&& (A.source = {ext: {schain: e.schain}}), e&&e.userId&&e.userId.tdid&CeSSAND ({source .org “, uids: [{id: e.userId.tdid, ext: {rtiPartner:” TDID “}}]})), n.isEmpty (I) || (A.user = {ext: I}) , {method: “POST”, url: “https://search.spotxchange.com/openrtb/2.3/dados/” s “? src_sys = prebid”, data: A, bidRequest: t}})}, interpretResponse: function (e, t) {var r = [], a = e.body; return a&&n.isArray (a.se atbid) &&n._each (a.seatbid, function (e) {n._each (e.bid, function (e) {var c = {}; for (var d in t.bidRequest.bids) e.impid == t.bidRequest.bids [d] .bidId&& (c = t.bidRequest.bids [d]); n._each (c.params.pre_market_bids, function (t) {t.deal_id == e.id&& (e.price = t.price, a.cur = t.currency)}); var u = {requestId: c .bidId, currency : a.cur || “USD”, cpm: e.price, creativeId: e.crid || “”, dealId: e.dealid || “”, ttl: 360, netRevenue:! 0, channel_id: a.id, mediaType: sd, width: ew, height: eh}; ibgetConfig (“cache”) &&i. b.getConfig (“cache.url”) &&! 0 === ibgetConfig (“cache.ignoreBidderCacheKey”)? u.vastXml = e.adm: (u.cache_key = e.ext.cache_key, u.vastUrl = “https : //search.spotxchange.com/ad/vast.html? key = “e.ext.cache_key, u.videoCacheKey = e.ext.cache_key), u.meta = u.meta || {}, e&&e. adomain&&e.adomain.length> 0&& (and meta.advertiserDomains = e.adomain); var f = n.deepAccess (c, “mediaTypes.video.context”), p = n.de epAccess (c, “params.ad_unit “); if (” outstream “== f ||” outstream “== p) {var g = n.deepAccess (c,” mediaTypes.video.playerSize “), m = oa install ({id: 0, url : “/”, config: {adText: “SpotX outstream video ad via Prebid.js”, player_width: g [0] [0], player_height: g [0] [1], content_page_url: n.deepAccess (t, ” data.site.page “), ad_mute: !! n.deepAccess (c,” params.ad_mute “), hide_skin: !! n.deepAccess (c,” params.hide_skin “), outstream_options: n.deepAccess (c, “params.outstream_options”), outstream_function: n.deepAccess (c, “params.outstream_function”)}}); try {m.setRender (l), m.setEventHandlers ({impression: function () {return n.logMessage ( “SpotX Outstream Video Impression Event”)}, loaded: function () {return n.logMessage (“SpotX Outstream Video Loaded Event”)}, ended: function () {n.logMessage (“SpotX Outstream Renderer Video Event”) )}})} catch (e) {n.logWarn (“Prebid Error calling s etRender or setEventHandlers on renderer “, e)} u.renderer = m} r.push (u)})}), r}}; function l (e) {var t = function (e) {var t = n. getBidIdParameter (“slot”, e.renderer.config.outstream_opt ionen); n.logMessage (“[SPOTX] [renderer] handle SpotX outstream renderer”); var r = window.document.createElement (“script”); r .type = “text / javascript”, r.src = “https://js.spotx.tv/easi/v1/” e.channel_id “.js”; var i = {}; i [“data-spotx_channel_id” ] = “” e.channel_id, i [“data-spotx_vast_url”] = “” e.vastUrl, i [“data-spotx_content_page_url”] = e.renderer.config.content_page_url, i [“data-spotx_ad_unit”] = ” incontent “, n.logMessage (” [SPOTX] [renderer] standard behavior “), n.getBidIdParameter (” ad_mute “, e.renderer.config.outstream_options) && (i [” data-spotx_ad_mute “] =” 1 “), i [“data-spotx_collapse”] = “0”, i [“data-spotx_autoplay”] = “1”, i [“data-spotx_blocked_autoplay_override_mode”] = “1”, i [“data-spotx_video_slot_can_autoplay”] = “1 “; var o = n.getBidIdParameter (” playersize_auto_adapt “, e.renderer.config.outstream_options); if (o& &n.isBoolean (o) &&! 0 === o) {var a = e.width&&n.isNumber (e.width) &&e.heightCSSEAND. e .width / e.height: 4/3, s = window.document.getElementById (t) .clientWidth, c = e.renderer.config.player_width, d = e.renderer.config.player_height, u = 0, l = 0; s <c&& (d = (c = s) / a), a = 0? r.connection.downlink.toString (): “”), timeToFirstByte: s (window), data: n, deviceWidth: screen.width, hb_version: ” 5.2.0 “}; e [0] .schain&& (i.schain = e [0] .schain); var o = t.gdprConsent; if (t&&o) {var d =” boolean “== typeof o.gdprApplies, u = “string” == typeof o.consentString, l = d? function (e, t, r) {var n = 12; return e? function (e, t) {return e&&1 === t? e.hasGlobalScope || e.hasGlobalConsent:! (! e || 2! == t || e.isServiceSpecific)} (t, r) && (n = 11): n = 0, n} (o.gdprApplies, o.vendorData , o.apiVersion): 22; i.gdpr_iab = {consent: u? o.consentString: “”, status: l, apiVersion: o.apiVersion}} return t&&t.uspConsent&& (i.us_privacy = t.uspConsent), { method: “POST”, url: “https://a.teads.tv/hb/bid-request” , data: JSON.s tringify (i)}}, interpretResponse: function (e, t) {var r = []; return (e = e.body) .responses&&e.responses.forEach (function (e) {var t = {cpm: e. cpm, width: e.width, height: e.height, currency: e.currency, netRevenue:! 0, ttl: e.ttl, meta: {advertiserDomains: e&&e.adomain? e.adomain: []}, ad: e.ad, requestId: e.bidId, creativeId: e.creativeId, placementId: e.placementId}; e.dealId&& (t.dealId = e.dealId), r.push (t)}), r}}; function a (e) {var t = “”; return e&&e.refererInfo&&e.refererInfo.referer&& (t = e.refererInfo.referer), t} Function s (e) {var t = e.performance ||Perform || e.msPerformance || e.mozPerformance, r = t&& “function” == typeof t.getEntriesByType&& “[object Function]” === Object.prototype.toString.call (t.getEntriesByByType.getEAND “CSSEAND” [0] &&t.getEntriesByType (“navigation”) [0] .responseStart&&t.get EntriesByType (“navigation”) [0] .requestStart&&t.getCHAR&t.getCHAR&t. [0] .requestStart> 0&&Math.round (t (get “EntriesBy”) [0] .responseStart-t.getEntriesByType (“navigation”) [0] .requestStart); if (r) return r.toString (); var n = t&&t.timing.responseStart&&t.timing.requestStart&&t .timing.requestStart> 0&TCHAR&t.timing} function? }, r = i.getValue (e.params, “placementId”), n = i.getValue (e.params, “pa geId “); return t.sizes = function (e) {return i.parseSizesInput (function (e) {var t = i.deepAccess (e,” mediaTypes.video.playerSize “), r = i.deepAccess (e, “mediaTypes.video.sizes”), n = i.deepAccess (e, “mediaTypes.banner.sizes”); return i.isArray (n) || i.isArray (t) || i.isArray (r)? [n, r, t] .reduce (function (e, t) {retur n i.isArray (t) && (i.isArray (t [0])? t.forEach (function (t) {e.push ( t)}): e.push (t)), e}, []): e.sizes} (e)} (e), t.bidId = i.getBidIdParameter (“bidId”, e), t.bidderRequestId = i.getBidIdParameter (“bidderRequestId”, e), t.placementId = parseInt (r, 10), t.pageId = parseInt (n, 10), t.adUnitCode = i.getBidIdParameter (“adUnitCode”, e), t .auctionId = i.getBidIdParameter (“auctionId”, e), t.transactionId = i.getBidIdParameter (“transactionId”, e), t} Function d (e) {return parseInt (e)> 0} Object (n.registerBidder ) (o)}}, [682]), pbjsChunk ([87], {696: function (e, t, r) {e.exports = r (697)}, 697: function (e, t, r) {Object.defineProperty (t, “__ esModule”, {value:! 0}), rd (t, “tripleliftAdapterSpec”, function () {return b}); var n = r (2), i = r (1) , o = r (0), a = r ( 3); function s () {return (s = Object.assign || function (e) {for (var t = 1; t <arguments.length; t) {var r = arguments [t]; for (var n in r) Object. Prototype.hasOwnProperty.call (r, n) && (e [n] = r [n])} return e}). Apply (this, arguments)} function c (e) {return (c = "function" == Symboltyp&CSSEANDCH AR "symbol" == _ typeof (Symbol.iterator)? Function (e) {return _typeof (e)}: function (e) {return e&& "function" == typeof Symbol&&e.constructor === Symbol! ==&e . Prototype? "Symbol": _ typeof (e)}) (e)} Function d (e, t) {var r = Object.keys (e); if (Object.getOwnPropertySymbols) {var n = Object.getOwnPropertySymbols (e ); t&& (n = n.filter (function (t) {return Object.getOwnPropertyDescriptor (e, t) .enumerable})), r.push.apply (r, n)} return r} function u (e) { for (var t = 1; t e.length) && (t = e.length); for (var r = 0, n = new array (t); r 0&& (t.user = {ext: {eids: i}}); var c = function (e, t) {var r = {}; return o.isEmpty (e) || (r.schain = u ({}, e)), o.isEmpty (t) || (r.fpd = u ({}, t)), r} (r, n); back o. isEmpty (c) || ​​(t.ext = c), t} (e); if (r = o.tryAppendQueryString (r, “lib”, ” prebid “), r = o.tryAppendQueryString (r,” v “,” 5.2.0 “), t&&t.refererInfo) {var i = t.refererInfo.referer; r = o.tryAppendQueryString (r,” referrer “, i )} return t&&t.timeout&& (r = o.tryAppendQueryString (r = o.tryAppendQueryString (“tmax”, t.timeout))), t&&t.gdprCHARConsentSSEAND! dprConsent.gdprApplies&& (g = t.gdprConsent.gdprApplies, r = o .tryAppendQueryString (r, “cmp_cs”, m))), t&&t.uspConsentChart, “us_privacy”, t.uspConsent)) ,! 0 === abgetConfig (“coppa”) && (rend = o.QueryString (rend = o.QueryString) “coppa”,! 0)), r.lastIndexOf (“&”) === r.length-1&& (r = r.substring (0, r.length-1)), o.logMessage (“tlCall request created: “r), {method:” POST “, url: r, data: n, bidderRequest: t}}, interpretResponse: function (e, t) {var r = t.bidderRequest; return (e. body.bids || []). map (function (e) {return function (e, t) {var r = {}, n = t.width || 1, i = t.height || 1, o = t.deal_id || “”, a = t.crid || “”, s = e.bids [t.imp_id]; return 0! = t.cpm&&t.ad&& (r = {requestId: s.bidId, cpm: t.cpm, width: n, height: i, netRevenue:! 0, ad: t.ad, creativeId: a, dealId: o, currency: “USD”, ttl: 300, tl_source: t.tl_source, meta: { }}, v (s) && (r.vastXml = t.ad, r.mediaType = “video”), t.advertiser_name&& (r.meta.advertiserName = t.advertiser_name), t.adomain&&t (. meta.advertiserDomains = t.adomain), t.tl_source&& “hdx” == t.tl_source&& (r.meta.mediaType = “banner”), t.tl_source&ANDCHAR “hdx” ==& “tlSSEANDCHAR” tl = “native”)), r} (r, e)})}, getUserSyncs: function (e, t, r, n) {var i = function (e) {if (e) return e.iframeEnabled? “iframe “: e.pixelEnabled?” image “: void 0} (e); if (i) {var a =” https://eb2.3lift.com / sync? “; return” image “=== iCSSEANDCH AR& (a = o.tryAppendQueryString (a, “px”, 1), a = o.tryAppendQueryString (a, “src”, “prebid”)), null! = = M&& (a = o.tryAppendQueryString (a, ” gdpr “, g), a = o.tryAppendQueryString (a,” cmp_cs “, m)), n&& (a = o.tryAppendQueryString (a,” us_privacy “, n)), [{type: i, url: a} ]}}}; Function v (e) {return !! e.mediaTypes.video&& !! e.mediaTypes.video.context&& “instream” === e.mediaTypes. video.context.toLowerCase ()} function y (e) {var t = null; if (“function” == typeof e.getFloor) {var r = e.getFloor ({currency: “USD”, mediaType: v ( e)? “video”: “banner”, size: “*”}); “object”! == c (r) || “USD”! == r.currency || isNaN (parseFloat (r.floor) ) || (t = parseFloat (r.floor))} return null! == t? t: e.params.floor} Function h (e, t) {o.isEmpty (t) || Object.keys (t ) .forEach (function (r) {null! = t [r] && (e [r] = t [r])})} function _ (e, t, r, n) {return e.map (function ( e) {return function (t) {return t&&t.userId&&t.userId [e]}} (t)). filter (function (e) {return!! e}). map (function (e, t) {return function (r) {return {source: e, uids: [{id: r, ext: {rtiPartner: t}}]}}} (r, n))} Function S (e) {return e.filter (A) .map (function (e) {return {w: e [0], h: e [1]}})} Function A (e) {return 2 === e.length&& “number” == typeof e [0 ] && “number” == typeof e [1]} Object (i.registerBidder) (b)}}, [696]), pbjsChunk ([7], {21: function (e, t, r) {tb = function (e) {var t = []; for (var r in e) if (e.hasOwnProperty (r)) if ( “pubProvidedId” == = r) t = t.concat (e.pubProvidedId); else {var n = o (e [r], r); n&&t.push (n)} return t}, ta = function (e ) {var t = []; return e.filter (function (e) {return n.isPlainObject (e.idObj) &&Object.keys (e.idObj) .length}). forEach (function (e) {Object.keys (e.idObj) .forEach (function n (r) {n.deepAccess (e, “config.bidders”) &&Array.isArray (e.config.bidders) &&n.deepAccess (i, r “.source”) &CSSEAND. push ({source: i [r] .source, bidders: e.config.bidders})})}), t}; var n = r (0), i = {intentIqId: {source: “intentiq.com” , atype: 1}, pubcid: {source: “pubcid.org”, atype: 1}, tdid: {source: “adserver.org”, atype: 1, getUidExt: function () {return {rtiPartner: “TDID” }}}, id5id: {getValue: function (e) {return e.uid}, source: “id5-sync.com”, atype: 1, getUidExt: function (e) {if (e.ext) return e. ext}}, parrableId: {source: “parrable.com”, atype: 1, getValue: function (e) {return e.eid? e.eid: e.ccpaOptout? “: null}, getUidExt: function (e) {var t = n.pick (e, [“ibaOptout”, “ccpaOptout”]); if (Object.keys (t) .length) return t}}, idl_env: {source: “liveramp.com”, atype: 3}, lipb: {getValue: function (e) {return e.lipbid}, source: “liveintent.com”, atype: 3, getEidExt: function (e) {if (Array.isArray (e.segments) &&e.segments.length) return {segments: e.segments}}}, britepoolid: {source: ” britepool.com “, atype e: 3}, dmdId: {source:” hcn.health “, atype: 3}, lotamePanoramaId: {source:” crwdcntrl.net “, atype: 1}, criteoId: {source:” criteo .com “, atype: 1}, merkleId: {source:” merkleinc.com “, atype: 3, getValue: function (e) {return e.id}, getUidExt: function (e) {return e&&e.keyID? { keyID: e.keyID}: void 0}}, netId: {source: “netid.de”, atype: 1}, IDP: {source: “zeotap.com”, atype: 1}, haloId: {source: ” audigent.com “, atype: 1}, quantcastId: {source:” quantcast.com “, atype: 1}, nextrollId: {source:” nextroll.com “, atype: 1}, idx: {source:” idx. lat “, atype: 1}, connectid: {source:” verizonmedia.com “, atype: 3}, fabrickId: {source:” neustar.biz “, atype: 1}, mwOpenLinkId: {source:” mediawallahscript.com ” , atype: 1}, tapadId: {source: “tapad. com “, atype: 1}, novatiq: {getValue: function (e) {return e.snowflake}, source:” novatiq.com “, atype: 1}, uid2: {source:” uidapi.com “, atype: 3, getValue: function (e) {return e.id}}, deepintentId: {source: “deepintent.com”, atype: 3}, admixerId: {source: “admixer.net”, atype: 3}, amxId: {source: “amxrtb.com”, atype: 1}}; function o (e, t) {var r = i [t]; if (rC SSEANDCHAR&e) {var o = {}; o.source = r.source ; var a = n.isFn (r.getValue)? r.getValue (e): e; if (n.isStr (a)) {var s = {id: a, atype: r.atype}; if (n .isFn (r.getUidExt)) {var c = r.getUidExt (e); c&& (s.ext = c)} if (o.uids = [s], n.isFn (r.getEidExt)) {var d = r.getEidExt (e); d&& (o.ext = d)} return o}} return null}}, 716: function (e, t, r) {e.exports = r (717)}, 717: function (e, t, r) {Object.defineProperty (t, “__ esModule”, {value:! 0}), rd (t, “PBJS_USER_ID_OPTOUT_NAME”, function () {return w}), rd (t, “coreStorage” , function () {return x}), rd (t, “syncDelay”, function () {return S}), rd (t, “auctionDelay”, function () {return A}), t.setSubmoduleRegistry = function ( e) {R = e}, t.setStoredValue = B, t.set StoredConsentData = M, t.findRootDomain = F, t.requestBidsHook = G, rd (t, “validateGdprEnforcement”, function () {return Q}), t.attachIdSystem = $, t.init = Z; var n = r ( 11), i = rn (n), o = r (3), a = r (9), s = rn (a), c = r (0), d = r (16), u = r (7 ), l = r (5), f = rn (l), p = r (10), g = r (21), m = r (8), b = r (12), v = rn (b) ; Function y (e, t) {(null == t || t> e.length) && (t = e.length); for (var r = 0, n = new array (t); r 1&&void 0! == arguments [1]? argume nts [1] : void 0, n = r? “”. concat (e.name, “_”). concat (r): e.name; try {if (e.type === E) t = x .getCookie (n ); else if (e.type === O) {var i = x.getDataFromLocalStorage (“”. concat (e.name, “_ exp”)); “” === i? t = x .getDataFromLocalStorage (n ): i&&new Date (i) .getTime () – Date.now ()> 0&& (t = decodeURIComponent (x.getDataFromLocalStorage (n)))} “string” == typeof t&&. {=== t&&. “====” trim (). charAt (0) CSSEANDCH AR& (t = JSON.parse (t))} catch (e) {c.logError (e)} return t} function N (e) {var t = {consentString: “”, gdprApplies:! 1, apiVersion: 0 }; return e&& (t.consentString = e.consentString, t.gdprApplies = e.gdprApplies, t.apiVersion = e.apiVersion), c.cyrb53Hash (JSON.stringify (t))} Function M (e) {try { var t = new Date (Date.now () 864e5 * C) .toUTCString (); x.setCookie (T, N (e), t, “Lax”)} catch (e) {c.logError (e)} } Function q () {try {return x.getCookie (T)} catch (e) {c.logError (e)}} Function z (e) {if (e&& “boolean” == type of e.gdprApplies&&e.gdprApplies ) {if (! e.consentStri ng) return! 1; if (1 === e.apiVersion&&! 1 === c.deepAccess (e, “vendorData.purposeConsents.1”)) return! 1; if (2 === e.apiVersion&&! 1 === c.deepAccess (e, “vendorData.purpose.consents.1”)) return! 1} return! 0} function F () {var e = arguments.length> 0&&void 0 ! == arguments [0]? arguments [0]: window.location.hostname; if (! x.cookiesAreEnabled ()) return e; var t, r, n = e.split (“.”); if (2 == n.length) return e ; var i = -2, o = “_ rdc” .concat (Date.now ()), a = “writeable”; do {t = n.slice (i) .join (“.”); var s = new Date (c.timestamp () 1e4) .toUTCString (); x.setCookie (o, a, s, “Lax”, t, void 0), x.getCookie (o, void 0) === a? (R =! 1, x.setCookie (o, “”, “Thu, 01 Jan 1970 00:00:01 GMT”, void 0, t, void 0)) ๐Ÿ™ i = -1, r = Math.abs (i ) 0) {t =! 0; var n =! 1, i = function () {n || (n =! 0, e ())}; c.logInfo (“”. concat (I, “- auction delayed by”) .concat (A, “at most to retrieve IDs”) ), _ = setTimeout (i, A), L (r, i)} else saon (faEVENTS.AUCTION_END, function e () {saoff (faEVENTS.AUCTION_END, e), S> 0? setTimeout (function () {L (r)}, S): L (r)})} e&&! t&&e ()} function G (e, t) {V (function () {(function (e, t) {[e] .some (function (e) {return! Array.isArray (e) ||! e.length}) || e. forEach (function (e) {e.bids&&c.isArray (e.bids) &&e.bids.forEach (function (e ) {var r = function (e, t) {return Array.isArray (e) &&e.length&&t? .filter (function (e) {return! e.config.bidders ||! c.isArray (e.config.bidders ) || v () (e.config.bidders, t)}). filter (function (e) {return c.isPlainObject (e.idObj) &&Object.keys (e.idObj) .length}). reduce (function (e, t) {return Object.keys (t.idObj) .for Each (function (r) {e [r] = t.idObj [r]}), e}, {}): {}} (t, e.bieter); Object.key s (r) .length&& (e .userId = r, e.userIdAsEids = Object (gb) (r))})})}) (t.adUnits || Object (da) (). adUnits, h), e .call (this, t)} )} function K () {return V (), W (h)} function H () {return V (), Object (gb) (W (h))} function J (e, t) {var r = e ? e.submoduleNames: null; r || (r = []), V (function () {var e = u.gdprDataHandler.getConsentData (), n = Q (D, e), i = n.userIdModules; if (n.hasValidated || z (e)) {var o = q (); M (e); var a, s = [], d = function (e, t) {var r = “undefined”! = type of the symbol&&e [Symbol.iterator] || e [“@@ iterator”]; if (! r) {if (Array.isArray (e) || (r = function (e, t) {if (e) {if (“string” == typeof e) return y (e, t); var r = Object.prototype.toString.call (e) .slice (8, -1); return “Object” === r&&e.constructor&& ( r = e.constructor.name), “Map” === r || “Set” === r? Array.from (e): “Arguments” === r || / ^ (?: Ui | I ) nt (?: 8 | 16 | 32) (?: Clamped)? Array $ /. test (r)? y (e, t): void 0}} (e)) || t&&e&& “number” == typeof e.length) {r&& (e = r); var n = 0, i = function () {}; return {s: i, n: function () {return n> = e .length? {done:! 0}: {done:! 1, value: e [n]}}, e: function (e) {throw e}, f: i}} throw new TypeError (“Invalid attempt to retrieve a iterate non-iterable instance. nTo be iterable, non-array objects must have a [Symbol.iterator] () method. “)} var o, a =! 0, s =! 1; return {s: function () {r = r.call (e)}, n: function () {var e = r.next (); return a = e.done, e}, e: function (e) {s =! 0 , o = e}, f: function () {try {a || null == r.return || r.return ()} finally {if (s) throw o}}}} (i); try {for (ds ();! (a = dn ()). done;) {var l = a.value; r.length> 0&&-1 === r.indexOf (l.submodule. name) || (c. logInfo (“”. concat (I, “- refreshing”) .concat (l.submodule.name)), Y (l, e, o,! 0), c.isFn (l. callback) &&s.push (l ))}} catch (e) {de (e)} finally {df ()} s.length> 0&&L (s), t&&t ()} else c.logWarn (“”. concat (I, “- gdpr authorization not G Valid for local storage or cookies, exit module “))})} var Q = Object (pb) (” sync “, function (e, t) {return {userIdModules: e, hasValidated: t&&t .hasValidated}}”, ValidateGdprEnforcement “); Function Y (e, t, r, n) {if (e.config.storage) {var i, o = U (e.config.storage), a =! 1; if (” number “= = typeof e.config.storage.refreshInSeconds) {var s = new Date (U (e.config.storage, “last”)); a = s&&Date.now () – s.getTime ()> 1e3 * e.config .storage.refreshInSeconds}! o || a || n ||! function (e, t) {return null! = r&&r === N (t)} (0, t)? i = e.submodule.getId ( e.config, t, o): “function” == typeof e.submodule.extendId&& (i = e.submodule.extendId (e.config, t, o)), c.isPlainObject (i) && (i.id&& (B (e, i.id), o = i.id), “function” == typeof i.callback&& (e.callback = i.callback)), o&& (e.idObj = e.submodule.decode (o , e.config))} else if (e.config.value) e.idObj = e.config.value; else {var d = e.submodule.getId (e.config, t, void 0); c.isP lainObject (d) && (“function” == typeof d.callback&& (e.callback = d.callback), d.id&& (e.idObj = e.submodule.decode (d.id, e.config)))} } Function X () {var e = function (e, t, r) {return Array.isArray (e)? E.reduce (function (e, t) {return! T || c.isEmptyStr (t.name) || (! t.storage || c.isEmptyStr (t.storage.type) || c.isEmptyStr (t.storage.name) || -1 === r.indexOf (t.storage.type)? c.isPlainObject (t.value)? e.push (t): t.storage || t.value || e.push (t): e.push (t)), e}, []): [] } (k, 0, j); if (e.length) {var t = R.filter (function (e) {return! i () (D, function (t) {return t.name === e. name})}); D = t.map (function (t) {var r = i () (e, function (e) {return e.name&& (e.name.toLowerCase () === t.name. toLowerCase () || t.aliasName&&e.name.toLowerCase () === t.aliasName.toLowerCase ())}); return r&&t.name! == r.name&& (r.name), t. findRootDomain = F, r? {submodule: t, config: r, callback: void 0, idObj: void 0}: null}). filter (function (e) {return null! == e}),! P&&D.length&& (Object (da) (). RequestBids.before (G, 40), c.logInfo (“”. Concat (I, “- usersync configuration updated for”) .concat (D.length, “sub-modules:”), D.map (function (e) {return e.submodule.name})), P =! 0)}} function $ (e) {i () (R, function (t) {return t.name === e.name}) || (R.push (e), X ())} Function Z (e) {D = [], k = [], P =! 1, h = void 0, -1! = = (j = [x.localStorageIsEnabled ()? O : null, x.cookiesAreEnabled ()? E: null] .filter (function (e) {return null! == e})). indexOf (E) &&x.getCookie (w)? c.logInfo (“”. concat (I, “- Opt-Out-Cookie found, Exit-Modul”)): – 1! == j.indexOf (O) &&x.getDataFromLocalStorage (w)? C.logInfo (“” .concat (I, “- Opt-out localStorage found, exit module “)) ๐Ÿ™ e.getConfig (function (e) {var t = e.userSync; t&&t.userIds&& (k = t.userIds, S = c.isNumber (t.syncDelay)? t.syncDelay: 500, A = c.isNumber (t.auctionDelay)? t.auctionDelay: 0, X ())}), Object (da) (). getUserIds = K, Object (da) (). getUserIdsAsEids = H, Object (da) (). RefreshUserIds = J)} Z (ob), Object (pc) (“userId”, $)}}, [716]), pbjs. processQueue ();
}, {}];
window.modules [“visibility.legacy”] = [function (require, module, exports) {“use strict”; DS.service (“$ visibility”, [“$ document”, “$ window”, “_ throttle”, “Eventify”, function (e, t, n, i) {var o, r, h = []; function s (e, t) {return e t? e: t} function d (e, t, n) {! e.preload&&e.preloadThreshhold&&function (e, t, n, i) {return t.top = e .shownThreshold&&! e.seen? (e.seen =! 0, setTimeout (function () {e.trigger (“shown”, new r (“shown”, t))}, 15)) :(! n || i 1&& (h = e (r, Math.floor (n / o), i-1, o)), h}, this. getVerticallyVisiblePixels = f, this.getViewportHeight = function () {return t.innerHeight || e.documentElement.clientHeight || e.body.clientHeight}, this.getViewportWidth = function () {return t.innerWidth || e.documentElement. clientWidth || e.body.clientWidth}, this.isElementNotHidden = u, this.isElementInViewport = function (n) {var i = n.getBoundingClientRect (); return i.top> = 0&&i.left> = 0&&i (t.innerHeight || e.documentElement.clientHeight) &&i.right <= (t.innerWidth || e.documentElement.clientWidth)}, this.Visible = o}]);
}, {}];
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", f} var 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 <r.length; o) s (r [o]); return s}) (window.modules, {}, []);
'use strictly';
/ **
* Include legacy services from _global.js, if available
* /

Function _createForOfIteratorHelper (o, allowArrayLike) {var it; if (symbol type === “undefined” || o [Symbol.iterator] == null) {if (Array.isArray (o) || (it = _unsupportedIterableToArray (o)) || allowArrayLike && o && typeof o. length === “number”) {if (es) o = es; vari = 0; var F = function F () {}; return {s: F, n: function n () {if (i> = o.length) return {done: true}; return {done: false, value: o [i]}; }, e: function e (_e) {throw _e; }, f: F}; } throw new TypeError (“Invalid attempt to iterate a non-iterable instance. nTo be iterable, non-array objects must have a [Symbol.iterator] () method.”); } var normalCompletion = true, didErr = false, err; return {s: function s () {it = o [symbol.iterator] (); }, n: function n () {var step = it.next (); normalCompletion = step.done; Return step; }, e: function e (_e2) {didErr = true; Error = _e2; }, f: function f () {try {if (! normalCompletion && it.return! = null) it.return (); } finally {if (didErr) throw err; }}}; }

Function _unsupportedIterableToArray (o, minLen) {if (! O) return; if (typeof o === “string”) return _arrayLikeToArray (o, minLen); var n = Object.prototype.toString.call (o) .slice (8, -1); if (n === “Object” && o.constructor) n = o.constructor.name; if (n === “Map” || n === “Set”) return Array.from (o); if (n === “Arguments” || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray (o, minLen); }

function _arrayLikeToArray (arr, len) {if (len == null || len> arr.length) len = arr.length; for (var i = 0, arr2 = new array (len); i <len; i) {arr2 [i] = arr [i]; } Return arr2; }

Function mountLegacyServices () {
Object.keys (window.modules) .filter (function (key) {
Return type of the key === ‘string’ && key.match (/ . Legacy $ /);
}). forEach (function (key) {
Return window.require (key);
});
}

Function tryToMount (fn, el, name) {
Try {
fn (el); // initialize controller
} catch (e) {
var elementTag = el.outerHTML.slice (0, el.outerHTML.indexOf (el.innerHTML));
console.error (“Error initializing controller for ” “. concat (name,” “on ” “). concat (elementTag,” “”), e);
}
}
/ **
* mount client.js component controller
* /

Function mountComponentModules () {
Object.keys (window.modules) .filter (function (key) {
Return type of the key === ‘string’ && key.match (/ . Client $ /);
}). forEach (function (key) {
var controllerFn = window.require (key);

if (control type Fn === ‘function’) {
var name = key.replace (‘. client’, ”),
instancesSelector = “[data-uri * = ” _ components / “. concat (name,” / “]”),
defaultSelector = “[data-uri $ = ” _ components “.concat (name,” “]”),
Instances = document.querySelectorAll (instancesSelector),
defaults = document.querySelectorAll (defaultSelector);

var _iterator = _createForOfIteratorHelper (instances),
_Step;

Try {
for (_iterator.s ();! (_ step = _iterator.n ()). done;) {
var el = _step.value;
tryToMount (controllerFn, el, name);
}
} catch (err) {
_iterator.e (err);
} Finally {
_iterator.f ();
}

var _iterator2 = _createForOfIteratorHelper (default values),
_Step 2;

Try {
for (_iterator2.s ();! (_ step2 = _iterator2.n ()). done;) {
var _el = _step2.value;
tryToMount (controllerFn, _el, name);
}
} catch (err) {
_iterator2.e (err);
} Finally {
_iterator2.f ();
}
}
});
} // Make sure there is a `window.process.env.NODE_ENV` available in the client for all dependencies,
// Services or components that might require it
// Note: The value “ is exchanged for the actual environment variable in /lib/cmd/compile/scripts.js

Window.process = window.process || {};
window.process.env = window.process.env || {};

if (! window.process.env.NODE_ENV) {
window.process.env.NODE_ENV = ”;
} // Note: Legacy controllers that need legacy services (e.g. Dollar-Slice) must
// wait for DOMContentLoaded to initialize itself, since the files themselves have to be mounted first

mountLegacyServices ();
mountComponentModules ();
//]]

Ref: https://slate.com