var __IntegralASDiagnosticCall = function(){}; try { var __IntegralASConfig = { jsDoSplit: true, debug: "false", jsDiag: 'false', version: '17.4.178', mtCell: 10, mtSample: 5, trackMouse: "true", exchList: {'e1':'nqzryq','e2':'tbbtyrnqf.t.qbhoyrpyvpx','e3':'ehovpbacebwrpg','e4':'chozngvp','e5':'bcrak','e6':'nqoevgr.pbz','e7':'tynz.pbz','e8':'lvryqznantre.pbz','e9':'yvwvg','e10':'nqakf','p11':'ghea.pbz','p12':'zngugnt','p13':'vaivgrzrqvn','p14':'qngnkh','n15':'zrqvn6qrterrf','n16':'dhnagfreir','n17':'esvuho.arg','a18':'napubeserr','a19':'eff2frnepu','a20':'mgfgngvp.pbz','n21':'ovq.npr.nqiregvfvat','e22':'wnfba','v23':'fcbgkpqa','v24':'ogeyy','v25':'yvirenvy','v26':'nqncgi','v27':'nqnc.gi','n29':'qbzqrk.pbz','n30':'ernyih.arg','d31':'cvengronl','d32':'cebklonl','d33':'onlcebkl','d34':'cvengrcebkl','d35':'cebklcvengr','d36':'onlcvengr','n37':'tjnyyrg','p39':'j55p.arg','p40':'c0l.pa','p41':'vcvalbh.pbz','p42':'c0lwferaqre'}, sp_cdnDomain: 'cdn.adsafeprotected.com', sp_cdnScripts: {xsca: "static.adsafeprotected.com/xsca.17.4.85.js", sca: "static.adsafeprotected.com/sca.17.4.95.js", main: "static.adsafeprotected.com/main.17.4.178.js"}, protocol: 'https', jsref: "https:\/\/www.networkworld.com\/article\/3373550\/quantum-computing-will-break-your-encryption-in-a-few-years.html?utm_source=Adestra&utm_medium=email&utm_content=Title%3A%20Quantum%20computing%20will%20break%20your%20encryption%20in%20a%20few%20years&utm_campaign=Networkworld%20Daily%20News%20Alert&utm_term=Editorial%20-%20Daily%20News%20Alert&utm_date=20190322073353", asid: "df681bcf-4c74-11e9-8046-00259086cc0e", allowViewability: "true", jsFeatures: "viewabilityready,consecutive,cachebust:0,forcecocoa:0,rattie,exch,recordalternate:0,usedtdomain,nextcocoa:100,bapiDiag,postDts:0,videotwoseconds,getPl,decodePl,resolution,usetpl,tpiLookupURL,hundredpct,jloadDiag:0,blur:0,sendclogs,zeroPing,idMap,offscreen,everySecond:1,sdkdetection,moreAdTalkCalls,slid,fm2:1,largeAd,nextcocoaie:100,usevh,fxdet:0,mmsb:0,bigmon:0,chromeNativeIO:100,oddet:0,ios:100,ancestor:100,avmm:100,avgrn:100,useScreenLocationInfoAdaptor:100,swapids:100,pIntervals:10,firewall_cdn_domain,forceid:0,usesca:60,usexsca:1,bustediframe:100,impFailSafe:100,yieldmo:100,displayCustomView:0,sfdetect,pmdetect:100,novidnodeerr:5,diagnosticCM:0,viewabilityOptimization:100,usehaps:100,customMetric:100,sizmek,celtra,groupmCM,avidPropertiesInImpression,abcAudit,useMraidGeometricMeasurement,mrcAudit:1,BannerStuffingInApp", adsafeDomain: "adsafeprotected.com:80", minimizeCalls: "false", adWidth: "", adHeight: "", forceAppend: "true", sp_imp_maxLength: 8000, sp_imp_jsInfo_minLength: 200, _onInViewMRC15: __IntegralASConfig && __IntegralASConfig.onInViewMRC15, _onInViewMRC: __IntegralASConfig && __IntegralASConfig.onInViewMRC, _onMeasurable: __IntegralASConfig && __IntegralASConfig.onMeasurable, _onAPIResult: __IntegralASConfig && __IntegralASConfig.onAPIResult, _onInViewFull: __IntegralASConfig && __IntegralASConfig.onInViewFull, _onSuspicious: __IntegralASConfig && __IntegralASConfig.onSuspicious, _onInViewMRC5: __IntegralASConfig && __IntegralASConfig.onInViewMRC5, reqquery: "anId=8879&campId=1x1&pubId=25398656&chanId=21393896&placementId=152957576&pubCreative=84831156176&pubOrder=199759016&cb=883906047&custom=inread&custom2=networkworld.com&adsafe_par&impId=", mode: "jload", requrl: "https:\/\/pixel.adsafeprotected.com\/mon", dtBaseURL: "https:\/\/dt.adsafeprotected.com\/dt?anId=8879", adsafeSrc: "", tpiLookupURL: "", getTpl: "false", use100v: true, useBapiCallback: "", useViewabilityNotification: "", scriptUrl: "https:\/\/pixel.adsafeprotected.com\/jload?anId=8879&campId=1x1&pubId=25398656&chanId=21393896&placementId=152957576&pubCreative=84831156176&pubOrder=199", accountForSadImps: '', sendCookie: 'false', cookieBaseURL: 'sc.iasds01.com\/dtc?anId=8879&pubId=25398656', fwMonitoring: '', doNothing: false, mn: "app04ami", mobOrTab: false, app: false, mobFwUrl: "https:\/\/mobile.adsafeprotected.com\/external\/monitoring\/app\/initial\/8879\/", anId: '8879', advEntityId: '', pubEntityId: '', videoId: '', videoChannel: '', rts: {}, customViewability: [{ "id":"publ1", "tiv": 1, "minunit":1, "thresholds": [{"piv":100, "ub":242499}, {"piv":30, "lb":242500}], "mediaTypes":["display"], "distributionChannels":["web","app"] }, { "id":"publ2", "tiv": 2, "minunit":2, "thresholds": [{"piv":100, "ub": 242499}, {"piv":50, "lb": 242500}], "mediaTypes":["video"], "distributionChannels":["web","app"] },{ "id":"grpm1", "tiv": 1, "minunit":1, "thresholds": [{"piv":100, "ub": 242499}, {"piv": 50, "lb": 242500}], "mediaTypes":["display"], "deviceGroups":["desktop"], "distributionChannels":["web","app"], "rts":"_onInViewGroupM" },{ "id":"grpm2", "tiv": "15|50%", "minunit":1, "sound": "on", "soundExcl": "groupm_native", "thresholds": [{"piv":100, "ub": 299999},{"piv":80, "lb": 300000} ], "mediaTypes":["video"], "deviceGroups":["desktop"], "distributionChannels":["web","app"] },{ "id":"grpm3", "tiv": 1, "minunit":1, "thresholdType":"grpmMobPassThru","thresholds": [{"piv":100}], "mediaTypes":["display"], "deviceGroups":["mobile"], "distributionChannels":["web","app"], "rts":"_onInViewGroupM" },{ "id":"grpm4", "tiv": "15|50%", "minunit":1, "sound": "on", "soundExcl": "groupm_native", "thresholdType":"grpmMobPassThru","thresholds": [{"piv":100} ], "mediaTypes":["video"], "deviceGroups":["mobile"], "distributionChannels":["web","app"] }], serverSideAppDetection: [] }; try { __IASScope = typeof window !== "undefined" ? window : this; __IntegralASConfig.birthdate = new Date().getTime(); __IntegralASConfig.perfBirth = (typeof __IASScope.performance !== "undefined" && typeof __IASScope.performance.now === 'function') ? __IASScope.performance.now() : null; //copy/pasted the contents of the thirdparty OmidVerificationClient.js file here, remove and replace when a new version is received //Versions are to be found at tools.iabtechlab.com/omsdk in the "OM SDK JS" tab. We don't build this ourselves, we just take the most recently uploaded file from there. //Latest version '1.2.3-iab592' pasted on August 24th 2018 by Derek Davies //Locally applied fixes (with original code commented out with "//-----" at the start of the lines): //1. "const version" needed to be changed to "var version" for IE < 11 //2. Commented out initialization and use of this.remoteIntervals_ and this.remoteTimeouts_ because it led to multiple VC instances using the same id. // Replaced with random numbers, like this: var c = ((new Date()).getTime() * 1000000) + (Math.floor(Math.random() * 1000000)); // That gets a unique millisecond value for 'now', multiplies it by a million (to get 6 zero digits below the milliseconds // into which a random 6 digit number is added. So it gives us a random number of 1 in a million for each milliseconds (that's fairly unique). ;(function(omidGlobal, factory, exports) { // CommonJS support if (typeof exports === 'object' && typeof exports.nodeName !== 'string') { factory(omidGlobal, exports); // If neither AMD nor CommonJS are used, export to a versioned name in the // global context. } else { var exports = {}; //----------const version = '1.2.3-iab592'; var version = '1.2.3-iab592'; factory(omidGlobal, exports); function deepFreeze(object) { for (var key in object) { if (object.hasOwnProperty(key)) { object[key] = deepFreeze(object[key]); } } return Object.freeze(object); } // Inject and freeze the exported components of omid. for (var key in exports) { if (exports.hasOwnProperty(key)) { if (Object.getOwnPropertyDescriptor(omidGlobal, key) == null || Object.getOwnPropertyDescriptor(omidGlobal[key], version) == null) { // Define the top level property in the global scope if (Object.getOwnPropertyDescriptor(omidGlobal, key) == null) { Object.defineProperty(omidGlobal, key, { value: {}, }); } // Define the object exports keyed-off versions Object.defineProperty(omidGlobal[key], version, { get: function () { return deepFreeze(exports[key]); }, enumerable: true, }); } } } } }(typeof global === 'undefined' ? this : global, function(omidGlobal, omidExports) { 'use strict';var $jscomp = $jscomp || {}; $jscomp.scope = {}; $jscomp.inherits = function(a, b) { function c() { } c.prototype = b.prototype; a.superClass_ = b.prototype; a.prototype = new c; a.prototype.constructor = a; for (var d in b) { if ("prototype" != d) { if (Object.defineProperties) { var e = Object.getOwnPropertyDescriptor(b, d); e && Object.defineProperty(a, d, e); } else { a[d] = b[d]; } } } }; $jscomp.ASSUME_ES5 = !1; $jscomp.ASSUME_NO_NATIVE_MAP = !1; $jscomp.ASSUME_NO_NATIVE_SET = !1; $jscomp.defineProperty = $jscomp.ASSUME_ES5 || "function" == typeof Object.defineProperties ? Object.defineProperty : function(a, b, c) { a != Array.prototype && a != Object.prototype && (a[b] = c.value); }; $jscomp.getGlobal = function(a) { return "undefined" != typeof window && window === a ? a : "undefined" != typeof global && null != global ? global : a; }; $jscomp.global = $jscomp.getGlobal(this); $jscomp.SYMBOL_PREFIX = "jscomp_symbol_"; $jscomp.initSymbol = function() { $jscomp.initSymbol = function() { }; $jscomp.global.Symbol || ($jscomp.global.Symbol = $jscomp.Symbol); }; $jscomp.symbolCounter_ = 0; $jscomp.Symbol = function(a) { return $jscomp.SYMBOL_PREFIX + (a || "") + $jscomp.symbolCounter_++; }; $jscomp.initSymbolIterator = function() { $jscomp.initSymbol(); var a = $jscomp.global.Symbol.iterator; a || (a = $jscomp.global.Symbol.iterator = $jscomp.global.Symbol("iterator")); "function" != typeof Array.prototype[a] && $jscomp.defineProperty(Array.prototype, a, {configurable:!0, writable:!0, value:function() { return $jscomp.arrayIterator(this); }}); $jscomp.initSymbolIterator = function() { }; }; $jscomp.arrayIterator = function(a) { var b = 0; return $jscomp.iteratorPrototype(function() { return b < a.length ? {done:!1, value:a[b++]} : {done:!0}; }); }; $jscomp.iteratorPrototype = function(a) { $jscomp.initSymbolIterator(); a = {next:a}; a[$jscomp.global.Symbol.iterator] = function() { return this; }; return a; }; $jscomp.makeIterator = function(a) { $jscomp.initSymbolIterator(); var b = a[Symbol.iterator]; return b ? b.call(a) : $jscomp.arrayIterator(a); }; $jscomp.arrayFromIterator = function(a) { for (var b, c = []; !(b = a.next()).done;) { c.push(b.value); } return c; }; $jscomp.arrayFromIterable = function(a) { return a instanceof Array ? a : $jscomp.arrayFromIterator($jscomp.makeIterator(a)); }; var module$exports$omid$common$argsChecker = {assertTruthyString:function(a, b) { if (!b) { throw Error("Value for " + a + " is undefined, null or blank."); } if ("string" !== typeof b && !(b instanceof String)) { throw Error("Value for " + a + " is not a string."); } if ("" === b.trim()) { throw Error("Value for " + a + " is empty string."); } }, assertNotNullObject:function(a, b) { if (null == b) { throw Error("Value for " + a + " is undefined or null"); } }, assertNumber:function(a, b) { if (null == b) { throw Error(a + " must not be null or undefined."); } if ("number" !== typeof b || isNaN(b)) { throw Error("Value for " + a + " is not a number"); } }, assertNumberBetween:function(a, b, c, d) { (0,module$exports$omid$common$argsChecker.assertNumber)(a, b); if (b < c || b > d) { throw Error("Value for " + a + " is outside the range [" + c + "," + d + "]"); } }, assertFunction:function(a, b) { if (!b) { throw Error(a + " must not be truthy."); } }, assertPositiveNumber:function(a, b) { (0,module$exports$omid$common$argsChecker.assertNumber)(a, b); if (0 > b) { throw Error(a + " must be a positive number."); } }}; var module$exports$omid$common$VersionUtils = {}, module$contents$omid$common$VersionUtils_SEMVER_DIGITS_NUMBER = 3; module$exports$omid$common$VersionUtils.isValidVersion = function(a) { return /\d+\.\d+\.\d+(-.*)?/.test(a); }; module$exports$omid$common$VersionUtils.versionGreaterOrEqual = function(a, b) { a = a.split("-")[0].split("."); b = b.split("-")[0].split("."); for (var c = 0; c < module$contents$omid$common$VersionUtils_SEMVER_DIGITS_NUMBER; c++) { var d = parseInt(a[c], 10), e = parseInt(b[c], 10); if (d > e) { break; } else { if (d < e) { return !1; } } } return !0; }; var module$exports$omid$common$ArgsSerDe = {}, module$contents$omid$common$ArgsSerDe_ARGS_NOT_SERIALIZED_VERSION = "1.0.3"; module$exports$omid$common$ArgsSerDe.serializeMessageArgs = function(a, b) { return (0,module$exports$omid$common$VersionUtils.isValidVersion)(a) && (0,module$exports$omid$common$VersionUtils.versionGreaterOrEqual)(a, module$contents$omid$common$ArgsSerDe_ARGS_NOT_SERIALIZED_VERSION) ? b : JSON.stringify(b); }; module$exports$omid$common$ArgsSerDe.deserializeMessageArgs = function(a, b) { return (0,module$exports$omid$common$VersionUtils.isValidVersion)(a) && (0,module$exports$omid$common$VersionUtils.versionGreaterOrEqual)(a, module$contents$omid$common$ArgsSerDe_ARGS_NOT_SERIALIZED_VERSION) ? b ? b : [] : b && "string" === typeof b ? JSON.parse(b) : []; }; var module$exports$omid$common$constants = {AdEventType:{IMPRESSION:"impression", STATE_CHANGE:"stateChange", GEOMETRY_CHANGE:"geometryChange", SESSION_START:"sessionStart", SESSION_ERROR:"sessionError", SESSION_FINISH:"sessionFinish", VIDEO:"video", LOADED:"loaded", START:"start", FIRST_QUARTILE:"firstQuartile", MIDPOINT:"midpoint", THIRD_QUARTILE:"thirdQuartile", COMPLETE:"complete", PAUSE:"pause", RESUME:"resume", BUFFER_START:"bufferStart", BUFFER_FINISH:"bufferFinish", SKIPPED:"skipped", VOLUME_CHANGE:"volumeChange", PLAYER_STATE_CHANGE:"playerStateChange", AD_USER_INTERACTION:"adUserInteraction"}, VideoEventType:{LOADED:"loaded", START:"start", FIRST_QUARTILE:"firstQuartile", MIDPOINT:"midpoint", THIRD_QUARTILE:"thirdQuartile", COMPLETE:"complete", PAUSE:"pause", RESUME:"resume", BUFFER_START:"bufferStart", BUFFER_FINISH:"bufferFinish", SKIPPED:"skipped", VOLUME_CHANGE:"volumeChange", PLAYER_STATE_CHANGE:"playerStateChange", AD_USER_INTERACTION:"adUserInteraction"}, ErrorType:{GENERIC:"generic", VIDEO:"video"}, AdSessionType:{NATIVE:"native", HTML:"html"}, EventOwner:{NATIVE:"native", JAVASCRIPT:"javascript", NONE:"none"}, AccessMode:{FULL:"full", LIMITED:"limited"}, AppState:{BACKGROUNDED:"backgrounded", FOREGROUNDED:"foregrounded"}, Environment:{MOBILE:"app"}, InteractionType:{CLICK:"click", INVITATION_ACCEPT:"invitationAccept"}, MediaType:{DISPLAY:"display", VIDEO:"video"}, Reason:{NOT_FOUND:"notFound", HIDDEN:"hidden", BACKGROUNDED:"backgrounded", VIEWPORT:"viewport", OBSTRUCTED:"obstructed", CLIPPED:"clipped"}, SupportedFeatures:{CONTAINER:"clid", VIDEO:"vlid"}, VideoPosition:{PREROLL:"preroll", MIDROLL:"midroll", POSTROLL:"postroll", STANDALONE:"standalone"}, VideoPlayerState:{MINIMIZED:"minimized", COLLAPSED:"collapsed", NORMAL:"normal", EXPANDED:"expanded", FULLSCREEN:"fullscreen"}, NativeViewKeys:{X:"x", Y:"y", WIDTH:"width", HEIGHT:"height", AD_SESSION_ID:"adSessionId", IS_FRIENDLY_OBSTRUCTION_FOR:"isFriendlyObstructionFor", CLIPS_TO_BOUNDS:"clipsToBounds", CHILD_VIEWS:"childViews", END_X:"endX", END_Y:"endY", OBSTRUCTIONS:"obstructions"}, MeasurementStateChangeSource:{CONTAINER:"container", CREATIVE:"creative"}, ElementMarkup:{OMID_ELEMENT_CLASS_NAME:"omid-element"}, CommunicationType:{NONE:"NONE", DIRECT:"DIRECT", POST_MESSAGE:"POST_MESSAGE"}, OmidImplementer:{OMSDK:"omsdk"}}; var module$contents$omid$common$InternalMessage_GUID_KEY = "omid_message_guid", module$contents$omid$common$InternalMessage_METHOD_KEY = "omid_message_method", module$contents$omid$common$InternalMessage_VERSION_KEY = "omid_message_version", module$contents$omid$common$InternalMessage_ARGS_KEY = "omid_message_args", module$exports$omid$common$InternalMessage = function(a, b, c, d) { this.guid = a; this.method = b; this.version = c; this.args = d; }; module$exports$omid$common$InternalMessage.isValidSerializedMessage = function(a) { return !!a && void 0 !== a[module$contents$omid$common$InternalMessage_GUID_KEY] && void 0 !== a[module$contents$omid$common$InternalMessage_METHOD_KEY] && void 0 !== a[module$contents$omid$common$InternalMessage_VERSION_KEY] && "string" === typeof a[module$contents$omid$common$InternalMessage_GUID_KEY] && "string" === typeof a[module$contents$omid$common$InternalMessage_METHOD_KEY] && "string" === typeof a[module$contents$omid$common$InternalMessage_VERSION_KEY] && (void 0 === a[module$contents$omid$common$InternalMessage_ARGS_KEY] || void 0 !== a[module$contents$omid$common$InternalMessage_ARGS_KEY]); }; module$exports$omid$common$InternalMessage.deserialize = function(a) { return new module$exports$omid$common$InternalMessage(a[module$contents$omid$common$InternalMessage_GUID_KEY], a[module$contents$omid$common$InternalMessage_METHOD_KEY], a[module$contents$omid$common$InternalMessage_VERSION_KEY], a[module$contents$omid$common$InternalMessage_ARGS_KEY]); }; module$exports$omid$common$InternalMessage.prototype.serialize = function() { var a = {}; a = (a[module$contents$omid$common$InternalMessage_GUID_KEY] = this.guid, a[module$contents$omid$common$InternalMessage_METHOD_KEY] = this.method, a[module$contents$omid$common$InternalMessage_VERSION_KEY] = this.version, a); void 0 !== this.args && (a[module$contents$omid$common$InternalMessage_ARGS_KEY] = this.args); return a; }; var module$exports$omid$common$Communication = function(a) { this.to = a; this.communicationType_ = module$exports$omid$common$constants.CommunicationType.NONE; }; module$exports$omid$common$Communication.prototype.sendMessage = function(a, b) { }; module$exports$omid$common$Communication.prototype.handleMessage = function(a, b) { if (this.onMessage) { this.onMessage(a, b); } }; module$exports$omid$common$Communication.prototype.generateGuid = function() { return "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g, function(a) { var b = 16 * Math.random() | 0; a = "y" === a ? (b & 3 | 8).toString(16) : b.toString(16); return a; }); }; module$exports$omid$common$Communication.prototype.serialize = function(a) { return JSON.stringify(a); }; module$exports$omid$common$Communication.prototype.deserialize = function(a) { return JSON.parse(a); }; module$exports$omid$common$Communication.prototype.isDirectCommunication = function() { return this.communicationType_ === module$exports$omid$common$constants.CommunicationType.DIRECT; }; var module$exports$omid$common$DetectOmid = {OMID_PRESENT_FRAME_NAME:"omid_v1_present", isOmidPresent:function(a) { try { return a.frames ? !!a.frames[module$exports$omid$common$DetectOmid.OMID_PRESENT_FRAME_NAME] : !1; } catch (b) { return !1; } }, declareOmidPresence:function(a) { a.frames && a.document && (module$exports$omid$common$DetectOmid.OMID_PRESENT_FRAME_NAME in a.frames || (null == a.document.body && module$exports$omid$common$DetectOmid.isMutationObserverAvailable_(a) ? module$exports$omid$common$DetectOmid.registerMutationObserver_(a) : a.document.body ? module$exports$omid$common$DetectOmid.appendPresenceIframe_(a) : a.document.write('"))); }, appendPresenceIframe_:function(a) { var b = a.document.createElement("iframe"); b.id = module$exports$omid$common$DetectOmid.OMID_PRESENT_FRAME_NAME; b.name = module$exports$omid$common$DetectOmid.OMID_PRESENT_FRAME_NAME; b.style.display = "none"; a.document.body.appendChild(b); }, isMutationObserverAvailable_:function(a) { return "MutationObserver" in a; }, registerMutationObserver_:function(a) { var b = new MutationObserver(function(c) { c.forEach(function(c) { "BODY" === c.addedNodes[0].nodeName && (module$exports$omid$common$DetectOmid.appendPresenceIframe_(a), b.disconnect()); }); }); b.observe(a.document.documentElement, {childList:!0}); }}; var module$exports$omid$common$DirectCommunication = function(a) { module$exports$omid$common$Communication.call(this, a); this.communicationType_ = module$exports$omid$common$constants.CommunicationType.DIRECT; this.handleExportedMessage = module$exports$omid$common$DirectCommunication.prototype.handleExportedMessage.bind(this); }; $jscomp.inherits(module$exports$omid$common$DirectCommunication, module$exports$omid$common$Communication); module$exports$omid$common$DirectCommunication.prototype.sendMessage = function(a, b) { b = void 0 === b ? this.to : b; if (!b) { throw Error("Message destination must be defined at construction time or when sending the message."); } b.handleExportedMessage(a.serialize(), this); }; module$exports$omid$common$DirectCommunication.prototype.handleExportedMessage = function(a, b) { module$exports$omid$common$InternalMessage.isValidSerializedMessage(a) && this.handleMessage(module$exports$omid$common$InternalMessage.deserialize(a), b); }; var module$exports$omid$common$eventTypedefs = {}; var module$exports$omid$common$exporter = {}; function module$contents$omid$common$exporter_getOmidExports() { return "undefined" === typeof omidExports ? null : omidExports; } function module$contents$omid$common$exporter_getOrCreateName(a, b) { return a && (a[b] || (a[b] = {})); } module$exports$omid$common$exporter.packageExport = function(a, b, c) { if (c = void 0 === c ? module$contents$omid$common$exporter_getOmidExports() : c) { a = a.split("."), a.slice(0, a.length - 1).reduce(module$contents$omid$common$exporter_getOrCreateName, c)[a[a.length - 1]] = b; } }; var module$exports$omid$common$logger = {error:function(a) { for (var b = [], c = 0; c < arguments.length; ++c) { b[c - 0] = arguments[c]; } module$contents$omid$common$logger_executeLog(function() { throw new (Function.prototype.bind.apply(Error, [null].concat(["Could not complete the test successfully - "], $jscomp.arrayFromIterable(b)))); }, function() { return console.error.apply(console, [].concat($jscomp.arrayFromIterable(b))); }); }, debug:function(a) { for (var b = [], c = 0; c < arguments.length; ++c) { b[c - 0] = arguments[c]; } module$contents$omid$common$logger_executeLog(function() { }, function() { return console.error.apply(console, [].concat($jscomp.arrayFromIterable(b))); }); }}; function module$contents$omid$common$logger_executeLog(a, b) { "undefined" !== typeof jasmine && jasmine ? a() : "undefined" !== typeof console && console && console.error && b(); } ;var module$exports$omid$common$OmidGlobalProvider = {}, module$contents$omid$common$OmidGlobalProvider_globalThis = eval("this"); function module$contents$omid$common$OmidGlobalProvider_getOmidGlobal() { if ("undefined" !== typeof omidGlobal && omidGlobal) { return omidGlobal; } if ("undefined" !== typeof global && global) { return global; } if ("undefined" !== typeof window && window) { return window; } if ("undefined" !== typeof module$contents$omid$common$OmidGlobalProvider_globalThis && module$contents$omid$common$OmidGlobalProvider_globalThis) { return module$contents$omid$common$OmidGlobalProvider_globalThis; } throw Error("Could not determine global object context."); } module$exports$omid$common$OmidGlobalProvider.omidGlobal = module$contents$omid$common$OmidGlobalProvider_getOmidGlobal(); var module$exports$omid$common$PostMessageCommunication = function(a, b) { b = void 0 === b ? module$exports$omid$common$OmidGlobalProvider.omidGlobal : b; module$exports$omid$common$Communication.call(this, b); var c = this; this.communicationType_ = module$exports$omid$common$constants.CommunicationType.POST_MESSAGE; a.addEventListener("message", function(a) { if ("object" === typeof a.data) { var b = a.data; module$exports$omid$common$InternalMessage.isValidSerializedMessage(b) && (b = module$exports$omid$common$InternalMessage.deserialize(b), a.source && c.handleMessage(b, a.source)); } }); }; $jscomp.inherits(module$exports$omid$common$PostMessageCommunication, module$exports$omid$common$Communication); module$exports$omid$common$PostMessageCommunication.isCompatibleContext = function(a) { return !!(a && a.addEventListener && a.postMessage); }; module$exports$omid$common$PostMessageCommunication.prototype.sendMessage = function(a, b) { b = void 0 === b ? this.to : b; if (!b) { throw Error("Message destination must be defined at construction time or when sending the message."); } b.postMessage(a.serialize(), "*"); }; var module$exports$omid$common$Rectangle = function(a, b, c, d) { this.x = a; this.y = b; this.width = c; this.height = d; }; var module$exports$omid$common$serviceCommunication = {resolveTopWindowContext:function(a) { "undefined" === typeof a && "undefined" !== typeof window && window && (a = window); if ("undefined" === typeof a || !a || "undefined" === typeof a.top || !a.top) { return module$exports$omid$common$OmidGlobalProvider.omidGlobal; } if (a === a.top) { return a; } try { return "undefined" === typeof a.top.location.hostname ? a : a.top; } catch (b) { return a; } }}; function module$contents$omid$common$serviceCommunication_getUnobfuscatedKey(a, b) { return b.reduce(function(a, b) { return a && a[b]; }, a); } module$exports$omid$common$serviceCommunication.startServiceCommunication = function(a, b, c) { c = void 0 === c ? module$exports$omid$common$DetectOmid.isOmidPresent : c; return (b = module$contents$omid$common$serviceCommunication_getUnobfuscatedKey(a, b)) ? new module$exports$omid$common$DirectCommunication(b) : a.top && c(a.top) ? new module$exports$omid$common$PostMessageCommunication(a, a.top) : null; }; var module$exports$omid$common$VastProperties = function(a, b, c, d) { this.isSkippable = a; this.skipOffset = b; this.isAutoPlay = c; this.position = d; }; var module$exports$omid$common$version = {ApiVersion:"1.0", Version:"1.2.3-iab592"}; var module$contents$omid$verificationClient$VerificationClient_VERIFICATION_CLIENT_VERSION = module$exports$omid$common$version.Version, module$contents$omid$verificationClient$VerificationClient_EventCallback; function module$contents$omid$verificationClient$VerificationClient_getThirdPartyOmid() { var a = module$exports$omid$common$OmidGlobalProvider.omidGlobal.omid3p; return a && "function" === typeof a.registerSessionObserver && "function" === typeof a.addEventListener ? a : null; } var module$exports$omid$verificationClient$VerificationClient = function(a) { if (this.communication = a = void 0 === a ? (0,module$exports$omid$common$serviceCommunication.startServiceCommunication)((0,module$exports$omid$common$serviceCommunication.resolveTopWindowContext)(), ["omid", "v1_VerificationServiceCommunication"]) : a) { this.communication.onMessage = this.handleMessage_.bind(this); } else { if (a = module$contents$omid$verificationClient$VerificationClient_getThirdPartyOmid()) { this.omid3p = a; } } //----------this.remoteIntervals_ = this.remoteTimeouts_ = 0; this.callbackMap_ = {}; this.imgCache_ = []; }; module$exports$omid$verificationClient$VerificationClient.prototype.isSupported = function() { return !(!this.communication && !this.omid3p); }; module$exports$omid$verificationClient$VerificationClient.prototype.registerSessionObserver = function(a, b) { (0,module$exports$omid$common$argsChecker.assertFunction)("functionToExecute", a); this.omid3p ? this.omid3p.registerSessionObserver(a, b) : this.sendMessage_("addSessionListener", a, b); }; module$exports$omid$verificationClient$VerificationClient.prototype.addEventListener = function(a, b) { (0,module$exports$omid$common$argsChecker.assertTruthyString)("eventType", a); (0,module$exports$omid$common$argsChecker.assertFunction)("functionToExecute", b); this.omid3p ? this.omid3p.addEventListener(a, b) : this.sendMessage_("addEventListener", b, a); }; module$exports$omid$verificationClient$VerificationClient.prototype.sendUrl = function(a, b, c) { (0,module$exports$omid$common$argsChecker.assertTruthyString)("url", a); module$exports$omid$common$OmidGlobalProvider.omidGlobal.document && module$exports$omid$common$OmidGlobalProvider.omidGlobal.document.createElement ? this.sendUrlWithImg_(a, b, c) : this.sendMessage_("sendUrl", function(a) { a && b ? b() : !a && c && c(); }, a); }; module$exports$omid$verificationClient$VerificationClient.prototype.sendUrlWithImg_ = function(a, b, c) { var d = this, e = module$exports$omid$common$OmidGlobalProvider.omidGlobal.document.createElement("img"); this.imgCache_.push(e); var f = function(a) { var b = d.imgCache_.indexOf(e); 0 <= b && d.imgCache_.splice(b, 1); a && a(); }; e.addEventListener("load", f.bind(this, b)); e.addEventListener("error", f.bind(this, c)); e.src = a; }; module$exports$omid$verificationClient$VerificationClient.prototype.injectJavaScriptResource = function(a, b, c) { var d = this; (0,module$exports$omid$common$argsChecker.assertTruthyString)("url", a); module$exports$omid$common$OmidGlobalProvider.omidGlobal.document ? this.injectJavascriptResourceUrlInDom_(a, b, c) : this.sendMessage_("injectJavaScriptResource", function(e, f) { e ? (d.evaluateJavaScript_(f, a), b()) : (module$exports$omid$common$logger.error("Service failed to load JavaScript resource."), c()); }, a); }; module$exports$omid$verificationClient$VerificationClient.prototype.injectJavascriptResourceUrlInDom_ = function(a, b, c) { var d = module$exports$omid$common$OmidGlobalProvider.omidGlobal.document, e = d.body; d = d.createElement("script"); d.onload = b; d.onerror = c; d.src = a; d.type = "application/javascript"; e.appendChild(d); }; module$exports$omid$verificationClient$VerificationClient.prototype.evaluateJavaScript_ = function(a, b) { try { eval(a); } catch (c) { module$exports$omid$common$logger.error('Error evaluating the JavaScript resource from "' + b + '".'); } }; module$exports$omid$verificationClient$VerificationClient.prototype.setTimeout = function(a, b) { (0,module$exports$omid$common$argsChecker.assertFunction)("functionToExecute", a); (0,module$exports$omid$common$argsChecker.assertPositiveNumber)("timeInMillis", b); if (this.hasTimeoutMethods_()) { return module$exports$omid$common$OmidGlobalProvider.omidGlobal.setTimeout(a, b); } //----------var c = this.remoteTimeouts_++; var c = ((new Date()).getTime() * 1000000) + (Math.floor(Math.random() * 1000000)); this.sendMessage_("setTimeout", a, c, b); return c; }; module$exports$omid$verificationClient$VerificationClient.prototype.clearTimeout = function(a) { (0,module$exports$omid$common$argsChecker.assertPositiveNumber)("timeoutId", a); this.hasTimeoutMethods_() ? module$exports$omid$common$OmidGlobalProvider.omidGlobal.clearTimeout(a) : this.sendOneWayMessage_("clearTimeout", a); }; module$exports$omid$verificationClient$VerificationClient.prototype.setInterval = function(a, b) { (0,module$exports$omid$common$argsChecker.assertFunction)("functionToExecute", a); (0,module$exports$omid$common$argsChecker.assertPositiveNumber)("timeInMillis", b); if (this.hasIntervalMethods_()) { return module$exports$omid$common$OmidGlobalProvider.omidGlobal.setInterval(a, b); } //----------var c = this.remoteIntervals_++; var c = ((new Date()).getTime() * 1000000) + (Math.floor(Math.random() * 1000000)); this.sendMessage_("setInterval", a, c, b); return c; }; module$exports$omid$verificationClient$VerificationClient.prototype.clearInterval = function(a) { (0,module$exports$omid$common$argsChecker.assertPositiveNumber)("intervalId", a); this.hasIntervalMethods_() ? module$exports$omid$common$OmidGlobalProvider.omidGlobal.clearInterval(a) : this.sendOneWayMessage_("clearInterval", a); }; module$exports$omid$verificationClient$VerificationClient.prototype.hasTimeoutMethods_ = function() { return "function" === typeof module$exports$omid$common$OmidGlobalProvider.omidGlobal.setTimeout && "function" === typeof module$exports$omid$common$OmidGlobalProvider.omidGlobal.clearTimeout; }; module$exports$omid$verificationClient$VerificationClient.prototype.hasIntervalMethods_ = function() { return "function" === typeof module$exports$omid$common$OmidGlobalProvider.omidGlobal.setInterval && "function" === typeof module$exports$omid$common$OmidGlobalProvider.omidGlobal.clearInterval; }; module$exports$omid$verificationClient$VerificationClient.prototype.handleMessage_ = function(a, b) { b = a.method; var c = a.guid; a = a.args; if ("response" === b && this.callbackMap_[c]) { var d = (0,module$exports$omid$common$ArgsSerDe.deserializeMessageArgs)(module$contents$omid$verificationClient$VerificationClient_VERIFICATION_CLIENT_VERSION, a); this.callbackMap_[c].apply(this, d); } "error" === b && window.console && module$exports$omid$common$logger.error(a); }; module$exports$omid$verificationClient$VerificationClient.prototype.sendOneWayMessage_ = function(a, b) { for (var c = [], d = 1; d < arguments.length; ++d) { c[d - 1] = arguments[d]; } this.sendMessage_.apply(this, [].concat([a, null], $jscomp.arrayFromIterable(c))); }; module$exports$omid$verificationClient$VerificationClient.prototype.sendMessage_ = function(a, b, c) { for (var d = [], e = 2; e < arguments.length; ++e) { d[e - 2] = arguments[e]; } this.communication && (e = this.communication.generateGuid(), b && (this.callbackMap_[e] = b), d = new module$exports$omid$common$InternalMessage(e, "VerificationService." + a, module$contents$omid$verificationClient$VerificationClient_VERIFICATION_CLIENT_VERSION, (0,module$exports$omid$common$ArgsSerDe.serializeMessageArgs)(module$contents$omid$verificationClient$VerificationClient_VERIFICATION_CLIENT_VERSION, d)), this.communication.sendMessage(d)); }; (0,module$exports$omid$common$exporter.packageExport)("OmidVerificationClient", module$exports$omid$verificationClient$VerificationClient); }, typeof exports === 'undefined' ? undefined : exports)); } catch(e) { __IntegralASDiagnosticCall('thirdparty', e); } __IASScope.isDomless = (typeof window === "undefined" ? true : false); __IASOmidVerificationClient = { isSupported: function () { return false; } }; if (typeof __IASScope.OmidVerificationClient !== 'undefined') { try { __IASOmidVerificationClient = new __IASScope.OmidVerificationClient['1.2.3-iab592'](); //try standard in-browser instantiation } catch(e) { try { __IASOmidVerificationClient = new __IASScope.OmidVerificationClient(); //try domless version which has no version } catch(e) { } } } if (__IntegralASConfig.jsFeatures.indexOf('asidJsDiagnostic') !== -1) { var fakeErr = { message: __IntegralASConfig.asid }; __IntegralASDiagnosticCall('asid', fakeErr); } __IntegralASConfig.useFIF = (__IASScope && !!__IASScope.__IntegralASUseFIF) && __IntegralASConfig.mode === 'jload'; __IntegralASConfig.adRefreshThreshold = __IASScope && __IASScope.__IntegralASAdRefreshThreshold; __IntegralASConfig.contextNode = (function() { if (__IASScope.isDomless) { return; } if (__IntegralASConfig.useFIF) { return __IASScope.frameElement; // Early exit if using FIF } var tempScript, embedded = window != top, scripts = document.getElementsByTagName('script'), result = scripts[scripts.length - 1], scriptIndex = scripts.length, useDocWrite = 'jss,jsi,jspix'.indexOf(__IntegralASConfig.mode) !== -1, scriptUrl = __IntegralASConfig.scriptUrl; try { while (--scriptIndex >= 0) { tempScript = scripts[scriptIndex]; if (tempScript.src && tempScript.src.indexOf(scriptUrl) === 0 && tempScript.getAttribute('data-ias-script-tag') === null) { result = tempScript; tempScript.setAttribute('data-ias-script-tag', 'found'); break; } } if (scriptIndex === 0 && useDocWrite && !embedded) { document.write(''); result = document.getElementById('s' + __IntegralASConfig.asid).parentNode; } } catch(e) { } return result; }()); __IntegralASConfig.perf = (function() { var _marks = {}; var START_CODE = 'A'; var END_CODE = 'Z'; function _addMark(codeName, time) { // TODO: consider validation that codeName doesn't already exist and throwing in debug mode // also that the code name is a string of the expected format // and/or consider consolidating all PERF_MARK_ definitions into a global-to-our-closure constants file // (except the ones in this file, since _init() wouldn't have access to that scope) _marks[codeName] = time; } function mark(codeName) { _addMark(codeName, Math.round(__IASScope.performance.now())); } function markStart(baseName) { mark(baseName + START_CODE); } function markEnd(baseName) { mark(baseName + END_CODE); } function markResource(baseName, url) { var entry, entries; entries = __IASScope.performance.getEntriesByName(url); if (entries && entries.length) { entry = entries[entries.length - 1]; if (entry.startTime > 0 && entry.responseEnd > 0) { _addMark(baseName + START_CODE, Math.round(entry.startTime)); // TODO: if we address the CORS issues in FW, we can gather more details about the download process here _addMark(baseName + END_CODE, Math.round(entry.responseEnd)); } } } function getData() { return _marks; } function noop() {} function setNoops() { _addMark = noop; mark = noop; markStart = noop; markEnd = noop; markResource = noop; } function isFunc(obj) { return typeof obj === 'function'; } function _init() { var canUsePerformanceAPIs = false; var PERF_MARK_BOOTSTRAPPER_EXECUTION = 'be'; var PERF_MARK_BOOTSTRAPPER_SCRIPT_DOWNLOAD = 'bd'; var PERF_MARK_MAIN_SCRIPT_DOWNLOAD = 'md'; // note: this code is intentionally the same as the one in globalConstants.js var downloadMark; try { canUsePerformanceAPIs = __IASScope.performance && isFunc(__IASScope.performance.getEntriesByName) && isFunc(__IASScope.performance.now) && __IntegralASConfig.perfBirth !== null; if (canUsePerformanceAPIs) { downloadMark = __IntegralASConfig.jsDoSplit ? PERF_MARK_BOOTSTRAPPER_SCRIPT_DOWNLOAD : PERF_MARK_MAIN_SCRIPT_DOWNLOAD; markResource(downloadMark, __IntegralASConfig.scriptUrl); // in split mode, this captures download time for the bootstrapper script, in bundled mode, the bundled/main script _addMark(PERF_MARK_BOOTSTRAPPER_EXECUTION + START_CODE, Math.round(__IntegralASConfig.perfBirth)); // put the birthdate that we already captured into our list of marks markEnd(PERF_MARK_BOOTSTRAPPER_EXECUTION); // roughly the end time of execution for the bootstrapper script in split mode, in bundled mode, end of the bootstrapper part of the script and start of the module definition part } else { setNoops(); } } catch (err) { // TODO: remove if we never get here? setNoops(); if (isFunc(__IASScope.__IntegralASDiagnosticCall)) { __IASScope.__IntegralASDiagnosticCall('perf', err, __IntegralASConfig); } } } _init(); return { mark: mark, markStart: markStart, markEnd: markEnd, markResource: markResource, getData: getData }; }()); } catch(err) { __IntegralASConfig = {}; __IntegralASDiagnosticCall('bootstrapper', err); } // This is an immediately invoked bootstrapper extension, rather than an anonymous IIFE to enable unit testing. __IASScope.__IntegralASConfig = typeof __IntegralASConfig !== 'undefined' ? __IntegralASConfig : {}; __IASScope.__IntegralASConfig.mainScriptAppender = function(params, mainScriptScope) { "use strict"; // TODO: minification for this file function isDef(obj) { return typeof obj !== 'undefined'; } function isFunc(obj) { return typeof obj === 'function'; } function sendDiag(point, err) { if (isFunc(mainScriptScope.__IntegralASDiagnosticCall)) { mainScriptScope.__IntegralASDiagnosticCall('appender-' + point, err, params); } } function getInitializerIfAvailable() { // TODO: future enhancement - look in top when available and consider storing in top when possible to increase availability. // Also consider potential timing issues between when a version of __IntegralASExec would be // loaded by another script vs. when this code checks. (E.g. three tags on a page all direct. // When the Bootstrapper Script runs for all three, none have had time to load an __IntegralASExec // yet, so all three wind up requesting it. (The browser may combine the requests into one due to browser caching.) // Perhaps the three tags should coordinate somehow?) var result = false; var functionExists = isDef(mainScriptScope.__IntegralASExec) && isDef(mainScriptScope.__IntegralASExec[params.version]) && isFunc(mainScriptScope.__IntegralASExec[params.version].initialize); if (functionExists) { result = mainScriptScope.__IntegralASExec[params.version].initialize; } return result; } // TODO: add an onload handler so we can short-circuit polling https://stackoverflow.com/questions/4845762/onload-handler-for-script-tag-in-internet-explorer function appendScript(scriptUrl) { if (__IASScope.isDomless) { if (__IASOmidVerificationClient && __IASOmidVerificationClient.injectJavaScriptResource) { __IASOmidVerificationClient.injectJavaScriptResource(scriptUrl, function(){}); } } else { var mainScriptDoc = mainScriptScope.document; var script = mainScriptDoc.createElement('script'); script.type = 'text/javascript'; script.src = scriptUrl; mainScriptDoc.head.appendChild(script); } } function lookForMainScriptAndRun() { var initializerFn, shouldSendTimeout, timePassed, timeoutExceeded; var initializerScope = params.useFIF ? mainScriptScope.parent : mainScriptScope; var TIMEOUT_MS = 5000; var INTERVAL_MS = 25; var timeoutDiagSent = false; var timeoutScope = __IASScope; if (__IASScope.isDomless && __IASOmidVerificationClient && __IASOmidVerificationClient.setTimeout) { timeoutScope = __IASOmidVerificationClient; } function timedLoad() { try { initializerFn = getInitializerIfAvailable(); if (initializerFn) { initializerFn(params, initializerScope, initializerScope.document); } else { timePassed = new Date().getTime() - params.birthdate; timeoutExceeded = timePassed > TIMEOUT_MS; shouldSendTimeout = !timeoutDiagSent && timeoutExceeded; if (shouldSendTimeout) { sendDiag('timeout', new Error('Exceeded 5s time limit on loading static script.')); timeoutDiagSent = true; } timeoutScope.setTimeout(timedLoad, INTERVAL_MS); //thanks to this setTimeout, we're keeping the interval behaviour } } catch(err) { sendDiag('interval', err); } } timeoutScope.setTimeout(timedLoad, INTERVAL_MS); } function loadMainScript(scriptUrl) { // In jss,jsi,jspix modes, when params.forceAppend is "false", we need to use document.write instead of document.append // TODO: check for docWrite mode and properly invoke when we move beyond "jload only" appendScript(scriptUrl); lookForMainScriptAndRun(); } function beginAppending() { var mainScriptUrl = params.protocol + '://' + params.sp_cdnScripts.main; // TODO: add functionality here to getInitializerIfAvailable() and only requst the main script if necessary // Not doing now because: // 1) it adds a lot of complexity to testing // 2) in most of the initial use cases, our script will be in its own iframe and // I don't want to add the complexity of looking in other scopes yet loadMainScript(mainScriptUrl); } function isValidToAppend() { var configIsValid = params.protocol && params.sp_cdnScripts && params.sp_cdnScripts.main, tagTypeIsValid = params.mode === 'jload'; return configIsValid && tagTypeIsValid; } function start() { try { params.isSplitMode = true; if (isValidToAppend()) { beginAppending(); } else { throw new Error("incorrect configuration for split mode"); } } catch(err) { sendDiag('start', err); } } start(); }; __IASScope.__IntegralASConfig.mainScriptAppender(__IASScope.__IntegralASConfig, __IASScope);