{"version":3,"sources":["webpack:///vpadn-video-sdk.js","webpack:///webpack/bootstrap 838f0a8cf6f96cc23fad","webpack:///./src/vpadn-sdk-parameters.partial.js","webpack:///./src/vpadn-sdk-features.partial.js","webpack:///./src/vpadn-sdk-check.partial.js","webpack:///./src/vpon-video/vpadn-video-sdk.js","webpack:///./src/vpadn-sdk-cookie.partial.js","webpack:///./src/vpadn-sdk-utils.partial.js"],"names":["modules","__webpack_require__","moduleId","installedModules","exports","module","i","l","call","m","c","d","name","getter","o","Object","defineProperty","configurable","enumerable","get","n","__esModule","object","property","prototype","hasOwnProperty","p","s","systemVar","networkId","a","acceptDomains","adhesionPosition","ad_identifier","ad_is_lat","ad_id_type","adRequestCallBack","adRotate","adUrlHeaderName","clickUrlHeaderName","closeImgSrc","cookieCTID","connectQueue","contentData","coverPolicyCheckHeightBand","coverPolicyCheckWidthBand","debug","format","gamTargetingMap","impUrlHeaderName","intCloseBtnEndureTime","intCloseBtnAppearTime","isGettingAd","isRotate","landing","licensekey","lower_bound_vpon_refresh_time_second","openTab","pullFrameIndex","nativeAdLabel","nativeCoverMin","nativeLayoutOption","rectHeightTotalBand","rectWidthTotalBand","reqAdFrameId","reqAdUrl","sdk","useCustomCloseCallBack","useCustomCloseBtnId","use_custom_z_index_int_30h","useHeightBand","useWidthBand","vponBannerTagCount","vponIntTagCount","vpon_refresh_time","vponTag","isUseCustomClose","referrerPolicy","ariaLabel","close_button","mute_icon","unmute_icon","ad_img","replay_button","video_view","lat","lon","accurary","adChoiceUrl","adChoiceArrowImg","adChoiceImg","apiConfig","protocol","hostname","path","click","request","videoEvent","parseUriOptions","strictMode","key","q","parser","strict","loose","nativeLayout","0","content","imgNum","1","2","VIDEO_EVENT_URL","TPL_PARAMS","ACTION","UID","ADID","AD_TYPE","LICENSE_KEY","VIDEO_TRACKING_ID","SDK","SESSION_ID","SEQUENCE_ID","VIDEO_FUNCTION_1_DESC","PARAM_E","PROGRESS","W_F_1_A","act_script","3","4","5","9","10","websdkParams","vponAdTest","adTest","adIdentifier","adIsLat","useCustomClose","customClick","adRequest","apiPayload","credentials","adTypeArr","attribute","expectResult","adAmountLimit","banner","mi","formatMapping","regex","ctid","vponTagAttrs","cookie","sid","thirdCookieEnabledFlag","seid","adUrlMapping","ban_img","ban_vid","int_fit","int_vid","int_30h","assets","logo","closeBtn","oneThreeCloseBtn","zoonBtn","_createForOfIteratorHelper","allowArrayLike","it","Symbol","iterator","Array","isArray","_unsupportedIterableToArray","length","F","done","value","e","_e","f","TypeError","err","normalCompletion","didErr","step","next","_e2","minLen","_arrayLikeToArray","toString","slice","constructor","from","test","arr","len","arr2","findFrameAbsoluteRect","element","currentParentWindow","currentWindow","window","positions","rect","getBoundingClientRect","document","body","top","parent","_step2","_iterator2","getElementsByTagName","frameElement","contentWindow","frameRect","push","x","y","reduce","accumulator","currentValue","bottom","left","right","width","height","generateUID","crypto","randomUUID","S4","Math","random","substring","adder","initialValue","arguments","undefined","num","getCTID","CTID","prepareContextForAdRequest","getCookieByKey","vpadnCookieComponent","setCookie","idsService","cookieDomain","getTopReachableDomain","localStorage","getItem","verifyCtid","concat","Date","getTime","setItem","options","domain","referrer","RegExp","floor","parseCtidToObj","handleAdReqUrl","reqAdParameters","adReqUrl","URL","keys","forEach","searchParams","append","encodeURIComponent","_require","require","isUrl","checkAdType","_require2","_require3","cookieParamsValidator","_require4","endsWith","str","suffix","indexOf","s4","genGuid","getCookie","c_name","c_value","c_start","c_end","unescape","uaMatch","substr","navigator","userAgent","isSDKiOS","isIPhone","isSDKiOSNotIPhone","parseParamsFromUrl","url","params","ary","split","replaceSMSContent","replace","decodeURIComponent","regexp_replace","input","tagBeingReplaced","replaceWith","ctid_dob","timestamp","version","error","console","log","fadeLock","fadeForFlrec","el","action","ms","callback","transitionendCallback","clearTimeout","removeEventListener","isNaN","parseFloat","style","opacity","setTimeout","transition","addEventListener","warn","fading","fade","type","clearInterval","display","isIn","duration","gap","func","setInterval","getParams","_step","setLocation","location","href","paramsArr","search","_iterator","calculateViewRate","target","boundingRect","counter","position","elementFromPoint","viewPercent","getRootDomain","hostStringArray","getReqAdParameters","reqParameters","cover_min","getAttribute","bid","adtest","s_h","documentElement","clientHeight","s_w","clientWidth","_location","beaconUrl","sendBeaconAjax","SetHelper","setCallback","setErrorCallback","cookies","cookiesArr","map","item","trim","targetCookie","find","cookieString","generateCookieString","cb","errorCb","xmlHttp","XMLHttpRequest","timeout","withCredentials","onreadystatechange","readyState","status","responseText","open","send","write","days","date","setTime","expires","toGMTString","cookieValue","read","allCookie","index","ind1","remove","this","json","JSON","parse","COOKIE_DOMAIN","checkInput","result","errMsg","checkAttributeIsGiven","adType","initialIntIframeHtmlTag","guid","iframeId","iframe","createElement","setAttribute","frameBorder","container","initialCloseButtonContainer","initialIntCloseButton","appendChild","vpon_ad_create_int_iframe","querySelectorAll","info","checkInputResult","licenseKey","_typeof","_toConsumableArray","_arrayWithoutHoles","_iterableToArray","_nonIterableSpread","iter","_regeneratorRuntime","define","t","r","writable","wrap","Generator","create","Context","makeInvokeMethod","tryCatch","arg","GeneratorFunction","GeneratorFunctionPrototype","defineIteratorMethods","_invoke","AsyncIterator","invoke","u","h","resolve","__await","then","callInvokeWithMethodAndArg","Error","method","delegate","maybeInvokeDelegate","sent","_sent","dispatchException","abrupt","resultName","nextLoc","pushTryEntry","tryLoc","catchLoc","finallyLoc","afterLoc","tryEntries","resetTryEntry","completion","reset","values","asyncIterator","toStringTag","getPrototypeOf","v","g","displayName","isGeneratorFunction","mark","setPrototypeOf","__proto__","awrap","async","Promise","reverse","pop","prev","charAt","stop","rval","handle","complete","finish","delegateYield","asyncGeneratorStep","gen","reject","_next","_throw","_asyncToGenerator","fn","self","args","apply","currentFrameAbsolutePosition","idx","frames","divide","bandCount","res","coveredBannerCheck","frame_id","iframeViewable","isInCrossDomain","underViewport","displayInViewport","myframe","getElementById","toLowerCase","visibility","rectTop","getTransferRectHeight","rectLeft","getTransferRectWidth","frameBoundingClientRect","fTop","fLeft","getFrameBoundingClientRect","rectBottom","rectRight","flag1","innerHeight","innerWidth","nowFrame","calIframeBoundingClientRect","frameDocument","nowDocument","ifs","contentDocument","coveredIntCheck","rectWidthBand","rectHeightBand","notPass","threshold","checkX","j","checkY","frameId","coveredNaCheck","vponTagPos","pageYOffset","parentNode","scrollTop","pageXOffset","scrollLeft","className","parentClassName","parentElement","direction","iframeW","iframeH","adTypeMapping","na","attr","checkVponTagExisted","Boolean","arrangeReqAdUrl","baseUrl","param_str","queryWebApiPermission","_ref","_callee","_context","permissions","query","_x","isVpadnEndpoint","isWebview","useragent","match","isInGAM","some","re","verify","exec","checkVponTagAttributes","vponTagAttributes","getAttributeNames","checkObj","_defineProperties","props","descriptor","_toPropertyKey","_toPrimitive","toPrimitive","String","Number","_classCallCheck","instance","Constructor","isElement","VponConsole","digitSet","VponVideo","isVponOMIDBridgeExist","protoProps","staticProps","videoContainer","videoConfig","videoDestroy","video","video_area","querySelector","src","handleTimeUpdateFunc","bindVideoEvents","handleVideoAbort","handleVideoCanBePlay","handleVideoCanPlayThrogh","handleVideoDurationChange","handleVideoEmptied","handleVideoEnded","handleVideoError","handleVideoLoadeddata","handleVideoLoadedmetadata","handleVideoLoadstart","handleVideoPause","handleVideoPlay","handleVideoPlaying","handleVideoProgress","handleVideoRatechange","handleVideoSeeked","handleVideoSeeking","handleVideoStalled","handleVideoSuspend","handleVideoTimeupdate","handleVideoVolumechange","handleVideoWaiting","util","track","config","loop","play","ended","vponOMIDBridge","videoEvents","pause","isSupportOMEventOccur","fireOMEventOccur","deviceType","sessionId","isSendTrackingEventArr","sendQuartileTracking","trackingUrl","playBtnAreaNode","currentTime","resume","poster","removeAttribute","generatePlayBtnArea","playBtnArea","id","zIndex","backgroundImage","backgroundSize","playBtn","transform","stopPropagation","clickPlayButton","switchmuteicon","iconmuteArea","muted","children","videoInit","preload","videoPosterSrc","autoplay","data","event","isAdChoiceActive","classList","add","showmuted","handleIconMuteAreaClick","preventDefault","OnceArray","changemute","mutedcallback","handleTimeUpdate","customTracking","eventListener","ret","listener","sendVideoTrackings","eventsLister","videoLeftTime","trackingTimesArray","filter","trackingTimesElement","time","missDeliverElement","sendVideoTracking","trackingUrls","sendBeacon","trackingSender","createTrackingSender","trackingImg","getVideoEventUrlByEvnt","eventMapping","adid","templateSearchParams","has","uid","vpadnSid","vpadnSeq","clid","vid_tid","trackid","videoEventUrl","baseVideoEventParams","URLSearchParams","tid","ec","ad","setTrackingTimes","videoTotalTime","trackingTimes","tag","progress","progressValidate","progressTimeArr","progressTime","triggerMoatEvent","eventType","adVolume","volume","MoatApiReference","dispatchEvent","_vpon_android","omEventOccur","stringify","webkit","messageHandlers","postMessage","checkVideoTimeState","start","viewableDetectionListener","adEvents","impressionOccurred","firstQuartile","midpoint","thirdQuartile","stateArr","isDifferentTime","curr","customCreateElement","dom","customDOM","updateCountdown","videoTimeSpan","countdownTime","min","sec","innerText","setVponVideoControls","replayButton","replayVideo","otherLink","color","fontSize","openOtherLink","showVponVideoReplayControls","clickUrl","clientX","clientY","support","listeners","isPlaying","videoDurationTemp","domname","iconMuteSrc","iconUnmiteSrc","mutePosition","muteHidden","img1","img2","message","onPlay","onPause","playAtPosition","mute","unmute","isMuted","isPaused","paused","isEnded","getDuration","getCurrentTime","togglePlay","toggleMuted","sendLinkTracking","link","sendReplayTracking","replay","onTimeupdate","onPlayStatusChanged","onMuteStatusChanged","onMuteIconClick","onCanBePlay","onCanBePlayCallback","onVideoEnded","onVideoViewershipListener","changeStyle","obj","entries","selectedTarget","destroy","triggerVideoStartCallback","isInWeb","initialMoat","ids","partnerCode","k","adData","b","sendEvent","ownerDocument","defaultView","parentWindow","insertBefore","childNodes","root","rootMargin","entry","parseInt","intersectionRatio","_i2","_listeners","listenDOM","unobserve","IntersectionObserver","observe","NaN","countdownPosition","countdownHidden","executed","volumeChange","SEID","DOCUMENT_REFERRER","secure","DMP_HOST","protocolName","urlEncodeComponent","generateSEID","testCanWriteCookies","domainList","domainListLength","current","KEY","ctidObj","urlSearchParams","urlSearch","HTMLElement","nodeType","msg","strNum"],"mappings":"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","file":"vpadn-video-sdk.js","sourcesContent":["/******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId]) {\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/ \t\t}\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\ti: moduleId,\n/******/ \t\t\tl: false,\n/******/ \t\t\texports: {}\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.l = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// define getter function for harmony exports\n/******/ \t__webpack_require__.d = function(exports, name, getter) {\n/******/ \t\tif(!__webpack_require__.o(exports, name)) {\n/******/ \t\t\tObject.defineProperty(exports, name, {\n/******/ \t\t\t\tconfigurable: false,\n/******/ \t\t\t\tenumerable: true,\n/******/ \t\t\t\tget: getter\n/******/ \t\t\t});\n/******/ \t\t}\n/******/ \t};\n/******/\n/******/ \t// getDefaultExport function for compatibility with non-harmony modules\n/******/ \t__webpack_require__.n = function(module) {\n/******/ \t\tvar getter = module && module.__esModule ?\n/******/ \t\t\tfunction getDefault() { return module['default']; } :\n/******/ \t\t\tfunction getModuleExports() { return module; };\n/******/ \t\t__webpack_require__.d(getter, 'a', getter);\n/******/ \t\treturn getter;\n/******/ \t};\n/******/\n/******/ \t// Object.prototype.hasOwnProperty.call\n/******/ \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(__webpack_require__.s = 3);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nmodule.exports.systemVar = {\n networkId: \"nid\",\n a: '',\n acceptDomains: ['m.vpon.com', 'tw-img.vpon.com'],\n adhesionPosition: 'vpon_ad_adhesion',\n ad_identifier: 'ad_identifier',\n ad_is_lat: 'ad_is_lat',\n ad_id_type: 'ad_id_type',\n adRequestCallBack: 'ad_request_callback',\n // branch:requestAdCallback\n adRotate: true,\n adUrlHeaderName: 'adURL',\n clickUrlHeaderName: 'clickURL',\n closeImgSrc: '//tw-img.vpon.com/img/close_54x54.png',\n cookieCTID: 'vpadn-ctid',\n connectQueue: [],\n contentData: 'content_data',\n coverPolicyCheckHeightBand: 0,\n coverPolicyCheckWidthBand: 0,\n debug: 'debug',\n format: 'vpon_ad_format',\n ///20210105: Attr of GAM TargetingMap\n gamTargetingMap: 'vpon_content_data',\n impUrlHeaderName: 'impURL',\n intCloseBtnEndureTime: 5000,\n intCloseBtnAppearTime: 3000,\n isGettingAd: true,\n isRotate: 'is_rotate',\n // branch:requestAdCallback\n landing: '',\n licensekey: 'vpon_ad_licensy_key',\n lower_bound_vpon_refresh_time_second: 15,\n openTab: 'openTab',\n pullFrameIndex: '_1',\n nativeAdLabel: 'Sponsored',\n nativeCoverMin: 'vpon_na_min',\n nativeLayoutOption: 'vpon_na_layout',\n rectHeightTotalBand: 5,\n rectWidthTotalBand: 5,\n reqAdFrameId: '',\n reqAdUrl: 'tw-api.vpadn.com/api/webAdReqV2',\n sdk: 'vpadn-sdk-w-v5.0.0',\n useCustomCloseCallBack: 'use_custom_close',\n useCustomCloseBtnId: 'use_custom_close_id',\n use_custom_z_index_int_30h: 'use_custom_z_index_int_30h',\n useHeightBand: 1,\n useWidthBand: 1,\n vponBannerTagCount: 3,\n vponIntTagCount: 1,\n vpon_refresh_time: 120000,\n vponTag: 'vpon',\n isUseCustomClose: false,\n referrerPolicy: 'no-referrer-when-downgrade',\n ariaLabel: {\n close_button: 'CloseButton',\n mute_icon: 'muteIcon',\n unmute_icon: 'unmuteIcon',\n ad_img: 'adImg',\n replay_button: 'replaybutton',\n video_view: 'videoView'\n },\n lat: 'lat',\n lon: 'lon',\n accurary: 'accurary',\n adChoiceUrl: 'https://m.vpon.com/ad-choice/vpon-ad-choice.html',\n adChoiceArrowImg: 'data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjAiIGhlaWdodD0iMTkiIHZpZXdCb3g9IjAgMCAyMCAxOSIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggaWQ9IlZlY3RvciIgZD0iTTEwLjI4NzggMTguMTYxNkMxMC4wMjYxIDE4LjQyMjkgOS42NzE0NiAxOC41Njk3IDkuMzAxNjcgMTguNTY5N0M4LjkzMTg4IDE4LjU2OTcgOC41NzcyMSAxOC40MjI5IDguMzE1NTYgMTguMTYxNkwwLjQwODA5OSAxMC4yNTQxQzAuMTQ2NzggOS45OTI1IC0zLjkwNDI1ZS0wNyA5LjYzNzgyIC00LjA2NTg5ZS0wNyA5LjI2ODAzQy00LjIyNzUzZS0wNyA4Ljg5ODI0IDAuMTQ2NzggOC41NDM1NyAwLjQwODA5OSA4LjI4MTkzTDguMzE1NTYgMC4zNzQ0NjJDOC41ODAyNSAwLjEyODEwNSA4LjkzMDEzIC0wLjAwNjA1MDUgOS4yOTE2OCAwLjAwMDE5NjA1MUM5LjY1MzIyIDAuMDA2NDQwNjkgOS45OTgyNiAwLjE1MjYwMSAxMC4yNTQzIDAuNDA3OTUxQzEwLjUwOTYgMC42NjM5NzQgMTAuNjU1OCAxLjAwOTAyIDEwLjY2MiAxLjM3MDU2QzEwLjY2ODMgMS43MzIxIDEwLjUzNDEgMi4wODE5OSAxMC4yODc4IDIuMzQ2NjhMNC43NjE4NSA3Ljg3MjZMMTguNjA0NiA3Ljg3MjZDMTguOTc0NyA3Ljg3MjYgMTkuMzI5NiA4LjAxOTYyIDE5LjU5MTMgOC4yODEzMUMxOS44NTMgOC41NDMwMSAyMCA4Ljg5Nzk0IDIwIDkuMjY4MDNDMjAgOS42MzgxMiAxOS44NTMgOS45OTMwNiAxOS41OTEzIDEwLjI1NDhDMTkuMzI5NiAxMC41MTY0IDE4Ljk3NDcgMTAuNjYzNSAxOC42MDQ2IDEwLjY2MzVMNC43NjE4NSAxMC42NjM1TDEwLjI4NzggMTYuMTg5NEMxMC41NDkxIDE2LjQ1MSAxMC42OTU5IDE2LjgwNTcgMTAuNjk1OSAxNy4xNzU1QzEwLjY5NTkgMTcuNTQ1MyAxMC41NDkxIDE3LjkgMTAuMjg3OCAxOC4xNjE2WiIgZmlsbD0iIzQ0NDg1MCIvPgo8L3N2Zz4K',\n adChoiceImg: 'data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPCEtLSBHZW5lcmF0b3I6IEFkb2JlIElsbHVzdHJhdG9yIDI4LjAuMCwgU1ZHIEV4cG9ydCBQbHVnLUluIC4gU1ZHIFZlcnNpb246IDYuMDAgQnVpbGQgMCkgIC0tPgo8c3ZnIHZlcnNpb249IjEuMSIgaWQ9IuWcluWxpF8xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4PSIwcHgiIHk9IjBweCIKCSB2aWV3Qm94PSIwIDAgODUgODUiIHN0eWxlPSJlbmFibGUtYmFja2dyb3VuZDpuZXcgMCAwIDg1IDg1OyIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSI+CjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+Cgkuc3Qwe2ZpbGw6IzQ0NDg1MDtmaWxsLW9wYWNpdHk6MC41O30KCS5zdDF7ZmlsbDpub25lO3N0cm9rZTojOUE5QTlBO3N0cm9rZS13aWR0aDo0LjI1MjtzdHJva2Utb3BhY2l0eTowLjU7fQoJLnN0MntmaWxsOiNGRkZGRkY7fQo8L3N0eWxlPgo8cGF0aCBjbGFzcz0ic3QwIiBkPSJNNDIuNSw4NUM2Niw4NSw4NSw2Niw4NSw0Mi41UzY2LDAsNDIuNSwwUzAsMTksMCw0Mi41UzE5LDg1LDQyLjUsODV6Ii8+CjxwYXRoIGNsYXNzPSJzdDEiIGQ9Ik04Mi45LDQyLjVjMCwyMi4zLTE4LjEsNDAuNC00MC40LDQwLjRTMi4xLDY0LjgsMi4xLDQyLjVTMjAuMiwyLjEsNDIuNSwyLjFTODIuOSwyMC4yLDgyLjksNDIuNXoiLz4KPGc+Cgk8cGF0aCBjbGFzcz0ic3QyIiBkPSJNNDkuNiw1OC4yYy0wLjQtMC4yLTAuNy0wLjUtMS0wLjdjLTAuNS0wLjMtMS0wLjEtMS4zLDAuNGMtMC42LDEuMS0xLjUsMi42LTIuOSwzLjljLTEsMC45LTIuNi0wLjEtMi4zLTEuMwoJCWw3LjgtMjguOWMwLjItMC43LTAuNC0xLjItMS0xLjFsLTE0LjcsMi41Yy0wLjUsMC4xLTAuOSwwLjYtMC44LDFsMC4yLDEuNWMwLjEsMC41LDAuNSwwLjgsMC45LDAuOGgzLjZsLTcuMSwyNi4yCgkJYy0wLjEsMC43LTAuMywyLjMsMC41LDMuOWMxLjYsMyw1LjQsMy4yLDYsMy4yYzAuNSwwLDIuNCwwLjEsNS0xLjNjNC40LTIuNCw2LjUtNi40LDcuNS04LjhDNTAuMSw1OC44LDUwLDU4LjQsNDkuNiw1OC4yeiIvPgoJPHBhdGggY2xhc3M9InN0MiIgZD0iTTQ2LjMsMTIuOGMtMy41LDAtNi40LDIuOC02LjQsNi40YzAsMy41LDIuOCw2LjQsNi40LDYuNGMzLjUsMCw2LjQtMi44LDYuNC02LjQKCQlDNTIuNywxNS42LDQ5LjgsMTIuOCw0Ni4zLDEyLjh6Ii8+CjwvZz4KPC9zdmc+Cg=='\n};\nmodule.exports.apiConfig = {\n protocol: 'https:',\n hostname: 'tw-api.vpadn.com',\n path: {\n click: '/api/webviewAdClick/',\n request: '/api/webAdReqV2',\n videoEvent: '/api/webviewAdOnVideo'\n }\n};\nmodule.exports.parseUriOptions = {\n strictMode: false,\n key: ['source', 'protocol', 'authority', 'userInfo', 'user', 'password', 'host', 'port', 'relative', 'path', 'directory', 'file', 'query', 'anchor'],\n q: {\n name: 'queryKey',\n parser: /(?:^|&)([^&=]*)=?([^&]*)/g\n },\n parser: {\n strict: /^(?:([^:\\/?#]+):)?(?:\\/\\/((?:(([^:@]*)(?::([^:@]*))?)?@)?([^:\\/?#]*)(?::(\\d*))?))?((((?:[^?#\\/]*\\/)*)([^?#]*))(?:\\?([^#]*))?(?:#(.*))?)/,\n loose: /^(?:(?![^:@]+:[^:@\\/]*@)([^:\\/?#.]+):)?(?:\\/\\/)?((?:(([^:@]*)(?::([^:@]*))?)?@)?([^:\\/?#]*)(?::(\\d*))?)(((\\/(?:[^?#](?![^?#\\/]*\\.[^?#\\/.]+(?:[?#]|$)))*\\/?)?([^?#\\/]*))(?:\\?([^#]*))?(?:#(.*))?)/\n }\n};\nmodule.exports.nativeLayout = {\n 0: {\n content: '
${ad_label}
${title}
${body}
${action_name}
',\n imgNum: 2\n },\n 1: {\n content: '
${ad_label}
${title}
${body}
${action_name}
',\n imgNum: 1\n },\n 2: {\n content: '
${ad_label}
${title}
${body}
${action_name}
',\n imgNum: 1\n }\n};\nmodule.exports.VIDEO_EVENT_URL = 'https://tw-api.vpadn.com/api/webviewAdOnVideo';\nmodule.exports.TPL_PARAMS = {\n ACTION: 'a',\n UID: 'uid',\n ADID: 'ad',\n AD_TYPE: 't',\n LICENSE_KEY: 'bid',\n VIDEO_TRACKING_ID: 'vid_tid',\n SDK: 'sdk',\n SESSION_ID: 'vpadnSid',\n SEQUENCE_ID: 'vpadnSeq',\n VIDEO_FUNCTION_1_DESC: 'v_f_1_des',\n PARAM_E: 'e',\n PROGRESS: 'progress',\n W_F_1_A: 'w_f_1_a'\n};\nmodule.exports.act_script = {\n 0: 'vpsdk.openWebApp(undefined, undefined, \\\"${lnk}\\\", true, true, \\\"none\\\", 0xFFFFFFFF, true, true, true);',\n 1: 'vpsdk.openBrowser(undefined, undefined, \"${lnk}\");',\n 2: 'vpsdk.placeCall(undefined, undefined, \"${lnk}\");',\n 3: 'vpsdk.openBrowser(undefined, undefined, \"${lnk}\");',\n 4: 'vpsdk.sendSms( undefined, undefined, \"${vptpl_tel}\", \"${vptpl_body}\");',\n 5: 'vpsdk.openStore( undefined, undefined, \"${lnk}\");',\n 9: '',\n 10: ''\n};\nmodule.exports.websdkParams = {\n licensekey: \"vpon_ad_licensy_key\",\n gamTargetingMap: 'vpon_content_data',\n contentData: 'content_data',\n format: \"vpon_ad_format\",\n vponAdTest: \"vpon_ad_test\",\n debug: \"debug\",\n adTest: \"vpon_ad_test\",\n adIdentifier: \"ad_identifier\",\n adIsLat: \"ad_is_lat\",\n useCustomClose: \"use_custom_close\",\n customClick: \"vpon_custom_click\",\n adRequestCallBack: \"ad_request_callback\",\n nativeCoverMin: 'vpon_na_min',\n nativeAdLabel: \"Sponsored\",\n openTab: \"openTab\",\n nativeLayoutOption: \"vpon_na_layout\",\n sdk: 'vpadn-sdk-w-v5.0.0',\n useCustomCloseCallBack: 'use_custom_close',\n apiConfig: {\n protocol: 'https://',\n hostname: 'tw-api.vpadn.com',\n path: {\n adRequest: '/api/webAdReqV2'\n }\n },\n apiPayload: {\n adRequest: {\n referrerPolicy: 'no-referrer-when-downgrade',\n credentials: 'include'\n }\n },\n adTypeArr: [{\n attribute: \"320x50_mb\",\n expectResult: \"banner\"\n }, {\n attribute: \"320x100_mb\",\n expectResult: \"banner\"\n }, {\n attribute: \"300x250_mb\",\n expectResult: \"banner\"\n }, {\n attribute: \"320x480_mb\",\n expectResult: \"banner\"\n }, {\n attribute: \"mi\",\n expectResult: \"mi\"\n }, {\n attribute: \"na\",\n expectResult: \"na\"\n }],\n adAmountLimit: {\n banner: 3,\n mi: 1\n },\n formatMapping: [\"320x50_mb\", \"320x100_mb\", \"300x250_mb\", \"320x480_mb\", \"970x250_mb\", \"mi\", \"na\"],\n regex: {\n licensekey: /^[A-Za-z0-9]{32}$/,\n ctid: /^[0-9a-fA-F]{8}\\b-[0-9a-fA-F]{4}\\b-[0-9a-fA-F]{4}\\b-[0-9a-fA-F]{4}\\b-[0-9a-fA-F]{12}$/\n },\n vponTagAttrs: {\n format: \"vpon_ad_format\",\n licensekey: \"vpon_ad_licensy_key\"\n },\n cookie: {\n sid: 'Vpadn-Sid',\n ctid: 'vpadn-ctid',\n thirdCookieEnabledFlag: 'vpadn-ce',\n seid: 'vpadn-seid'\n },\n adUrlMapping: {\n ban_img: \"vpadn-tpl-ban_w-v2.html\",\n ban_vid: \"vpadn-tpl-ban-vid_w.html\",\n int_fit: \"vpadn-tpl-int_w-v2.html\",\n int_vid: \"vpadn-tpl-int-vid_w-v2.html\",\n int_30h: \"vpadn-tpl-int-30h_w.html\"\n },\n assets: {\n logo: \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAC4AAAAuCAMAAABgZ9sFAAABQVBMVEU+Pj44ODg7OztVVVU1NTVMaXEzMzMqKiotLS0wMDAnJycrKytYWFhHR0dAQD85OjkoKicvLy0sLCxbW1syMDNQUFAODg4sLCw4ODZLS0smJiYyMTEVFRYQEBAjIyMhISERERFWVlYoKCgSEhL7+/tVVVUbHBsfHx9QUFA4Nzg0NDRTVFNRUFAZGRn9/f0YGBgWFhaampr5+fnz8/NRUVFOTk5bW1x0dHR6eXn29vYsLCza2tpMTExQUFDq6uqqqqrp6emvr683Nzfv7+87ODv39/fIx8fX19fd3d06Ozq/v7+OjY7u7u6WlpZOTk7MzMzR0dEZGRqCgoKhoaG3t7eNjY1GRkY9PT1QUFBFRUXi4uKmpqbS0tJXV1e+vr5gYGC2tra6urpFRUVQUFDm5uZVVVZvb28fHx9ubm6Dg4P///+MlWkJAAAAanRSTlNaWlqtWgBaWlpaWlqthlpaWlpcrVqGqWJahmtfkqJvdZ2tZpf8qX97ZV5bn5SD/oiMifjqc41ow3T2ruoeCdiS8dRp9lrvrb7HsqSA4M+45LasytKcyrRyRmDQquO74rze2YAp0K2VobazCebO3gAAAslJREFUeNq9kvdD2kAUx4meJCGOEGnAMMOQMCwOaB2g1tphl1VbtXuv9///Af3eXSIYKKW/9Mvx7o0Pl3cvRGb+SYN477LdaVSmx6mPd9uSnAjveRyuNDtzY+Xj3Sbg5oUV+4sk/qUxPd04QKheFVTumjFTjZkm95AwTVPgXdBzlspzJv+gAh4WX85BMe5JvIdOPqsTieOe+62jTox3K27Dmhxvu+6BoaqGoRmaqhmGikBDCRkRIUSaexrwXsVtalKGMCo3cLEHBqGsRmYuXfdCm1QR9FKxpO95NcsYwdQ9L22pPt656mWXym9yRStMr63TVs5JqhJvuB0/v0e0lVkuhh/whOhOacUxJF6ZXfLztXtEp5lc6PjHROWj7ErRb2Z2dkmPx+Pw4/eJdrLLybiGUBgdlYdEx3Ypb/FMgOtCt8pE7zKOIQKgQe6DvYokDyUeCCe9L1ST+oDwxH1b5oZw3ud2y9H6NL/PSzuT04ZxCFM4K+XT/QSf1gnuo4/EXxDdxRT6iV1M0S7lrEE8kYhGo7qe0BOv1oluZ1BNQIg3iego2ypqUT2BlRB4tK/nmGVhORmED4je2uguiMP45k2iZ6uOLiOPP8xGOBqHXhN9LFT94x75U4z+EV8jWt9uFcV5qQ2ip5hifDTOsASCblnwU0yR+4xhCfwGGxRvILuS5O5Xok/8ov3iMO6JWTp1xsS1McX6OJxheMe4HmN8qHYBh4/F+as5X3XqwRTrQ3iKKUxJpRhTFIUx/uLRMf9DnOCVoYqCXAJXrmsPAzlvtTGiM0yxPlAZiUcAlne2+BQxIuU6vgg8pLUyQfKPXgvji8DD/Aah8VMbnaeG8QWuKWmxHR6mDr7/+vmjkKkWa6KiwIqqwKeGtJB28tW8k1RC+dE4tFBLpxU8bAQeEZqSBhsWKjAyIXYB+/jE+k/4fGQeC5JbRH4GMiL8DVCuk0infmIEAAAAAElFTkSuQmCC\",\n closeBtn: \"data:image/png;base64,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\",\n oneThreeCloseBtn: 'https://m.vpon.com/tpl/img/int_liquid_close.png',\n zoonBtn: 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIAAAAyCAMAAAAp4XiDAAAASFBMVEVMaXEAAAAAAAD///8AAAAAAAAAAAAAAAAAAAAAAAAAAAC/v79gYGDPz88QEBCAgIDt7e1AQEAwMDAgICBwcHCvr69QUFCPj48k3ENwAAAACnRSTlMA3yD/EEBQgO+fGxWR4AAAATBJREFUeNqt1tlyhSAMBuAqYCAuuJ3T93/TTi2SxsHEDv1vvOEbZAt8/FNaBz9x7aP2XfBI8aFT2lvI7UmB1cFz5Bq8S+OKAlAKFERAOUERuuFCN/o4pn4eruNx5ZbLsh3f0RhzGJeFbYpkNGbekjD9MddW+a3vlksSZmBTbb1AmEBvhU4SeTORu/ECmblAf4gOBZIEpRNXkQm2nl4hY4z7xv6sRYmkzJjT0sqLxLDBwB8JSCSSiAWipYqEyl6mV5+zPiPRUF4ScUXS3xL3e/X3R6Rle2yP8VMj/rqTp1Ejgc4LCZl06VRyMQvEp7PPxdALBM4KwwQKxFtWx04hEeDV8hT4pt1+SWN5Tc6VF9dlvVt5ClB9FwIV94tgKm++UH8j6/d+/euCIx3oL6X699gXXUtEJQBdBRkAAAAASUVORK5CYII='\n }\n};\n\n/***/ }),\n/* 1 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nfunction _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nfunction _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }\nfunction _nonIterableSpread() { throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\nfunction _iterableToArray(iter) { if (typeof Symbol !== \"undefined\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter); }\nfunction _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }\nfunction _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== \"undefined\" && o[Symbol.iterator] || o[\"@@iterator\"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === \"number\") { if (it) o = it; var i = 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 non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it[\"return\"] != null) it[\"return\"](); } finally { if (didErr) throw err; } } }; }\nfunction ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == _typeof(i) ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != _typeof(i)) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nfunction _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\nfunction _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); }\nfunction _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; }\nfunction _iterableToArrayLimit(r, l) { var t = null == r ? null : \"undefined\" != typeof Symbol && r[Symbol.iterator] || r[\"@@iterator\"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t[\"return\"] && (u = t[\"return\"](), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }\nfunction _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\nvar _require = __webpack_require__(2),\n isUrl = _require.isUrl,\n checkAdType = _require.checkAdType,\n verifyCtid = _require.verifyCtid;\nvar _require2 = __webpack_require__(0),\n websdkParams = _require2.websdkParams;\nvar _require3 = __webpack_require__(2),\n cookieParamsValidator = _require3.cookieParamsValidator;\nvar _require4 = __webpack_require__(5),\n getTopReachableDomain = _require4.getTopReachableDomain;\nvar checkCookieNameIsExist = function checkCookieNameIsExist(name) {\n return document.cookie.split(\";\").some(function (item) {\n return item.trim().startsWith(\"\".concat(name, \"=\"));\n });\n};\nvar getCookieOfObject = function getCookieOfObject() {\n return document.cookie.split(\";\").map(function (item) {\n return item.trim().split(\"=\");\n }).reduce(function (prev, curr) {\n var _curr = _slicedToArray(curr, 2),\n key = _curr[0],\n value = _curr[1];\n return _objectSpread(_objectSpread({}, prev), {}, _defineProperty({}, key, value));\n }, {});\n};\n\n/**\n * 211027>\n * Add Hinet third party tracking one in ten. The one is determined by ctid.\n */\n//const initialHinet = () => {\n// try {\n// const CTID_NAME = \"vpadn-ctid\";\n// if (\n// checkCookieNameIsExist(CTID_NAME) ||\n// (window.localStorage && window.localStorage.getItem(CTID_NAME))\n// ) {\n// const getCookie = getCookieOfObject();\n// const ctidCookie = getCookie[CTID_NAME].split(\"_\")[1].split(\".\")[0];\n// const CTID =\n// ctidCookie ||\n// (window.localStorage && window.localStorage.getItem(CTID_NAME));\n// if (Math.random() <= 0.3) {\n// const script = document.createElement(\"script\");\n// script.async = true;\n// script.src = \"https://t.ssp.hinet.net/utag.js\";\n// document.getElementsByTagName(\"head\")[0].appendChild(script);\n//\n// script.onload = () => {\n// var partnerId = \"7f1e29\";\n// window.__hitagCmdQueue = window.__hitagCmdQueue || [];\n// function hiball() {\n// __hitagCmdQueue.push(arguments);\n// }\n// hiball(\"fire\", partnerId);\n// hiball(\"cm\", partnerId, `${CTID}`);\n// };\n// }\n// } else {\n// console.warn(\n// \"[web-sdk] initialHinet: There is not vpadn-ctid in cookie or local storage.\"\n// );\n// }\n// } catch (error) {\n// console.error(`[web-sdk] initialHinet something wrong: ${error}`);\n// }\n//};\n\n//const initialEland = () => {\n// const script = document.createElement(\"script\");\n// script.async = true;\n// script.src = \"https://dmp.eland-tech.com/dmpreceiver/eland_tracker.js\";\n// document.getElementsByTagName(\"head\")[0].appendChild(script);\n// script.onload = () => {\n// if (checkCookieNameIsExist(\"vpadn-ctid\")) {\n// const getCookie = getCookieOfObject();\n// const ctid = getCookie[\"vpadn-ctid\"].split(\"_\")[1].split(\".\")[0];\n// const dataJson = {\n// source: \"VPON\",\n// trackType: \"view\",\n// targetType: \"usual\",\n// trackSubfolderDepth: 1,\n// ecInfo: {\n// memberID: ctid,\n// },\n// };\n// ElandTracker.Track(dataJson);\n// }\n// };\n//};\n\nvar endsWith = function endsWith(str, suffix) {\n return str.indexOf(suffix, str.length - suffix.length) !== -1;\n};\nvar s4 = function s4() {\n return Math.floor((1 + Math.random()) * 0x10000).toString(16).substring(1);\n};\nvar genGuid = function genGuid() {\n return s4() + s4() + \"-\" + s4() + \"-\" + s4() + \"-\" + s4() + \"-\" + s4() + s4() + s4();\n};\nvar getCookie = function getCookie(c_name) {\n var c_value = document.cookie;\n var c_start = c_value.indexOf(\" \" + c_name + \"=\");\n if (c_start == -1) {\n c_start = c_value.indexOf(c_name + \"=\");\n }\n if (c_start == -1) {\n c_value = null;\n } else {\n c_start = c_value.indexOf(\"=\", c_start) + 1;\n var c_end = c_value.indexOf(\";\", c_start);\n if (c_end == -1) {\n c_end = c_value.length;\n }\n c_value = unescape(c_value.substring(c_start, c_end));\n }\n return c_value;\n};\n\n/* remove for CNA publisher, possibly cause is function name conflict\nfunction setCookie(c_name,value,exdays){\n var exdate=new Date();\n exdate.setDate(exdate.getDate() + exdays);\n var c_value=escape(value) + ((exdays==null) ? \"\" : \"; expires=\"+exdate.toUTCString());\n document.cookie=c_name + \"=\" + c_value;\n}\n*/\n\nvar uaMatch = function uaMatch(substr) {\n return (window.navigator ? window.navigator.userAgent : \"\").indexOf(substr) != -1;\n};\nvar isSDKiOS = function isSDKiOS() {\n return uaMatch(\"(iPad\") || uaMatch(\"(iPod\") || uaMatch(\"(iPhone\");\n};\nvar isIPhone = function isIPhone() {\n return uaMatch(\"(iPhone\");\n};\nvar isSDKiOSNotIPhone = function isSDKiOSNotIPhone() {\n return uaMatch(\"(iPad\") || uaMatch(\"(iPod\");\n};\nvar parseParamsFromUrl = function parseParamsFromUrl(url) {\n var params = {};\n var key = \"\";\n var value = \"\";\n if (url.indexOf(\"?\") != -1) {\n var ary = url.split(\"?\")[1].split(\"&\");\n for (var i in ary) {\n key = ary[i].split(\"=\")[0];\n value = ary[i].split(\"=\")[1];\n // replace sms body content\n if (value.indexOf(\"sms%3A\") > -1 && value.indexOf(\"%3Fbody%3D\") > -1) {\n value = replaceSMSContent(value);\n }\n // use %20 for encoded character of white space instead of ‘+’\n // replace '+' with '%20' form any content include '+'\n else if (value.indexOf(\"+\") > -1) {\n value = value.replace(/\\+/g, \"%20\");\n }\n value = decodeURIComponent(value);\n // replace '\\r\\n' for sms\n if (value.indexOf(\"\\r\\n\") > -1 && value.indexOf(\"sms:\") > -1) {\n value = value.replace(/\\r\\n/g, \"\\\\n\");\n }\n params[key] = value;\n }\n }\n return params;\n};\nvar regexp_replace = function regexp_replace(input, tagBeingReplaced, replaceWith) {\n var regex = new RegExp(\"\\\\$\\\\{\" + tagBeingReplaced + \"\\\\}\", \"g\");\n return input.replace(regex, replaceWith);\n};\nvar parseCtidToObj = function parseCtidToObj(ctid_dob) {\n try {\n if (ctid_dob === null || ctid_dob === undefined) {\n return {\n ctid: null,\n timestamp: null\n };\n }\n if (ctid_dob.split(\".\").length === 2) {\n var version = ctid_dob.split(\"_\")[0];\n var ctid = ctid_dob.split(\"_\")[1].split(\".\")[0];\n var timestamp = ctid_dob.split(\".\")[1];\n // 防止 cookie 還存在,但 localStorage 被清掉的情況,故再做一次儲存\n window.localStorage && window.localStorage.setItem(\"vpadn-ctid\", \"\".concat(version, \"_\").concat(ctid, \".\").concat(timestamp));\n return {\n version: version,\n ctid: ctid,\n timestamp: timestamp\n };\n } else {\n return {\n ctid: ctid_dob,\n timestamp: null\n };\n }\n } catch (error) {\n console.log(error);\n }\n};\n\n/**\n * fadeIn effect\n * @param {Object} el target element\n * @param {Number} ms transition duration\n * @param {Function} callback when transitionend event triggerd, execute callback function\n */\nvar fadeLock = null;\nvar fadeForFlrec = function fadeForFlrec(el) {\n var action = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : \"in\";\n var ms = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 3;\n var callback = arguments.length > 3 ? arguments[3] : undefined;\n try {\n var transitionendCallback = function transitionendCallback() {\n console.log(\"transitionendCallback\");\n clearTimeout(fadeLock);\n el.removeEventListener(\"transitionend\", transitionendCallback);\n callback();\n };\n console.log(\"action:\" + action);\n if (action === \"out\") {\n clearTimeout(fadeLock);\n el.removeEventListener(\"transitionend\", transitionendCallback);\n return;\n }\n if (action === \"in\") {\n ms = !isNaN(parseFloat(ms)) ? parseFloat(ms) : 3;\n el.style.opacity = 0;\n setTimeout(function () {\n el.style.transition = \"opacity \".concat(ms, \"s\");\n el.style.opacity = 1;\n }, 1);\n if (typeof callback === \"function\") {\n fadeLock = setTimeout(function () {\n console.log(\"fadeLock\");\n clearTimeout(fadeLock);\n el.removeEventListener(\"transitionend\", transitionendCallback);\n callback();\n }, ms * 1000 + 500);\n el.addEventListener(\"transitionend\", transitionendCallback);\n }\n }\n } catch (err) {\n console.warn(err);\n }\n};\nvar fading = null;\nvar fade = function fade(el) {\n var ms = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 3;\n var type = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : \"in\";\n if (fading) {\n clearInterval(fading);\n }\n /**\n * return if close button was defined as display == none\n */\n if (el.style.display === \"none\") {\n return;\n }\n if (ms === 0) {\n el.style.display = \"block\";\n el.style.opacity = 1;\n return;\n }\n var isIn = type === \"in\";\n var opacity = isIn ? 0 : 1;\n var interval = 50;\n var duration = ms * 1000;\n if (duration === 0) duration = 0.1;\n var gap = interval / duration;\n if (isIn) {\n el.style.display = \"block\";\n el.style.opacity = opacity;\n }\n var func = function func() {\n opacity = isIn ? opacity + gap : opacity - gap;\n if (opacity <= 0) {\n clearInterval(fading);\n opacity = 0;\n el.style.display = \"none\";\n }\n if (opacity >= 1) {\n clearInterval(fading);\n opacity = 1;\n }\n el.style.opacity = opacity;\n };\n fading = setInterval(func, interval);\n};\nvar getParams = function getParams() {\n var setLocation = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : location.href;\n var url = new URL(setLocation);\n var params = {};\n var paramsArr = url.search ? url.search.replace(/^\\?/, \"\").split(\"&\") : [];\n var value = \"\";\n var _iterator = _createForOfIteratorHelper(paramsArr),\n _step;\n try {\n for (_iterator.s(); !(_step = _iterator.n()).done;) {\n var key = _step.value;\n if (key) {\n value = key.split(\"=\");\n params[value[0]] = value[1];\n }\n }\n } catch (err) {\n _iterator.e(err);\n } finally {\n _iterator.f();\n }\n return params;\n};\nvar calculateViewRate = function calculateViewRate(target) {\n if (!target || !(\"getBoundingClientRect\" in target)) {\n return;\n }\n var boundingRect = findFrameAbsoluteRect(target);\n var counter = 0;\n for (var i = 0; i <= 10; i++) {\n var position = {\n x: boundingRect.x + boundingRect.width / 2,\n y: boundingRect.y + boundingRect.height * i / 10\n };\n if (window.top.document.elementFromPoint(position.x, position.y) === target) {\n counter++;\n }\n }\n return {\n viewPercent: (counter - 1) / 10\n };\n};\nfunction isElementInsideContainer(container, target) {\n if (!container || !target) {\n return false;\n }\n if (container === target) {\n return true;\n }\n var iframes = [];\n if (container.tagName !== \"IFRAME\") {\n if (container.contains(target)) {\n return true;\n }\n iframes = _toConsumableArray(container.querySelectorAll(\"iframe\"));\n } else {\n if (!container.contentDocument) {\n return false;\n }\n if (container.contentDocument.contains(target)) {\n return true;\n }\n iframes = _toConsumableArray(container.contentDocument.querySelectorAll(\"iframe\"));\n }\n if (!iframes.length) {\n return false;\n }\n return iframes.some(function (iframe) {\n return _isElementInsideContainer(iframe, target);\n });\n}\nfunction _isElementInsideContainer(iframe, target) {\n if (!iframe.contentDocument) {\n return false;\n }\n if (iframe.contentDocument.contains(target)) {\n return true;\n }\n var iframes = _toConsumableArray(container.contentDocument.querySelectorAll(\"iframe\"));\n if (!iframes.length) {\n return false;\n }\n return iframes.some(function (iframe) {\n return _isElementInsideContainer(iframe, target);\n });\n}\nfunction findFrameAbsoluteRect(element) {\n var currentWindow = window;\n var currentParentWindow;\n var positions = [];\n var rect = element ? element.getBoundingClientRect() : document.body.getBoundingClientRect();\n while (currentWindow !== window.top) {\n currentParentWindow = currentWindow.parent;\n var _iterator2 = _createForOfIteratorHelper(currentParentWindow.document.getElementsByTagName(\"iframe\")),\n _step2;\n try {\n for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {\n var frameElement = _step2.value;\n if (frameElement.contentWindow === currentWindow) {\n var frameRect = frameElement.getBoundingClientRect();\n positions.push({\n x: frameRect.x,\n y: frameRect.y\n });\n }\n }\n } catch (err) {\n _iterator2.e(err);\n } finally {\n _iterator2.f();\n }\n currentWindow = currentParentWindow;\n break;\n }\n positions = positions.reduce(function (accumulator, currentValue) {\n return {\n x: accumulator.x + currentValue.x,\n y: accumulator.y + currentValue.y\n };\n }, {\n x: rect.x,\n y: rect.y\n });\n return {\n x: positions.x,\n y: positions.y,\n top: rect.top,\n bottom: rect.bottom,\n left: rect.left,\n right: rect.right,\n width: rect.width,\n height: rect.height\n };\n}\n\n/**\n * get root domain(ex:.vpon.com)\n * @param {Object} location location object\n * @returns root domain string\n */\nvar getRootDomain = function getRootDomain() {\n var location = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : window.location;\n if (!isUrl(location.href)) {\n return;\n }\n var hostname = location.hostname;\n var hostStringArray = hostname.split(\".\");\n\n //If the hostname has at least two parts, return the last two parts\n if (hostStringArray.length >= 2) {\n return hostStringArray[hostStringArray.length - 2] + \".\" + hostStringArray[hostStringArray.length - 1];\n }\n\n //Otherwise, return entrire hostname\n return hostname;\n};\n\n/**\n * UID generator\n * @returns generation UID\n */\nfunction generateUID() {\n if (crypto && typeof crypto.randomUUID === \"function\") {\n return crypto.randomUUID();\n }\n var S4 = function S4() {\n return ((1 + Math.random()) * 0x10000 | 0).toString(16).substring(1);\n };\n return S4() + S4() + \"-\" + S4() + \"-\" + S4() + \"-\" + S4() + \"-\" + S4() + S4() + S4();\n}\n\n/**\n * handle request ad parameters\n * @param {object} vponTag vpon tag\n * @returns request parameters\n */\nvar getReqAdParameters = function getReqAdParameters(vponTag) {\n var reqParameters = {};\n var adType = checkAdType(vponTag);\n if (adType == \"na\") {\n reqParameters.cover_min = vponTag.getAttribute(websdkParams.nativeCoverMin) || \"\";\n }\n reqParameters.format = vponTag.getAttribute(websdkParams.format);\n reqParameters.sdk = websdkParams.sdk;\n reqParameters.bid = vponTag.getAttribute(websdkParams.licensekey);\n reqParameters.adtest = vponTag.getAttribute(websdkParams.adTest) == 1 ? 1 : 0;\n reqParameters.adRequestCallBack = vponTag.getAttribute(websdkParams.adRequestCallBack);\n reqParameters.isRotate = vponTag.getAttribute(websdkParams.isRotate) || \"true\";\n reqParameters.s_h = document.documentElement.clientHeight;\n reqParameters.s_w = document.documentElement.clientWidth;\n return reqParameters;\n};\n\n/**\n * Adder\n * @param {*} initialValue adder initial value\n * @returns {number} result value.\n */\nfunction adder() {\n var initialValue = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;\n var value = initialValue;\n return function () {\n var num = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 1;\n value += num;\n return value;\n };\n}\nvar CTID = \"\";\nfunction getCTID() {\n return CTID;\n}\n\n/**\n * Prepare context for ad request(cookie & localStorage)\n * vpadn-ctid: ad request url query\n * vpadn-vpid: 3rd party cookie\n */\nfunction prepareContextForAdRequest() {\n var getCookieByKey = vpadnCookieComponent.getCookieByKey,\n setCookie = vpadnCookieComponent.setCookie,\n idsService = vpadnCookieComponent.idsService;\n var cookieDomain = getTopReachableDomain();\n var CTID;\n\n // Ensure that the localStorage.getItem method exists.\n if (window.localStorage && typeof window.localStorage.getItem === 'function') {\n CTID = getCookieByKey(websdkParams.cookie.ctid) || window.localStorage.getItem(websdkParams.cookie.ctid) || generateUID();\n } else {\n CTID = getCookieByKey(websdkParams.cookie.ctid) || generateUID();\n }\n if (verifyCtid(CTID)) {\n CTID = \"v1_\".concat(CTID, \".\").concat(new Date().getTime());\n }\n if (window.localStorage) {\n window.localStorage.setItem(websdkParams.cookie.ctid, CTID);\n }\n var options = {\n path: \"/\",\n \"max-age\": 63072000,\n //two years\n domain: cookieDomain\n };\n setCookie(websdkParams.cookie.ctid, CTID, options);\n var seid = getCookieByKey(websdkParams.cookie.seid);\n var key;\n if (!seid || getTopReachableDomain(document.referrer) !== cookieDomain || !new RegExp(\"^\" + key).test(seid)) {\n seid = \"\".concat(key, \"-\").concat(Math.floor(1 * new Date() / 100));\n var _options = {\n path: \"/\",\n \"max-age\": 1800,\n // 30 mins\n domain: cookieDomain\n };\n setCookie(websdkParams.cookie.seid, seid, _options);\n }\n if (getCookieByKey(websdkParams.cookie.thirdCookieEnabledFlag) !== \"0\" && getCookieByKey(websdkParams.cookie.thirdCookieEnabledFlag) !== \"1\") {\n var ctidObj = parseCtidToObj(CTID);\n var ctid = ctidObj.ctid;\n idsService(cookieDomain, ctid);\n }\n}\n\n/**\n * Vpadn cookie component, Used for get cookie by key and set cookie\n * @param {string} key cookie name\n * @param {string} value cookie value\n * @param {object} options cookie setting options\n */\nvar vpadnCookieComponent = {\n idsService: function idsService(cookieDomain, ctid) {\n var _location = location,\n protocol = _location.protocol;\n var beaconUrl = \"\".concat(protocol, \"//ids-dmp.vpadn.com/set?t=\").concat(1 * new Date(), \"&dn=\").concat(encodeURIComponent(cookieDomain), \"&ctid=\").concat(ctid);\n sendBeaconAjax(beaconUrl, SetHelper.setCallback, SetHelper.setErrorCallback);\n },\n getCookieByKey: function getCookieByKey(key) {\n var isValid = cookieParamsValidator({\n key: key\n });\n if (!isValid) {\n return;\n }\n var cookies = document.cookie;\n var cookiesArr = cookies.split(\";\").map(function (item) {\n return item.trim();\n });\n var targetCookie = cookiesArr.find(function (cookie) {\n return cookie.split(\"=\")[0] === key;\n });\n if (!targetCookie) {\n console.warn(\"[Vpon-WebSDK] Can't find key => \".concat(key, \"!\"));\n return;\n }\n return targetCookie.split(\"=\")[1];\n },\n setCookie: function setCookie(key, value, options) {\n var isValid = cookieParamsValidator({\n key: key,\n value: value,\n options: options\n });\n if (!isValid) {\n return;\n }\n var cookieString = generateCookieString(key, value, options);\n document.cookie = cookieString;\n }\n};\nvar generateCookieString = function generateCookieString(key, value, options) {\n var cookieString = \"\".concat(key, \"=\").concat(value);\n Object.keys(options).forEach(function (key) {\n if (options[key] !== \"secure\") {\n cookieString += \";\".concat(key, \"=\").concat(options[key]);\n return;\n }\n cookieString += \";secure\";\n });\n return cookieString;\n};\nvar sendBeaconAjax = function sendBeaconAjax(url, cb, errorCb) {\n var xmlHttp = new XMLHttpRequest();\n xmlHttp.timeout = 10000;\n xmlHttp.withCredentials = true;\n xmlHttp.onreadystatechange = function () {\n if (xmlHttp.readyState === 4 && xmlHttp.status === 200 && cb !== undefined) {\n cb(xmlHttp.responseText);\n } else if (xmlHttp.readyState === 4 && errorCb !== undefined) {\n errorCb(xmlHttp.responseText);\n }\n };\n xmlHttp.open(\"GET\", url, true); // true for asynchronous\n xmlHttp.send();\n};\nvar cookie = {\n write: function write(name, value, days, domain, path) {\n var date = new Date();\n days = days || 730; // two years\n path = path || \"/\";\n date.setTime(date.getTime() + days * 24 * 60 * 60 * 1000);\n var expires = \"; expires=\" + date.toGMTString();\n var cookieValue = \"\".concat(name, \"=\").concat(value).concat(expires, \"; path=\").concat(path, \"; SameSite=None; Secure\");\n if (domain) {\n cookieValue += \"; domain=\" + domain;\n }\n document.cookie = cookieValue;\n },\n read: function read(name) {\n var allCookie = \"\" + document.cookie;\n var index = allCookie.indexOf(name);\n if (name === undefined || name === \"\" || index === -1) return \"\";\n var ind1 = allCookie.indexOf(\";\", index);\n if (ind1 == -1) ind1 = allCookie.length;\n return unescape(allCookie.substring(index + name.length + 1, ind1));\n },\n remove: function remove(name) {\n if (this.read(name)) {\n this.write(name, \"\", -1, \"/\");\n }\n }\n};\nvar SetHelper = {\n setCallback: function setCallback(e) {\n var json = JSON.parse(e);\n var JSON_KEY = \"vponId\";\n var THIRD_COOKIE_ENABLED_FLAG = \"vpadn-ce\";\n var JSON_THIRDPARTY_KEY = \"ce\";\n var COOKIE_LIFE_DAY = 7;\n var COOKIE_DOMAIN = getTopReachableDomain();\n if (json !== undefined && json[JSON_KEY] !== undefined) {\n // if (json[JSON_KEY] !== '0') {\n // cookie.write(VPID_KEY, json[JSON_KEY], COOKIE_LIFE_DAY, COOKIE_DOMAIN);\n // }\n\n //if 3rd cookie setting failed, set a flag in 1st party cookie\n cookie.write(THIRD_COOKIE_ENABLED_FLAG, json[JSON_THIRDPARTY_KEY], COOKIE_LIFE_DAY, COOKIE_DOMAIN);\n }\n },\n setErrorCallback: function setErrorCallback(e) {}\n};\n\n/**\n * Initialize third party vender\n */\n//function initialThirdPartyVendor() {\n// initialEland();\n// initialHinet();\n//}\n\nvar checkInput = function checkInput(vponTag) {\n var result = {\n errMsg: \"\",\n adhesionPosition: false\n };\n var licensekey = vponTag.getAttribute(systemVar.licensekey);\n if (!checkAttributeIsGiven(licensekey)) {\n result.errMsg += \"input licensekey is empty. \";\n }\n var regex = /^[A-Za-z0-9]{32}$/;\n if (!regex.test(licensekey)) {\n result.errMsg += \"input licensekey error length. \";\n }\n result.adType = checkAdType(vponTag);\n var adhesionPosition = vponTag.getAttribute(systemVar.adhesionPosition);\n if (adhesionPosition) {\n if (adhesionPosition === \"top\") {\n result.adhesionPosition = \"top\";\n } else if (adhesionPosition === \"bottom\") {\n result.adhesionPosition = \"bottom\";\n } else {\n result.adhesionPosition = \"unknown\";\n }\n } else {\n result.adhesionPosition = false;\n }\n return result;\n};\nvar initialIntIframeHtmlTag = function initialIntIframeHtmlTag(vponTag, guid) {\n var iframeId = guid + \"_int_1\";\n var iframe = document.createElement(\"IFRAME\");\n iframe.style.width = \"100%\";\n iframe.style.height = \"100%\";\n iframe.setAttribute(\"id\", iframeId);\n iframe.setAttribute(\"scrolling\", \"no\");\n iframe.frameBorder = 0;\n var container = initialCloseButtonContainer(vponTag, iframeId, \"int\");\n var closeBtn = initialIntCloseButton(vponTag, iframeId);\n container.appendChild(closeBtn);\n container.appendChild(iframe);\n vponTag.appendChild(container);\n};\n\n/**\n * Todo: When ad response component refactoring in the\n * future, Move this function to ad response phase.\n * Create intistitial ad iframe, Contains the following two results.\n * 0: Some problem happen\n * 1: Success\n * @param {element} vponTag vpon tag node\n * @returns {number} result\n */\nvar vpon_ad_create_int_iframe = function vpon_ad_create_int_iframe(vponTag) {\n // check if vpontag already generate ad(iframes)\n if (vponTag.querySelectorAll(\"iframe\").length > 0) {\n console.info(\"ERROR: ad(iframes) had exists inside vpontag, will not generate ad(iframes) again.\");\n return 0;\n }\n\n // check vpon tag attribute\n var checkInputResult = checkInput(vponTag);\n if (checkInputResult.errMsg) {\n var debugMode = vponTag.getAttribute(systemVar.debug);\n if (debugMode) {\n console.info(\"ERROR: vpon tag fill attribute error, message => \" + checkInputResult.errMsg);\n }\n return 0;\n }\n if (vponTag.getAttribute(\"status\") == null) {\n vponTag.setAttribute(\"status\", \"1\");\n } else {\n return 0;\n }\n var licenseKey = vponTag.getAttribute(systemVar.licensekey);\n var guid = licenseKey + \"_\" + generateUID();\n\n // initial iframe html tag\n initialIntIframeHtmlTag(vponTag, guid);\n return 1;\n};\n\n/**\n * Handle ad request url with ad request parameters.\n * @param {object} reqAdParameters ad request parameters\n * @returns {object} ad request url object\n */\nfunction handleAdReqUrl(reqAdParameters) {\n var apiConfig = websdkParams.apiConfig;\n var adReqUrl = new URL(\"\".concat(apiConfig.protocol).concat(apiConfig.hostname).concat(apiConfig.path.adRequest));\n Object.keys(reqAdParameters).forEach(function (key) {\n adReqUrl.searchParams.append(key, encodeURIComponent(reqAdParameters[key]));\n });\n return adReqUrl;\n}\n\n// ------------- function ------------\n\nmodule.exports = {\n endsWith: endsWith,\n s4: s4,\n genGuid: genGuid,\n getCookie: getCookie,\n uaMatch: uaMatch,\n isSDKiOS: isSDKiOS,\n isIPhone: isIPhone,\n isSDKiOSNotIPhone: isSDKiOSNotIPhone,\n parseParamsFromUrl: parseParamsFromUrl,\n regexp_replace: regexp_replace,\n parseCtidToObj: parseCtidToObj,\n // initialHinet,\n // initialEland,\n fade: fade,\n fading: fading,\n fadeLock: fadeLock,\n fadeForFlrec: fadeForFlrec,\n getParams: getParams,\n calculateViewRate: calculateViewRate,\n generateUID: generateUID,\n getRootDomain: getRootDomain,\n getReqAdParameters: getReqAdParameters,\n adder: adder,\n prepareContextForAdRequest: prepareContextForAdRequest,\n vpadnCookieComponent: vpadnCookieComponent,\n // initialThirdPartyVendor,\n vpon_ad_create_int_iframe: vpon_ad_create_int_iframe,\n handleAdReqUrl: handleAdReqUrl,\n getCTID: getCTID\n};\n\n/***/ }),\n/* 2 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nfunction _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nfunction _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }\nfunction _nonIterableSpread() { throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\nfunction _iterableToArray(iter) { if (typeof Symbol !== \"undefined\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter); }\nfunction _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }\nfunction _regeneratorRuntime() { \"use strict\"; /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/facebook/regenerator/blob/main/LICENSE */ _regeneratorRuntime = function _regeneratorRuntime() { return e; }; var t, e = {}, r = Object.prototype, n = r.hasOwnProperty, o = Object.defineProperty || function (t, e, r) { t[e] = r.value; }, i = \"function\" == typeof Symbol ? Symbol : {}, a = i.iterator || \"@@iterator\", c = i.asyncIterator || \"@@asyncIterator\", u = i.toStringTag || \"@@toStringTag\"; function define(t, e, r) { return Object.defineProperty(t, e, { value: r, enumerable: !0, configurable: !0, writable: !0 }), t[e]; } try { define({}, \"\"); } catch (t) { define = function define(t, e, r) { return t[e] = r; }; } function wrap(t, e, r, n) { var i = e && e.prototype instanceof Generator ? e : Generator, a = Object.create(i.prototype), c = new Context(n || []); return o(a, \"_invoke\", { value: makeInvokeMethod(t, r, c) }), a; } function tryCatch(t, e, r) { try { return { type: \"normal\", arg: t.call(e, r) }; } catch (t) { return { type: \"throw\", arg: t }; } } e.wrap = wrap; var h = \"suspendedStart\", l = \"suspendedYield\", f = \"executing\", s = \"completed\", y = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} var p = {}; define(p, a, function () { return this; }); var d = Object.getPrototypeOf, v = d && d(d(values([]))); v && v !== r && n.call(v, a) && (p = v); var g = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(p); function defineIteratorMethods(t) { [\"next\", \"throw\", \"return\"].forEach(function (e) { define(t, e, function (t) { return this._invoke(e, t); }); }); } function AsyncIterator(t, e) { function invoke(r, o, i, a) { var c = tryCatch(t[r], t, o); if (\"throw\" !== c.type) { var u = c.arg, h = u.value; return h && \"object\" == _typeof(h) && n.call(h, \"__await\") ? e.resolve(h.__await).then(function (t) { invoke(\"next\", t, i, a); }, function (t) { invoke(\"throw\", t, i, a); }) : e.resolve(h).then(function (t) { u.value = t, i(u); }, function (t) { return invoke(\"throw\", t, i, a); }); } a(c.arg); } var r; o(this, \"_invoke\", { value: function value(t, n) { function callInvokeWithMethodAndArg() { return new e(function (e, r) { invoke(t, n, e, r); }); } return r = r ? r.then(callInvokeWithMethodAndArg, callInvokeWithMethodAndArg) : callInvokeWithMethodAndArg(); } }); } function makeInvokeMethod(e, r, n) { var o = h; return function (i, a) { if (o === f) throw Error(\"Generator is already running\"); if (o === s) { if (\"throw\" === i) throw a; return { value: t, done: !0 }; } for (n.method = i, n.arg = a;;) { var c = n.delegate; if (c) { var u = maybeInvokeDelegate(c, n); if (u) { if (u === y) continue; return u; } } if (\"next\" === n.method) n.sent = n._sent = n.arg;else if (\"throw\" === n.method) { if (o === h) throw o = s, n.arg; n.dispatchException(n.arg); } else \"return\" === n.method && n.abrupt(\"return\", n.arg); o = f; var p = tryCatch(e, r, n); if (\"normal\" === p.type) { if (o = n.done ? s : l, p.arg === y) continue; return { value: p.arg, done: n.done }; } \"throw\" === p.type && (o = s, n.method = \"throw\", n.arg = p.arg); } }; } function maybeInvokeDelegate(e, r) { var n = r.method, o = e.iterator[n]; if (o === t) return r.delegate = null, \"throw\" === n && e.iterator[\"return\"] && (r.method = \"return\", r.arg = t, maybeInvokeDelegate(e, r), \"throw\" === r.method) || \"return\" !== n && (r.method = \"throw\", r.arg = new TypeError(\"The iterator does not provide a '\" + n + \"' method\")), y; var i = tryCatch(o, e.iterator, r.arg); if (\"throw\" === i.type) return r.method = \"throw\", r.arg = i.arg, r.delegate = null, y; var a = i.arg; return a ? a.done ? (r[e.resultName] = a.value, r.next = e.nextLoc, \"return\" !== r.method && (r.method = \"next\", r.arg = t), r.delegate = null, y) : a : (r.method = \"throw\", r.arg = new TypeError(\"iterator result is not an object\"), r.delegate = null, y); } function pushTryEntry(t) { var e = { tryLoc: t[0] }; 1 in t && (e.catchLoc = t[1]), 2 in t && (e.finallyLoc = t[2], e.afterLoc = t[3]), this.tryEntries.push(e); } function resetTryEntry(t) { var e = t.completion || {}; e.type = \"normal\", delete e.arg, t.completion = e; } function Context(t) { this.tryEntries = [{ tryLoc: \"root\" }], t.forEach(pushTryEntry, this), this.reset(!0); } function values(e) { if (e || \"\" === e) { var r = e[a]; if (r) return r.call(e); if (\"function\" == typeof e.next) return e; if (!isNaN(e.length)) { var o = -1, i = function next() { for (; ++o < e.length;) if (n.call(e, o)) return next.value = e[o], next.done = !1, next; return next.value = t, next.done = !0, next; }; return i.next = i; } } throw new TypeError(_typeof(e) + \" is not iterable\"); } return GeneratorFunction.prototype = GeneratorFunctionPrototype, o(g, \"constructor\", { value: GeneratorFunctionPrototype, configurable: !0 }), o(GeneratorFunctionPrototype, \"constructor\", { value: GeneratorFunction, configurable: !0 }), GeneratorFunction.displayName = define(GeneratorFunctionPrototype, u, \"GeneratorFunction\"), e.isGeneratorFunction = function (t) { var e = \"function\" == typeof t && t.constructor; return !!e && (e === GeneratorFunction || \"GeneratorFunction\" === (e.displayName || e.name)); }, e.mark = function (t) { return Object.setPrototypeOf ? Object.setPrototypeOf(t, GeneratorFunctionPrototype) : (t.__proto__ = GeneratorFunctionPrototype, define(t, u, \"GeneratorFunction\")), t.prototype = Object.create(g), t; }, e.awrap = function (t) { return { __await: t }; }, defineIteratorMethods(AsyncIterator.prototype), define(AsyncIterator.prototype, c, function () { return this; }), e.AsyncIterator = AsyncIterator, e.async = function (t, r, n, o, i) { void 0 === i && (i = Promise); var a = new AsyncIterator(wrap(t, r, n, o), i); return e.isGeneratorFunction(r) ? a : a.next().then(function (t) { return t.done ? t.value : a.next(); }); }, defineIteratorMethods(g), define(g, u, \"Generator\"), define(g, a, function () { return this; }), define(g, \"toString\", function () { return \"[object Generator]\"; }), e.keys = function (t) { var e = Object(t), r = []; for (var n in e) r.push(n); return r.reverse(), function next() { for (; r.length;) { var t = r.pop(); if (t in e) return next.value = t, next.done = !1, next; } return next.done = !0, next; }; }, e.values = values, Context.prototype = { constructor: Context, reset: function reset(e) { if (this.prev = 0, this.next = 0, this.sent = this._sent = t, this.done = !1, this.delegate = null, this.method = \"next\", this.arg = t, this.tryEntries.forEach(resetTryEntry), !e) for (var r in this) \"t\" === r.charAt(0) && n.call(this, r) && !isNaN(+r.slice(1)) && (this[r] = t); }, stop: function stop() { this.done = !0; var t = this.tryEntries[0].completion; if (\"throw\" === t.type) throw t.arg; return this.rval; }, dispatchException: function dispatchException(e) { if (this.done) throw e; var r = this; function handle(n, o) { return a.type = \"throw\", a.arg = e, r.next = n, o && (r.method = \"next\", r.arg = t), !!o; } for (var o = this.tryEntries.length - 1; o >= 0; --o) { var i = this.tryEntries[o], a = i.completion; if (\"root\" === i.tryLoc) return handle(\"end\"); if (i.tryLoc <= this.prev) { var c = n.call(i, \"catchLoc\"), u = n.call(i, \"finallyLoc\"); if (c && u) { if (this.prev < i.catchLoc) return handle(i.catchLoc, !0); if (this.prev < i.finallyLoc) return handle(i.finallyLoc); } else if (c) { if (this.prev < i.catchLoc) return handle(i.catchLoc, !0); } else { if (!u) throw Error(\"try statement without catch or finally\"); if (this.prev < i.finallyLoc) return handle(i.finallyLoc); } } } }, abrupt: function abrupt(t, e) { for (var r = this.tryEntries.length - 1; r >= 0; --r) { var o = this.tryEntries[r]; if (o.tryLoc <= this.prev && n.call(o, \"finallyLoc\") && this.prev < o.finallyLoc) { var i = o; break; } } i && (\"break\" === t || \"continue\" === t) && i.tryLoc <= e && e <= i.finallyLoc && (i = null); var a = i ? i.completion : {}; return a.type = t, a.arg = e, i ? (this.method = \"next\", this.next = i.finallyLoc, y) : this.complete(a); }, complete: function complete(t, e) { if (\"throw\" === t.type) throw t.arg; return \"break\" === t.type || \"continue\" === t.type ? this.next = t.arg : \"return\" === t.type ? (this.rval = this.arg = t.arg, this.method = \"return\", this.next = \"end\") : \"normal\" === t.type && e && (this.next = e), y; }, finish: function finish(t) { for (var e = this.tryEntries.length - 1; e >= 0; --e) { var r = this.tryEntries[e]; if (r.finallyLoc === t) return this.complete(r.completion, r.afterLoc), resetTryEntry(r), y; } }, \"catch\": function _catch(t) { for (var e = this.tryEntries.length - 1; e >= 0; --e) { var r = this.tryEntries[e]; if (r.tryLoc === t) { var n = r.completion; if (\"throw\" === n.type) { var o = n.arg; resetTryEntry(r); } return o; } } throw Error(\"illegal catch attempt\"); }, delegateYield: function delegateYield(e, r, n) { return this.delegate = { iterator: values(e), resultName: r, nextLoc: n }, \"next\" === this.method && (this.arg = t), y; } }, e; }\nfunction asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }\nfunction _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"next\", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"throw\", err); } _next(undefined); }); }; }\nfunction _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== \"undefined\" && o[Symbol.iterator] || o[\"@@iterator\"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === \"number\") { if (it) o = it; var i = 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 non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it[\"return\"] != null) it[\"return\"](); } finally { if (didErr) throw err; } } }; }\nfunction _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); }\nfunction _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; }\nvar _require = __webpack_require__(0),\n systemVar = _require.systemVar,\n apiConfig = _require.apiConfig,\n websdkParams = _require.websdkParams;\nvar divide = function divide(length, bandCount) {\n var res = [];\n for (var i = 0; i <= bandCount; i++) {\n res[i] = length / bandCount * i;\n }\n return res;\n};\nvar coveredBannerCheck = function coveredBannerCheck(frame_id, vponTag) {\n // iframe is display:none or visibity:hidden\n if (!iframeViewable(frame_id)) {\n return false;\n }\n if (!isInCrossDomain()) {\n // iframe should be under the viewport. check the left and top will be inisde in the viewport.\n if (!underViewport(frame_id, vponTag)) {\n return false;\n }\n\n // iframe should be displayed fully in viewport\n // the viewport should completely contain the right and bottom of iframe\n if (!displayInViewport(frame_id, vponTag)) {\n return false;\n }\n }\n return true;\n};\nvar iframeViewable = function iframeViewable(frame_id) {\n var myframe = document.getElementById(frame_id);\n // check display:none\n var displayStatus = myframe.style.display;\n if (displayStatus.toLowerCase() == 'none') {\n return false;\n }\n // check visibility:hidden\n var visibilityStatus = myframe.style.visibility;\n if (visibilityStatus.toLowerCase() == 'hidden') {\n return false;\n }\n return true;\n};\nvar underViewport = function underViewport(frame_id, vponTag) {\n var myframe = document.getElementById(frame_id);\n var rect = myframe.getBoundingClientRect();\n var rectTop = getTransferRectHeight(rect.top, vponTag, '+');\n var rectLeft = getTransferRectWidth(rect.left, vponTag, '+');\n var frameBoundingClientRect = {\n fTop: 0,\n fLeft: 0\n };\n frameBoundingClientRect = getFrameBoundingClientRect(window, frameBoundingClientRect);\n rectTop = frameBoundingClientRect.fTop + rectTop;\n rectLeft = frameBoundingClientRect.fLeft + rectLeft;\n return rectTop >= 0 && rectLeft >= 0;\n};\nvar displayInViewport = function displayInViewport(frame_id, vponTag) {\n var myframe = document.getElementById(frame_id);\n var rect = myframe.getBoundingClientRect();\n var rectBottom = getTransferRectHeight(rect.bottom, vponTag, '-');\n var rectRight = getTransferRectWidth(rect.right, vponTag, '-');\n var flag1 = window.innerHeight - rectBottom >= 0 && window.innerWidth - rectRight >= 0;\n if (window == top) {\n return flag1;\n } else if (flag1) {\n // in iframe\n var frameBoundingClientRect = {\n fTop: 0,\n fLeft: 0\n };\n var frameBoundingClientRect = getFrameBoundingClientRect(window, frameBoundingClientRect);\n rectBottom = frameBoundingClientRect.fTop + rectBottom;\n rectRight = frameBoundingClientRect.fLeft + rectRight;\n var flag2 = window.top.innerHeight - rectBottom >= 0 && window.top.innerWidth - rectRight >= 0;\n return flag2;\n } else {\n return false;\n }\n};\nvar getFrameBoundingClientRect = function getFrameBoundingClientRect(nowFrame, frameBoundingClientRect) {\n if (nowFrame == top) {\n return frameBoundingClientRect;\n } else {\n frameBoundingClientRect = calIframeBoundingClientRect(nowFrame.parent.document, nowFrame.document, frameBoundingClientRect);\n return getFrameBoundingClientRect(nowFrame.parent, frameBoundingClientRect);\n }\n};\nvar calIframeBoundingClientRect = function calIframeBoundingClientRect(frameDocument, nowDocument, frameBoundingClientRect) {\n var ifs = frameDocument.getElementsByTagName('iframe');\n // var isSafeFrame = /safeframe/;\n if (ifs) {\n for (var i = 0, len = ifs.length; i < len; i++) {\n try {\n var f = ifs[i].contentWindow.document || ifs[i].contentDocument;\n } catch (e) {\n continue;\n }\n var f = ifs[i];\n var fDoc = f.contentDocument || f.contentWindow.document;\n if (fDoc === nowDocument) {\n var rect = f.getBoundingClientRect();\n frameBoundingClientRect.fTop = frameBoundingClientRect.fTop + rect.top;\n frameBoundingClientRect.fLeft = frameBoundingClientRect.fLeft + rect.left;\n return frameBoundingClientRect;\n }\n }\n } else {\n return frameBoundingClientRect;\n }\n};\nfunction currentFrameAbsolutePosition() {\n var currentWindow = window;\n var currentParentWindow;\n var positions = [];\n var rect;\n while (currentWindow !== window.top) {\n currentParentWindow = currentWindow.parent;\n for (var idx = 0; idx < currentParentWindow.frames.length; idx++) if (currentParentWindow.frames[idx] === currentWindow) {\n var _iterator = _createForOfIteratorHelper(currentParentWindow.document.getElementsByTagName('iframe')),\n _step;\n try {\n for (_iterator.s(); !(_step = _iterator.n()).done;) {\n var frameElement = _step.value;\n if (frameElement.contentWindow === currentWindow) {\n rect = frameElement.getBoundingClientRect();\n positions.push({\n x: rect.x,\n y: rect.y\n });\n }\n }\n } catch (err) {\n _iterator.e(err);\n } finally {\n _iterator.f();\n }\n currentWindow = currentParentWindow;\n break;\n }\n }\n return positions.reduce(function (accumulator, currentValue) {\n return {\n x: accumulator.x + currentValue.x,\n y: accumulator.y + currentValue.y\n };\n }, {\n x: 0,\n y: 0\n });\n}\nvar coveredIntCheck = function coveredIntCheck(frame_id) {\n var iframeTag = document.getElementById(frame_id);\n var rectWidthBand = divide(document.documentElement.clientWidth - 1, systemVar.rectWidthTotalBand);\n var rectHeightBand = divide(document.documentElement.clientHeight - 1, systemVar.rectHeightTotalBand);\n var notPass = 0; // count how many point wont pass\n var threshold = (systemVar.rectWidthTotalBand + 1) * (systemVar.rectHeightTotalBand + 1) * 0.5; // threshold: 50%\n\n for (var i = 0; i <= systemVar.rectWidthTotalBand; i++) {\n var checkX = rectWidthBand[i];\n for (var j = 0; j <= systemVar.rectHeightTotalBand; j++) {\n var checkY = rectHeightBand[j];\n var el = document.elementFromPoint(checkX, checkY);\n if (el === null) {\n notPass++;\n continue;\n }\n var frameId = el.getAttribute('id');\n if (frame_id != frameId) {\n notPass++;\n continue;\n }\n }\n }\n if (notPass > threshold) {\n return false;\n } else {\n return true;\n }\n};\nvar coveredNaCheck = function (vponTag) {\n return function (vponTag) {\n if (window.top == window.self) {\n var vponTagPos = vponTag.getBoundingClientRect();\n var rectWidthBand = divide(vponTagPos.width - 1, systemVar.rectWidthTotalBand);\n var rectHeightBand = divide(vponTagPos.height - 1, systemVar.rectHeightTotalBand);\n var scrollTop = window.pageYOffset !== undefined ? window.pageYOffset : (document.documentElement || document.body.parentNode || document.body).scrollTop;\n var scrollLeft = window.pageXOffset !== undefined ? window.pageXOffset : (document.documentElement || document.body.parentNode || document.body).scrollLeft;\n var notPass = 0; // count how many point wont pass\n var threshold = (systemVar.rectWidthTotalBand + 1) * (systemVar.rectHeightTotalBand + 1) * 0.5; // threshold: 50%\n\n for (var i = 0; i <= systemVar.rectWidthTotalBand; i++) {\n var checkX = vponTagPos.x + rectWidthBand[i];\n for (var j = 0; j <= systemVar.rectHeightTotalBand; j++) {\n var checkY = vponTagPos.y + rectHeightBand[j];\n var el = document.elementFromPoint(checkX, checkY);\n if (el === null) {\n notPass++;\n continue;\n }\n var className = el.className;\n var parentClassName = el.parentElement ? el.parentElement.className : undefined; // while user click on image tag\n if (className ? className.indexOf('vpon') < 0 : true && parentClassName ? parentClassName.indexOf('vpon') < 0 : true) {\n notPass++;\n continue;\n }\n }\n }\n if (notPass > threshold) return false;else return true;\n } else {\n var rectBottom = currentFrameAbsolutePosition().y + vponTag.getBoundingClientRect().height / 2;\n var rectRight = currentFrameAbsolutePosition().x + vponTag.getBoundingClientRect().width / 2;\n if (window.top.innerHeight - rectBottom >= 0 && window.top.innerWidth - rectRight >= 0) return true;else return false;\n }\n };\n}();\nvar getTransferRectWidth = function getTransferRectWidth(length, vponTag, direction) {\n var reqAdParameters = getReqAdParameters(vponTag);\n var iframeW = reqAdParameters.format.split('x')[0];\n var iframeH = reqAdParameters.format.split('x')[1].split('_')[0];\n var rectWidthBand = divide(iframeW, systemVar.rectWidthTotalBand);\n var result = 0;\n if (direction == '+') {\n result = length + rectWidthBand[systemVar.useWidthBand];\n } else if (direction == '-') {\n result = length - rectWidthBand[systemVar.useWidthBand];\n }\n return result;\n};\nvar getTransferRectHeight = function getTransferRectHeight(length, vponTag, direction) {\n var reqAdParameters = getReqAdParameters(vponTag);\n var iframeW = reqAdParameters.format.split('x')[0];\n var iframeH = reqAdParameters.format.split('x')[1].split('_')[0];\n var rectHeightBand = divide(iframeH, systemVar.rectHeightTotalBand);\n var result = 0;\n if (direction == '+') {\n result = length + rectHeightBand[systemVar.useHeightBand];\n } else if (direction == '-') {\n result = length - rectHeightBand[systemVar.useHeightBand];\n }\n return result;\n};\n// -------- cover check ----------\n\n// --- precheck vpon tag attribute ---\nvar checkInput = function checkInput(vponTag) {\n var result = {\n errMsg: '',\n adhesionPosition: false\n };\n var licensekey = vponTag.getAttribute(systemVar.licensekey);\n if (!checkAttributeIsGiven(licensekey)) {\n result.errMsg += 'input licensekey is empty. ';\n }\n var regex = /^[A-Za-z0-9]{32}$/;\n if (!regex.test(licensekey)) {\n result.errMsg += 'input licensekey error length. ';\n }\n result.adType = checkAdType(vponTag);\n var adhesionPosition = vponTag.getAttribute(systemVar.adhesionPosition);\n if (adhesionPosition) {\n if (adhesionPosition === 'top') {\n result.adhesionPosition = 'top';\n } else if (adhesionPosition === 'bottom') {\n result.adhesionPosition = 'bottom';\n } else {\n result.adhesionPosition = 'unknown';\n }\n } else {\n result.adhesionPosition = false;\n }\n return result;\n};\n\n/**\n * Check ad type\n * @param {element} vponTag vpon tag element\n * @returns {string|undefined} ad type string\n */\nvar checkAdType = function checkAdType(vponTag) {\n if (vponTag.getAttribute(websdkParams.format) === null) {\n throw new TypeError(\"[Vpon-WebSDK] format attribute is null\");\n }\n var format = vponTag.getAttribute(websdkParams.format).toLowerCase();\n var adTypeMapping = {\n mi: [\"mi\"],\n banner: [\"320x50_mb\", \"320x100_mb\", \"300x250_mb\", \"320x480_mb\", \"970x250_mb\"],\n na: [\"na\"]\n };\n var result = Object.keys(adTypeMapping).find(function (key) {\n return adTypeMapping[key].indexOf(format) !== -1;\n });\n if (!result) {\n throw new TypeError(\"[Vpon-WebSDK] format attribute is unable to mapping\");\n }\n return result;\n};\n\n// precheck vpon tag attribute 'vpon_ad_licensy_key'\nvar checkAttributeIsGiven = function checkAttributeIsGiven(attr) {\n if (undefined != attr && attr.trim() != '') {\n return true;\n } else {\n return false;\n }\n};\n\n// --- precheck vpon tag attribute ---\n\n// --- check will generate ad or not ---\n\n/**\n * confirm vpon tag exist\n * @returns {boolean} result\n */\nvar checkVponTagExisted = function checkVponTagExisted() {\n var vponTag = document.querySelectorAll(\"vpon\");\n return Boolean(vponTag.length);\n};\nvar isInCrossDomain = function isInCrossDomain() {\n try {\n window.top.document;\n return false;\n } catch (err) {\n return true;\n }\n};\nvar getReqAdParameters = function getReqAdParameters(vponTag) {\n var reqParameters = {};\n var adType = checkAdType(vponTag);\n if (adType == 'na') reqParameters.cover_min = vponTag.getAttribute(systemVar.nativeCoverMin) || '';\n reqParameters.format = vponTag.getAttribute(systemVar.format);\n reqParameters.sdk = systemVar.sdk;\n reqParameters.bid = vponTag.getAttribute(systemVar.licensekey);\n reqParameters.adtest = vponTag.getAttribute('vpon_ad_test') == 1 ? 1 : 0;\n reqParameters.adRequestCallBack = vponTag.getAttribute(systemVar.adRequestCallBack) || null; // branch:requestAdCallback\n reqParameters.isRotate = vponTag.getAttribute(systemVar.isRotate) || 'true'; // branch:requestAdCallback\n reqParameters.s_h = document.documentElement.clientHeight;\n reqParameters.s_w = document.documentElement.clientWidth;\n return reqParameters;\n};\nvar arrangeReqAdUrl = function arrangeReqAdUrl(baseUrl, reqParameters) {\n // 1. arrange reqParams\n var param_str = '';\n if (reqParameters) {\n for (var key in reqParameters) {\n param_str += key + '=' + encodeURIComponent(reqParameters[key]) + '&';\n }\n param_str = '?' + param_str.substring(0, param_str.length - 1);\n }\n // 2. combine\n var reqAdURLWithQueryString = baseUrl + param_str;\n return \"//\".concat(reqAdURLWithQueryString);\n};\nvar queryWebApiPermission = /*#__PURE__*/function () {\n var _ref = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee(name) {\n return _regeneratorRuntime().wrap(function _callee$(_context) {\n while (1) switch (_context.prev = _context.next) {\n case 0:\n _context.next = 2;\n return navigator.permissions.query({\n name: name\n });\n case 2:\n return _context.abrupt(\"return\", _context.sent);\n case 3:\n case \"end\":\n return _context.stop();\n }\n }, _callee);\n }));\n return function queryWebApiPermission(_x) {\n return _ref.apply(this, arguments);\n };\n}();\nvar isUrl = function isUrl(url) {\n try {\n if (new URL(url)) {\n return true;\n } else {\n return false;\n }\n } catch (error) {\n return false;\n }\n};\nvar isVpadnEndpoint = function isVpadnEndpoint(url) {\n if (!isUrl(url)) {\n return false;\n }\n var urlObj = new URL(url);\n return urlObj.hostname === apiConfig.hostname;\n};\nvar isWebview = function isWebview() {\n var useragent = navigator.userAgent;\n var regex = '/(WebView|(iPhone|iPod|iPad)(?!.*Safari\\/)|Android.*(wv|.0.0.0))/gi';\n return Boolean(useragent.match(regex));\n};\nvar isInGAM = function isInGAM() {\n try {\n if (window.parent.document) {\n var GAMIframeArray = _toConsumableArray(window.parent.document.querySelectorAll('iframe[id^=\"google_ads_iframe\"]'));\n return GAMIframeArray.some(function (iframe) {\n return iframe.contentDocument === document;\n });\n } else {\n return false;\n }\n } catch (error) {\n return false;\n }\n};\n\n/**\n * Verify CTID format\n * @returns {boolean} Verify result\n */\nvar verifyCtid = function verifyCtid(ctid) {\n var re = /^[0-9a-fA-F]{8}\\b-[0-9a-fA-F]{4}\\b-[0-9a-fA-F]{4}\\b-[0-9a-fA-F]{4}\\b-[0-9a-fA-F]{12}$/;\n var verify = re.exec(\"\".concat(ctid));\n return Boolean(verify);\n};\n\n/**\n * check vpon tag attribute format\n * @param {element} vponTag vpon tag element\n * @returns {boolean} result\n */\nvar checkVponTagAttributes = function checkVponTagAttributes(vponTag) {\n var vponTagAttributes = vponTag.getAttributeNames();\n if (!vponTagAttributes.length) {\n console.error(\"[Vpon-WebSDK] Vpon tag attribute is empty\");\n return false;\n }\n var result = true;\n vponTagAttributes.forEach(function (attribute) {\n switch (attribute) {\n case websdkParams.vponTagAttrs.licensekey:\n if (!websdkParams.regex.licensekey.test(vponTag.getAttribute(attribute))) {\n console.error(\"[Vpon-WebSDK] Vpon tag lincesekey is invalid\");\n result = false;\n }\n break;\n case websdkParams.vponTagAttrs.format:\n if (websdkParams.formatMapping.indexOf(vponTag.getAttribute(attribute)) === -1) {\n console.error(\"[Vpon-WebSDK] ad format is invalid\");\n result = false;\n }\n break;\n }\n });\n return result;\n};\n\n/**\n * Check cookie parameters is valid\n * @param {object} checkObj cookie parameter object\n * @returns {boolean} check result\n */\nvar cookieParamsValidator = function cookieParamsValidator() {\n var checkObj = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n var key = checkObj.key,\n value = checkObj.value,\n options = checkObj.options;\n if (key && typeof key !== \"string\") {\n console.warn(\"[Vpon-WebSDK] Key must be a string!\");\n return false;\n }\n if (value && typeof value !== \"string\") {\n console.warn(\"[Vpon-WebSDK] Value must be a string!\");\n return false;\n }\n if (options && (_typeof(options) !== \"object\" || Array.isArray(options))) {\n console.warn(\"[Vpon-WebSDK] Options must be an object!\");\n return false;\n }\n return true;\n};\n\n// --- check will generate ad or not ---\n\nmodule.exports = {\n coveredBannerCheck: coveredBannerCheck,\n iframeViewable: iframeViewable,\n underViewport: underViewport,\n displayInViewport: displayInViewport,\n getFrameBoundingClientRect: getFrameBoundingClientRect,\n calIframeBoundingClientRect: calIframeBoundingClientRect,\n coveredIntCheck: coveredIntCheck,\n coveredNaCheck: coveredNaCheck,\n getTransferRectWidth: getTransferRectWidth,\n getTransferRectHeight: getTransferRectHeight,\n checkInput: checkInput,\n checkAdType: checkAdType,\n checkAttributeIsGiven: checkAttributeIsGiven,\n checkVponTagExisted: checkVponTagExisted,\n getReqAdParameters: getReqAdParameters,\n arrangeReqAdUrl: arrangeReqAdUrl,\n currentFrameAbsolutePosition: currentFrameAbsolutePosition,\n isInCrossDomain: isInCrossDomain,\n queryWebApiPermission: queryWebApiPermission,\n isUrl: isUrl,\n isVpadnEndpoint: isVpadnEndpoint,\n isWebview: isWebview,\n isInGAM: isInGAM,\n verifyCtid: verifyCtid,\n checkVponTagAttributes: checkVponTagAttributes,\n cookieParamsValidator: cookieParamsValidator\n};\n\n/***/ }),\n/* 3 */\n/***/ (function(module, exports, __webpack_require__) {\n\nmodule.exports = __webpack_require__(4);\n\n\n/***/ }),\n/* 4 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nfunction _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, _toPropertyKey(descriptor.key), descriptor); } }\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == _typeof(i) ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != _typeof(i)) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\nvar _require = __webpack_require__(0),\n TPL_PARAMS = _require.TPL_PARAMS,\n VIDEO_EVENT_URL = _require.VIDEO_EVENT_URL,\n systemVar = _require.systemVar;\nvar _require2 = __webpack_require__(1),\n isSDKiOS = _require2.isSDKiOS;\nvar _require3 = __webpack_require__(6),\n isElement = _require3.isElement,\n VponConsole = _require3.VponConsole,\n assets = _require3.assets,\n digitSet = _require3.digitSet,\n isVponOMIDBridgeExist = _require3.isVponOMIDBridgeExist;\nvar VponVideo = /*#__PURE__*/_createClass(function VponVideo(videoContainer, videoConfig) {\n _classCallCheck(this, VponVideo);\n var video_area = typeof videoContainer === 'string' ? document.querySelector(\"#\".concat(videoContainer)) : videoContainer;\n if (isElement(video_area)) {\n throw new Error('[VponVideo] video container is not dom object');\n }\n var config = null;\n try {\n config = JSON.parse(JSON.stringify(videoConfig));\n } catch (err) {\n throw new Error('[VponVideo] video config is invalid');\n }\n var templateSearchParams = new URL(window.location).searchParams;\n var listeners = [];\n var isAdChoiceActive = false;\n var isPlaying = false;\n var isSendTrackingEventArr = [];\n var videoDurationTemp = 0;\n this.eventListener = {};\n var video = document.createElement('video');\n video.setAttribute('aria-label', systemVar.ariaLabel.video_view);\n\n /**\n * generate icon mute/unmite area\n * @param {String} domname tag name\n * @param {String} iconMuteSrc icon mute source\n * @param {String} iconUnmiteSrc icon unmute source\n * @returns icon area\n */\n function createIconMuteArea(domname, iconMuteSrc, iconUnmiteSrc) {\n var dom = document.createElement(domname);\n dom.style.width = \"32px\";\n dom.style.height = \"32px\";\n dom.style.position = \"absolute\";\n dom.style[config.mutePosition === 'top' ? 'top' : 'bottom'] = \"10px\";\n dom.style.right = \"15px\";\n dom.style.display = config.muteHidden ? 'none' : 'block';\n var img1 = document.createElement(\"img\");\n img1.src = iconMuteSrc;\n img1.id = \"icon_mute\";\n img1.setAttribute('aria-label', systemVar.ariaLabel.mute_icon);\n img1.style.width = \"100%\";\n img1.style.height = \"100%\";\n img1.style.display = \"none\";\n img1.style.position = \"absolute\";\n img1.style.top = \"0px\";\n var img2 = document.createElement(\"img\");\n img2.src = iconUnmiteSrc;\n img2.id = \"icon_unmute\";\n img2.setAttribute('aria-label', systemVar.ariaLabel.unmute_icon);\n img2.style.width = \"100%\";\n img2.style.height = \"100%\";\n img2.style.display = \"none\";\n img2.style.position = \"absolute\";\n img2.style.top = \"0px\";\n dom.appendChild(img1);\n dom.appendChild(img2);\n return dom;\n }\n var iconmuteArea = createIconMuteArea(\"div\", assets.iconMuteSrc, assets.iconUnmiteSrc);\n this.play = function () {\n if (isAdChoiceActive) {\n return;\n }\n var videoPlay = video.play();\n videoPlay.then(function (res) {})[\"catch\"](function (err) {\n if (err.message.indexOf('denied permission') !== -1) {\n var _video_area = typeof videoContainer === 'string' ? document.querySelector(\"#\".concat(videoContainer)) : videoContainer;\n _video_area.appendChild(playBtnAreaNode);\n }\n console.warn(err);\n });\n customTracking(this.eventListener, 'play');\n };\n this.onPlay = function (callback) {\n if (typeof callback === 'function') {\n video.addEventListener('play', function () {\n callback();\n });\n }\n };\n this.pause = function () {\n video.pause();\n customTracking(this.eventListener, 'pause');\n };\n this.onPause = function (callback) {\n if (typeof callback === 'function') {\n video.addEventListener('pause', function () {\n callback();\n });\n }\n };\n this.resume = function () {\n this.playAtPosition(0);\n this.play();\n customTracking(this.eventListener, 'resume');\n };\n this.mute = function () {\n video.muted = true;\n };\n this.unmute = function () {\n video.muted = false;\n };\n this.isMuted = function () {\n return video.muted;\n };\n this.isPaused = function () {\n return video.paused;\n };\n this.isEnded = function () {\n return video.ended;\n };\n this.playAtPosition = function (sec) {\n video.currentTime = sec;\n };\n this.getDuration = function () {\n return video.duration;\n };\n this.getCurrentTime = function () {\n return video.currentTime;\n };\n this.togglePlay = function () {\n var method = video.paused ? 'play' : 'pause';\n this[method]();\n };\n this.toggleMuted = function () {\n var method = video.muted ? 'unmute' : 'mute';\n this[method]();\n };\n this.create = function () {\n bindVideoEvents();\n videoInit(config);\n };\n this.sendLinkTracking = function () {\n sendQuartileTracking(trackingUrl.link);\n };\n this.sendReplayTracking = function () {\n sendQuartileTracking(trackingUrl.replay);\n };\n this.onTimeupdate = function (callback) {\n if (typeof callback != 'function') {\n VponConsole('warn', '[VponVideo] please input callback function');\n return;\n }\n video.addEventListener(\"timeupdate\", function () {\n callback(video.currentTime);\n });\n };\n this.onPlayStatusChanged = function (callback) {\n if (typeof callback != 'function') {\n VponConsole('warn', '[VponVideo] please input callback function');\n return;\n }\n video.addEventListener(\"play\", function () {\n callback(video.paused ? 'pause' : 'play');\n });\n video.addEventListener(\"pause\", function () {\n callback(video.paused ? 'pause' : 'play');\n });\n };\n this.onMuteStatusChanged = function (callback) {\n if (typeof callback != 'function') {\n VponConsole('warn', '[VponVideo] please input callback function');\n return;\n }\n video.addEventListener('volumechange', function () {\n callback(video.muted ? 'muted' : 'unmuted');\n });\n };\n this.onMuteIconClick = function (callback) {\n if (typeof callback != 'function') {\n VponConsole('warn', '[VponVideo] please input callback function');\n return;\n }\n mutedcallback = callback;\n };\n this.onCanBePlay = function (callback) {\n if (typeof callback !== 'function') {\n VponConsole('warn', '[VponVideo] please input callback function');\n return;\n }\n var onCanBePlayCallback = function onCanBePlayCallback() {\n if (isSDKiOS() ? video.readyState >= 1 : video.readyState >= 2) {\n callback();\n video.removeEventListener(isSDKiOS() ? 'loadedmetadata' : 'canplay', onCanBePlayCallback);\n } else {\n VponConsole('warn', \"[VponVideo] can not play, readyState is \".concat(video.readyState));\n }\n };\n video.addEventListener(isSDKiOS() ? 'loadedmetadata' : 'canplay', onCanBePlayCallback);\n };\n this.onVideoEnded = function (callback) {\n if (typeof callback != 'function') {\n VponConsole('warn', '[VponVideo] please input callback function');\n return;\n }\n video.addEventListener(\"ended\", callback);\n };\n this.onVideoViewershipListener = function (event, callback) {\n if (typeof callback != 'function') {\n VponConsole('warn', '[VponVideo] please input callback function');\n return;\n }\n switch (event) {\n case 'play':\n case 'pause':\n case 'resume':\n case 'quartileTracking':\n this.eventListener[event] = callback;\n break;\n default:\n VponConsole('warn', '[VponVideo] not support event listener');\n }\n };\n this.changeStyle = function (obj) {\n Object.entries(obj).forEach(function (target) {\n var selectedTarget = null;\n switch (target[0]) {\n case 'mute':\n selectedTarget = iconmuteArea;\n break;\n case 'countdown':\n selectedTarget = videoTimeSpan;\n break;\n case 'replay':\n selectedTarget = replayButton;\n break;\n }\n if (selectedTarget) {\n Object.entries(target[1]).forEach(function (item) {\n switch (item[0]) {\n case 'position':\n switch (item[1]) {\n case 'leftTop':\n selectedTarget.style.top = '10px';\n selectedTarget.style.bottom = 'auto';\n selectedTarget.style.left = '15px';\n selectedTarget.style.right = 'auto';\n break;\n case 'rightTop':\n selectedTarget.style.top = '10px';\n selectedTarget.style.bottom = 'auto';\n selectedTarget.style.left = 'auto';\n selectedTarget.style.right = '15px';\n break;\n case 'leftBottom':\n selectedTarget.style.top = 'auto';\n selectedTarget.style.bottom = '10px';\n selectedTarget.style.left = '15px';\n selectedTarget.style.right = 'auto';\n break;\n case 'rightBottom':\n selectedTarget.style.top = 'auto';\n selectedTarget.style.bottom = '10px';\n selectedTarget.style.left = 'auto';\n selectedTarget.style.right = '15px';\n break;\n }\n break;\n case 'display':\n selectedTarget.style.display = item[1];\n break;\n }\n });\n }\n });\n };\n this.destroy = function () {\n videoDestroy();\n };\n function videoDestroy() {\n var video = video_area.querySelector('video');\n video.src = '';\n video.removeEventListener('timeupdate', handleTimeUpdateFunc);\n video.remove();\n }\n this.triggerVideoStartCallback = function (listener) {\n if (typeof listener !== 'function') {\n VponConsole('warn', '[VponVideo] args is not a function');\n return;\n }\n listeners.push(listener);\n };\n var eventsLister = this.eventListener;\n function bindVideoEvents() {\n video.addEventListener('abort', handleVideoAbort);\n video.addEventListener('canplay', handleVideoCanBePlay);\n video.addEventListener('canplaythrough', handleVideoCanPlayThrogh);\n video.addEventListener('durationchange', handleVideoDurationChange);\n video.addEventListener('emptied', handleVideoEmptied);\n video.addEventListener('ended', handleVideoEnded);\n video.addEventListener('error', handleVideoError);\n video.addEventListener('loadeddata', handleVideoLoadeddata);\n video.addEventListener('loadedmetadata', handleVideoLoadedmetadata);\n video.addEventListener('loadstart', handleVideoLoadstart);\n video.addEventListener('pause', handleVideoPause);\n video.addEventListener('play', handleVideoPlay);\n video.addEventListener('playing', handleVideoPlaying);\n video.addEventListener('progress', handleVideoProgress);\n video.addEventListener('ratechange', handleVideoRatechange);\n video.addEventListener('seeked', handleVideoSeeked);\n video.addEventListener('seeking', handleVideoSeeking);\n video.addEventListener('stalled', handleVideoStalled);\n video.addEventListener('suspend', handleVideoSuspend);\n video.addEventListener('timeupdate', handleVideoTimeupdate);\n video.addEventListener('volumechange', handleVideoVolumechange);\n video.addEventListener('waiting', handleVideoWaiting);\n }\n function handleVideoAbort() {\n VponConsole('warn', '[VponVideo] video was aborted');\n return false;\n }\n function handleVideoCanBePlay() {}\n function handleVideoCanPlayThrogh() {}\n function handleVideoDurationChange() {}\n function handleVideoEmptied() {}\n function handleVideoEnded() {\n util.track();\n if (config.loop === true) {\n video.play();\n }\n }\n function handleVideoError() {\n VponConsole('warn', '[VponVideo] video was error');\n return false;\n }\n function handleVideoLoadeddata() {}\n function handleVideoLoadedmetadata() {}\n function handleVideoLoadstart() {}\n function handleVideoPause() {\n if (!video.ended) {\n if (window.vponOMIDBridge !== undefined && window.vponOMIDBridge.videoEvents !== undefined) {\n VponConsole('log', '[VponVideo] fire vponOMIDBridge.videoEvents.pause()');\n window.vponOMIDBridge.videoEvents.pause();\n if (vponOMIDBridge.isSupportOMEventOccur !== undefined && vponOMIDBridge.isSupportOMEventOccur) {\n VponConsole('log', '[VponVideo] fire omEventOccur.');\n fireOMEventOccur(vponOMIDBridge.deviceType, 'pause', vponOMIDBridge.sessionId);\n }\n }\n }\n if (isSendTrackingEventArr.indexOf('videoPause') === -1) {\n isSendTrackingEventArr.push('videoPause');\n sendQuartileTracking(trackingUrl.pause);\n }\n }\n function handleVideoPlay() {\n if (playBtnAreaNode) {\n playBtnAreaNode.remove();\n }\n if (video.currentTime !== 0) {\n if (window.vponOMIDBridge !== undefined && window.vponOMIDBridge.videoEvents !== undefined) {\n VponConsole('log', '[VponVideo] fire vponOMIDBridge.videoEvents.resume()');\n window.vponOMIDBridge.videoEvents.resume();\n if (vponOMIDBridge.isSupportOMEventOccur !== undefined && vponOMIDBridge.isSupportOMEventOccur) {\n VponConsole('warn', '[VponVideo] fire omEventOccur.');\n fireOMEventOccur(vponOMIDBridge.deviceType, 'resume', vponOMIDBridge.sessionId);\n }\n }\n }\n if (isSendTrackingEventArr.indexOf('videoPlay') === -1) {\n isSendTrackingEventArr.push('videoPlay');\n sendQuartileTracking(trackingUrl.play);\n }\n }\n function handleVideoPlaying() {\n if (video.poster && isSDKiOS()) {\n video.removeAttribute('poster');\n }\n }\n function handleVideoProgress() {}\n function handleVideoRatechange() {}\n function handleVideoSeeked() {}\n function handleVideoSeeking() {}\n function handleVideoStalled() {}\n function handleVideoSuspend() {}\n function handleVideoTimeupdate() {}\n function handleVideoVolumechange() {}\n function handleVideoWaiting() {}\n\n // Draw play button area\n function generatePlayBtnArea(poster) {\n var playBtnArea = document.createElement('div');\n playBtnArea.id = 'playBtnDiv';\n playBtnArea.style.width = '100%';\n playBtnArea.style.height = '100%';\n playBtnArea.style.position = 'absolute';\n playBtnArea.style.top = \"0px\";\n playBtnArea.style.zIndex = '9999';\n // It's current white poster, need to change to black ??\n playBtnArea.style.backgroundImage = poster ? poster : 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAApsAAAF3AQMAAADQMhJDAAAABlBMVEUAAAAAAAClZ7nPAAAACXBIWXMAAA7EAAAOxAGVKw4bAAADh0lEQVR4nO2YsW7bMBCGqQqwloBaMwhyH8GjBqN+FT2CxgxBrUfTA/QhWHToVmj0EITlHU+kLBm1GGcq/g+JIonmh6N4OtJRCgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwB0qOmTDjZabNzdR2Is7nm3vfq290lirVOluXtyH7HuKdE8fz6w1K2lBlx+Tfle1628yQxdXA973+cgnjSpSjI6L+uIG2auvLO1nLUdqJA5Kpzl9hLVc5XPpgb2OLlWaDxKUv1q0cmaoNlVacGwv09Wi1ctMspSP3ZVkIXWzlyidYvE8LVp3LO1TpdfvU7Vo5XHkD0qfb0rXj+UOrAnp2dySFslS1oT0PNyS7pKlrAnp2S1aeaL0egKTpO100vs/HOFTspRjCzlv6DDEmWNp9aB0EHMuUpY9J0tbOuzkwgfYTS+vJFyTLs3eSbo3LO1FUkor58Zh/VLcwexdedeZfaMLn1pVLIWdHFKl52JUuhjPLOVbOpRCX2xbJ/VnW/k5urqn9/4p+gkrQin0j9b5qpNNkf4a1DeljyqnUPyEuYfg1ya3fhGDky7W2Tv8plnR7rGRx7+N2SCDtaO/dGugycYE6R8arjZ+TiRzjKSpSHsnjYvDFn7QcJ8Gnz0yyZ2kacYPklKijsvYFi70+rgVmjuJtJnStBhUKGH1qus/pRlLSSjltAoCGr+8wynVb6RsLCUSkeow1CZKUzYpFAtLKRKp0UWYFAp/ly419KtFKjU6D+kzNaj1PmOztPX34jtJNyXPrnZEG6Qt9d2psPznQUpjrj4m7bT0F1kRhv8Z0sHfK8NKTabnx6TTylSH8kmm5nOkx5DoD0iniZr6vYScpDtdPH1EOgbBB6XUxVBkOuR3ZsKGjUztY1IZtaumZiY1nyJ11XTaU1HsJp5uhebWUBQ6lI4ybilnyZtSUBrKJJJWoXTUcZ2f5VmK9MjSYS49xopcLvZqG6loCqhjE+J7iWHpOEEpUj8/Zr65GaOpjqcpO5+Sf0b+8f2omoYXNkpTVlOXPzWNmFQy5yQkUxufxCFt3XcF+VW5nQ+txovvJq+KtiWFDzNph6LeaEUqh5NaSU99OYh0P9Dpds7W0D8h6B8Pi+8mhbW9zHphk3Z9quSP87Zp+YWHd8I6ngIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwH/FX4Ok7MIGd0maAAAAAElFTkSuQmCC';\n playBtnArea.style.backgroundSize = 'cover';\n var playBtn = document.createElement('img');\n playBtnArea.id = 'playBtn';\n playBtn.src = 'data:image/png;base64,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UmVhZHlxyWU8AAADJWlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS42LWMxNDggNzkuMTY0MDM2LCAyMDE5LzA4LzEzLTAxOjA2OjU3ICAgICAgICAiPiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtbG5zOnhtcE1NPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvbW0vIiB4bWxuczpzdFJlZj0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL3NUeXBlL1Jlc291cmNlUmVmIyIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgMjEuMCAoTWFjaW50b3NoKSIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDpFREFCMDE5REM3OTQxMUVDOUY5QzlGNkZEOTcxN0E1QiIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDpFREFCMDE5RUM3OTQxMUVDOUY5QzlGNkZEOTcxN0E1QiI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOkVEQUIwMTlCQzc5NDExRUM5RjlDOUY2RkQ5NzE3QTVCIiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOkVEQUIwMTlDQzc5NDExRUM5RjlDOUY2RkQ5NzE3QTVCIi8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+JmED4AAAELhJREFUeNpiZsAPHICYG4hfY5NkxCI2E49hr4C4FpfmmQzEgXR0zcRqhBvAhEujubk5PwHN7Iw4NLPevXvXF8RQVlZeh0s3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';\n playBtn.style.position = 'absolute';\n playBtn.style.top = '50%';\n playBtn.style.left = '50%';\n playBtn.style.transform = 'translate(-50%, -50%)';\n playBtn.style.zIndex = '9999';\n playBtnArea.appendChild(playBtn);\n playBtnArea.addEventListener('click', function (e) {\n e.stopPropagation();\n playBtnArea.remove();\n video.play();\n });\n this.clickPlayButton = function (callback) {\n playBtnArea.addEventListener('click', function (e) {\n if (typeof callback === 'function') {\n callback();\n }\n });\n };\n return playBtnArea;\n }\n\n //--\n var trackingTimes = {};\n var trackingTimesArray = [];\n var OnceArray = [];\n var mutedcallback = \"\";\n var playBtnAreaNode = generatePlayBtnArea.call(this, config.poster);\n function switchmuteicon(iconmuteArea, h) {\n if (h.muted == true) {\n iconmuteArea.children[0].style.display = \"none\";\n iconmuteArea.children[1].style.display = \"block\";\n h.muted = false;\n } else {\n iconmuteArea.children[0].style.display = \"block\";\n iconmuteArea.children[1].style.display = \"none\";\n h.muted = true;\n }\n }\n function videoInit(config) {\n if (!config.src) {\n VponConsole('error', '[VponVideo] please input video src');\n return false;\n }\n video.preload = 'metadata';\n video.poster = config.poster ? config.poster : assets.videoPosterSrc;\n video.src = config.src;\n video.loop = false;\n video.muted = true;\n video.autoplay = false;\n video.style.width = '100%';\n video.style.height = '100%';\n\n //detect ad container hide\n window.addEventListener('message', function (e) {\n if (e.data.event === 'destroy') {\n videoDestroy();\n }\n if (e.data.event === 'adChoiceActive') {\n isAdChoiceActive = true;\n video.pause();\n }\n if (e.data.event === 'adChoiceInactive') {\n isAdChoiceActive = false;\n video.play();\n }\n });\n video.setAttribute(\"webkit-playsinline\", \"webkit-playsinline\");\n video.setAttribute(\"playsinline\", \"playsinline\");\n video.setAttribute(\"x5-playsinlin\", \"\");\n video.setAttribute(\"x-webkit-airplay\", \"allow\");\n var video_area = typeof videoContainer === 'string' ? document.querySelector(\"#\".concat(videoContainer)) : videoContainer;\n video_area.classList.add('omid-element');\n video_area.appendChild(video);\n if (config.showmuted !== false) {\n video_area.appendChild(iconmuteArea);\n iconmuteArea.addEventListener(\"click\", handleIconMuteAreaClick);\n iconmuteArea.children[0].style.display = \"block\";\n }\n }\n function handleIconMuteAreaClick(e) {\n e.stopPropagation();\n e.preventDefault();\n switchmuteicon(iconmuteArea, video);\n if (OnceArray.indexOf(\"trackingTimesArray\") == -1) {\n sendQuartileTracking(trackingUrl.changemute);\n OnceArray.push(\"trackingTimesArray\");\n }\n if (mutedcallback) {\n mutedcallback();\n }\n }\n function handleTimeUpdateFunc() {\n if (video.poster && isSDKiOS()) {\n video.removeAttribute('poster');\n }\n if (playBtnAreaNode) {\n playBtnAreaNode.remove();\n }\n util.track();\n handleTimeUpdate();\n }\n \"\";\n function customTracking(eventListener, event, ret) {\n if (eventListener.hasOwnProperty(event)) {\n var listener = eventListener[event];\n listener(ret);\n }\n }\n var track = function track() {\n var videoLeftTime = 0;\n if (!video.duration) {\n videoLeftTime = Math.floor(videoDurationTemp - video.currentTime);\n } else {\n videoLeftTime = Math.floor(video.duration - video.currentTime);\n videoDurationTemp = video.duration;\n }\n sendVideoTrackings(eventsLister, videoLeftTime);\n };\n function sendVideoTrackings(eventsLister, videoLeftTime) {\n if (trackingTimesArray.length > 0) {\n trackingTimesArray.filter(function (trackingTimesElement) {\n return videoLeftTime <= trackingTimesElement.time;\n }).map(function (missDeliverElement) {\n sendVideoTracking(eventsLister, missDeliverElement.time);\n });\n trackingTimesArray = trackingTimesArray.filter(function (trackingTimesElement) {\n return videoLeftTime > trackingTimesElement.time;\n });\n }\n }\n\n /**\n * Send tracking by trackingUrls.\n * @param {Array} trackingUrls\n */\n function sendQuartileTracking(trackingUrls) {\n if (typeof window.navigator.sendBeacon != \"undefined\") {\n for (var i in trackingUrls) {\n if (trackingUrls[i]) {\n navigator.sendBeacon(trackingUrls[i] + '&r=' + video.currentTime);\n }\n }\n } else {\n for (var _i in trackingUrls) {\n if (trackingUrls[_i]) {\n var trackingSender = createTrackingSender();\n trackingSender.src = trackingUrls[_i] + '&r=' + video.currentTime;\n }\n }\n }\n }\n function createTrackingSender() {\n var trackingImg = document.createElement('img');\n trackingImg.width = '0px';\n trackingImg.height = '0px';\n trackingImg.style = 'display:none';\n document.body.appendChild(trackingImg);\n return trackingImg;\n }\n var util = {\n track: track\n };\n function getVideoEventUrlByEvnt(event) {\n if (config.track !== undefined) {\n var adid = config.track.adid ? config.track.adid : '';\n var bid = config.track.bid ? config.track.bid : templateSearchParams.has(TPL_PARAMS.LICENSE_KEY) ? templateSearchParams.get(TPL_PARAMS.LICENSE_KEY) : '';\n var uid = config.track.uid ? config.track.uid : templateSearchParams.has(TPL_PARAMS.UID) ? templateSearchParams.get(TPL_PARAMS.UID) : '';\n var vpadnSid = templateSearchParams.has(TPL_PARAMS.SESSION_ID) ? templateSearchParams.get(TPL_PARAMS.SESSION_ID) : '';\n var vpadnSeq = templateSearchParams.has(TPL_PARAMS.SEQUENCE_ID) ? templateSearchParams.get(TPL_PARAMS.SEQUENCE_ID) : '';\n var clid = '1.' + bid + '.' + vpadnSid + '.' + vpadnSeq;\n var vid_tid = config.track.trackid ? config.track.trackid : templateSearchParams.has(TPL_PARAMS.VIDEO_TRACKING_ID) ? templateSearchParams.get(TPL_PARAMS.VIDEO_TRACKING_ID) : '';\n var e = config.track.e ? config.track.e : templateSearchParams.has(TPL_PARAMS.PARAM_E) ? templateSearchParams.get(TPL_PARAMS.PARAM_E) : '';\n var _eventMapping;\n switch (event) {\n case 'start':\n _eventMapping = '__vpad_a_start';\n break;\n case 'firstQuartile':\n _eventMapping = '__vpad_a_firstquartile';\n break;\n case 'midpoint':\n _eventMapping = '__vpad_a_midpoint';\n break;\n case 'thirdQuartile':\n _eventMapping = '__vpad_a_thirdquartile';\n break;\n case 'complete':\n _eventMapping = '__vpad_a_complete';\n break;\n case 'replay':\n _eventMapping = '__vpad_a_replay';\n break;\n case 'link':\n _eventMapping = '__vpad_a_link';\n break;\n case 'changemute':\n _eventMapping = '__vpad_a_changemute';\n break;\n case 'progress':\n _eventMapping = '__vpad_a_progress';\n break;\n case 'play':\n _eventMapping = '__vpad_a_play';\n break;\n case 'pause':\n _eventMapping = '__vpad_a_pause';\n break;\n }\n var videoEventUrl = new URL(VIDEO_EVENT_URL);\n var baseVideoEventParams = new URLSearchParams({\n t: 'event',\n tid: vid_tid,\n ec: '__vpad_c_vid',\n el: vid_tid,\n clid: clid,\n ad: adid,\n uid: uid,\n e: e\n });\n videoEventUrl.search = baseVideoEventParams;\n videoEventUrl.searchParams.append('ea', _eventMapping);\n VponConsole('log', videoEventUrl.toString());\n return videoEventUrl.toString();\n } else {\n return \"\";\n }\n }\n var trackingUrl = {\n \"start\": [getVideoEventUrlByEvnt('start')],\n \"firstQuartile\": [getVideoEventUrlByEvnt('firstQuartile')],\n \"midpoint\": [getVideoEventUrlByEvnt('midpoint')],\n \"thirdQuartile\": [getVideoEventUrlByEvnt('thirdQuartile')],\n \"complete\": [getVideoEventUrlByEvnt('complete')],\n \"replay\": [getVideoEventUrlByEvnt('replay')],\n \"link\": [getVideoEventUrlByEvnt('link')],\n \"changemute\": [getVideoEventUrlByEvnt('changemute')],\n \"progress\": [getVideoEventUrlByEvnt('progress')],\n \"play\": [getVideoEventUrlByEvnt('play')],\n \"pause\": [getVideoEventUrlByEvnt('pause')]\n };\n function setTrackingTimes(videoTotalTime) {\n trackingTimesArray = [];\n trackingTimes['start'] = {\n time: digitSet(Math.floor(videoTotalTime * (4 / 4))),\n tag: 'videoStart'\n };\n trackingTimesArray.push(trackingTimes['start']);\n trackingTimes['first'] = {\n time: digitSet(Math.floor(videoTotalTime * (3 / 4))),\n tag: 'videoFirst'\n };\n trackingTimesArray.push(trackingTimes['first']);\n trackingTimes['mid'] = {\n time: digitSet(Math.floor(videoTotalTime * (2 / 4))),\n tag: 'videoMid'\n };\n trackingTimesArray.push(trackingTimes['mid']);\n trackingTimes['third'] = {\n time: digitSet(Math.floor(videoTotalTime * (1 / 4))),\n tag: 'videoThird'\n };\n trackingTimesArray.push(trackingTimes['third']);\n trackingTimes['end'] = {\n time: digitSet(Math.floor(videoTotalTime * (0 / 4))),\n tag: 'videoEnd'\n };\n trackingTimesArray.push(trackingTimes['end']);\n var progress = config.track && config.track.progress ? config.track.progress : templateSearchParams.get(TPL_PARAMS.PROGRESS);\n if (progress && progressValidate(progress, videoTotalTime)) {\n trackingTimes['progress'] = {\n time: digitSet(progressValidate(progress, videoTotalTime)),\n tag: 'progress'\n };\n trackingTimesArray.push(trackingTimes['progress']);\n } else {\n trackingTimes['progress'] = {\n time: null,\n tag: 'progress'\n };\n VponConsole('warn', '[VponVideo] no have progress');\n }\n }\n\n /**\n * 驗證progress參數格式\n * @param {string} progress - 擷取progress參數\n * @param {number} videoTotalTime - 影片總長度(單位:秒)\n */\n function progressValidate(progress, videoTotalTime) {\n var time = null;\n if (!progress) {\n return false;\n }\n if (progress.indexOf('%') !== -1) {\n //格式為百分比\n if (isNaN(parseFloat(progress))) {\n return false;\n }\n time = parseFloat(progress) < 0 ? String(videoTotalTime) : parseFloat(progress) > 100 ? '0' : String(videoTotalTime - videoTotalTime * parseFloat(progress) / 100);\n } else {\n //格式為時:分:秒\n var progressTimeArr = progress.split(':');\n var progressTime = videoTotalTime - (parseFloat(progressTimeArr[0]) * 3600 + parseFloat(progressTimeArr[1]) * 60 + parseFloat(progressTimeArr[2]));\n if (isNaN(progressTime)) {\n return false;\n }\n time = progressTime < 0 ? '0' : progressTime > videoTotalTime ? String(videoTotalTime) : String(progressTime);\n }\n return time;\n }\n var MoatApiReference;\n if (window.support && typeof support.isInWeb === 'function' && support.isInWeb()) {\n this.initialMoat = function (ids, duration, partnerCode) {\n var video_area = typeof videoContainer === 'string' ? document.querySelector(\"#\".concat(videoContainer)) : videoContainer;\n var c = video_area;\n var l = config.src;\n MoatApiReference = initMoatTracking(ids, duration, partnerCode);\n function initMoatTracking(d, e, k) {\n var g = document.createElement(\"script\"),\n a = [];\n d = {\n adData: {\n ids: d,\n duration: e,\n url: l\n },\n dispatchEvent: function dispatchEvent(b) {\n this.sendEvent ? (a && (a.push(b), b = a, a = !1), this.sendEvent(b)) : a.push(b);\n }\n };\n e = \"_moatApi\" + Math.floor(1E8 * Math.random());\n var f, h;\n try {\n f = c.ownerDocument, h = f.defaultView || f.parentWindow;\n } catch (b) {\n f = document, h = window;\n }\n h[e] = d;\n g.type = \"text/javascript\";\n c && c.insertBefore(g, c.childNodes[0] || null);\n g.src = \"https://z.moatads.com/\" + k + \"/moatvideo.js#\" + e;\n return d;\n }\n ;\n };\n }\n function triggerMoatEvent(eventType) {\n var adVolume = Math.floor(video.volume);\n if (video.muted === true) {\n adVolume = 0;\n }\n var videoEvent = {\n type: eventType,\n adVolume: adVolume\n };\n if (MoatApiReference === undefined) {\n return;\n }\n MoatApiReference.dispatchEvent(videoEvent);\n }\n\n // 在 OM SDK 架構下,打出 Impression, start, firstQuartile... 等等四分位報表時的 callback,告知 Native 已經打出 Tracking\n function fireOMEventOccur(deviceType, eventType, sessionId) {\n switch (deviceType) {\n case 'a':\n _vpon_android.omEventOccur(JSON.stringify({\n eventType: eventType,\n sessionId: sessionId\n }));\n break;\n case 'i':\n window.webkit.messageHandlers.omEventOccur.postMessage(JSON.stringify({\n eventType: eventType,\n sessionId: sessionId\n }));\n break;\n default:\n VponConsole('log', '[VponVideo] Can not parse arguments of device type.');\n }\n }\n var viewableDetectionListener = function viewableDetectionListener() {\n var options = {\n root: null,\n rootMargin: '0px',\n threshold: [0.5, 1]\n };\n var callback = function callback(entries) {\n entries.forEach(function (entry) {\n var viewPercent = parseInt(entry.intersectionRatio * 100);\n for (var _i2 = 0, _listeners = listeners; _i2 < _listeners.length; _i2++) {\n var listener = _listeners[_i2];\n listener(viewPercent);\n }\n });\n listenDOM.unobserve(document.querySelector('body'));\n };\n var listenDOM = new IntersectionObserver(callback, options);\n listenDOM.observe(document.querySelector('body'));\n };\n function sendVideoTracking(eventsLister, videoLeftTime) {\n var stateArr = checkVideoTimeState(videoLeftTime);\n stateArr.forEach(function (item) {\n if (isSendTrackingEventArr.indexOf(item) === -1) {\n isSendTrackingEventArr.push(item);\n switch (item) {\n case 'videoStart':\n var muted = video.muted ? 0 : 1;\n if (config.track && Object.keys(config.track).length !== 0) {\n sendQuartileTracking(trackingUrl.start);\n }\n customTracking(eventsLister, 'quartileTracking', 0);\n triggerMoatEvent('AdVideoStart');\n try {\n viewableDetectionListener();\n if (window.vponOMIDBridge !== undefined && window.vponOMIDBridge.videoEvents !== undefined) {\n VponConsole('log', '[VponVideo] fire vponOMIDBridge.videoEvents.start & vponOMIDBridge.adEvents.impressionOccurred()');\n window.vponOMIDBridge.videoEvents.start(video.duration, muted);\n window.vponOMIDBridge.adEvents.impressionOccurred();\n if (vponOMIDBridge.isSupportOMEventOccur !== undefined && vponOMIDBridge.isSupportOMEventOccur) {\n VponConsole('warm', '[VponVideo] fire omEventOccur.');\n fireOMEventOccur(vponOMIDBridge.deviceType, 'impression', vponOMIDBridge.sessionId);\n fireOMEventOccur(vponOMIDBridge.deviceType, 'start', vponOMIDBridge.sessionId);\n }\n }\n } catch (error) {\n VponConsole('warn', error);\n }\n break;\n case 'videoFirst':\n if (config.track && Object.keys(config.track).length !== 0) {\n sendQuartileTracking(trackingUrl.firstQuartile);\n }\n customTracking(eventsLister, 'quartileTracking', 1);\n triggerMoatEvent('AdVideoFirstQuartile');\n try {\n if (window.vponOMIDBridge !== undefined && window.vponOMIDBridge.videoEvents !== undefined) {\n VponConsole('log', '[VponVideo] fire vponOMIDBridge.videoEvents.firstQuartile()');\n window.vponOMIDBridge.videoEvents.firstQuartile();\n if (vponOMIDBridge.isSupportOMEventOccur !== undefined && vponOMIDBridge.isSupportOMEventOccur) {\n VponConsole('warn', '[VponVideo] fire omEventOccur.');\n fireOMEventOccur(vponOMIDBridge.deviceType, 'firstQuartile', vponOMIDBridge.sessionId);\n }\n }\n } catch (error) {\n VponConsole('warn', error);\n }\n break;\n case 'videoMid':\n if (config.track && Object.keys(config.track).length !== 0) {\n sendQuartileTracking(trackingUrl.midpoint);\n }\n customTracking(eventsLister, 'quartileTracking', 2);\n triggerMoatEvent('AdVideoMidpoint');\n try {\n if (window.vponOMIDBridge !== undefined && window.vponOMIDBridge.videoEvents !== undefined) {\n VponConsole('log', '[VponVideo] fire vponOMIDBridge.videoEvents.midpoint()');\n window.vponOMIDBridge.videoEvents.midpoint();\n if (vponOMIDBridge.isSupportOMEventOccur !== undefined && vponOMIDBridge.isSupportOMEventOccur) {\n VponConsole('warn', '[VponVideo] fire omEventOccur.');\n fireOMEventOccur(vponOMIDBridge.deviceType, 'midpoint', vponOMIDBridge.sessionId);\n }\n }\n } catch (error) {\n VponConsole('warn', error);\n }\n break;\n case 'videoThird':\n if (config.track && Object.keys(config.track).length !== 0) {\n sendQuartileTracking(trackingUrl.thirdQuartile);\n }\n customTracking(eventsLister, 'quartileTracking', 3);\n triggerMoatEvent('AdVideoThirdQuartile');\n try {\n if (window.vponOMIDBridge !== undefined && window.vponOMIDBridge.videoEvents !== undefined) {\n VponConsole('log', '[VponVideo] fire vponOMIDBridge.videoEvents.thirdQuartile()');\n window.vponOMIDBridge.videoEvents.thirdQuartile();\n if (vponOMIDBridge.isSupportOMEventOccur !== undefined && vponOMIDBridge.isSupportOMEventOccur) {\n VponConsole('warn', '[VponVideo] fire omEventOccur.');\n fireOMEventOccur(vponOMIDBridge.deviceType, 'thirdQuartile', vponOMIDBridge.sessionId);\n }\n }\n } catch (error) {\n VponConsole('warn', error);\n }\n break;\n case 'videoEnd':\n if (config.track && Object.keys(config.track).length !== 0) {\n sendQuartileTracking(trackingUrl.complete);\n }\n customTracking(eventsLister, 'quartileTracking', 4);\n triggerMoatEvent('AdVideoComplete');\n try {\n if (window.vponOMIDBridge !== undefined && window.vponOMIDBridge.videoEvents !== undefined) {\n VponConsole('log', '[VponVideo] fire vponOMIDBridge.videoEvents.complete()');\n window.vponOMIDBridge.videoEvents.complete();\n if (vponOMIDBridge.isSupportOMEventOccur !== undefined && vponOMIDBridge.isSupportOMEventOccur) {\n VponConsole('warn', '[VponVideo] fire omEventOccur.');\n fireOMEventOccur(vponOMIDBridge.deviceType, 'complete', vponOMIDBridge.sessionId);\n }\n }\n } catch (error) {\n VponConsole('warn', error);\n }\n break;\n case 'progress':\n if (config.track && Object.keys(config.track).length !== 0) {\n sendQuartileTracking(trackingUrl.progress);\n }\n break;\n case 'play':\n eventMapping = '__vpad_a_play';\n break;\n case 'pause':\n eventMapping = '__vpad_a_pause';\n break;\n }\n }\n });\n }\n function checkVideoTimeState(videoLeftTime) {\n var stateArr = [];\n if (Object.keys(trackingTimes).length === 0) {\n return;\n }\n if (videoLeftTime == trackingTimes['start'].time) {\n stateArr.push(trackingTimes['start'].tag);\n }\n if (videoLeftTime == trackingTimes['first'].time) {\n stateArr.push(trackingTimes['first'].tag);\n }\n if (videoLeftTime == trackingTimes['mid'].time) {\n stateArr.push(trackingTimes['mid'].tag);\n }\n if (videoLeftTime == trackingTimes['third'].time) {\n stateArr.push(trackingTimes['third'].tag);\n }\n if (videoLeftTime == trackingTimes['end'].time) {\n stateArr.push(trackingTimes['end'].tag);\n }\n if (videoLeftTime == trackingTimes['progress'].time) {\n stateArr.push(trackingTimes['progress'].tag);\n }\n return stateArr;\n }\n var handleTimeUpdate = function () {\n var currentTime;\n return function () {\n if (video.currentTime === 0 || video.duration === NaN) {\n return;\n }\n var videoLeftTime = video.duration - video.currentTime;\n if (isDifferentTime(currentTime)) {\n updateCountdown(videoLeftTime);\n setVponVideoControls();\n var stateArr = checkVideoTimeState(videoLeftTime);\n if (stateArr.indexOf('videoStart') !== -1) {} else if (stateArr.indexOf('videoEnd') !== -1) {\n isPlaying = false;\n video.currentTime = video.duration;\n showVponVideoReplayControls();\n }\n }\n currentTime = videoLeftTime;\n };\n }();\n function isDifferentTime(curr) {\n return curr !== Math.floor(video.duration - video.currentTime) ? true : false;\n }\n function customCreateElement(dom, id) {\n var customDOM = document.createElement(dom);\n customDOM.setAttribute('id', id);\n return customDOM;\n }\n var videoTimeSpan = customCreateElement('span', 'countdownTime');\n videoTimeSpan.setAttribute('id', 'countdownTime');\n videoTimeSpan.style.position = 'absolute';\n videoTimeSpan.style[config.countdownPosition === 'top' ? 'top' : 'bottom'] = '15px';\n videoTimeSpan.style.left = '15px';\n videoTimeSpan.style.fontSize = '17px';\n videoTimeSpan.style.color = '#fff';\n videoTimeSpan.style.display = config.countdownHidden ? 'none' : 'block';\n function updateCountdown(videoLeftTime) {\n video.parentElement.appendChild(videoTimeSpan);\n var countdownTime = document.querySelector('#countdownTime');\n if (document.querySelector('iframe[class^=\"Vpon__flrec\"]')) {\n countdownTime = document.querySelector('iframe[class^=\"Vpon__flrec\"]').contentDocument.querySelector('#countdownTime');\n }\n var min = digitSet(Math.floor(videoLeftTime / 60));\n var sec = digitSet(Math.floor(videoLeftTime % 60));\n if (isNaN(min) || isNaN(sec)) {\n return;\n }\n countdownTime.innerText = min + \":\" + sec;\n }\n var replayButton = customCreateElement('img', 'replayButton');\n replayButton.style.zIndex = 2;\n replayButton.setAttribute('aria-label', systemVar.ariaLabel.replay_button);\n var otherLink = customCreateElement('span', 'otherLink');\n function setVponVideoControls() {\n var replayIcon = 'data:image/png;base64,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';\n replayButton.src = replayIcon;\n replayButton.style.position = 'absolute';\n replayButton.style.top = '50%';\n replayButton.style.left = '50%';\n replayButton.style.transform = 'translate(-50%, -50%)';\n replayButton.style.width = '60px';\n replayButton.style.display = 'none';\n video.parentElement.appendChild(replayButton);\n replayButton.addEventListener('click', replayVideo);\n otherLink.style.position = 'absolute';\n otherLink.style.color = '#fff';\n otherLink.style.fontSize = '17px';\n otherLink.style.top = '15px';\n otherLink.style.right = '15px';\n otherLink.innerText = templateSearchParams.has(TPL_PARAMS.VIDEO_FUNCTION_1_DESC) ? templateSearchParams.get(TPL_PARAMS.VIDEO_FUNCTION_1_DESC) : '';\n otherLink.style.display = 'none';\n video.parentElement.appendChild(otherLink);\n otherLink.addEventListener('click', openOtherLink);\n }\n function showVponVideoReplayControls() {\n replayButton.style.display = \"block\";\n otherLink.style.display = \"block\";\n }\n function replayVideo(e) {\n e.stopPropagation();\n if (window.vponOMIDBridge !== undefined && window.vponOMIDBridge.videoEvents !== undefined) {\n VponConsole('log', '[VponVideo] fire vponOMIDBridge.videoEvents.resume()');\n window.vponOMIDBridge.videoEvents.resume();\n if (vponOMIDBridge.isSupportOMEventOccur !== undefined && vponOMIDBridge.isSupportOMEventOccur) {\n VponConsole('warn', '[VponVideo] fire omEventOccur.');\n fireOMEventOccur(vponOMIDBridge.deviceType, 'resume', vponOMIDBridge.sessionId);\n }\n }\n video.currentTime = 0;\n replayButton.style.display = \"none\";\n video.play();\n }\n function openOtherLink(e) {\n var clickUrl = templateSearchParams.get(TPL_PARAMS.W_F_1_A);\n clickUrl = clickUrl.replace(/\\[.*?\\]/g, -1);\n if (e) {\n clickUrl = clickUrl.replace('clk_x=-1&clk_y=-1', \"clk_x=\".concat(e.clientX, \"&clk_y=\").concat(e.clientY));\n }\n if (window.support) {\n if (e) {\n support.click(e);\n } else {\n support.click();\n }\n support.open(clickUrl);\n }\n }\n video.addEventListener('playing', function () {\n var executed = false;\n return function () {\n if (!executed) {\n setTrackingTimes(Math.floor(video.duration));\n executed = true;\n isPlaying = true;\n }\n };\n }(), false);\n video.addEventListener('timeupdate', handleTimeUpdateFunc);\n video.addEventListener('volumechange', function (e) {\n try {\n VponConsole('log', '[VponVideo] in volume change listener, ready to fire event');\n if (window.vponOMIDBridge !== undefined && window.vponOMIDBridge.videoEvents !== undefined) {\n VponConsole('log', '[VponVideo] fire volumechange event');\n var muted = video.muted ? 0 : 1;\n window.vponOMIDBridge.videoEvents.volumeChange(muted);\n }\n } catch (error) {\n VponConsole('warn', error);\n }\n });\n});\nwindow.VponVideo = VponVideo;\n\n/***/ }),\n/* 5 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _require = __webpack_require__(2),\n verifyCtid = _require.verifyCtid;\nvar _require2 = __webpack_require__(1),\n parseCtidToObj = _require2.parseCtidToObj,\n generateUID = _require2.generateUID;\nvar SDK_NAME = \"j\",\n SDK_VERSION = \"1.2.0\",\n // window.Vpadn global namespace\n VPADN,\n // Debug status (default 0) Vpadn('create', License_Key, {'debug': true});\n DEBUG,\n // Key based on client's id Vpadn('create', License_Key);\n KEY,\n // Encoding (default document.characterSet | charset) Vpadn('create', License_Key, {'encoding': 'UTF-8'})\n // ENCODING,\n\n // Vpadn unique client ID (cookie use)\n CTID_NAME = \"vpadn-ctid\",\n // Vpadn unique client ID (url parameter use)\n CTID_URL_PARAM_NAME = \"_vpctid\",\n // Vpadn session ID (lk-value)\n SEID_NAME = \"vpadn-seid\",\n // CTID and SEID set in create event\n ISNEW_CTID,\n CTID_LIFE = 730,\n // 2 years - 2*365 days\n CTID,\n SEID_LIFE = 30 / (24 * 60),\n // 30 minutes - 30/(24*60) days\n SEID,\n // Cookie Domain\n COOKIE_DOMAIN,\n // Document Referrer\n DOCUMENT_REFERRER = document.referrer,\n // Data Parameter from ADNetwork and DSP\n GAID,\n IDFA,\n CLICK_ID,\n SRC,\n VPID_KEY = \"vpadn-vpid\",\n JSON_KEY = \"vponId\",\n JSON_THIRDPARTY_KEY = \"ce\",\n // the last cookie sync date\n LAST_COOKIE_SYNC = \"vpadn-sd\",\n //cookie expired in 7 days\n COOKIE_LIFE_DAY = 7,\n THIRD_COOKIE_ENABLED_FLAG = \"vpadn-ce\";\nvar secure = window.location.protocol === \"https:\";\n\n// var ET_HOST = (secure ? 'https' : 'http') + '://tags-dmp.vpadn.com/',\nvar DMP_HOST = (secure ? \"https\" : \"http\") + \"://ids-dmp.vpadn.com/\",\n protocolName = {\n 0: \"create\"\n // 1: 'mapUser',\n // // others mean event/payload\n // 999: 'others'\n },\n protocol = [];\n\n// different protocol with different url\nprotocol[protocolName[0]] = DMP_HOST + \"set\"; // drop client cookie\n// protocol[protocolName[1]] = DMP_HOST + 'map'; // cokie sync\n// protocol[protocolName[999]] = ET_HOST + 'et'; // event tracking\n\nvar urlEncodeComponent = window.encodeURIComponent;\nvar urlDecodeComponent = window.decodeURIComponent;\nvar cookie = {\n write: function write(name, value, days, domain, path) {\n var date = new Date();\n days = days || 730; // two years\n path = path || \"/\";\n date.setTime(date.getTime() + days * 24 * 60 * 60 * 1000);\n var expires = \"; expires=\" + date.toGMTString();\n var cookieValue = \"\".concat(name, \"=\").concat(value).concat(expires, \"; path=\").concat(path, \"; SameSite=None; Secure\");\n if (domain) {\n cookieValue += \"; domain=\" + domain;\n }\n document.cookie = cookieValue;\n },\n read: function read(name) {\n var allCookie = \"\" + document.cookie;\n var index = allCookie.indexOf(name);\n if (name === undefined || name === \"\" || index === -1) return \"\";\n var ind1 = allCookie.indexOf(\";\", index);\n if (ind1 == -1) ind1 = allCookie.length;\n return unescape(allCookie.substring(index + name.length + 1, ind1));\n },\n remove: function remove(name) {\n if (this.read(name)) {\n this.write(name, \"\", -1, \"/\");\n }\n }\n};\nvar getUrlParameterByName = function getUrlParameterByName(name, url) {\n // http://stackoverflow.com/questions/901115/how-can-i-get-query-string-values-in-javascript\n name = name.replace(/[\\[]/, \"\\\\[\").replace(/[\\]]/, \"\\\\]\");\n var regex = new RegExp(\"[\\\\?&]\" + name + \"=([^&#]*)\", \"i\"),\n results = regex.exec(url);\n return results === null ? \"\" : decodeURIComponent(results[1].replace(/\\+/g, \" \"));\n};\nvar generateSEID = function generateSEID(key) {\n // - 11429772959540-14297738918\n return key + \"-\" + Math.floor(1 * new Date() / 100);\n};\nvar testCanWriteCookies = function testCanWriteCookies(domain) {\n // https://github.com/Modernizr/Modernizr/blob/master/feature-detects/cookies.js\n try {\n // Create cookie\n document.cookie = \"cookietest=1\" + (domain ? \"; domain=\" + domain : \"\");\n var ret = document.cookie.indexOf(\"cookietest=\") != -1;\n // Delete cookie\n document.cookie = \"cookietest=1; expires=Thu, 01-Jan-1970 00:00:01 GMT\" + (domain ? \"; domain=\" + domain : \"\");\n return ret;\n } catch (e) {\n return false;\n }\n};\nvar getTopReachableDomain = function getTopReachableDomain(url) {\n // default as current page url\n if (url === undefined) {\n url = location.href;\n }\n try {\n var hostname;\n if (window.URL) {\n hostname = new URL(url).hostname;\n }\n\n // double check\n if (hostname === undefined) {\n var parser = document.createElement(\"a\");\n parser.href = url;\n hostname = parser.hostname;\n }\n\n // detect localhost\n if (hostname === \"localhost\") {\n return \"\";\n }\n var domainList = hostname.split(\".\"),\n // ['www', 'vpon', 'com', 'tw']\n domainListLength = domainList.length,\n domain = domainList[domainListLength - 2] + \".\" + domainList[domainListLength - 1],\n current = domainListLength - 2;\n while (!testCanWriteCookies(domain) && current >= 0) {\n domain = domainList[--current] + \".\" + domain;\n }\n if (current < 0) {\n return false;\n }\n return domain;\n } catch (e) {\n return false;\n }\n};\nvar sendBeaconAjax = function sendBeaconAjax(url, cb, errorCb) {\n var xmlHttp = new XMLHttpRequest();\n xmlHttp.timeout = 10000;\n xmlHttp.withCredentials = true;\n xmlHttp.onreadystatechange = function () {\n if (xmlHttp.readyState === 4 && xmlHttp.status === 200 && cb !== undefined) {\n cb(xmlHttp.responseText);\n } else if (xmlHttp.readyState === 4 && errorCb !== undefined) {\n errorCb(xmlHttp.responseText);\n }\n };\n xmlHttp.open(\"GET\", url, true); // true for asynchronous\n xmlHttp.send();\n};\nvar SetHelper = {\n setCallback: function setCallback(e) {\n var json = JSON.parse(e);\n if (json !== undefined && json[JSON_KEY] !== undefined) {\n // if (json[JSON_KEY] !== '0') {\n // cookie.write(VPID_KEY, json[JSON_KEY], COOKIE_LIFE_DAY, COOKIE_DOMAIN);\n // }\n\n //if 3rd cookie setting failed, set a flag in 1st party cookie\n cookie.write(THIRD_COOKIE_ENABLED_FLAG, json[JSON_THIRDPARTY_KEY], COOKIE_LIFE_DAY, COOKIE_DOMAIN);\n }\n },\n setErrorCallback: function setErrorCallback(e) {}\n};\nvar track = function track() {\n var arg = arguments,\n eventType = arg[0];\n if (eventType === \"webSDK\") {\n create.apply(this, arg);\n }\n};\nvar create = function create() {\n var arg = arguments;\n COOKIE_DOMAIN = getTopReachableDomain();\n CTID = cookie.read(CTID_NAME) || window.localStorage && window.localStorage.getItem(\"vpadn-ctid\") || generateUID();\n if (verifyCtid(CTID)) {\n CTID = \"v1_\".concat(CTID, \".\").concat(new Date().getTime());\n window.localStorage && window.localStorage.setItem(\"vpadn-ctid\", CTID);\n }\n cookie.write(CTID_NAME, CTID, CTID_LIFE, COOKIE_DOMAIN); // 1st party domain cookie\n\n // set SEID (sdk loaded)- !important, we have only one session, therefore we can use the global SEID name\n SEID = cookie.read(SEID_NAME);\n if (!SEID ||\n // check not exist\n getTopReachableDomain(DOCUMENT_REFERRER) !== COOKIE_DOMAIN ||\n // check different domain\n !new RegExp(\"^\" + KEY).test(SEID)) {\n // check different license key\n SEID = generateSEID(KEY);\n }\n cookie.write(SEID_NAME, SEID, SEID_LIFE, COOKIE_DOMAIN); // 1st party domain cookie\n\n //20210105: TOC\n if (cookie.read(THIRD_COOKIE_ENABLED_FLAG) !== \"0\" && cookie.read(THIRD_COOKIE_ENABLED_FLAG) !== \"1\") {\n var ctidObj = parseCtidToObj(CTID);\n var ctid = ctidObj.ctid;\n sendBeaconAjax(protocol[protocolName[0]] + \"?t=\" + 1 * new Date() + \"&dn=\" + urlEncodeComponent(COOKIE_DOMAIN) + \"&ctid=\" + ctid, SetHelper.setCallback, SetHelper.setErrorCallback);\n }\n};\nvar getCTID = function getCTID() {\n return CTID;\n};\n\n/**\n * find particular cookie value\n * @param {string} cookieName cookie name\n * @returns cookie value\n */\nvar getCookie = function getCookie(key) {\n if (typeof key !== \"string\") {\n console.warn(\"[Vpon-WebSDK] key must be string\");\n return;\n }\n var cookies = document.cookie;\n var cookiesArr = cookies.split(\";\").map(function (item) {\n return item.trim();\n });\n var targetCookie = cookiesArr.find(function (cookie) {\n return cookie.split(\"=\")[0] === key;\n });\n if (!targetCookie) {\n console.warn(\"[Vpon-WebSDK] Can't find key => \".concat(key));\n return;\n }\n return targetCookie.split(\"=\")[1];\n};\nmodule.exports = {\n track: track,\n generateUID: generateUID,\n getCTID: getCTID,\n getCookie: getCookie,\n getTopReachableDomain: getTopReachableDomain\n};\n\n/***/ }),\n/* 6 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.urlSearchParams = exports.isVponOMIDBridgeExist = exports.isElement = exports.digitSet = exports.assets = exports.VponConsole = void 0;\nfunction _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nvar _require = __webpack_require__(1),\n isSDKiOS = _require.isSDKiOS;\nvar isElement = exports.isElement = function isElement(element) {\n try {\n return obj instanceof HTMLElement;\n } catch (e) {\n return (typeof obj === \"undefined\" ? \"undefined\" : _typeof(obj)) === \"object\" && obj.nodeType === 1 && _typeof(obj.style) === \"object\" && _typeof(obj.ownerDocument) === \"object\";\n }\n};\n\n/**\n * if env is in ios, send message to iOS developer\n * @param {String} type message type (log|warn|error)\n * @param {*} msg message\n */\nvar VponConsole = exports.VponConsole = function VponConsole(type, msg) {\n var typeMapping = ['debug', 'log', 'info', 'warn', 'error'];\n if (typeMapping.indexOf(type) !== -1) {\n console[type](msg);\n } else {\n VponConsole('warn', '[VponVideo] type is invalid');\n }\n};\nvar urlSearch = window.location.search;\nvar urlSearchParams = exports.urlSearchParams = new URLSearchParams(urlSearch);\nvar assets = exports.assets = {\n iconMuteSrc: 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFAAAABQCAYAAAH5FsI7AAAKQ2lDQ1BJQ0MgcHJvZmlsZQAAeNqdU3dYk/cWPt/3ZQ9WQtjwsZdsgQAiI6wIyBBZohCSAGGEEBJAxYWIClYUFRGcSFXEgtUKSJ2I4qAouGdBiohai1VcOO4f3Ke1fXrv7e371/u855zn/M55zw+AERImkeaiagA5UoU8Otgfj09IxMm9gAIVSOAEIBDmy8JnBcUAAPADeXh+dLA//AGvbwACAHDVLiQSx+H/g7pQJlcAIJEA4CIS5wsBkFIAyC5UyBQAyBgAsFOzZAoAlAAAbHl8QiIAqg0A7PRJPgUA2KmT3BcA2KIcqQgAjQEAmShHJAJAuwBgVYFSLALAwgCgrEAiLgTArgGAWbYyRwKAvQUAdo5YkA9AYACAmUIszAAgOAIAQx4TzQMgTAOgMNK/4KlfcIW4SAEAwMuVzZdL0jMUuJXQGnfy8ODiIeLCbLFCYRcpEGYJ5CKcl5sjE0jnA0zODAAAGvnRwf44P5Dn5uTh5mbnbO/0xaL+a/BvIj4h8d/+vIwCBAAQTs/v2l/l5dYDcMcBsHW/a6lbANpWAGjf+V0z2wmgWgrQevmLeTj8QB6eoVDIPB0cCgsL7SViob0w44s+/zPhb+CLfvb8QB7+23rwAHGaQJmtwKOD/XFhbnauUo7nywRCMW735yP+x4V//Y4p0eI0sVwsFYrxWIm4UCJNx3m5UpFEIcmV4hLpfzLxH5b9CZN3DQCshk/ATrYHtctswH7uAQKLDljSdgBAfvMtjBoLkQAQZzQyefcAAJO/+Y9AKwEAzZek4wAAvOgYXKiUF0zGCAAARKCBKrBBBwzBFKzADpzBHbzAFwJhBkRADCTAPBBCBuSAHAqhGJZBGVTAOtgEtbADGqARmuEQtMExOA3n4BJcgetwFwZgGJ7CGLyGCQRByAgTYSE6iBFijtgizggXmY4EImFINJKApCDpiBRRIsXIcqQCqUJqkV1II/ItchQ5jVxA+pDbyCAyivyKvEcxlIGyUQPUAnVAuagfGorGoHPRdDQPXYCWomvRGrQePYC2oqfRS+h1dAB9io5jgNExDmaM2WFcjIdFYIlYGibHFmPlWDVWjzVjHVg3dhUbwJ5h7wgkAouAE+wIXoQQwmyCkJBHWExYQ6gl7CO0EroIVwmDhDHCJyKTqE+0JXoS+cR4YjqxkFhGrCbuIR4hniVeJw4TX5NIJA7JkuROCiElkDJJC0lrSNtILaRTpD7SEGmcTCbrkG3J3uQIsoCsIJeRt5APkE+S+8nD5LcUOsWI4kwJoiRSpJQSSjVlP+UEpZ8yQpmgqlHNqZ7UCKqIOp9aSW2gdlAvU4epEzR1miXNmxZDy6Qto9XQmmlnafdoL+l0ugndgx5Fl9CX0mvoB+nn6YP0dwwNhg2Dx0hiKBlrGXsZpxi3GS+ZTKYF05eZyFQw1zIbmWeYD5hvVVgq9ip8FZHKEpU6lVaVfpXnqlRVc1U/1XmqC1SrVQ+rXlZ9pkZVs1DjqQnUFqvVqR1Vu6k2rs5Sd1KPUM9RX6O+X/2C+mMNsoaFRqCGSKNUY7fGGY0hFsYyZfFYQtZyVgPrLGuYTWJbsvnsTHYF+xt2L3tMU0NzqmasZpFmneZxzQEOxrHg8DnZnErOIc4NznstAy0/LbHWaq1mrX6tN9p62r7aYu1y7Rbt69rvdXCdQJ0snfU6bTr3dQm6NrpRuoW623XP6j7TY+t56Qn1yvUO6d3RR/Vt9KP1F+rv1u/RHzcwNAg2kBlsMThj8MyQY+hrmGm40fCE4agRy2i6kcRoo9FJoye4Ju6HZ+M1eBc+ZqxvHGKsNN5l3Gs8YWJpMtukxKTF5L4pzZRrmma60bTTdMzMyCzcrNisyeyOOdWca55hvtm82/yNhaVFnMVKizaLx5balnzLBZZNlvesmFY+VnlW9VbXrEnWXOss623WV2xQG1ebDJs6m8u2qK2brcR2m23fFOIUjynSKfVTbtox7PzsCuya7AbtOfZh9iX2bfbPHcwcEh3WO3Q7fHJ0dcx2bHC866ThNMOpxKnD6VdnG2ehc53zNRemS5DLEpd2lxdTbaeKp26fesuV5RruutK10/Wjm7ub3K3ZbdTdzD3Ffav7TS6bG8ldwz3vQfTw91jicczjnaebp8LzkOcvXnZeWV77vR5Ps5wmntYwbcjbxFvgvct7YDo+PWX6zukDPsY+Ap96n4e+pr4i3z2+I37Wfpl+B/ye+zv6y/2P+L/hefIW8U4FYAHBAeUBvYEagbMDawMfBJkEpQc1BY0FuwYvDD4VQgwJDVkfcpNvwBfyG/ljM9xnLJrRFcoInRVaG/owzCZMHtYRjobPCN8Qfm+m+UzpzLYIiOBHbIi4H2kZmRf5fRQpKjKqLupRtFN0cXT3LNas5Fn7Z72O8Y+pjLk722q2cnZnrGpsUmxj7Ju4gLiquIF4h/hF8ZcSdBMkCe2J5MTYxD2J43MC52yaM5zkmlSWdGOu5dyiuRfm6c7Lnnc8WTVZkHw4hZgSl7I/5YMgQlAvGE/lp25NHRPyhJuFT0W+oo2iUbG3uEo8kuadVpX2ON07fUP6aIZPRnXGMwlPUit5kRmSuSPzTVZE1t6sz9lx2S05lJyUnKNSDWmWtCvXMLcot09mKyuTDeR55m3KG5OHyvfkI/lz89sVbIVM0aO0Uq5QDhZML6greFsYW3i4SL1IWtQz32b+6vkjC4IWfL2QsFC4sLPYuHhZ8eAiv0W7FiOLUxd3LjFdUrpkeGnw0n3LaMuylv1Q4lhSVfJqedzyjlKD0qWlQyuCVzSVqZTJy26u9Fq5YxVhlWRV72qX1VtWfyoXlV+scKyorviwRrjm4ldOX9V89Xlt2treSrfK7etI66Trbqz3Wb+vSr1qQdXQhvANrRvxjeUbX21K3nShemr1js20zcrNAzVhNe1bzLas2/KhNqP2ep1/XctW/a2rt77ZJtrWv913e/MOgx0VO97vlOy8tSt4V2u9RX31btLugt2PGmIbur/mft24R3dPxZ6Pe6V7B/ZF7+tqdG9s3K+/v7IJbVI2jR5IOnDlm4Bv2pvtmne1cFoqDsJB5cEn36Z8e+NQ6KHOw9zDzd+Zf7f1COtIeSvSOr91rC2jbaA9ob3v6IyjnR1eHUe+t/9+7zHjY3XHNY9XnqCdKD3x+eSCk+OnZKeenU4/PdSZ3Hn3TPyZa11RXb1nQ8+ePxd07ky3X/fJ897nj13wvHD0Ivdi2yW3S609rj1HfnD94UivW2/rZffL7Vc8rnT0Tes70e/Tf/pqwNVz1/jXLl2feb3vxuwbt24m3Ry4Jbr1+Hb27Rd3Cu5M3F16j3iv/L7a/eoH+g/qf7T+sWXAbeD4YMBgz8NZD+8OCYee/pT/04fh0kfMR9UjRiONj50fHxsNGr3yZM6T4aeypxPPyn5W/3nrc6vn3/3i+0vPWPzY8Av5i8+/rnmp83Lvq6mvOscjxx+8znk98ab8rc7bfe+477rfx70fmSj8QP5Q89H6Y8en0E/3Pud8/vwv94Tz+4A5JREAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAADa2lUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS42LWMxNDAgNzkuMTYwNDUxLCAyMDE3LzA1LzA2LTAxOjA4OjIxICAgICAgICAiPiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1wTU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjg4NzI2MkNDOTZGMjExRTg4NzMxOEQ5QzMzRDU2QUI2IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjA3OTVBREZDQzczRDExRTk5NzIyQTJFRDM0OUYzOEY0IiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjA3OTVBREZCQzczRDExRTk5NzIyQTJFRDM0OUYzOEY0IiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDQyAoTWFjaW50b3NoKSI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOjcyMzdlNGYzLTBjNTEtNDNiNC05MzFhLWM2YTE2NmMxZGQ2YyIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDo4ODcyNjJDQzk2RjIxMUU4ODczMThEOUMzM0Q1NkFCNiIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PuyKxkoAABMP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',\n iconUnmiteSrc: 'data:image/png;base64,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UmVhZHlxyWU8AAADa2lUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS42LWMxNDAgNzkuMTYwNDUxLCAyMDE3LzA1LzA2LTAxOjA4OjIxICAgICAgICAiPiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1wTU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjg4NzI2MkNDOTZGMjExRTg4NzMxOEQ5QzMzRDU2QUI2IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjA4QjFFQUJEQzczRTExRTk5NzIyQTJFRDM0OUYzOEY0IiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjA4QjFFQUJDQzczRTExRTk5NzIyQTJFRDM0OUYzOEY0IiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDQyAoTWFjaW50b3NoKSI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOjcyMzdlNGYzLTBjNTEtNDNiNC05MzFhLWM2YTE2NmMxZGQ2YyIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDo4ODcyNjJDQzk2RjIxMUU4ODczMThEOUMzM0Q1NkFCNiIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PjCdrp0AABP+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',\n videoPosterSrc: 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAApsAAAF3AQMAAADQMhJDAAAABlBMVEX///////9VfPVsAAAACXBIWXMAAA7EAAAOxAGVKw4bAAADh0lEQVR4nO2YsW7bMBCGqQqwloBaMwhyH8GjBqN+FT2CxgxBrUfTA/QhWHToVmj0EITlHU+kLBm1GGcq/g+JIonmh6N4OtJRCgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwB0qOmTDjZabNzdR2Is7nm3vfq290lirVOluXtyH7HuKdE8fz6w1K2lBlx+Tfle1628yQxdXA973+cgnjSpSjI6L+uIG2auvLO1nLUdqJA5Kpzl9hLVc5XPpgb2OLlWaDxKUv1q0cmaoNlVacGwv09Wi1ctMspSP3ZVkIXWzlyidYvE8LVp3LO1TpdfvU7Vo5XHkD0qfb0rXj+UOrAnp2dySFslS1oT0PNyS7pKlrAnp2S1aeaL0egKTpO100vs/HOFTspRjCzlv6DDEmWNp9aB0EHMuUpY9J0tbOuzkwgfYTS+vJFyTLs3eSbo3LO1FUkor58Zh/VLcwexdedeZfaMLn1pVLIWdHFKl52JUuhjPLOVbOpRCX2xbJ/VnW/k5urqn9/4p+gkrQin0j9b5qpNNkf4a1DeljyqnUPyEuYfg1ya3fhGDky7W2Tv8plnR7rGRx7+N2SCDtaO/dGugycYE6R8arjZ+TiRzjKSpSHsnjYvDFn7QcJ8Gnz0yyZ2kacYPklKijsvYFi70+rgVmjuJtJnStBhUKGH1qus/pRlLSSjltAoCGr+8wynVb6RsLCUSkeow1CZKUzYpFAtLKRKp0UWYFAp/ly419KtFKjU6D+kzNaj1PmOztPX34jtJNyXPrnZEG6Qt9d2psPznQUpjrj4m7bT0F1kRhv8Z0sHfK8NKTabnx6TTylSH8kmm5nOkx5DoD0iniZr6vYScpDtdPH1EOgbBB6XUxVBkOuR3ZsKGjUztY1IZtaumZiY1nyJ11XTaU1HsJp5uhebWUBQ6lI4ybilnyZtSUBrKJJJWoXTUcZ2f5VmK9MjSYS49xopcLvZqG6loCqhjE+J7iWHpOEEpUj8/Zr65GaOpjqcpO5+Sf0b+8f2omoYXNkpTVlOXPzWNmFQy5yQkUxufxCFt3XcF+VW5nQ+txovvJq+KtiWFDzNph6LeaEUqh5NaSU99OYh0P9Dpds7W0D8h6B8Pi+8mhbW9zHphk3Z9quSP87Zp+YWHd8I6ngIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwH/FX4Ok7MIGd0maAAAAAElFTkSuQmCC'\n};\nvar digitSet = exports.digitSet = function digitSet(num) {\n var strNum = num.toString();\n if (num < 0) {\n strNum = '00';\n }\n if (num < 10 && num >= 0) {\n strNum = '0' + num;\n }\n return strNum;\n};\nvar isVponOMIDBridgeExist = exports.isVponOMIDBridgeExist = window.vponOMIDBridge !== undefined && window.vponOMIDBridge.videoEvents !== undefined;\n\n/***/ })\n/******/ ]);\n\n\n// WEBPACK FOOTER //\n// vpadn-video-sdk.js"," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, {\n \t\t\t\tconfigurable: false,\n \t\t\t\tenumerable: true,\n \t\t\t\tget: getter\n \t\t\t});\n \t\t}\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 3);\n\n\n\n// WEBPACK FOOTER //\n// webpack/bootstrap 838f0a8cf6f96cc23fad","module.exports.systemVar = {\n networkId:\"nid\",\n a: '',\n acceptDomains: ['m.vpon.com', 'tw-img.vpon.com'],\n adhesionPosition: 'vpon_ad_adhesion',\n ad_identifier: 'ad_identifier',\n ad_is_lat: 'ad_is_lat',\n ad_id_type: 'ad_id_type',\n adRequestCallBack: 'ad_request_callback', // branch:requestAdCallback\n adRotate: true,\n adUrlHeaderName: 'adURL',\n clickUrlHeaderName: 'clickURL',\n closeImgSrc: '//tw-img.vpon.com/img/close_54x54.png',\n cookieCTID: 'vpadn-ctid',\n connectQueue: [],\n contentData: 'content_data',\n coverPolicyCheckHeightBand: 0,\n coverPolicyCheckWidthBand: 0,\n debug: 'debug',\n format: 'vpon_ad_format',\n ///20210105: Attr of GAM TargetingMap\n gamTargetingMap: 'vpon_content_data',\n impUrlHeaderName: 'impURL',\n intCloseBtnEndureTime: 5000,\n intCloseBtnAppearTime: 3000,\n isGettingAd: true,\n isRotate: 'is_rotate', // branch:requestAdCallback\n landing: '',\n licensekey: 'vpon_ad_licensy_key',\n lower_bound_vpon_refresh_time_second: 15,\n openTab: 'openTab',\n pullFrameIndex: '_1',\n nativeAdLabel: 'Sponsored',\n nativeCoverMin: 'vpon_na_min',\n nativeLayoutOption: 'vpon_na_layout',\n rectHeightTotalBand: 5,\n rectWidthTotalBand: 5,\n reqAdFrameId: '',\n reqAdUrl: 'tw-api.vpadn.com/api/webAdReqV2',\n sdk: 'vpadn-sdk-w-v5.0.0',\n useCustomCloseCallBack: 'use_custom_close',\n useCustomCloseBtnId: 'use_custom_close_id',\n use_custom_z_index_int_30h: 'use_custom_z_index_int_30h',\n useHeightBand: 1,\n useWidthBand: 1,\n vponBannerTagCount: 3,\n vponIntTagCount: 1,\n vpon_refresh_time: 120000,\n vponTag: 'vpon',\n isUseCustomClose: false,\n referrerPolicy: 'no-referrer-when-downgrade',\n ariaLabel: {\n close_button: 'CloseButton',\n mute_icon: 'muteIcon',\n unmute_icon: 'unmuteIcon',\n ad_img: 'adImg',\n replay_button: 'replaybutton',\n video_view: 'videoView'\n },\n lat: 'lat',\n lon: 'lon',\n accurary: 'accurary',\n adChoiceUrl: 'https://m.vpon.com/ad-choice/vpon-ad-choice.html',\n adChoiceArrowImg: 'data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjAiIGhlaWdodD0iMTkiIHZpZXdCb3g9IjAgMCAyMCAxOSIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggaWQ9IlZlY3RvciIgZD0iTTEwLjI4NzggMTguMTYxNkMxMC4wMjYxIDE4LjQyMjkgOS42NzE0NiAxOC41Njk3IDkuMzAxNjcgMTguNTY5N0M4LjkzMTg4IDE4LjU2OTcgOC41NzcyMSAxOC40MjI5IDguMzE1NTYgMTguMTYxNkwwLjQwODA5OSAxMC4yNTQxQzAuMTQ2NzggOS45OTI1IC0zLjkwNDI1ZS0wNyA5LjYzNzgyIC00LjA2NTg5ZS0wNyA5LjI2ODAzQy00LjIyNzUzZS0wNyA4Ljg5ODI0IDAuMTQ2NzggOC41NDM1NyAwLjQwODA5OSA4LjI4MTkzTDguMzE1NTYgMC4zNzQ0NjJDOC41ODAyNSAwLjEyODEwNSA4LjkzMDEzIC0wLjAwNjA1MDUgOS4yOTE2OCAwLjAwMDE5NjA1MUM5LjY1MzIyIDAuMDA2NDQwNjkgOS45OTgyNiAwLjE1MjYwMSAxMC4yNTQzIDAuNDA3OTUxQzEwLjUwOTYgMC42NjM5NzQgMTAuNjU1OCAxLjAwOTAyIDEwLjY2MiAxLjM3MDU2QzEwLjY2ODMgMS43MzIxIDEwLjUzNDEgMi4wODE5OSAxMC4yODc4IDIuMzQ2NjhMNC43NjE4NSA3Ljg3MjZMMTguNjA0NiA3Ljg3MjZDMTguOTc0NyA3Ljg3MjYgMTkuMzI5NiA4LjAxOTYyIDE5LjU5MTMgOC4yODEzMUMxOS44NTMgOC41NDMwMSAyMCA4Ljg5Nzk0IDIwIDkuMjY4MDNDMjAgOS42MzgxMiAxOS44NTMgOS45OTMwNiAxOS41OTEzIDEwLjI1NDhDMTkuMzI5NiAxMC41MTY0IDE4Ljk3NDcgMTAuNjYzNSAxOC42MDQ2IDEwLjY2MzVMNC43NjE4NSAxMC42NjM1TDEwLjI4NzggMTYuMTg5NEMxMC41NDkxIDE2LjQ1MSAxMC42OTU5IDE2LjgwNTcgMTAuNjk1OSAxNy4xNzU1QzEwLjY5NTkgMTcuNTQ1MyAxMC41NDkxIDE3LjkgMTAuMjg3OCAxOC4xNjE2WiIgZmlsbD0iIzQ0NDg1MCIvPgo8L3N2Zz4K',\n adChoiceImg: 'data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPCEtLSBHZW5lcmF0b3I6IEFkb2JlIElsbHVzdHJhdG9yIDI4LjAuMCwgU1ZHIEV4cG9ydCBQbHVnLUluIC4gU1ZHIFZlcnNpb246IDYuMDAgQnVpbGQgMCkgIC0tPgo8c3ZnIHZlcnNpb249IjEuMSIgaWQ9IuWcluWxpF8xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4PSIwcHgiIHk9IjBweCIKCSB2aWV3Qm94PSIwIDAgODUgODUiIHN0eWxlPSJlbmFibGUtYmFja2dyb3VuZDpuZXcgMCAwIDg1IDg1OyIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSI+CjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+Cgkuc3Qwe2ZpbGw6IzQ0NDg1MDtmaWxsLW9wYWNpdHk6MC41O30KCS5zdDF7ZmlsbDpub25lO3N0cm9rZTojOUE5QTlBO3N0cm9rZS13aWR0aDo0LjI1MjtzdHJva2Utb3BhY2l0eTowLjU7fQoJLnN0MntmaWxsOiNGRkZGRkY7fQo8L3N0eWxlPgo8cGF0aCBjbGFzcz0ic3QwIiBkPSJNNDIuNSw4NUM2Niw4NSw4NSw2Niw4NSw0Mi41UzY2LDAsNDIuNSwwUzAsMTksMCw0Mi41UzE5LDg1LDQyLjUsODV6Ii8+CjxwYXRoIGNsYXNzPSJzdDEiIGQ9Ik04Mi45LDQyLjVjMCwyMi4zLTE4LjEsNDAuNC00MC40LDQwLjRTMi4xLDY0LjgsMi4xLDQyLjVTMjAuMiwyLjEsNDIuNSwyLjFTODIuOSwyMC4yLDgyLjksNDIuNXoiLz4KPGc+Cgk8cGF0aCBjbGFzcz0ic3QyIiBkPSJNNDkuNiw1OC4yYy0wLjQtMC4yLTAuNy0wLjUtMS0wLjdjLTAuNS0wLjMtMS0wLjEtMS4zLDAuNGMtMC42LDEuMS0xLjUsMi42LTIuOSwzLjljLTEsMC45LTIuNi0wLjEtMi4zLTEuMwoJCWw3LjgtMjguOWMwLjItMC43LTAuNC0xLjItMS0xLjFsLTE0LjcsMi41Yy0wLjUsMC4xLTAuOSwwLjYtMC44LDFsMC4yLDEuNWMwLjEsMC41LDAuNSwwLjgsMC45LDAuOGgzLjZsLTcuMSwyNi4yCgkJYy0wLjEsMC43LTAuMywyLjMsMC41LDMuOWMxLjYsMyw1LjQsMy4yLDYsMy4yYzAuNSwwLDIuNCwwLjEsNS0xLjNjNC40LTIuNCw2LjUtNi40LDcuNS04LjhDNTAuMSw1OC44LDUwLDU4LjQsNDkuNiw1OC4yeiIvPgoJPHBhdGggY2xhc3M9InN0MiIgZD0iTTQ2LjMsMTIuOGMtMy41LDAtNi40LDIuOC02LjQsNi40YzAsMy41LDIuOCw2LjQsNi40LDYuNGMzLjUsMCw2LjQtMi44LDYuNC02LjQKCQlDNTIuNywxNS42LDQ5LjgsMTIuOCw0Ni4zLDEyLjh6Ii8+CjwvZz4KPC9zdmc+Cg=='\n}\n\nmodule.exports.apiConfig = {\n protocol: 'https:',\n hostname: 'tw-api.vpadn.com',\n path: {\n click: '/api/webviewAdClick/',\n request: '/api/webAdReqV2',\n videoEvent: '/api/webviewAdOnVideo'\n }\n}\n\nmodule.exports.parseUriOptions = {\n strictMode: false,\n key: ['source', 'protocol', 'authority', 'userInfo', 'user', 'password', 'host', 'port', 'relative', 'path', 'directory', 'file', 'query', 'anchor'],\n q: {\n name: 'queryKey',\n parser: /(?:^|&)([^&=]*)=?([^&]*)/g\n },\n parser: {\n strict: /^(?:([^:\\/?#]+):)?(?:\\/\\/((?:(([^:@]*)(?::([^:@]*))?)?@)?([^:\\/?#]*)(?::(\\d*))?))?((((?:[^?#\\/]*\\/)*)([^?#]*))(?:\\?([^#]*))?(?:#(.*))?)/,\n loose: /^(?:(?![^:@]+:[^:@\\/]*@)([^:\\/?#.]+):)?(?:\\/\\/)?((?:(([^:@]*)(?::([^:@]*))?)?@)?([^:\\/?#]*)(?::(\\d*))?)(((\\/(?:[^?#](?![^?#\\/]*\\.[^?#\\/.]+(?:[?#]|$)))*\\/?)?([^?#\\/]*))(?:\\?([^#]*))?(?:#(.*))?)/\n }\n}\n\nmodule.exports.nativeLayout = {\n 0: {\n content: '
${ad_label}
${title}
${body}
${action_name}
',\n imgNum : 2\n },\n 1: {\n content: '
${ad_label}
${title}
${body}
${action_name}
',\n imgNum : 1\n },\n 2: {\n content: '
${ad_label}
${title}
${body}
${action_name}
',\n imgNum : 1\n },\n\n}\nmodule.exports.VIDEO_EVENT_URL = 'https://tw-api.vpadn.com/api/webviewAdOnVideo';\nmodule.exports.TPL_PARAMS = {\n ACTION : 'a',\n UID : 'uid',\n ADID : 'ad',\n AD_TYPE : 't',\n LICENSE_KEY : 'bid',\n VIDEO_TRACKING_ID : 'vid_tid',\n SDK : 'sdk',\n SESSION_ID : 'vpadnSid',\n SEQUENCE_ID : 'vpadnSeq',\n VIDEO_FUNCTION_1_DESC : 'v_f_1_des',\n PARAM_E : 'e',\n PROGRESS: 'progress',\n W_F_1_A: 'w_f_1_a'\n}\n\nmodule.exports.act_script = {\n 0: 'vpsdk.openWebApp(undefined, undefined, \\\"${lnk}\\\", true, true, \\\"none\\\", 0xFFFFFFFF, true, true, true);',\n 1: 'vpsdk.openBrowser(undefined, undefined, \"${lnk}\");',\n 2: 'vpsdk.placeCall(undefined, undefined, \"${lnk}\");',\n 3: 'vpsdk.openBrowser(undefined, undefined, \"${lnk}\");',\n 4: 'vpsdk.sendSms( undefined, undefined, \"${vptpl_tel}\", \"${vptpl_body}\");',\n 5: 'vpsdk.openStore( undefined, undefined, \"${lnk}\");',\n 9: '',\n 10: '',\n};\n\nmodule.exports.websdkParams = {\n licensekey: \"vpon_ad_licensy_key\",\n gamTargetingMap: 'vpon_content_data',\n contentData: 'content_data',\n format: \"vpon_ad_format\",\n vponAdTest: \"vpon_ad_test\",\n debug: \"debug\",\n adTest: \"vpon_ad_test\",\n adIdentifier: \"ad_identifier\",\n adIsLat: \"ad_is_lat\",\n useCustomClose: \"use_custom_close\",\n customClick: \"vpon_custom_click\",\n adRequestCallBack: \"ad_request_callback\",\n nativeCoverMin: 'vpon_na_min',\n nativeAdLabel: \"Sponsored\",\n openTab: \"openTab\",\n nativeLayoutOption: \"vpon_na_layout\",\n sdk: 'vpadn-sdk-w-v5.0.0',\n useCustomCloseCallBack: 'use_custom_close',\n apiConfig: {\n protocol: 'https://',\n hostname: 'tw-api.vpadn.com',\n path: {\n adRequest: '/api/webAdReqV2'\n }\n },\n apiPayload: {\n adRequest: {\n referrerPolicy: 'no-referrer-when-downgrade',\n credentials: 'include'\n }\n },\n adTypeArr: [\n {\n attribute: \"320x50_mb\",\n expectResult: \"banner\",\n },\n {\n attribute: \"320x100_mb\",\n expectResult: \"banner\",\n },\n {\n attribute: \"300x250_mb\",\n expectResult: \"banner\",\n },\n {\n attribute: \"320x480_mb\",\n expectResult: \"banner\",\n },\n {\n attribute: \"mi\",\n expectResult: \"mi\",\n },\n {\n attribute: \"na\",\n expectResult: \"na\",\n },\n ],\n adAmountLimit: {\n banner: 3,\n mi: 1\n },\n formatMapping: [\n \"320x50_mb\",\n \"320x100_mb\",\n \"300x250_mb\",\n \"320x480_mb\",\n \"970x250_mb\",\n \"mi\",\n \"na\",\n ],\n regex: {\n licensekey: /^[A-Za-z0-9]{32}$/,\n ctid: /^[0-9a-fA-F]{8}\\b-[0-9a-fA-F]{4}\\b-[0-9a-fA-F]{4}\\b-[0-9a-fA-F]{4}\\b-[0-9a-fA-F]{12}$/,\n },\n vponTagAttrs: {\n format: \"vpon_ad_format\",\n licensekey: \"vpon_ad_licensy_key\"\n },\n cookie: {\n sid: 'Vpadn-Sid',\n ctid: 'vpadn-ctid',\n thirdCookieEnabledFlag: 'vpadn-ce',\n seid: 'vpadn-seid'\n },\n adUrlMapping: {\n ban_img: \"vpadn-tpl-ban_w-v2.html\",\n ban_vid: \"vpadn-tpl-ban-vid_w.html\",\n int_fit: \"vpadn-tpl-int_w-v2.html\",\n int_vid: \"vpadn-tpl-int-vid_w-v2.html\",\n int_30h: \"vpadn-tpl-int-30h_w.html\",\n },\n assets: {\n logo: \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAC4AAAAuCAMAAABgZ9sFAAABQVBMVEU+Pj44ODg7OztVVVU1NTVMaXEzMzMqKiotLS0wMDAnJycrKytYWFhHR0dAQD85OjkoKicvLy0sLCxbW1syMDNQUFAODg4sLCw4ODZLS0smJiYyMTEVFRYQEBAjIyMhISERERFWVlYoKCgSEhL7+/tVVVUbHBsfHx9QUFA4Nzg0NDRTVFNRUFAZGRn9/f0YGBgWFhaampr5+fnz8/NRUVFOTk5bW1x0dHR6eXn29vYsLCza2tpMTExQUFDq6uqqqqrp6emvr683Nzfv7+87ODv39/fIx8fX19fd3d06Ozq/v7+OjY7u7u6WlpZOTk7MzMzR0dEZGRqCgoKhoaG3t7eNjY1GRkY9PT1QUFBFRUXi4uKmpqbS0tJXV1e+vr5gYGC2tra6urpFRUVQUFDm5uZVVVZvb28fHx9ubm6Dg4P///+MlWkJAAAAanRSTlNaWlqtWgBaWlpaWlqthlpaWlpcrVqGqWJahmtfkqJvdZ2tZpf8qX97ZV5bn5SD/oiMifjqc41ow3T2ruoeCdiS8dRp9lrvrb7HsqSA4M+45LasytKcyrRyRmDQquO74rze2YAp0K2VobazCebO3gAAAslJREFUeNq9kvdD2kAUx4meJCGOEGnAMMOQMCwOaB2g1tphl1VbtXuv9///Af3eXSIYKKW/9Mvx7o0Pl3cvRGb+SYN477LdaVSmx6mPd9uSnAjveRyuNDtzY+Xj3Sbg5oUV+4sk/qUxPd04QKheFVTumjFTjZkm95AwTVPgXdBzlspzJv+gAh4WX85BMe5JvIdOPqsTieOe+62jTox3K27Dmhxvu+6BoaqGoRmaqhmGikBDCRkRIUSaexrwXsVtalKGMCo3cLEHBqGsRmYuXfdCm1QR9FKxpO95NcsYwdQ9L22pPt656mWXym9yRStMr63TVs5JqhJvuB0/v0e0lVkuhh/whOhOacUxJF6ZXfLztXtEp5lc6PjHROWj7ErRb2Z2dkmPx+Pw4/eJdrLLybiGUBgdlYdEx3Ypb/FMgOtCt8pE7zKOIQKgQe6DvYokDyUeCCe9L1ST+oDwxH1b5oZw3ud2y9H6NL/PSzuT04ZxCFM4K+XT/QSf1gnuo4/EXxDdxRT6iV1M0S7lrEE8kYhGo7qe0BOv1oluZ1BNQIg3iego2ypqUT2BlRB4tK/nmGVhORmED4je2uguiMP45k2iZ6uOLiOPP8xGOBqHXhN9LFT94x75U4z+EV8jWt9uFcV5qQ2ip5hifDTOsASCblnwU0yR+4xhCfwGGxRvILuS5O5Xok/8ov3iMO6JWTp1xsS1McX6OJxheMe4HmN8qHYBh4/F+as5X3XqwRTrQ3iKKUxJpRhTFIUx/uLRMf9DnOCVoYqCXAJXrmsPAzlvtTGiM0yxPlAZiUcAlne2+BQxIuU6vgg8pLUyQfKPXgvji8DD/Aah8VMbnaeG8QWuKWmxHR6mDr7/+vmjkKkWa6KiwIqqwKeGtJB28tW8k1RC+dE4tFBLpxU8bAQeEZqSBhsWKjAyIXYB+/jE+k/4fGQeC5JbRH4GMiL8DVCuk0infmIEAAAAAElFTkSuQmCC\",\n closeBtn:\n \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAYAAABw4pVUAAAEJGlDQ1BJQ0MgUHJvZmlsZQAAOBGFVd9v21QUPolvUqQWPyBYR4eKxa9VU1u5GxqtxgZJk6XtShal6dgqJOQ6N4mpGwfb6baqT3uBNwb8AUDZAw9IPCENBmJ72fbAtElThyqqSUh76MQPISbtBVXhu3ZiJ1PEXPX6yznfOec7517bRD1fabWaGVWIlquunc8klZOnFpSeTYrSs9RLA9Sr6U4tkcvNEi7BFffO6+EdigjL7ZHu/k72I796i9zRiSJPwG4VHX0Z+AxRzNRrtksUvwf7+Gm3BtzzHPDTNgQCqwKXfZwSeNHHJz1OIT8JjtAq6xWtCLwGPLzYZi+3YV8DGMiT4VVuG7oiZpGzrZJhcs/hL49xtzH/Dy6bdfTsXYNY+5yluWO4D4neK/ZUvok/17X0HPBLsF+vuUlhfwX4j/rSfAJ4H1H0qZJ9dN7nR19frRTeBt4Fe9FwpwtN+2p1MXscGLHR9SXrmMgjONd1ZxKzpBeA71b4tNhj6JGoyFNp4GHgwUp9qplfmnFW5oTdy7NamcwCI49kv6fN5IAHgD+0rbyoBc3SOjczohbyS1drbq6pQdqumllRC/0ymTtej8gpbbuVwpQfyw66dqEZyxZKxtHpJn+tZnpnEdrYBbueF9qQn93S7HQGGHnYP7w6L+YGHNtd1FJitqPAR+hERCNOFi1i1alKO6RQnjKUxL1GNjwlMsiEhcPLYTEiT9ISbN15OY/jx4SMshe9LaJRpTvHr3C/ybFYP1PZAfwfYrPsMBtnE6SwN9ib7AhLwTrBDgUKcm06FSrTfSj187xPdVQWOk5Q8vxAfSiIUc7Z7xr6zY/+hpqwSyv0I0/QMTRb7RMgBxNodTfSPqdraz/sDjzKBrv4zu2+a2t0/HHzjd2Lbcc2sG7GtsL42K+xLfxtUgI7YHqKlqHK8HbCCXgjHT1cAdMlDetv4FnQ2lLasaOl6vmB0CMmwT/IPszSueHQqv6i/qluqF+oF9TfO2qEGTumJH0qfSv9KH0nfS/9TIp0Wboi/SRdlb6RLgU5u++9nyXYe69fYRPdil1o1WufNSdTTsp75BfllPy8/LI8G7AUuV8ek6fkvfDsCfbNDP0dvRh0CrNqTbV7LfEEGDQPJQadBtfGVMWEq3QWWdufk6ZSNsjG2PQjp3ZcnOWWing6noonSInvi0/Ex+IzAreevPhe+CawpgP1/pMTMDo64G0sTCXIM+KdOnFWRfQKdJvQzV1+Bt8OokmrdtY2yhVX2a+qrykJfMq4Ml3VR4cVzTQVz+UoNne4vcKLoyS+gyKO6EHe+75Fdt0Mbe5bRIf/wjvrVmhbqBN97RD1vxrahvBOfOYzoosH9bq94uejSOQGkVM6sN/7HelL4t10t9F4gPdVzydEOx83Gv+uNxo7XyL/FtFl8z9ZAHF4bBsrEwAAAAlwSFlzAAALEwAACxMBAJqcGAAACNJJREFUeAHtnFtvE0cUx4kViVf8FfYrWKLihScjqHhCIkWqFGgJTQgJxgTipAoBYxNh5S4CTYEQRVwqaCIhIaFQcF9436/gr2BeqaK483c41mGyu0nWOxdLs1IyO7OX+Z/z27nueLsajcYht9njgZQ9UpwSeMABsew5cEAcEMs8YJkcV0IcEMs8YJkcV0IcEMs8YJkcV0IcEMs8YJkcV0IcEMs8YJkcV0IcEMs8YJkcV0IcEMs8YJkcV0IcEMs8YJkcV0IsA9KtQ8+RI0fScj5fvnypy2k2xnVr71K5yCHIGNnptoIxpV1ZlSUbdOnSJU+GgTjOk88NOk9XWpCeKO1J61ICRHbwvx8/ZmdnZ8f+WFrKfv36NU1/3Bj5Gn5M176sATofP37c1P7u3bseHbqVAOEO/Gdzsydz9GiPSEv/3NvbMzMzk0mlUs02RTZQdgi/j+p9njfpevjwYebcuXNN7cePH8++ffs2Cx04rkpP4kC4YSgZPxw7BiPIgPTw8HDP5OSkBygcDBnIr6c01SHPk5yNB6evr68J41v+6VOnTmU3NjZ2QeHXt6s1cSAkaHBw0KOSQWlk2Pj4eE+hcCODuGko3JkEo1KpZPDgCHn0IH2Tfih9+vTprPjzKCHpUBmQ5eXl2l8vXqwLwUHd2/SdO6Xs9es5o1DCYFy7di0IBnxfF7Cqm5ubQTYlwkYZEKjr6+/3RT0cCqVYLGdzueFM1/a29uorCMbU1FQmDMbW1lb99u1b1XK57Cfi+ZCbKAWCPMfGxmqiPg6E0t3dnS6Xp7JX8zlPJ5QwGCMjI4ElAzBENVudn5mrhfgxseTEgcgDve3t7XqxWKzdvXu3KlTvKuq6ocSBMXbzpv/no0ctGLCJE5Bt5scOup84EC7g8OHDLeHT09P+rVu/V/G08XOwrwtKHBii1PjLT540YTRSqZZ2bptsTztxJUDkJ4aeqIWFB77o8hqBEgtGPu+vrKzUUo1GnWCQLeR02VZKjxsqAcLF0JNEhiwtLtZ0Q4kDIw8Yq6tNGGQP2UA2UXqSoTIg/MkhA2AQnjSdUOLCWGUwoDkIBrcxKSjKgEAgF2wCSqfBgM+UAjEJpRNhaAFiAkqnwoCvlL6gQgZ8C3IU5rIwKLyaz3tiFJxFF5hfg310lScnJ6pLiw9qYfW5fA3iNDeFEXjUoA8NuKk2Q9atvMriGapsU3g+2O9EGNCttYQgQ2xJlxTckzoNBAJpnVQyoBebESDIuB0oExMT1UcPdqov3Iu6pNjHhmpQTNd4o6OjoXNTNlVTO6p3/hsDguzbgYLJPswv0QiaG4UXYHjnItIC2yNbYcAGo0AgoD0oBQFluTXph/uNjN7wSqV7/C0lkpsbOgc2w4BI40Agoh0omPyj+abLQ4NepTId2lOzHYY1QPaGkhNd4qlQR4vXrc2XRliUENZt7gQYVgHZC8pQLueJXlMoFFwfCiOX81fX1loThWFjGd4tx/1MbFZUWdzwqOrr8tCQqJIqgVD4PWgfbcaVK1f8ly9fdgQM6NY6MCRHRYX8KaWxBc7HU41e1U3RZsDRUffAMZwzMPBbDTDoXN4j4/fmedK5pkLrgMARsoP4OOOJeGGENiMKCo5d+PVC7fXr1y0Y5GB+r6C86DxToZVAuDP4k4x0vL3jx8P2t/7bah2Sr5Hv2TrRgh3rgcg+QjsS1puic9G4v3r1yjt79qddA0M6x9bQeiB8bmpkdHTfjTqgPHv2LHP+/Hlvu6vrOzD8nraBsRII72nBYZibEtMhmVKpFNjDQpsR1KYACkpTP/spBC1dJRByXpRuKrQOCHcQPcllMVEo5qZCp0N6e3tr+AuDMjs/n0FVh/cu5Gi6N+I8TzpuKrRqHMIdQw7Dwueo5Z1ihbq/sfF3s6FHm4FqCiVDdihg8Vli6m3xBl7u3cn30BG3poTEgYFB3/r6eq3R6KrjD/thXWJAwkhf97LVg0K0AkgcGHA8H/Sha4u/58+fhw4eAWVnLXFe61rig0AxXmXFgZGX5qaCDI6aZkH1hcV6WB9m27yWUSBJwODTIRwMGvC9JiRthGIMSJIwqIEmINS13VnNEj11bxsUI0CSgsFBUG+JemeAAzD7W2JkT/WlHUjSMAgElQ4KCUynQdHay9IFA1AIFEoR2hk04MVi1E8hyqJLbL73pa2EqIQhD+iC8qKSkr+R9/DbxrDBo+k2RUsJCXLQXiNwuWt7kO4pBySXlMU5u0uKciC6YVAb0qlQlAIxBaOToSgDYhpGp0JRBoQcQt1PlW0G5RUWJlF94d404CSbwvJrJ10JEF46IG5evI+ImkJvpwHfr/HtQpE/A0L5yrZSetxQCRASgycJb+zEh2iiFz5rWsTWDpR79+5nC4VC89sssE9VKUkcCH9i1tbW5E8cEavmuqkRA79cigtFCBcfzLmTxc8cqOoiY7jNlBY3TBwICcHnmejjX5RGIaa/seCN/w78IOMMuk/csB0o+M3JjydO7HojGVeLfJ0yIPg80+fPn3d93wQwxscL1ZWnT328UAIInTDIAVFQ8MWJUqm4S7u4tr7+5k1189Onfa0No7wOEioDAhEnT56sfvjwgRsmPkQz2fpNB0DgPJq1pVE10rjDEFex8Twob9IyN7fgl7//YE5dvKH0f7l4sbM/z3TmzJnq+/fvm1BE17eKp49KBZxMDiCHII07CnGVG8+LNJCmivhgDn1aCiVjYGAAdrQ0q9ClZHKRN3LUG8Fn8fiX2MhoGEWOwD53EOK6tiDNyBsNONoMqqZItyrNyoHAKIKCfb5xo5BuCgZp4lCQZkK3EiAwRjYOaVGbaRikzbRuZUBg4H6MswUEAaHQlHalQKKMsxUEaaYwCIxK7VqAkHEu3NsDSsche2fvzpA94IDIHjEcd0AMA5Czd0BkjxiOOyCGAcjZOyCyRwzHHRDDAOTsHRDZI4bjDohhAHL2DojsEcNxB8QwADl7B0T2iOG4A2IYgJy9AyJ7xHDcATEMQM7eAZE9YjjugBgGIGf/P08Wgya4bC7sAAAAAElFTkSuQmCC\",\n oneThreeCloseBtn: 'https://m.vpon.com/tpl/img/int_liquid_close.png',\n zoonBtn: 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIAAAAyCAMAAAAp4XiDAAAASFBMVEVMaXEAAAAAAAD///8AAAAAAAAAAAAAAAAAAAAAAAAAAAC/v79gYGDPz88QEBCAgIDt7e1AQEAwMDAgICBwcHCvr69QUFCPj48k3ENwAAAACnRSTlMA3yD/EEBQgO+fGxWR4AAAATBJREFUeNqt1tlyhSAMBuAqYCAuuJ3T93/TTi2SxsHEDv1vvOEbZAt8/FNaBz9x7aP2XfBI8aFT2lvI7UmB1cFz5Bq8S+OKAlAKFERAOUERuuFCN/o4pn4eruNx5ZbLsh3f0RhzGJeFbYpkNGbekjD9MddW+a3vlksSZmBTbb1AmEBvhU4SeTORu/ECmblAf4gOBZIEpRNXkQm2nl4hY4z7xv6sRYmkzJjT0sqLxLDBwB8JSCSSiAWipYqEyl6mV5+zPiPRUF4ScUXS3xL3e/X3R6Rle2yP8VMj/rqTp1Ejgc4LCZl06VRyMQvEp7PPxdALBM4KwwQKxFtWx04hEeDV8hT4pt1+SWN5Tc6VF9dlvVt5ClB9FwIV94tgKm++UH8j6/d+/euCIx3oL6X699gXXUtEJQBdBRkAAAAASUVORK5CYII='\n }\n}\n\n\n// WEBPACK FOOTER //\n// ./src/vpadn-sdk-parameters.partial.js","const { isUrl, checkAdType, verifyCtid } = require(\"./vpadn-sdk-check.partial\");\nconst { websdkParams } = require(\"./vpadn-sdk-parameters.partial\");\nconst { cookieParamsValidator } = require(\"./vpadn-sdk-check.partial\");\nconst { getTopReachableDomain } = require(\"./vpadn-sdk-cookie.partial\");\n\nconst checkCookieNameIsExist = (name) => {\n return document.cookie\n .split(\";\")\n .some((item) => item.trim().startsWith(`${name}=`));\n};\n\nconst getCookieOfObject = () => {\n return document.cookie\n .split(\";\")\n .map((item) => item.trim().split(\"=\"))\n .reduce((prev, curr) => {\n const [key, value] = curr;\n return {\n ...prev,\n [key]: value,\n };\n }, {});\n};\n\n/**\n * 211027>\n * Add Hinet third party tracking one in ten. The one is determined by ctid.\n */\n//const initialHinet = () => {\n// try {\n// const CTID_NAME = \"vpadn-ctid\";\n// if (\n// checkCookieNameIsExist(CTID_NAME) ||\n// (window.localStorage && window.localStorage.getItem(CTID_NAME))\n// ) {\n// const getCookie = getCookieOfObject();\n// const ctidCookie = getCookie[CTID_NAME].split(\"_\")[1].split(\".\")[0];\n// const CTID =\n// ctidCookie ||\n// (window.localStorage && window.localStorage.getItem(CTID_NAME));\n// if (Math.random() <= 0.3) {\n// const script = document.createElement(\"script\");\n// script.async = true;\n// script.src = \"https://t.ssp.hinet.net/utag.js\";\n// document.getElementsByTagName(\"head\")[0].appendChild(script);\n//\n// script.onload = () => {\n// var partnerId = \"7f1e29\";\n// window.__hitagCmdQueue = window.__hitagCmdQueue || [];\n// function hiball() {\n// __hitagCmdQueue.push(arguments);\n// }\n// hiball(\"fire\", partnerId);\n// hiball(\"cm\", partnerId, `${CTID}`);\n// };\n// }\n// } else {\n// console.warn(\n// \"[web-sdk] initialHinet: There is not vpadn-ctid in cookie or local storage.\"\n// );\n// }\n// } catch (error) {\n// console.error(`[web-sdk] initialHinet something wrong: ${error}`);\n// }\n//};\n\n//const initialEland = () => {\n// const script = document.createElement(\"script\");\n// script.async = true;\n// script.src = \"https://dmp.eland-tech.com/dmpreceiver/eland_tracker.js\";\n// document.getElementsByTagName(\"head\")[0].appendChild(script);\n// script.onload = () => {\n// if (checkCookieNameIsExist(\"vpadn-ctid\")) {\n// const getCookie = getCookieOfObject();\n// const ctid = getCookie[\"vpadn-ctid\"].split(\"_\")[1].split(\".\")[0];\n// const dataJson = {\n// source: \"VPON\",\n// trackType: \"view\",\n// targetType: \"usual\",\n// trackSubfolderDepth: 1,\n// ecInfo: {\n// memberID: ctid,\n// },\n// };\n// ElandTracker.Track(dataJson);\n// }\n// };\n//};\n\nconst endsWith = (str, suffix) => {\n return str.indexOf(suffix, str.length - suffix.length) !== -1;\n};\n\nconst s4 = () => {\n return Math.floor((1 + Math.random()) * 0x10000)\n .toString(16)\n .substring(1);\n};\n\nconst genGuid = () => {\n return (\n s4() +\n s4() +\n \"-\" +\n s4() +\n \"-\" +\n s4() +\n \"-\" +\n s4() +\n \"-\" +\n s4() +\n s4() +\n s4()\n );\n};\n\nconst getCookie = (c_name) => {\n var c_value = document.cookie;\n var c_start = c_value.indexOf(\" \" + c_name + \"=\");\n if (c_start == -1) {\n c_start = c_value.indexOf(c_name + \"=\");\n }\n if (c_start == -1) {\n c_value = null;\n } else {\n c_start = c_value.indexOf(\"=\", c_start) + 1;\n var c_end = c_value.indexOf(\";\", c_start);\n if (c_end == -1) {\n c_end = c_value.length;\n }\n c_value = unescape(c_value.substring(c_start, c_end));\n }\n return c_value;\n};\n\n/* remove for CNA publisher, possibly cause is function name conflict\nfunction setCookie(c_name,value,exdays){\n var exdate=new Date();\n exdate.setDate(exdate.getDate() + exdays);\n var c_value=escape(value) + ((exdays==null) ? \"\" : \"; expires=\"+exdate.toUTCString());\n document.cookie=c_name + \"=\" + c_value;\n}\n*/\n\nconst uaMatch = (substr) => {\n return (\n (window.navigator ? window.navigator.userAgent : \"\").indexOf(substr) != -1\n );\n};\n\nconst isSDKiOS = () => {\n return uaMatch(\"(iPad\") || uaMatch(\"(iPod\") || uaMatch(\"(iPhone\");\n};\n\nconst isIPhone = () => {\n return uaMatch(\"(iPhone\");\n};\n\nconst isSDKiOSNotIPhone = () => {\n return uaMatch(\"(iPad\") || uaMatch(\"(iPod\");\n};\n\nconst parseParamsFromUrl = (url) => {\n var params = {};\n var key = \"\";\n var value = \"\";\n\n if (url.indexOf(\"?\") != -1) {\n var ary = url.split(\"?\")[1].split(\"&\");\n for (var i in ary) {\n key = ary[i].split(\"=\")[0];\n value = ary[i].split(\"=\")[1];\n // replace sms body content\n if (value.indexOf(\"sms%3A\") > -1 && value.indexOf(\"%3Fbody%3D\") > -1) {\n value = replaceSMSContent(value);\n }\n // use %20 for encoded character of white space instead of ‘+’\n // replace '+' with '%20' form any content include '+'\n else if (value.indexOf(\"+\") > -1) {\n value = value.replace(/\\+/g, \"%20\");\n }\n value = decodeURIComponent(value);\n // replace '\\r\\n' for sms\n if (value.indexOf(\"\\r\\n\") > -1 && value.indexOf(\"sms:\") > -1) {\n value = value.replace(/\\r\\n/g, \"\\\\n\");\n }\n\n params[key] = value;\n }\n }\n return params;\n};\n\nconst regexp_replace = (input, tagBeingReplaced, replaceWith) => {\n var regex = new RegExp(\"\\\\$\\\\{\" + tagBeingReplaced + \"\\\\}\", \"g\");\n return input.replace(regex, replaceWith);\n};\n\nconst parseCtidToObj = (ctid_dob) => {\n try {\n if (ctid_dob === null || ctid_dob === undefined) {\n return {\n ctid: null,\n timestamp: null,\n };\n }\n if (ctid_dob.split(\".\").length === 2) {\n const version = ctid_dob.split(\"_\")[0];\n const ctid = ctid_dob.split(\"_\")[1].split(\".\")[0];\n const timestamp = ctid_dob.split(\".\")[1];\n // 防止 cookie 還存在,但 localStorage 被清掉的情況,故再做一次儲存\n window.localStorage &&\n window.localStorage.setItem(\n \"vpadn-ctid\",\n `${version}_${ctid}.${timestamp}`\n );\n return {\n version,\n ctid,\n timestamp,\n };\n } else {\n return {\n ctid: ctid_dob,\n timestamp: null,\n };\n }\n } catch (error) {\n console.log(error);\n }\n};\n\n/**\n * fadeIn effect\n * @param {Object} el target element\n * @param {Number} ms transition duration\n * @param {Function} callback when transitionend event triggerd, execute callback function\n */\nlet fadeLock = null;\n\nconst fadeForFlrec = (el, action = \"in\", ms = 3, callback) => {\n try {\n console.log(\"action:\" + action);\n if (action === \"out\") {\n clearTimeout(fadeLock);\n el.removeEventListener(\"transitionend\", transitionendCallback);\n return;\n }\n\n if (action === \"in\") {\n ms = !isNaN(parseFloat(ms)) ? parseFloat(ms) : 3;\n el.style.opacity = 0;\n setTimeout(() => {\n el.style.transition = `opacity ${ms}s`;\n el.style.opacity = 1;\n }, 1);\n if (typeof callback === \"function\") {\n fadeLock = setTimeout(() => {\n console.log(\"fadeLock\");\n clearTimeout(fadeLock);\n el.removeEventListener(\"transitionend\", transitionendCallback);\n callback();\n }, ms * 1000 + 500);\n el.addEventListener(\"transitionend\", transitionendCallback);\n }\n }\n\n function transitionendCallback() {\n console.log(\"transitionendCallback\");\n clearTimeout(fadeLock);\n el.removeEventListener(\"transitionend\", transitionendCallback);\n callback();\n }\n } catch (err) {\n console.warn(err);\n }\n};\n\nlet fading = null;\n\nconst fade = (el, ms = 3, type = \"in\") => {\n if (fading) {\n clearInterval(fading);\n }\n /**\n * return if close button was defined as display == none\n */\n if (el.style.display === \"none\") {\n return;\n }\n if (ms === 0) {\n el.style.display = \"block\";\n el.style.opacity = 1;\n return;\n }\n const isIn = type === \"in\";\n let opacity = isIn ? 0 : 1;\n let interval = 50;\n let duration = ms * 1000;\n if (duration === 0) duration = 0.1;\n let gap = interval / duration;\n if (isIn) {\n el.style.display = \"block\";\n el.style.opacity = opacity;\n }\n\n const func = () => {\n opacity = isIn ? opacity + gap : opacity - gap;\n\n if (opacity <= 0) {\n clearInterval(fading);\n opacity = 0;\n el.style.display = \"none\";\n }\n\n if (opacity >= 1) {\n clearInterval(fading);\n opacity = 1;\n }\n el.style.opacity = opacity;\n };\n fading = setInterval(func, interval);\n};\n\nconst getParams = (setLocation = location.href) => {\n const url = new URL(setLocation);\n const params = {};\n const paramsArr = url.search ? url.search.replace(/^\\?/, \"\").split(\"&\") : [];\n let value = \"\";\n for (let key of paramsArr) {\n if (key) {\n value = key.split(\"=\");\n params[value[0]] = value[1];\n }\n }\n return params;\n};\n\nconst calculateViewRate = (target) => {\n if (!target || !(\"getBoundingClientRect\" in target)) {\n return;\n }\n\n const boundingRect = findFrameAbsoluteRect(target);\n let counter = 0;\n\n for (let i = 0; i <= 10; i++) {\n const position = {\n x: boundingRect.x + boundingRect.width / 2,\n y: boundingRect.y + (boundingRect.height * i) / 10,\n };\n\n if (\n window.top.document.elementFromPoint(position.x, position.y) === target\n ) {\n counter++;\n }\n }\n\n return {\n viewPercent: (counter - 1) / 10,\n };\n};\n\nfunction isElementInsideContainer(container, target) {\n if (!container || !target) {\n return false;\n }\n\n if (container === target) {\n return true;\n }\n\n let iframes = [];\n\n if (container.tagName !== \"IFRAME\") {\n if (container.contains(target)) {\n return true;\n }\n iframes = [...container.querySelectorAll(\"iframe\")];\n } else {\n if (!container.contentDocument) {\n return false;\n }\n if (container.contentDocument.contains(target)) {\n return true;\n }\n iframes = [...container.contentDocument.querySelectorAll(\"iframe\")];\n }\n\n if (!iframes.length) {\n return false;\n }\n return iframes.some((iframe) => {\n return _isElementInsideContainer(iframe, target);\n });\n}\n\nfunction _isElementInsideContainer(iframe, target) {\n if (!iframe.contentDocument) {\n return false;\n }\n\n if (iframe.contentDocument.contains(target)) {\n return true;\n }\n\n let iframes = [...container.contentDocument.querySelectorAll(\"iframe\")];\n\n if (!iframes.length) {\n return false;\n }\n\n return iframes.some((iframe) => {\n return _isElementInsideContainer(iframe, target);\n });\n}\n\nfunction findFrameAbsoluteRect(element) {\n let currentWindow = window;\n let currentParentWindow;\n let positions = [];\n let rect = element\n ? element.getBoundingClientRect()\n : document.body.getBoundingClientRect();\n while (currentWindow !== window.top) {\n currentParentWindow = currentWindow.parent;\n for (let frameElement of currentParentWindow.document.getElementsByTagName(\n \"iframe\"\n )) {\n if (frameElement.contentWindow === currentWindow) {\n const frameRect = frameElement.getBoundingClientRect();\n positions.push({ x: frameRect.x, y: frameRect.y });\n }\n }\n currentWindow = currentParentWindow;\n break;\n }\n\n positions = positions.reduce(\n (accumulator, currentValue) => {\n return {\n x: accumulator.x + currentValue.x,\n y: accumulator.y + currentValue.y,\n };\n },\n { x: rect.x, y: rect.y }\n );\n return {\n x: positions.x,\n y: positions.y,\n top: rect.top,\n bottom: rect.bottom,\n left: rect.left,\n right: rect.right,\n width: rect.width,\n height: rect.height,\n };\n}\n\n/**\n * get root domain(ex:.vpon.com)\n * @param {Object} location location object\n * @returns root domain string\n */\nconst getRootDomain = (location = window.location) => {\n if (!isUrl(location.href)) {\n return;\n }\n\n const { hostname } = location;\n const hostStringArray = hostname.split(\".\");\n\n //If the hostname has at least two parts, return the last two parts\n if (hostStringArray.length >= 2) {\n return (\n hostStringArray[hostStringArray.length - 2] +\n \".\" +\n hostStringArray[hostStringArray.length - 1]\n );\n }\n\n //Otherwise, return entrire hostname\n return hostname;\n};\n\n/**\n * UID generator\n * @returns generation UID\n */\nfunction generateUID() {\n if (crypto && typeof crypto.randomUUID === \"function\") {\n return crypto.randomUUID();\n }\n\n const S4 = function () {\n return (((1 + Math.random()) * 0x10000) | 0).toString(16).substring(1);\n };\n\n return (\n S4() +\n S4() +\n \"-\" +\n S4() +\n \"-\" +\n S4() +\n \"-\" +\n S4() +\n \"-\" +\n S4() +\n S4() +\n S4()\n );\n}\n\n/**\n * handle request ad parameters\n * @param {object} vponTag vpon tag\n * @returns request parameters\n */\nconst getReqAdParameters = (vponTag) => {\n let reqParameters = {};\n\n const adType = checkAdType(vponTag);\n if (adType == \"na\") {\n reqParameters.cover_min =\n vponTag.getAttribute(websdkParams.nativeCoverMin) || \"\";\n }\n reqParameters.format = vponTag.getAttribute(websdkParams.format);\n reqParameters.sdk = websdkParams.sdk;\n reqParameters.bid = vponTag.getAttribute(websdkParams.licensekey);\n reqParameters.adtest = vponTag.getAttribute(websdkParams.adTest) == 1 ? 1 : 0;\n reqParameters.adRequestCallBack = vponTag.getAttribute(\n websdkParams.adRequestCallBack\n );\n reqParameters.isRotate =\n vponTag.getAttribute(websdkParams.isRotate) || \"true\";\n reqParameters.s_h = document.documentElement.clientHeight;\n reqParameters.s_w = document.documentElement.clientWidth;\n\n return reqParameters;\n};\n\n/**\n * Adder\n * @param {*} initialValue adder initial value\n * @returns {number} result value.\n */\nfunction adder(initialValue = 0) {\n let value = initialValue;\n\n return (num = 1) => {\n value += num;\n return value;\n };\n}\n\nlet CTID = \"\";\n\nfunction getCTID() {\n return CTID;\n}\n\n/**\n * Prepare context for ad request(cookie & localStorage)\n * vpadn-ctid: ad request url query\n * vpadn-vpid: 3rd party cookie\n */\nfunction prepareContextForAdRequest() {\n const { getCookieByKey, setCookie, idsService } = vpadnCookieComponent;\n const cookieDomain = getTopReachableDomain();\n var CTID;\n\n // Ensure that the localStorage.getItem method exists.\n if (window.localStorage && typeof window.localStorage.getItem === 'function') {\n CTID =\n getCookieByKey(websdkParams.cookie.ctid) ||\n window.localStorage.getItem(websdkParams.cookie.ctid) ||\n generateUID();\n } else {\n CTID =\n getCookieByKey(websdkParams.cookie.ctid) ||\n generateUID();\n }\n\n\n if (verifyCtid(CTID)) {\n CTID = `v1_${CTID}.${new Date().getTime()}`;\n }\n\n if (window.localStorage) {\n window.localStorage.setItem(websdkParams.cookie.ctid, CTID);\n }\n\n const options = {\n path: \"/\",\n \"max-age\": 63072000, //two years\n domain: cookieDomain,\n };\n\n setCookie(websdkParams.cookie.ctid, CTID, options);\n\n let seid = getCookieByKey(websdkParams.cookie.seid);\n let key;\n\n if (\n !seid ||\n getTopReachableDomain(document.referrer) !== cookieDomain ||\n !new RegExp(\"^\" + key).test(seid)\n ) {\n seid = `${key}-${Math.floor((1 * new Date()) / 100)}`;\n const options = {\n path: \"/\",\n \"max-age\": 1800, // 30 mins\n domain: cookieDomain,\n };\n setCookie(websdkParams.cookie.seid, seid, options);\n }\n\n if (\n getCookieByKey(websdkParams.cookie.thirdCookieEnabledFlag) !== \"0\" &&\n getCookieByKey(websdkParams.cookie.thirdCookieEnabledFlag) !== \"1\"\n ) {\n const ctidObj = parseCtidToObj(CTID);\n const { ctid } = ctidObj;\n idsService(cookieDomain, ctid);\n }\n}\n\n/**\n * Vpadn cookie component, Used for get cookie by key and set cookie\n * @param {string} key cookie name\n * @param {string} value cookie value\n * @param {object} options cookie setting options\n */\nconst vpadnCookieComponent = {\n idsService: (cookieDomain, ctid) => {\n const { protocol } = location;\n const beaconUrl = `${protocol}//ids-dmp.vpadn.com/set?t=${\n 1 * new Date()\n }&dn=${encodeURIComponent(cookieDomain)}&ctid=${ctid}`;\n\n sendBeaconAjax(\n beaconUrl,\n SetHelper.setCallback,\n SetHelper.setErrorCallback\n );\n },\n getCookieByKey: (key) => {\n const isValid = cookieParamsValidator({ key });\n\n if (!isValid) {\n return;\n }\n\n const cookies = document.cookie;\n const cookiesArr = cookies.split(\";\").map((item) => item.trim());\n const targetCookie = cookiesArr.find((cookie) => {\n return cookie.split(\"=\")[0] === key;\n });\n\n if (!targetCookie) {\n console.warn(`[Vpon-WebSDK] Can't find key => ${key}!`);\n return;\n }\n\n return targetCookie.split(\"=\")[1];\n },\n setCookie: (key, value, options) => {\n const isValid = cookieParamsValidator({ key, value, options });\n\n if (!isValid) {\n return;\n }\n\n const cookieString = generateCookieString(key, value, options);\n document.cookie = cookieString;\n },\n};\n\nconst generateCookieString = (key, value, options) => {\n let cookieString = `${key}=${value}`;\n Object.keys(options).forEach((key) => {\n if (options[key] !== \"secure\") {\n cookieString += `;${key}=${options[key]}`;\n return;\n }\n cookieString += \";secure\";\n });\n return cookieString;\n};\n\nvar sendBeaconAjax = function (url, cb, errorCb) {\n var xmlHttp = new XMLHttpRequest();\n\n xmlHttp.timeout = 10000;\n xmlHttp.withCredentials = true;\n\n xmlHttp.onreadystatechange = function () {\n if (\n xmlHttp.readyState === 4 &&\n xmlHttp.status === 200 &&\n cb !== undefined\n ) {\n cb(xmlHttp.responseText);\n } else if (xmlHttp.readyState === 4 && errorCb !== undefined) {\n errorCb(xmlHttp.responseText);\n }\n };\n xmlHttp.open(\"GET\", url, true); // true for asynchronous\n xmlHttp.send();\n};\n\nvar cookie = {\n write: function (name, value, days, domain, path) {\n var date = new Date();\n days = days || 730; // two years\n path = path || \"/\";\n date.setTime(date.getTime() + days * 24 * 60 * 60 * 1000);\n var expires = \"; expires=\" + date.toGMTString();\n var cookieValue = `${name}=${value}${expires}; path=${path}; SameSite=None; Secure`;\n if (domain) {\n cookieValue += \"; domain=\" + domain;\n }\n document.cookie = cookieValue;\n },\n read: function (name) {\n var allCookie = \"\" + document.cookie;\n var index = allCookie.indexOf(name);\n if (name === undefined || name === \"\" || index === -1) return \"\";\n var ind1 = allCookie.indexOf(\";\", index);\n if (ind1 == -1) ind1 = allCookie.length;\n return unescape(allCookie.substring(index + name.length + 1, ind1));\n },\n remove: function (name) {\n if (this.read(name)) {\n this.write(name, \"\", -1, \"/\");\n }\n },\n};\n\nvar SetHelper = {\n setCallback: function (e) {\n var json = JSON.parse(e);\n const JSON_KEY = \"vponId\";\n const THIRD_COOKIE_ENABLED_FLAG = \"vpadn-ce\";\n const JSON_THIRDPARTY_KEY = \"ce\";\n const COOKIE_LIFE_DAY = 7;\n const COOKIE_DOMAIN = getTopReachableDomain();\n\n if (json !== undefined && json[JSON_KEY] !== undefined) {\n // if (json[JSON_KEY] !== '0') {\n // cookie.write(VPID_KEY, json[JSON_KEY], COOKIE_LIFE_DAY, COOKIE_DOMAIN);\n // }\n\n //if 3rd cookie setting failed, set a flag in 1st party cookie\n cookie.write(\n THIRD_COOKIE_ENABLED_FLAG,\n json[JSON_THIRDPARTY_KEY],\n COOKIE_LIFE_DAY,\n COOKIE_DOMAIN\n );\n }\n },\n setErrorCallback: function (e) {},\n};\n\n/**\n * Initialize third party vender\n */\n//function initialThirdPartyVendor() {\n// initialEland();\n// initialHinet();\n//}\n\nconst checkInput = (vponTag) => {\n var result = {\n errMsg: \"\",\n adhesionPosition: false,\n };\n\n var licensekey = vponTag.getAttribute(systemVar.licensekey);\n if (!checkAttributeIsGiven(licensekey)) {\n result.errMsg += \"input licensekey is empty. \";\n }\n var regex = /^[A-Za-z0-9]{32}$/;\n if (!regex.test(licensekey)) {\n result.errMsg += \"input licensekey error length. \";\n }\n\n result.adType = checkAdType(vponTag);\n\n var adhesionPosition = vponTag.getAttribute(systemVar.adhesionPosition);\n if (adhesionPosition) {\n if (adhesionPosition === \"top\") {\n result.adhesionPosition = \"top\";\n } else if (adhesionPosition === \"bottom\") {\n result.adhesionPosition = \"bottom\";\n } else {\n result.adhesionPosition = \"unknown\";\n }\n } else {\n result.adhesionPosition = false;\n }\n\n return result;\n};\n\nconst initialIntIframeHtmlTag = (vponTag, guid) => {\n var iframeId = guid + \"_int_1\";\n var iframe = document.createElement(\"IFRAME\");\n iframe.style.width = \"100%\";\n iframe.style.height = \"100%\";\n iframe.setAttribute(\"id\", iframeId);\n iframe.setAttribute(\"scrolling\", \"no\");\n iframe.frameBorder = 0;\n\n var container = initialCloseButtonContainer(vponTag, iframeId, \"int\");\n var closeBtn = initialIntCloseButton(vponTag, iframeId);\n\n container.appendChild(closeBtn);\n container.appendChild(iframe);\n vponTag.appendChild(container);\n};\n\n/**\n * Todo: When ad response component refactoring in the\n * future, Move this function to ad response phase.\n * Create intistitial ad iframe, Contains the following two results.\n * 0: Some problem happen\n * 1: Success\n * @param {element} vponTag vpon tag node\n * @returns {number} result\n */\nconst vpon_ad_create_int_iframe = (vponTag) => {\n // check if vpontag already generate ad(iframes)\n if (vponTag.querySelectorAll(\"iframe\").length > 0) {\n console.info(\n \"ERROR: ad(iframes) had exists inside vpontag, will not generate ad(iframes) again.\"\n );\n return 0;\n }\n\n // check vpon tag attribute\n var checkInputResult = checkInput(vponTag);\n if (checkInputResult.errMsg) {\n var debugMode = vponTag.getAttribute(systemVar.debug);\n if (debugMode) {\n console.info(\n \"ERROR: vpon tag fill attribute error, message => \" +\n checkInputResult.errMsg\n );\n }\n return 0;\n }\n\n if (vponTag.getAttribute(\"status\") == null) {\n vponTag.setAttribute(\"status\", \"1\");\n } else {\n return 0;\n }\n\n var licenseKey = vponTag.getAttribute(systemVar.licensekey);\n var guid = licenseKey + \"_\" + generateUID();\n\n // initial iframe html tag\n initialIntIframeHtmlTag(vponTag, guid);\n\n return 1;\n};\n\n/**\n * Handle ad request url with ad request parameters.\n * @param {object} reqAdParameters ad request parameters\n * @returns {object} ad request url object\n */\nfunction handleAdReqUrl(reqAdParameters) {\n const { apiConfig } = websdkParams;\n const adReqUrl = new URL(\n `${apiConfig.protocol}${apiConfig.hostname}${apiConfig.path.adRequest}`\n );\n\n Object.keys(reqAdParameters).forEach((key) => {\n adReqUrl.searchParams.append(key, encodeURIComponent(reqAdParameters[key]));\n });\n\n return adReqUrl;\n}\n\n// ------------- function ------------\n\nmodule.exports = {\n endsWith,\n s4,\n genGuid,\n getCookie,\n uaMatch,\n isSDKiOS,\n isIPhone,\n isSDKiOSNotIPhone,\n parseParamsFromUrl,\n regexp_replace,\n parseCtidToObj,\n// initialHinet,\n// initialEland,\n fade,\n fading,\n fadeLock,\n fadeForFlrec,\n getParams,\n calculateViewRate,\n generateUID,\n getRootDomain,\n getReqAdParameters,\n adder,\n prepareContextForAdRequest,\n vpadnCookieComponent,\n// initialThirdPartyVendor,\n vpon_ad_create_int_iframe,\n handleAdReqUrl,\n getCTID\n};\n\n\n\n// WEBPACK FOOTER //\n// ./src/vpadn-sdk-features.partial.js","let {systemVar, apiConfig, websdkParams} = require('./vpadn-sdk-parameters.partial')\n\nconst divide = (length, bandCount) => {\n var res = []\n for (var i = 0; i <= bandCount; i++) {\n res[i] = (length / bandCount) * i\n }\n\n return res\n}\n\nconst coveredBannerCheck = (frame_id, vponTag) => {\n // iframe is display:none or visibity:hidden\n if (!iframeViewable(frame_id)) {\n return false\n }\n\n if (!isInCrossDomain()) {\n // iframe should be under the viewport. check the left and top will be inisde in the viewport.\n if (!underViewport(frame_id, vponTag)) {\n return false\n }\n\n // iframe should be displayed fully in viewport\n // the viewport should completely contain the right and bottom of iframe\n if (!displayInViewport(frame_id, vponTag)) {\n return false\n }\n }\n return true\n}\n\nconst iframeViewable = (frame_id) => {\n var myframe = document.getElementById(frame_id)\n // check display:none\n var displayStatus = myframe.style.display\n if (displayStatus.toLowerCase() == 'none') {\n return false\n }\n // check visibility:hidden\n var visibilityStatus = myframe.style.visibility\n if (visibilityStatus.toLowerCase() == 'hidden') {\n return false\n }\n\n return true\n}\n\nconst underViewport = (frame_id, vponTag) => {\n var myframe = document.getElementById(frame_id)\n var rect = myframe.getBoundingClientRect()\n var rectTop = getTransferRectHeight(rect.top, vponTag, '+')\n var rectLeft = getTransferRectWidth(rect.left, vponTag, '+')\n var frameBoundingClientRect = {\n fTop: 0,\n fLeft: 0\n }\n frameBoundingClientRect = getFrameBoundingClientRect(window, frameBoundingClientRect)\n rectTop = frameBoundingClientRect.fTop + rectTop\n rectLeft = frameBoundingClientRect.fLeft + rectLeft\n return (rectTop >= 0 && rectLeft >= 0)\n}\n\nconst displayInViewport = (frame_id, vponTag) => {\n var myframe = document.getElementById(frame_id)\n var rect = myframe.getBoundingClientRect()\n\n var rectBottom = getTransferRectHeight(rect.bottom, vponTag, '-')\n var rectRight = getTransferRectWidth(rect.right, vponTag, '-')\n\n var flag1 = (window.innerHeight - rectBottom >= 0 && window.innerWidth - rectRight >= 0)\n if (window == top) {\n return flag1\n } else if (flag1) { // in iframe\n var frameBoundingClientRect = {\n fTop: 0,\n fLeft: 0\n }\n var frameBoundingClientRect = getFrameBoundingClientRect(window, frameBoundingClientRect)\n rectBottom = frameBoundingClientRect.fTop + rectBottom\n rectRight = frameBoundingClientRect.fLeft + rectRight\n\n var flag2 = (window.top.innerHeight - rectBottom >= 0 && window.top.innerWidth - rectRight >= 0)\n return flag2\n } else {\n return false\n }\n}\n\nconst getFrameBoundingClientRect = (nowFrame, frameBoundingClientRect) => {\n if (nowFrame == top) {\n return frameBoundingClientRect\n } else {\n frameBoundingClientRect = calIframeBoundingClientRect(nowFrame.parent.document, nowFrame.document, frameBoundingClientRect)\n return getFrameBoundingClientRect(nowFrame.parent, frameBoundingClientRect)\n }\n}\n\nconst calIframeBoundingClientRect = (frameDocument, nowDocument, frameBoundingClientRect) => {\n var ifs = frameDocument.getElementsByTagName('iframe')\n // var isSafeFrame = /safeframe/;\n if (ifs) {\n for (var i = 0, len = ifs.length; i < len; i++) {\n try {\n var f = ifs[i].contentWindow.document || ifs[i].contentDocument\n } catch (e) {\n continue\n }\n\n var f = ifs[i]\n var fDoc = f.contentDocument || f.contentWindow.document\n if (fDoc === nowDocument) {\n var rect = f.getBoundingClientRect()\n frameBoundingClientRect.fTop = frameBoundingClientRect.fTop + rect.top\n frameBoundingClientRect.fLeft = frameBoundingClientRect.fLeft + rect.left\n return frameBoundingClientRect\n }\n }\n } else {\n return frameBoundingClientRect\n }\n}\n\nfunction currentFrameAbsolutePosition() {\n let currentWindow = window;\n let currentParentWindow;\n let positions = [];\n let rect;\n\n while (currentWindow !== window.top) {\n currentParentWindow = currentWindow.parent;\n for (let idx = 0; idx < currentParentWindow.frames.length; idx++)\n if (currentParentWindow.frames[idx] === currentWindow) {\n for (let frameElement of currentParentWindow.document.getElementsByTagName('iframe')) {\n if (frameElement.contentWindow === currentWindow) {\n rect = frameElement.getBoundingClientRect();\n positions.push({x: rect.x, y: rect.y});\n }\n }\n currentWindow = currentParentWindow;\n break;\n }\n }\n return positions.reduce((accumulator, currentValue) => {\n return {\n x: accumulator.x + currentValue.x,\n y: accumulator.y + currentValue.y\n };\n }, { x: 0, y: 0 });\n}\n\nconst coveredIntCheck = (frame_id) => {\n var iframeTag = document.getElementById(frame_id)\n\n var rectWidthBand = divide(document.documentElement.clientWidth -1, systemVar.rectWidthTotalBand)\n var rectHeightBand = divide(document.documentElement.clientHeight -1, systemVar.rectHeightTotalBand)\n\n var notPass = 0 // count how many point wont pass\n var threshold = ((systemVar.rectWidthTotalBand + 1) * (systemVar.rectHeightTotalBand + 1)) * (0.5) // threshold: 50%\n\n for (var i = 0; i <= systemVar.rectWidthTotalBand; i++) {\n var checkX = rectWidthBand[i]\n\n for (var j = 0; j <= systemVar.rectHeightTotalBand; j++) {\n var checkY = rectHeightBand[j]\n\n var el = document.elementFromPoint(checkX, checkY)\n\n if (el === null) {\n notPass++\n continue\n }\n var frameId = el.getAttribute('id')\n if (frame_id != frameId) {\n notPass++\n continue\n }\n }\n }\n if (notPass > threshold) {\n return false\n } else {\n return true\n }\n}\n\nconst coveredNaCheck = ((vponTag) => {\n return function (vponTag) {\n if(window.top == window.self){\n var vponTagPos = vponTag.getBoundingClientRect()\n var rectWidthBand = divide(vponTagPos.width -1, systemVar.rectWidthTotalBand)\n var rectHeightBand = divide(vponTagPos.height -1, systemVar.rectHeightTotalBand)\n var scrollTop = (window.pageYOffset !== undefined) ? window.pageYOffset : (document.documentElement || document.body.parentNode || document.body).scrollTop;\n var scrollLeft = (window.pageXOffset !== undefined) ? window.pageXOffset : (document.documentElement || document.body.parentNode || document.body).scrollLeft;\n var notPass = 0 // count how many point wont pass\n var threshold = ((systemVar.rectWidthTotalBand + 1) * (systemVar.rectHeightTotalBand + 1)) * (0.5) // threshold: 50%\n\n for (var i = 0; i <= systemVar.rectWidthTotalBand; i++) {\n var checkX = vponTagPos.x + rectWidthBand[i]\n\n for (var j = 0; j <= systemVar.rectHeightTotalBand; j++) {\n var checkY = vponTagPos.y + rectHeightBand[j]\n\n var el = document.elementFromPoint(checkX, checkY)\n\n if (el === null) {\n notPass++\n continue\n }\n var className = el.className\n var parentClassName = el.parentElement ? el.parentElement.className : undefined // while user click on image tag\n if ( className ? className.indexOf('vpon') < 0 : true && parentClassName ? parentClassName.indexOf('vpon') < 0 : true) {\n notPass++\n continue\n }\n\n }\n }\n if (notPass > threshold) return false\n else return true\n }else{\n var rectBottom = currentFrameAbsolutePosition().y + (vponTag.getBoundingClientRect().height/2)\n var rectRight = currentFrameAbsolutePosition().x + (vponTag.getBoundingClientRect().width/2);\n if(window.top.innerHeight - rectBottom >= 0 && window.top.innerWidth - rectRight >= 0) return true\n else return false\n }\n }\n}) ()\n\nconst getTransferRectWidth = (length, vponTag, direction) => {\n var reqAdParameters = getReqAdParameters(vponTag)\n var iframeW = reqAdParameters.format.split('x')[0]\n var iframeH = reqAdParameters.format.split('x')[1].split('_')[0]\n\n var rectWidthBand = divide(iframeW, systemVar.rectWidthTotalBand)\n var result = 0\n if (direction == '+') {\n result = length + rectWidthBand[systemVar.useWidthBand]\n } else if (direction == '-') {\n result = length - rectWidthBand[systemVar.useWidthBand]\n }\n return result\n}\n\nconst getTransferRectHeight = (length, vponTag, direction) => {\n var reqAdParameters = getReqAdParameters(vponTag)\n var iframeW = reqAdParameters.format.split('x')[0]\n var iframeH = reqAdParameters.format.split('x')[1].split('_')[0]\n\n var rectHeightBand = divide(iframeH, systemVar.rectHeightTotalBand)\n var result = 0\n if (direction == '+') {\n result = length + rectHeightBand[systemVar.useHeightBand]\n } else if (direction == '-') {\n result = length - rectHeightBand[systemVar.useHeightBand]\n }\n return result\n}\n// -------- cover check ----------\n\n// --- precheck vpon tag attribute ---\nconst checkInput = (vponTag) => {\n var result = {\n errMsg: '',\n adhesionPosition: false\n }\n\n var licensekey = vponTag.getAttribute(systemVar.licensekey)\n if (!checkAttributeIsGiven(licensekey)) {\n result.errMsg += 'input licensekey is empty. '\n }\n var regex = /^[A-Za-z0-9]{32}$/;\n if (!regex.test(licensekey)) {\n result.errMsg += 'input licensekey error length. '\n }\n\n result.adType = checkAdType(vponTag)\n\n var adhesionPosition = vponTag.getAttribute(systemVar.adhesionPosition)\n if (adhesionPosition) {\n if (adhesionPosition === 'top') {\n result.adhesionPosition = 'top'\n } else if (adhesionPosition === 'bottom') {\n result.adhesionPosition = 'bottom'\n } else {\n result.adhesionPosition = 'unknown'\n }\n } else {\n result.adhesionPosition = false\n }\n\n return result\n}\n\n/**\n * Check ad type\n * @param {element} vponTag vpon tag element\n * @returns {string|undefined} ad type string\n */\nconst checkAdType = (vponTag) => {\n if (vponTag.getAttribute(websdkParams.format) === null) {\n throw new TypeError(\"[Vpon-WebSDK] format attribute is null\");\n }\n\n const format = vponTag.getAttribute(websdkParams.format).toLowerCase();\n const adTypeMapping = {\n mi: [\"mi\"],\n banner: [\"320x50_mb\", \"320x100_mb\", \"300x250_mb\", \"320x480_mb\", \"970x250_mb\"],\n na: [\"na\"],\n };\n const result = Object.keys(adTypeMapping).find((key) => {\n return adTypeMapping[key].indexOf(format) !== -1;\n });\n\n if (!result) {\n throw new TypeError(\"[Vpon-WebSDK] format attribute is unable to mapping\");\n }\n\n return result;\n};\n\n// precheck vpon tag attribute 'vpon_ad_licensy_key'\nconst checkAttributeIsGiven = (attr) => {\n if (undefined != attr && attr.trim() != '') {\n return true\n } else {\n return false\n }\n}\n\n// --- precheck vpon tag attribute ---\n\n// --- check will generate ad or not ---\n\n/**\n * confirm vpon tag exist\n * @returns {boolean} result\n */\nconst checkVponTagExisted = () => {\n const vponTag = document.querySelectorAll(\"vpon\");\n return Boolean(vponTag.length);\n};\n\nconst isInCrossDomain = () => {\n try {\n window.top.document;\n return false;\n } catch (err) {\n return true;\n }\n}\n\nconst getReqAdParameters = (vponTag) => {\n\n var reqParameters = {}\n\n var adType = checkAdType(vponTag)\n if (adType == 'na') reqParameters.cover_min = vponTag.getAttribute(systemVar.nativeCoverMin) || ''\n reqParameters.format = vponTag.getAttribute(systemVar.format)\n reqParameters.sdk = systemVar.sdk\n reqParameters.bid = vponTag.getAttribute(systemVar.licensekey)\n reqParameters.adtest = vponTag.getAttribute('vpon_ad_test') == 1 ? 1 : 0\n reqParameters.adRequestCallBack = vponTag.getAttribute(systemVar.adRequestCallBack) || null // branch:requestAdCallback\n reqParameters.isRotate = vponTag.getAttribute(systemVar.isRotate) || 'true' // branch:requestAdCallback\n reqParameters.s_h = document.documentElement.clientHeight\n reqParameters.s_w = document.documentElement.clientWidth\n\n return reqParameters\n}\n\nconst arrangeReqAdUrl = (baseUrl, reqParameters) => {\n // 1. arrange reqParams\n var param_str = ''\n if (reqParameters) {\n for (var key in reqParameters) {\n param_str += key + '=' + encodeURIComponent(reqParameters[key]) + '&'\n }\n param_str = '?' + param_str.substring(0, param_str.length - 1)\n }\n // 2. combine\n var reqAdURLWithQueryString = baseUrl + param_str\n return `//${reqAdURLWithQueryString}`\n}\n\nconst queryWebApiPermission = async (name) => {\n return await navigator.permissions.query({name});\n}\n\nconst isUrl = (url) => {\n try {\n if (new URL(url)) {\n return true;\n } else {\n return false;\n }\n } catch(error) {\n return false;\n }\n}\n\nconst isVpadnEndpoint = (url) => {\n if (!isUrl(url)) {\n return false;\n }\n\n const urlObj = new URL(url);\n\n return urlObj.hostname === apiConfig.hostname;\n}\n\nconst isWebview = () => {\n const useragent = navigator.userAgent;\n const regex = '/(WebView|(iPhone|iPod|iPad)(?!.*Safari\\/)|Android.*(wv|.0.0.0))/gi';\n return Boolean(useragent.match(regex));\n}\n\nconst isInGAM = () => {\n try {\n if (window.parent.document) {\n const GAMIframeArray = [...window.parent.document.querySelectorAll('iframe[id^=\"google_ads_iframe\"]')];\n\n return GAMIframeArray.some(iframe => {\n return iframe.contentDocument === document;\n });\n } else {\n return false;\n }\n } catch(error) {\n return false;\n }\n}\n\n\n/**\n * Verify CTID format\n * @returns {boolean} Verify result\n */\nconst verifyCtid = ctid => {\n const re = /^[0-9a-fA-F]{8}\\b-[0-9a-fA-F]{4}\\b-[0-9a-fA-F]{4}\\b-[0-9a-fA-F]{4}\\b-[0-9a-fA-F]{12}$/;\n const verify = re.exec(`${ctid}`);\n\n return Boolean(verify);\n}\n\n/**\n * check vpon tag attribute format\n * @param {element} vponTag vpon tag element\n * @returns {boolean} result\n */\nconst checkVponTagAttributes = (vponTag) => {\n const vponTagAttributes = vponTag.getAttributeNames();\n if (!vponTagAttributes.length) {\n console.error(\"[Vpon-WebSDK] Vpon tag attribute is empty\");\n return false;\n }\n\n let result = true;\n\n vponTagAttributes.forEach((attribute) => {\n switch (attribute) {\n case websdkParams.vponTagAttrs.licensekey:\n if (\n !websdkParams.regex.licensekey.test(vponTag.getAttribute(attribute))\n ) {\n console.error(\"[Vpon-WebSDK] Vpon tag lincesekey is invalid\");\n result = false;\n }\n break;\n case websdkParams.vponTagAttrs.format:\n if (\n websdkParams.formatMapping.indexOf(\n vponTag.getAttribute(attribute)\n ) === -1\n ) {\n console.error(\"[Vpon-WebSDK] ad format is invalid\");\n result = false;\n }\n break;\n }\n });\n return result;\n};\n\n/**\n * Check cookie parameters is valid\n * @param {object} checkObj cookie parameter object\n * @returns {boolean} check result\n */\nconst cookieParamsValidator = (checkObj = {}) => {\n\tconst { key, value, options } = checkObj;\n\n\tif (key && typeof key !== \"string\") {\n\t\tconsole.warn(\"[Vpon-WebSDK] Key must be a string!\");\n\t\treturn false;\n\t}\n\n\tif (value && typeof value !== \"string\") {\n\t\tconsole.warn(\"[Vpon-WebSDK] Value must be a string!\");\n\t\treturn false;\n\t}\n\n\tif (options && (typeof options !== \"object\" || Array.isArray(options))) {\n\t\tconsole.warn(\"[Vpon-WebSDK] Options must be an object!\");\n\t\treturn false;\n\t}\n\n\treturn true;\n}\n\n// --- check will generate ad or not ---\n\nmodule.exports = {\n coveredBannerCheck,\n iframeViewable,\n underViewport,\n displayInViewport,\n getFrameBoundingClientRect,\n calIframeBoundingClientRect,\n coveredIntCheck,\n coveredNaCheck,\n getTransferRectWidth,\n getTransferRectHeight,\n checkInput,\n checkAdType,\n checkAttributeIsGiven,\n checkVponTagExisted,\n getReqAdParameters,\n arrangeReqAdUrl,\n currentFrameAbsolutePosition,\n isInCrossDomain,\n queryWebApiPermission,\n isUrl,\n isVpadnEndpoint,\n isWebview,\n isInGAM,\n verifyCtid,\n checkVponTagAttributes,\n cookieParamsValidator\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/vpadn-sdk-check.partial.js","let { TPL_PARAMS, VIDEO_EVENT_URL, systemVar } = require('./../vpadn-sdk-parameters.partial')\nconst { isSDKiOS } = require('../vpadn-sdk-features.partial')\nlet { isElement, VponConsole, assets, digitSet, isVponOMIDBridgeExist } = require('./../vpadn-sdk-utils.partial')\n\nclass VponVideo {\n constructor(videoContainer, videoConfig) {\n const video_area = typeof videoContainer === 'string' ? document.querySelector(`#${videoContainer}`) : videoContainer;\n if (isElement(video_area)) {\n throw new Error('[VponVideo] video container is not dom object');\n } \n let config = null;\n try {\n config = JSON.parse(JSON.stringify(videoConfig));\n } catch (err) {\n throw new Error('[VponVideo] video config is invalid');\n }\n const templateSearchParams = new URL(window.location).searchParams;\n const listeners = [];\n let isAdChoiceActive = false;\n let isPlaying = false;\n let isSendTrackingEventArr = [];\n let videoDurationTemp = 0;\n this.eventListener = {};\n const video = document.createElement('video');\n video.setAttribute('aria-label', systemVar.ariaLabel.video_view);\n\n /**\n * generate icon mute/unmite area\n * @param {String} domname tag name\n * @param {String} iconMuteSrc icon mute source\n * @param {String} iconUnmiteSrc icon unmute source\n * @returns icon area\n */\n function createIconMuteArea(domname, iconMuteSrc, iconUnmiteSrc) {\n var dom = document.createElement(domname);\n dom.style.width = \"32px\";\n dom.style.height = \"32px\";\n dom.style.position = \"absolute\";\n dom.style[config.mutePosition === 'top' ? 'top' : 'bottom'] = \"10px\";\n dom.style.right = \"15px\";\n dom.style.display = config.muteHidden ? 'none' : 'block';\n\n var img1 = document.createElement(\"img\");\n img1.src = iconMuteSrc;\n img1.id = \"icon_mute\";\n img1.setAttribute('aria-label', systemVar.ariaLabel.mute_icon);\n img1.style.width = \"100%\";\n img1.style.height = \"100%\";\n img1.style.display = \"none\";\n img1.style.position = \"absolute\";\n img1.style.top = \"0px\";\n\n var img2 = document.createElement(\"img\");\n img2.src = iconUnmiteSrc;\n img2.id = \"icon_unmute\";\n img2.setAttribute('aria-label', systemVar.ariaLabel.unmute_icon);\n img2.style.width = \"100%\";\n img2.style.height = \"100%\";\n img2.style.display = \"none\";\n img2.style.position = \"absolute\";\n img2.style.top = \"0px\";\n dom.appendChild(img1);\n dom.appendChild(img2);\n return dom;\n }\n \n const iconmuteArea = createIconMuteArea(\"div\", assets.iconMuteSrc, assets.iconUnmiteSrc);\n\n this.play = function () {\n if (isAdChoiceActive) {\n return;\n }\n const videoPlay = video.play();\n videoPlay.then(res => {\n }).catch(err => {\n if (err.message.indexOf('denied permission') !== -1) {\n const video_area = typeof videoContainer === 'string' ? document.querySelector(`#${videoContainer}`) : videoContainer;\n video_area.appendChild(playBtnAreaNode);\n }\n console.warn(err);\n });\n customTracking(this.eventListener, 'play');\n };\n\n this.onPlay = function(callback) {\n if (typeof callback === 'function') {\n video.addEventListener('play', function() {\n callback();\n });\n }\n }\n\n this.pause = function () {\n video.pause();\n customTracking(this.eventListener, 'pause');\n }\n\n this.onPause = function(callback) {\n if (typeof callback === 'function') {\n video.addEventListener('pause', function() {\n callback();\n });\n }\n }\n\n this.resume = function () {\n this.playAtPosition(0);\n this.play();\n customTracking(this.eventListener, 'resume');\n }\n\n this.mute = function () {\n video.muted = true;\n }\n\n this.unmute = function () {\n video.muted = false;\n }\n\n this.isMuted = function () {\n return video.muted;\n }\n\n this.isPaused = function () {\n return video.paused;\n }\n\n this.isEnded = function() {\n return video.ended;\n }\n\n this.playAtPosition = function (sec) {\n video.currentTime = sec;\n }\n\n this.getDuration = function () {\n return video.duration\n }\n\n this.getCurrentTime = function () {\n return video.currentTime;\n }\n\n this.togglePlay = function () {\n const method = video.paused ? 'play' : 'pause';\n this[method]();\n }\n\n this.toggleMuted = function () {\n const method = video.muted ? 'unmute' : 'mute';\n this[method]();\n }\n\n this.create = function () {\n bindVideoEvents();\n videoInit(config);\n };\n\n this.sendLinkTracking = function () {\n sendQuartileTracking(trackingUrl.link)\n }\n\n this.sendReplayTracking = function () {\n sendQuartileTracking(trackingUrl.replay)\n }\n\n this.onTimeupdate = function (callback) {\n if (typeof callback != 'function') {\n VponConsole('warn', '[VponVideo] please input callback function');\n return;\n }\n video.addEventListener(\"timeupdate\", function() {\n callback(video.currentTime);\n });\n }\n\n this.onPlayStatusChanged = function (callback) {\n if (typeof callback != 'function') {\n VponConsole('warn', '[VponVideo] please input callback function');\n return;\n }\n video.addEventListener(\"play\", function () { callback(video.paused ? 'pause' : 'play') });\n video.addEventListener(\"pause\", function () { callback(video.paused ? 'pause' : 'play') });\n }\n\n this.onMuteStatusChanged = function (callback) {\n if (typeof callback != 'function') {\n VponConsole('warn', '[VponVideo] please input callback function');\n return;\n }\n video.addEventListener('volumechange', function () { callback(video.muted ? 'muted' : 'unmuted') });\n }\n this.onMuteIconClick = function (callback) {\n if (typeof callback != 'function') {\n VponConsole('warn', '[VponVideo] please input callback function');\n return;\n }\n mutedcallback = callback;\n }\n\n this.onCanBePlay = function (callback) {\n if (typeof callback !== 'function') {\n VponConsole('warn', '[VponVideo] please input callback function');\n return\n }\n const onCanBePlayCallback = () => {\n if (isSDKiOS() ? video.readyState >= 1 : video.readyState >= 2) {\n callback();\n video.removeEventListener(isSDKiOS() ? 'loadedmetadata' : 'canplay', onCanBePlayCallback);\n } else {\n VponConsole('warn', `[VponVideo] can not play, readyState is ${video.readyState}`);\n }\n }\n video.addEventListener(isSDKiOS() ? 'loadedmetadata' : 'canplay', onCanBePlayCallback);\n }\n\n this.onVideoEnded = function (callback) {\n if (typeof callback != 'function') {\n VponConsole('warn', '[VponVideo] please input callback function');\n return;\n }\n video.addEventListener(\"ended\", callback);\n }\n\n this.onVideoViewershipListener = function (event, callback) {\n if (typeof callback != 'function') {\n VponConsole('warn', '[VponVideo] please input callback function');\n return;\n }\n\n switch (event) {\n case 'play':\n case 'pause':\n case 'resume':\n case 'quartileTracking':\n this.eventListener[event] = callback;\n break;\n default:\n VponConsole('warn', '[VponVideo] not support event listener');\n }\n }\n\n this.changeStyle = (obj) => {\n Object.entries(obj).forEach(target => {\n let selectedTarget = null;\n\n switch (target[0]) {\n case 'mute':\n selectedTarget = iconmuteArea;\n break;\n case 'countdown':\n selectedTarget = videoTimeSpan;\n break;\n case 'replay':\n selectedTarget = replayButton;\n break;\n }\n\n if (selectedTarget) {\n Object.entries(target[1]).forEach(item => {\n switch (item[0]) {\n case 'position':\n switch (item[1]) {\n case 'leftTop':\n selectedTarget.style.top = '10px';\n selectedTarget.style.bottom = 'auto';\n selectedTarget.style.left = '15px';\n selectedTarget.style.right = 'auto';\n break;\n case 'rightTop':\n selectedTarget.style.top = '10px';\n selectedTarget.style.bottom = 'auto';\n selectedTarget.style.left = 'auto';\n selectedTarget.style.right = '15px';\n break;\n case 'leftBottom':\n selectedTarget.style.top = 'auto';\n selectedTarget.style.bottom = '10px';\n selectedTarget.style.left = '15px';\n selectedTarget.style.right = 'auto';\n break;\n case 'rightBottom':\n selectedTarget.style.top = 'auto';\n selectedTarget.style.bottom = '10px';\n selectedTarget.style.left = 'auto';\n selectedTarget.style.right = '15px';\n break;\n\n }\n break;\n case 'display':\n selectedTarget.style.display = item[1];\n break;\n }\n });\n }\n });\n }\n \n this.destroy = () => {\n videoDestroy();\n }\n\n function videoDestroy() {\n const video = video_area.querySelector('video');\n video.src = '';\n video.removeEventListener('timeupdate', handleTimeUpdateFunc);\n video.remove();\n }\n\n this.triggerVideoStartCallback = listener => {\n if (typeof listener !== 'function') {\n VponConsole('warn', '[VponVideo] args is not a function');\n return\n }\n listeners.push(listener)\n }\n\n var eventsLister = this.eventListener;\n\n function bindVideoEvents() {\n video.addEventListener('abort', handleVideoAbort);\n video.addEventListener('canplay', handleVideoCanBePlay);\n video.addEventListener('canplaythrough', handleVideoCanPlayThrogh);\n video.addEventListener('durationchange', handleVideoDurationChange);\n video.addEventListener('emptied', handleVideoEmptied);\n video.addEventListener('ended', handleVideoEnded);\n video.addEventListener('error', handleVideoError);\n video.addEventListener('loadeddata', handleVideoLoadeddata);\n video.addEventListener('loadedmetadata', handleVideoLoadedmetadata);\n video.addEventListener('loadstart', handleVideoLoadstart);\n video.addEventListener('pause', handleVideoPause);\n video.addEventListener('play', handleVideoPlay);\n video.addEventListener('playing', handleVideoPlaying);\n video.addEventListener('progress', handleVideoProgress);\n video.addEventListener('ratechange', handleVideoRatechange);\n video.addEventListener('seeked', handleVideoSeeked);\n video.addEventListener('seeking', handleVideoSeeking);\n video.addEventListener('stalled', handleVideoStalled);\n video.addEventListener('suspend', handleVideoSuspend);\n video.addEventListener('timeupdate', handleVideoTimeupdate);\n video.addEventListener('volumechange', handleVideoVolumechange);\n video.addEventListener('waiting', handleVideoWaiting);\n }\n\n function handleVideoAbort() {\n VponConsole('warn', '[VponVideo] video was aborted');\n return false;\n }\n\n function handleVideoCanBePlay() {}\n \n function handleVideoCanPlayThrogh() {}\n\n function handleVideoDurationChange() {}\n\n function handleVideoEmptied() {}\n\n function handleVideoEnded() {\n util.track();\n if (config.loop === true) {\n video.play();\n }\n }\n\n function handleVideoError() {\n VponConsole('warn', '[VponVideo] video was error');\n return false;\n }\n\n function handleVideoLoadeddata() {}\n\n function handleVideoLoadedmetadata() {}\n\n function handleVideoLoadstart() {}\n\n function handleVideoPause() {\n if (!video.ended) {\n if (window.vponOMIDBridge !== undefined && window.vponOMIDBridge.videoEvents !== undefined) {\n VponConsole('log', '[VponVideo] fire vponOMIDBridge.videoEvents.pause()');\n window.vponOMIDBridge.videoEvents.pause();\n if (vponOMIDBridge.isSupportOMEventOccur !== undefined && vponOMIDBridge.isSupportOMEventOccur) {\n VponConsole('log', '[VponVideo] fire omEventOccur.');\n fireOMEventOccur(vponOMIDBridge.deviceType, 'pause', vponOMIDBridge.sessionId)\n }\n }\n }\n\n if (isSendTrackingEventArr.indexOf('videoPause') === -1) {\n isSendTrackingEventArr.push('videoPause');\n sendQuartileTracking(trackingUrl.pause);\n }\n }\n\n function handleVideoPlay() {\n if (playBtnAreaNode) {\n playBtnAreaNode.remove();\n }\n\n if (video.currentTime !== 0) {\n if (window.vponOMIDBridge !== undefined && window.vponOMIDBridge.videoEvents !== undefined) {\n VponConsole('log', '[VponVideo] fire vponOMIDBridge.videoEvents.resume()');\n window.vponOMIDBridge.videoEvents.resume();\n if (vponOMIDBridge.isSupportOMEventOccur !== undefined && vponOMIDBridge.isSupportOMEventOccur) {\n VponConsole('warn', '[VponVideo] fire omEventOccur.');\n fireOMEventOccur(vponOMIDBridge.deviceType, 'resume', vponOMIDBridge.sessionId)\n }\n }\n }\n\n if (isSendTrackingEventArr.indexOf('videoPlay') === -1) {\n isSendTrackingEventArr.push('videoPlay');\n sendQuartileTracking(trackingUrl.play);\n }\n }\n\n function handleVideoPlaying() {\n if (video.poster && isSDKiOS()) {\n video.removeAttribute('poster');\n }\n }\n\n function handleVideoProgress() {}\n\n function handleVideoRatechange() {}\n\n function handleVideoSeeked() {}\n\n function handleVideoSeeking() {}\n\n function handleVideoStalled() {}\n\n function handleVideoSuspend() {}\n\n function handleVideoTimeupdate() {}\n\n function handleVideoVolumechange() {\n \n }\n\n function handleVideoWaiting() {}\n\n // Draw play button area\n function generatePlayBtnArea (poster) {\n const playBtnArea = document.createElement('div');\n playBtnArea.id = 'playBtnDiv';\n playBtnArea.style.width = '100%';\n playBtnArea.style.height = '100%';\n playBtnArea.style.position = 'absolute';\n playBtnArea.style.top = \"0px\";\n playBtnArea.style.zIndex = '9999';\n // It's current white poster, need to change to black ??\n playBtnArea.style.backgroundImage = poster ? poster : 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAApsAAAF3AQMAAADQMhJDAAAABlBMVEUAAAAAAAClZ7nPAAAACXBIWXMAAA7EAAAOxAGVKw4bAAADh0lEQVR4nO2YsW7bMBCGqQqwloBaMwhyH8GjBqN+FT2CxgxBrUfTA/QhWHToVmj0EITlHU+kLBm1GGcq/g+JIonmh6N4OtJRCgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwB0qOmTDjZabNzdR2Is7nm3vfq290lirVOluXtyH7HuKdE8fz6w1K2lBlx+Tfle1628yQxdXA973+cgnjSpSjI6L+uIG2auvLO1nLUdqJA5Kpzl9hLVc5XPpgb2OLlWaDxKUv1q0cmaoNlVacGwv09Wi1ctMspSP3ZVkIXWzlyidYvE8LVp3LO1TpdfvU7Vo5XHkD0qfb0rXj+UOrAnp2dySFslS1oT0PNyS7pKlrAnp2S1aeaL0egKTpO100vs/HOFTspRjCzlv6DDEmWNp9aB0EHMuUpY9J0tbOuzkwgfYTS+vJFyTLs3eSbo3LO1FUkor58Zh/VLcwexdedeZfaMLn1pVLIWdHFKl52JUuhjPLOVbOpRCX2xbJ/VnW/k5urqn9/4p+gkrQin0j9b5qpNNkf4a1DeljyqnUPyEuYfg1ya3fhGDky7W2Tv8plnR7rGRx7+N2SCDtaO/dGugycYE6R8arjZ+TiRzjKSpSHsnjYvDFn7QcJ8Gnz0yyZ2kacYPklKijsvYFi70+rgVmjuJtJnStBhUKGH1qus/pRlLSSjltAoCGr+8wynVb6RsLCUSkeow1CZKUzYpFAtLKRKp0UWYFAp/ly419KtFKjU6D+kzNaj1PmOztPX34jtJNyXPrnZEG6Qt9d2psPznQUpjrj4m7bT0F1kRhv8Z0sHfK8NKTabnx6TTylSH8kmm5nOkx5DoD0iniZr6vYScpDtdPH1EOgbBB6XUxVBkOuR3ZsKGjUztY1IZtaumZiY1nyJ11XTaU1HsJp5uhebWUBQ6lI4ybilnyZtSUBrKJJJWoXTUcZ2f5VmK9MjSYS49xopcLvZqG6loCqhjE+J7iWHpOEEpUj8/Zr65GaOpjqcpO5+Sf0b+8f2omoYXNkpTVlOXPzWNmFQy5yQkUxufxCFt3XcF+VW5nQ+txovvJq+KtiWFDzNph6LeaEUqh5NaSU99OYh0P9Dpds7W0D8h6B8Pi+8mhbW9zHphk3Z9quSP87Zp+YWHd8I6ngIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwH/FX4Ok7MIGd0maAAAAAElFTkSuQmCC';\n playBtnArea.style.backgroundSize = 'cover';\n\n const playBtn = document.createElement('img');\n playBtnArea.id = 'playBtn';\n playBtn.src = 'data:image/png;base64,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UmVhZHlxyWU8AAADJWlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS42LWMxNDggNzkuMTY0MDM2LCAyMDE5LzA4LzEzLTAxOjA2OjU3ICAgICAgICAiPiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtbG5zOnhtcE1NPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvbW0vIiB4bWxuczpzdFJlZj0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL3NUeXBlL1Jlc291cmNlUmVmIyIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgMjEuMCAoTWFjaW50b3NoKSIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDpFREFCMDE5REM3OTQxMUVDOUY5QzlGNkZEOTcxN0E1QiIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDpFREFCMDE5RUM3OTQxMUVDOUY5QzlGNkZEOTcxN0E1QiI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOkVEQUIwMTlCQzc5NDExRUM5RjlDOUY2RkQ5NzE3QTVCIiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOkVEQUIwMTlDQzc5NDExRUM5RjlDOUY2RkQ5NzE3QTVCIi8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+JmED4AAAELhJREFUeNpiZsAPHICYG4hfY5NkxCI2E49hr4C4FpfmmQzEgXR0zcRqhBvAhEujubk5PwHN7Iw4NLPevXvXF8RQVlZeh0s3EyG3AQ0JAmFcmu2J8SDIgDt37gSia35FbAipqqgeROazAPF1IjSd/ff/30OS/Pzhw4ffoADDphE5npuAWBw9xIH4NzHxXIdF8jch71AtecIAGxBPxqcJBgACCB8AZUV3UpxNyOnpuDQT699iIP6CHM/dJGTFXvREwoeejgkYMBOmeSapuYmkLBkcHCyBzXZGbDbjshG9YGAiNpSeP3/+E12MhRiNQBs3Y0nr/0GaT4LKO2yaVJRVDv5n+P8Wh5kZWAtAJgZG6X8M/58Syhzkltvp6AGWRYpGdM1/CWS5z+jyAAHESKRtIHUziFQLioB5pJZCyKAbPb+QCdKpUY5QArKB+A+l5S7FIcBIQhwyAfN4ALziU1Vd/+/fv//kWs5Igk/hrQx08PXr1196enpbSLD4AAu0QqEIcHNzsyGXePiaP7A2JchiW2pHIswRQAdsAFL/sKkBWbwDiAOpZamqssoJYLn3HFSq4lPHQqlFdbV1D5YtW3oTaMtXErTlsCAlcUIJ7D+ar17gCkYCANQc+E3vfLwclKJxlVw8yG0NahccxFYSlIbAUiA+RGolgQ2EArELDjlQfOcD8S9iDAIIIEYyfaINxDJADGrVnIG1H0kBxFqchKuRg61hQygPE2NxMxCLUbMeJsZiamQtUJOnhFiLQZVGHy2zEjaLQSXZVFo2AHC1y2llKUZniYmOxSUfNovZCemKi4uTvnnzpj+Fls9Ej2OCvkVuYbx79+6bqanpDjItB+dzJnJ0CgkJcYEcUlJSokSG9hmwoA4jN9wyMzMNQA5gY2Mj2QMgDc6Upprr168HENErJ62DTWojb+vWrXZEKOVlonae0dDQEAE5gIWFBV9xbMxEq0x74MABDzzSHCy0sBTYGDxDoGv/mKo+Listu6eirLwDaOkjaGcdF7jKAm2yUOSAV69e/bKytDr2n+H/O2L1gCzOA+IpFPYcSG5jszAQMXiJDairqp378+/vUzL0n0bOxx+J1dXa0voIGI+7gJY+INPRc9AbAjPxt5EYhSD9GOLjEVtyYIDOUjAjCYJ8rYdH03copgQUYSsyD9Nj7ANXWZ1OI0tLiG3eUrMZlIWtMGHGoXgLEXFObPD+J7cLQ84IXx60X0WVThtoimUSnuJ1PxCvINYwgABipFFiAk2sgFokDmTY8R86arCeUKiRA6jhYVCTvBXUmqFxMQDq/1VTGgjkehjUnItmGFiwDIgP0tLDoJJmGsPgBCgj8JR6GJRUexiGBiiBJn2yPTyTYWiCdHzJFBuwhRYQQxWAZk1A44wPiIlhbMsNhipAWXSDzcNUmUdEHxX48+fPXxsbm22vX7/+PQCeBsV0MTYPkzIijLcbBvSwHz4Fly9ffhkQEHCUjp4+BcRzkT3MSkkHFb0piGvmERcICwvbc/bs2U809nQOA9Jk03QG6o03kexhZHDs2LEnsbGxp2jgYVCTNYMFR4dtwICVlZUMMMBkoHn/n6mp6ZZPnz79oYLRjDCPag7WIpaFhYXp/PnzfrD1Rjk5OQoUGqkN8jVosC+Qiu6kKEkTC4hYAIANrGeiwggKXcGG9etfqyqrHCKz4/MDlIdBs59Rg9WD//79Y7Cxtrn0+tWrT/8Z/n/8T1n38CzIw18Hmyd37NjxLjc75w7QcyBPgtz3l1p9algpvZeBCnMvZNcX//8zONg7XHr29OlnaCz+oIE1B8AFIZSzit4e3r9v3/u01LTbQM+BPPmFirGICyxH9jCsS0XT7qCbq+uV+/fuf0TKi//pFL4Z8KoOTSKXAfeqZqJT6NWrVz9pa2vzQfPiXWhepEcsYgN5yAFLq5FpRmij5i/DwAKMgQAmPAopacz/H2DPfmIgYakrSuuOgbZrQGgB8A7oEdtaocUyH2qDImLaFOQ0z6i1uppaSbeU5C4TBYCSZWzkAoxxKnp6GB0kArEFlc0ELfifT606m5GOMQMqB+SBWBiIuaBi34AYtEXkIb3a9AAB2DvfkCbCOI4/21xEGUklMtBo0GakK9qYgpabpJWhwmy+VSEhCISC3kgEQRH6yvWmd0LUG7E3vizYm8JqaRRzQrWtXLoZUoRaWCjben7rzvTcndv9ee457Qe/N+52dx/v7vl33+9vJIEP4jThLEL/XGbzOEHmPU3qJJQCrmQWFUpFfHcWpr04g7QDW9BfGbNRxn3CXQAvw8M0AYMZsI3A3QgvyB+rCXyMGdWQDlBtviUJDN/x4dyp4oADFgiuiOmqDHlub8V5B8ngj5EYcPxmnBGmW1PkCnfirKFwDP0S5325ga8z/SitMYPztly39E2R/SnJgMoGDpSDyGUz4Ks4zRqZB+9hxgIBscDgk3IhbcUBpgX/xLeBXuC/1Y60Ge1C83US8lK14lKuV/gy2hrRkwswPNPHtwhwZbYBEhe4T44jhcPhjL9ncHDQrjJ0nxCwEcmwOOfxeEwGgyGzX7fbfQjABwYGbCp2VUY+YFmUd3a7fYOorbW11QLg3d3dZSpA3+ADNskyqi8o4O3be3t7nQDucDhILvOWZAOuIrmKMjw83DAxMdEsxkQoMqq5wB2k7zOoUgHmxZGRkVoCh+vgAhtValSQzWYrkeBZzWf+vAqs5srFaoBXNhqNtpnNZqXOZxcLXIcoCZ1Oh/x+//lAIHBWgd3XscBViLIoLi7eDbd5f39/hYy7dbLAZYjS8Hq95QDudDrl6MZKhaaHVMXQ0FBDMBhs1uv1ktfRNQEMUVhYuCMSiXh8Pp9tWwCz0dLSYnG5XPu3DTDE6/Hx5W0BnEwm044T9jdLS0srWx4YyhscsZYHFhYX5qRoMQtoB5VbWQvAMzT2xVCfs+7kqUlGfApqHam+hzgLPEYTMAjC6931ICWWQxC+NlZLTDyjBRYq7pVbrIFEIv4lhdLf0vI6xJ+yV/i32qCEtNO/1jZaK2rMiaHOS21NbSidTv9knlOlvIkr3Fb6Ac6LpEBB8t/Y0Bj6HIstEhKLP+T2w2OkYKHMjPWwJRCLTc3i5/Qr06cqrYx/la0fBoGYSakjPh8dXejq7PpA0OPAxhzfwANKU0h2mCbiiXWNIBSFr3ZWhZKp1A+Fn1O+uLVuVYXzoWRpsA7p9kY/Rk+DUbLpXNO72NTUvAqmDjY21H7kAksuXaHL/HCCDqZvKQyKr2qmO0ghdWKDOp47eYDnSpLGEa4kbozmIJmSvWrBhrINR/+/EGfimsZheW0BfC++lpmhWIUGYR8hgd8hEVoAAAPme43Bwvn6hTbYTKcFmic7osfFIhQgLN9UwZCLEg+mVSAVLqIYdpo7wJACDAE1AqHyIY16yxcoD4Noviv5FspacKgxn5c9QOyri7tIowJxKe9qQAfVowLsPSmjQTlMHmdwXiAACnU7nkjdiRZsPPD4ROTaoVJGraPMVRcjLIf1Y7DsTCpxYiSteKXMisq+NX/7zqy0xEmdxB8B2ju7mLbKMI6/TlazCtOageCCDiWZ0TC4mLosS1CcySABWWpiYoYJ7AI1ukQvuDAkAhHCmIAZH14QS8yIAZMqd164ABcEuSFhSCuzMGP4WHWGbqkc2kNHPf/2PebY9dCWfr2n5/0nJxlbE87pb897nvfj+T+pfOBE65B0PUu/yKP0OhLn2wOj/9/StU4vgLhFNGbfoyXAgIXTzCdJ0AXrIAP3tEMnY3PSNU8Y2MfQCmDAQ235G0SbJpNYDP6Jzi93OODggjhqhCpJ8n2a0yGsD6P2d4rEv7GtGcAmEnRmO0H0JywZo9uYK9MAIzrf1SlUNWGK8A2Jz9sp7YDP0rnSAc5TVbt0Toh3t18LgJH1vi9dz3N2MQu7B9jME1gEjFJ0rB4+xTnFLSyE9JIY2jIlEzAWG2C7Xsi5JFw4+or9he10AWbVviTTFJdP3H4AY5X9E548pTwZw7D9WzIB47Mf8OlO2qdX/bFEc7SAsUDRQhipttW5sPbdSoI7UxEVzakOROynRANFPjpRFl1jwE6XM17AcMavZ+XJUB9fXV2dV1xcbESBxPb29q6OQaPiG2ewb+13iE6VIWdEZWdnZ83MzJyD9UXov/klTU9Pr7a3t9sdDoegQ9Cwsf0xVsBogneBkQd4qKmp6XhjY+ML0XxYEARxdHT0Znd394rH49FLhI8QlQbKB1SmQRcYuvmHTSbTo9F+2Gg0GhoaGkpsNlvAwWtqaur1mpqavAwHDF7HowGMLPkSgw+w7wWZwsLCx3p7e88AtjSE18ISIjc392AGQv4o3CwnFDAaOxoyBe4DDysJFhizs7PVAC69u8+azeb8DAGM/7QX9wKMk7+lREcqKCg43NXVdVqO7v7+/lKNRzemtCVqgGv1PLlEdFdWVj4nRzfe3dLPRzT4KOdDJ80QTizyHaGQd7cU0QE7NVEUfWNjYzc7OzsdGsjMcXwYpYM2ZQSf4kjVZTAYsurq6l6UM3Or1Xq6pKQkm+FbPhUawaUcY/QqKyvLHx8fDyRnLpdLGBgYWBweHl5j6BZPKN/BqBo8xLHtT9Ic3djc3PyynKj19fWxkKhhuvSMDPhJjilxiVpVVdV/idr169dfq6ioeCJNt5MvAzZxNMlRUVGRaWho6FXAtlgsJ1M9uMiA+cmMFKi8vPxps9mcyj4+j8hJ1i7/+pOrjY0N78X6Brtj2XGXBlQqvnOvDNjFESRe8/Pz7tbPWlYXFxfhsOTxE79A7d9SFVAuGbCT44hfgiDcH7ZYnIODg3+KXhHVhV4Jqocao91Pw0jplAHj/O02nyrFroWFhX86Pm9fm5ubQyXhTjBCA1B9FKo/TbeGkeIP5ULHDcJXsyJ/ax7P7si1a86+q31OatktRyncxXwM5TML8h9kwLMccHjZ7fattpbWVQajdC/NhgL+lTDqEp7mKPXRBInFKFUTvEVsoYAhlDFe0iPUpaUloaO9Y+3nmZl7iiiVht+AFQOrUaqmH5Q/KAHb6Ls44zceRFHc/W5s7K+e7p7bbrd7h0apl2a8WojSvd69v6gBhiwk6KVsyDSoy8vLQltrG6IUVfViEGZg6NVilIYTnuPr0L/MCpNeXyXaN9lVRqlTilIxZF6q5ShV0wAJY+kUrhwFPno4Z8vM0dmtra2oXGpWVlaEy52X1ycnJu5laJSqaYSoGCmr1RvhEDXaHbJQ2eCfnJjcrK+vf6Cfpc/n839vtd65cuWL23ddLq8cpRTuDtHHOvs4UTn0DkU6klohXW+n+QHQ0M+Yk53z+Ju1tXnSNEYCPuHe3Nz00ozXSzNeMcOjNJxggb6nK3g0Z45xDPNDBiAb6IiDe/YpFhr0uhsWldEwrw/W4FoMZRHVLiCv8NfePHeQJKHCXykUp31Mom8JwBW/UuLREao66TrDv/ukK+UuO0phDxkGaMc4h4QL3VV6SBp9spQ6TEEf5VziFnoEfUkYcboLFbLs90iw1okrNsGr8iuSYAf5ZLrNwsDlLcKP5UZKnqyRFitYBSwrhyZkvP7p/9MddDN2J/sXpdrxHS3j3tEpbED9lmSg47ua5J4N54g2GiTGKkQn7I3QD1E3PRsiAX+FBF3ctOg7DZ9ntDHlXVdizMqx2fESzcxZOGkCeHYS7Jt0g/C+SUmFf4wE65uVnc/iOcAPWHfoXHSdLjb8zjpELh3rXz+Gkb/9kEOjAAAAAElFTkSuQmCC';\n playBtn.style.position = 'absolute';\n playBtn.style.top = '50%';\n playBtn.style.left = '50%';\n playBtn.style.transform = 'translate(-50%, -50%)';\n playBtn.style.zIndex = '9999';\n \n playBtnArea.appendChild(playBtn);\n playBtnArea.addEventListener('click', function (e) {\n e.stopPropagation();\n playBtnArea.remove();\n video.play();\n });\n\n this.clickPlayButton = (callback) => {\n playBtnArea.addEventListener('click', function (e) {\n if (typeof callback === 'function') {\n callback();\n }\n });\n }\n\n return playBtnArea;\n }\n\n\n //--\n var trackingTimes = {}\n var trackingTimesArray = [];\n var OnceArray = [];\n var mutedcallback = \"\";\n var playBtnAreaNode = generatePlayBtnArea.call(this, config.poster);\n\n function switchmuteicon(iconmuteArea, h) {\n if (h.muted == true) {\n iconmuteArea.children[0].style.display = \"none\";\n iconmuteArea.children[1].style.display = \"block\";\n h.muted = false;\n } else {\n iconmuteArea.children[0].style.display = \"block\";\n iconmuteArea.children[1].style.display = \"none\";\n h.muted = true;\n }\n }\n function videoInit(config) {\n if (!config.src) {\n VponConsole('error', '[VponVideo] please input video src');\n return false;\n }\n video.preload = 'metadata';\n video.poster = config.poster ? config.poster : assets.videoPosterSrc;\n video.src = config.src;\n video.loop = false;\n video.muted = true;\n video.autoplay = false;\n video.style.width = '100%'\n video.style.height = '100%'\n\n //detect ad container hide\n window.addEventListener('message', function(e) {\n if (e.data.event === 'destroy') {\n videoDestroy();\n }\n\n if (e.data.event === 'adChoiceActive') {\n isAdChoiceActive = true;\n video.pause();\n }\n\n if (e.data.event === 'adChoiceInactive') {\n isAdChoiceActive = false;\n video.play();\n }\n });\n\n video.setAttribute(\"webkit-playsinline\", \"webkit-playsinline\");\n video.setAttribute(\"playsinline\", \"playsinline\");\n video.setAttribute(\"x5-playsinlin\", \"\");\n video.setAttribute(\"x-webkit-airplay\", \"allow\");\n const video_area = typeof videoContainer === 'string' ? document.querySelector(`#${videoContainer}`) : videoContainer;\n video_area.classList.add('omid-element');\n video_area.appendChild(video);\n if (config.showmuted !== false) {\n video_area.appendChild(iconmuteArea);\n iconmuteArea.addEventListener(\"click\", handleIconMuteAreaClick);\n iconmuteArea.children[0].style.display = \"block\";\n }\n }\n\n function handleIconMuteAreaClick(e) {\n e.stopPropagation();\n e.preventDefault();\n switchmuteicon(iconmuteArea, video);\n if (OnceArray.indexOf(\"trackingTimesArray\") == -1) {\n sendQuartileTracking(trackingUrl.changemute);\n OnceArray.push(\"trackingTimesArray\");\n }\n if (mutedcallback) {\n mutedcallback();\n }\n }\n\n function handleTimeUpdateFunc() {\n if (video.poster && isSDKiOS()) {\n video.removeAttribute('poster');\n }\n if (playBtnAreaNode) {\n playBtnAreaNode.remove();\n }\n util.track();\n handleTimeUpdate();\n }\n``\n function customTracking(eventListener, event, ret) {\n if (eventListener.hasOwnProperty(event)) {\n const listener = eventListener[event];\n listener(ret);\n }\n }\n\n const track = function () {\n let videoLeftTime = 0;\n if (!video.duration) {\n videoLeftTime = Math.floor(videoDurationTemp - video.currentTime)\n } else {\n videoLeftTime = Math.floor(video.duration - video.currentTime);\n videoDurationTemp = video.duration\n }\n sendVideoTrackings(eventsLister, videoLeftTime)\n }\n\n function sendVideoTrackings(eventsLister, videoLeftTime) {\n if (trackingTimesArray.length > 0) {\n trackingTimesArray.filter(function (trackingTimesElement) {\n return videoLeftTime <= trackingTimesElement.time\n }).map(function (missDeliverElement) {\n sendVideoTracking(eventsLister, missDeliverElement.time)\n })\n\n trackingTimesArray = trackingTimesArray.filter(function (trackingTimesElement) {\n return videoLeftTime > trackingTimesElement.time\n })\n }\n }\n\n /**\n * Send tracking by trackingUrls.\n * @param {Array} trackingUrls\n */\n function sendQuartileTracking(trackingUrls) {\n if (typeof window.navigator.sendBeacon != \"undefined\") {\n for (let i in trackingUrls) {\n if (trackingUrls[i]) {\n navigator.sendBeacon(trackingUrls[i] + '&r=' + video.currentTime);\n }\n }\n } else {\n for (let i in trackingUrls) {\n if (trackingUrls[i]) {\n const trackingSender = createTrackingSender();\n trackingSender.src = trackingUrls[i] + '&r=' + video.currentTime;\n }\n }\n }\n }\n\n function createTrackingSender() {\n const trackingImg = document.createElement('img')\n trackingImg.width = '0px'\n trackingImg.height = '0px'\n trackingImg.style = 'display:none'\n document.body.appendChild(trackingImg)\n return trackingImg\n }\n\n var util = {\n track: track,\n };\n\n function getVideoEventUrlByEvnt(event) {\n if (config.track !== undefined) {\n const adid = config.track.adid ? config.track.adid : '';\n const bid = config.track.bid ? config.track.bid :\n templateSearchParams.has(TPL_PARAMS.LICENSE_KEY) ? templateSearchParams.get(TPL_PARAMS.LICENSE_KEY) : '';\n const uid = config.track.uid ? config.track.uid :\n templateSearchParams.has(TPL_PARAMS.UID) ? templateSearchParams.get(TPL_PARAMS.UID) : '';\n const vpadnSid =\n templateSearchParams.has(TPL_PARAMS.SESSION_ID) ? templateSearchParams.get(TPL_PARAMS.SESSION_ID) : '';\n const vpadnSeq =\n templateSearchParams.has(TPL_PARAMS.SEQUENCE_ID) ? templateSearchParams.get(TPL_PARAMS.SEQUENCE_ID) : '';\n const clid = '1.' + bid + '.' + vpadnSid + '.' + vpadnSeq;\n const vid_tid = config.track.trackid ? config.track.trackid :\n templateSearchParams.has(TPL_PARAMS.VIDEO_TRACKING_ID) ?\n templateSearchParams.get(TPL_PARAMS.VIDEO_TRACKING_ID) : '';\n const e = config.track.e ? config.track.e : templateSearchParams.has(TPL_PARAMS.PARAM_E) ? templateSearchParams.get(TPL_PARAMS.PARAM_E) : '';\n let eventMapping;\n switch (event) {\n case 'start':\n eventMapping = '__vpad_a_start';\n break;\n case 'firstQuartile':\n eventMapping = '__vpad_a_firstquartile';\n break;\n case 'midpoint':\n eventMapping = '__vpad_a_midpoint';\n break;\n case 'thirdQuartile':\n eventMapping = '__vpad_a_thirdquartile';\n break;\n case 'complete':\n eventMapping = '__vpad_a_complete';\n break;\n case 'replay':\n eventMapping = '__vpad_a_replay';\n break;\n case 'link':\n eventMapping = '__vpad_a_link';\n break;\n case 'changemute':\n eventMapping = '__vpad_a_changemute';\n break;\n case 'progress':\n eventMapping = '__vpad_a_progress';\n break;\n case 'play':\n eventMapping = '__vpad_a_play';\n break;\n case 'pause':\n eventMapping = '__vpad_a_pause';\n break;\n }\n var videoEventUrl = new URL(VIDEO_EVENT_URL);\n var baseVideoEventParams = new URLSearchParams({\n t: 'event',\n tid: vid_tid,\n ec: '__vpad_c_vid',\n el: vid_tid,\n clid: clid,\n ad: adid,\n uid: uid,\n e: e\n });\n videoEventUrl.search = baseVideoEventParams;\n videoEventUrl.searchParams.append('ea', eventMapping);\n VponConsole('log', videoEventUrl.toString());\n return videoEventUrl.toString();\n } else {\n return \"\";\n }\n }\n\n var trackingUrl = {\n \"start\": [getVideoEventUrlByEvnt('start')],\n \"firstQuartile\": [getVideoEventUrlByEvnt('firstQuartile')],\n \"midpoint\": [getVideoEventUrlByEvnt('midpoint')],\n \"thirdQuartile\": [getVideoEventUrlByEvnt('thirdQuartile')],\n \"complete\": [getVideoEventUrlByEvnt('complete')],\n \"replay\": [getVideoEventUrlByEvnt('replay')],\n \"link\": [getVideoEventUrlByEvnt('link')],\n \"changemute\": [getVideoEventUrlByEvnt('changemute')],\n \"progress\": [getVideoEventUrlByEvnt('progress')],\n \"play\": [getVideoEventUrlByEvnt('play')],\n \"pause\": [getVideoEventUrlByEvnt('pause')]\n };\n\n function setTrackingTimes(videoTotalTime) {\n trackingTimesArray = []\n trackingTimes['start'] = {\n time: digitSet(Math.floor(videoTotalTime * (4 / 4))),\n tag: 'videoStart',\n }\n trackingTimesArray.push(trackingTimes['start'])\n trackingTimes['first'] = {\n time: digitSet(Math.floor(videoTotalTime * (3 / 4))),\n tag: 'videoFirst',\n }\n trackingTimesArray.push(trackingTimes['first'])\n trackingTimes['mid'] = {\n time: digitSet(Math.floor(videoTotalTime * (2 / 4))),\n tag: 'videoMid',\n }\n trackingTimesArray.push(trackingTimes['mid'])\n trackingTimes['third'] = {\n time: digitSet(Math.floor(videoTotalTime * (1 / 4))),\n tag: 'videoThird',\n }\n trackingTimesArray.push(trackingTimes['third'])\n trackingTimes['end'] = {\n time: digitSet(Math.floor(videoTotalTime * (0 / 4))),\n tag: 'videoEnd',\n }\n trackingTimesArray.push(trackingTimes['end'])\n let progress = config.track && config.track.progress ? config.track.progress : templateSearchParams.get(TPL_PARAMS.PROGRESS)\n if (progress && progressValidate(progress, videoTotalTime)) {\n trackingTimes['progress'] = {\n time: digitSet(progressValidate(progress, videoTotalTime)),\n tag: 'progress'\n }\n trackingTimesArray.push(trackingTimes['progress'])\n } else {\n trackingTimes['progress'] = {\n time: null,\n tag: 'progress'\n }\n VponConsole('warn', '[VponVideo] no have progress');\n }\n }\n\n /**\n * 驗證progress參數格式\n * @param {string} progress - 擷取progress參數\n * @param {number} videoTotalTime - 影片總長度(單位:秒)\n */\n function progressValidate(progress, videoTotalTime) {\n let time = null\n if (!progress) {\n return false\n }\n\n if (progress.indexOf('%') !== -1) {\n //格式為百分比\n if (isNaN(parseFloat(progress))) {\n return false\n }\n time = parseFloat(progress) < 0 ? String(videoTotalTime) : parseFloat(progress) > 100 ? '0' : String(videoTotalTime - (videoTotalTime * parseFloat(progress) / 100));\n } else {\n //格式為時:分:秒\n let progressTimeArr = progress.split(':');\n let progressTime = videoTotalTime - (parseFloat(progressTimeArr[0]) * 3600 + parseFloat(progressTimeArr[1]) * 60 + parseFloat(progressTimeArr[2]))\n if (isNaN(progressTime)) {\n return false\n }\n time = progressTime < 0 ? '0' : progressTime > videoTotalTime ? String(videoTotalTime) : String(progressTime);\n }\n return time\n }\n var MoatApiReference;\n if (window.support && typeof support.isInWeb === 'function' && support.isInWeb()) {\n this.initialMoat = function (ids, duration, partnerCode) {\n const video_area = typeof videoContainer === 'string' ? document.querySelector(`#${videoContainer}`) : videoContainer;\n const c = video_area\n const l = config.src\n MoatApiReference = initMoatTracking(ids, duration, partnerCode)\n function initMoatTracking(d, e, k) { var g = document.createElement(\"script\"), a = []; d = { adData: { ids: d, duration: e, url: l }, dispatchEvent: function (b) { this.sendEvent ? (a && (a.push(b), b = a, a = !1), this.sendEvent(b)) : a.push(b) } }; e = \"_moatApi\" + Math.floor(1E8 * Math.random()); var f, h; try { f = c.ownerDocument, h = f.defaultView || f.parentWindow } catch (b) { f = document, h = window } h[e] = d; g.type = \"text/javascript\"; c && c.insertBefore(g, c.childNodes[0] || null); g.src = \"https://z.moatads.com/\" + k + \"/moatvideo.js#\" + e; return d };\n }\n }\n \n function triggerMoatEvent(eventType) {\n var adVolume = Math.floor(video.volume)\n if (video.muted === true) {\n adVolume = 0\n }\n var videoEvent = {\n type: eventType,\n adVolume: adVolume\n }\n if (MoatApiReference === undefined) {\n return\n }\n MoatApiReference.dispatchEvent(videoEvent)\n }\n\n // 在 OM SDK 架構下,打出 Impression, start, firstQuartile... 等等四分位報表時的 callback,告知 Native 已經打出 Tracking\n function fireOMEventOccur(deviceType, eventType, sessionId) {\n switch (deviceType) {\n case 'a':\n _vpon_android.omEventOccur(JSON.stringify({\n eventType,\n sessionId\n }))\n break;\n case 'i':\n window.webkit.messageHandlers.omEventOccur.postMessage(JSON.stringify({\n eventType,\n sessionId\n }));\n break;\n default:\n VponConsole('log', '[VponVideo] Can not parse arguments of device type.');\n }\n }\n\n const viewableDetectionListener = () => {\n const options = {\n root: null,\n rootMargin: '0px',\n threshold: [0.5, 1]\n }\n const callback = entries => {\n entries.forEach(entry => {\n const viewPercent = parseInt(entry.intersectionRatio * 100)\n for (let listener of listeners) {\n listener(viewPercent);\n }\n })\n listenDOM.unobserve(document.querySelector('body'));\n }\n const listenDOM = new IntersectionObserver(callback, options)\n listenDOM.observe(document.querySelector('body'))\n }\n\n function sendVideoTracking(eventsLister, videoLeftTime) {\n let stateArr = checkVideoTimeState(videoLeftTime)\n\n stateArr.forEach(item => {\n if (isSendTrackingEventArr.indexOf(item) === -1) {\n isSendTrackingEventArr.push(item)\n switch (item) {\n case 'videoStart':\n var muted = video.muted ? 0 : 1\n if (config.track && Object.keys(config.track).length !== 0) {\n sendQuartileTracking(trackingUrl.start)\n }\n customTracking(eventsLister, 'quartileTracking', 0)\n triggerMoatEvent('AdVideoStart')\n try {\n viewableDetectionListener()\n if (window.vponOMIDBridge !== undefined && window.vponOMIDBridge.videoEvents !== undefined) {\n VponConsole('log', '[VponVideo] fire vponOMIDBridge.videoEvents.start & vponOMIDBridge.adEvents.impressionOccurred()');\n window.vponOMIDBridge.videoEvents.start(video.duration, muted);\n window.vponOMIDBridge.adEvents.impressionOccurred();\n if (vponOMIDBridge.isSupportOMEventOccur !== undefined && vponOMIDBridge.isSupportOMEventOccur) {\n VponConsole('warm', '[VponVideo] fire omEventOccur.');\n fireOMEventOccur(vponOMIDBridge.deviceType, 'impression', vponOMIDBridge.sessionId)\n fireOMEventOccur(vponOMIDBridge.deviceType, 'start', vponOMIDBridge.sessionId)\n }\n }\n } catch (error) { VponConsole('warn', error) }\n break\n case 'videoFirst':\n if (config.track && Object.keys(config.track).length !== 0) {\n sendQuartileTracking(trackingUrl.firstQuartile)\n }\n customTracking(eventsLister, 'quartileTracking', 1)\n triggerMoatEvent('AdVideoFirstQuartile')\n try {\n if (window.vponOMIDBridge !== undefined && window.vponOMIDBridge.videoEvents !== undefined) {\n VponConsole('log', '[VponVideo] fire vponOMIDBridge.videoEvents.firstQuartile()');\n window.vponOMIDBridge.videoEvents.firstQuartile();\n if (vponOMIDBridge.isSupportOMEventOccur !== undefined && vponOMIDBridge.isSupportOMEventOccur) {\n VponConsole('warn', '[VponVideo] fire omEventOccur.');\n fireOMEventOccur(vponOMIDBridge.deviceType, 'firstQuartile', vponOMIDBridge.sessionId)\n }\n }\n \n } catch (error) { VponConsole('warn', error) }\n break\n case 'videoMid':\n if (config.track && Object.keys(config.track).length !== 0) {\n sendQuartileTracking(trackingUrl.midpoint)\n }\n customTracking(eventsLister, 'quartileTracking', 2)\n triggerMoatEvent('AdVideoMidpoint')\n try {\n if (window.vponOMIDBridge !== undefined && window.vponOMIDBridge.videoEvents !== undefined) {\n VponConsole('log', '[VponVideo] fire vponOMIDBridge.videoEvents.midpoint()');\n window.vponOMIDBridge.videoEvents.midpoint();\n if (vponOMIDBridge.isSupportOMEventOccur !== undefined && vponOMIDBridge.isSupportOMEventOccur) {\n VponConsole('warn', '[VponVideo] fire omEventOccur.');\n fireOMEventOccur(vponOMIDBridge.deviceType, 'midpoint', vponOMIDBridge.sessionId)\n }\n }\n } catch (error) { VponConsole('warn', error) }\n break\n case 'videoThird':\n if (config.track && Object.keys(config.track).length !== 0) {\n sendQuartileTracking(trackingUrl.thirdQuartile)\n }\n customTracking(eventsLister, 'quartileTracking', 3)\n triggerMoatEvent('AdVideoThirdQuartile')\n try {\n if (window.vponOMIDBridge !== undefined && window.vponOMIDBridge.videoEvents !== undefined) {\n VponConsole('log', '[VponVideo] fire vponOMIDBridge.videoEvents.thirdQuartile()');\n window.vponOMIDBridge.videoEvents.thirdQuartile();\n if (vponOMIDBridge.isSupportOMEventOccur !== undefined && vponOMIDBridge.isSupportOMEventOccur) {\n VponConsole('warn', '[VponVideo] fire omEventOccur.');\n fireOMEventOccur(vponOMIDBridge.deviceType, 'thirdQuartile', vponOMIDBridge.sessionId)\n }\n }\n } catch (error) { VponConsole('warn', error) }\n break\n case 'videoEnd':\n if (config.track && Object.keys(config.track).length !== 0) {\n sendQuartileTracking(trackingUrl.complete)\n }\n customTracking(eventsLister, 'quartileTracking', 4)\n triggerMoatEvent('AdVideoComplete')\n try {\n if (window.vponOMIDBridge !== undefined && window.vponOMIDBridge.videoEvents !== undefined) {\n VponConsole('log', '[VponVideo] fire vponOMIDBridge.videoEvents.complete()');\n window.vponOMIDBridge.videoEvents.complete();\n if (vponOMIDBridge.isSupportOMEventOccur !== undefined && vponOMIDBridge.isSupportOMEventOccur) {\n VponConsole('warn', '[VponVideo] fire omEventOccur.');\n fireOMEventOccur(vponOMIDBridge.deviceType, 'complete', vponOMIDBridge.sessionId)\n }\n }\n } catch (error) { VponConsole('warn', error) }\n break\n case 'progress':\n if (config.track && Object.keys(config.track).length !== 0) {\n sendQuartileTracking(trackingUrl.progress)\n }\n break\n case 'play':\n eventMapping = '__vpad_a_play';\n break;\n \n case 'pause':\n eventMapping = '__vpad_a_pause';\n break;\n }\n }\n })\n }\n\n function checkVideoTimeState(videoLeftTime) {\n let stateArr = [];\n if (Object.keys(trackingTimes).length === 0) {\n return;\n }\n if (videoLeftTime == trackingTimes['start'].time) {\n stateArr.push(trackingTimes['start'].tag)\n }\n \n if (videoLeftTime == trackingTimes['first'].time) {\n stateArr.push(trackingTimes['first'].tag)\n }\n\n if (videoLeftTime == trackingTimes['mid'].time) {\n stateArr.push(trackingTimes['mid'].tag)\n } \n\n if (videoLeftTime == trackingTimes['third'].time) {\n stateArr.push(trackingTimes['third'].tag)\n } \n\n if (videoLeftTime == trackingTimes['end'].time) {\n stateArr.push(trackingTimes['end'].tag)\n }\n \n if (videoLeftTime == trackingTimes['progress'].time) {\n stateArr.push(trackingTimes['progress'].tag)\n }\n\n return stateArr;\n }\n\n const handleTimeUpdate = (function () {\n let currentTime\n return function () {\n if (video.currentTime === 0 || video.duration === NaN) {\n return;\n }\n const videoLeftTime = video.duration - video.currentTime\n if (isDifferentTime(currentTime)) {\n updateCountdown(videoLeftTime)\n setVponVideoControls()\n let stateArr = checkVideoTimeState(videoLeftTime)\n if (stateArr.indexOf('videoStart') !== -1) {\n } else if (stateArr.indexOf('videoEnd') !== -1) {\n isPlaying = false\n video.currentTime = video.duration\n showVponVideoReplayControls()\n }\n }\n currentTime = videoLeftTime\n }\n })()\n function isDifferentTime(curr) {\n return (curr !== Math.floor(video.duration - video.currentTime)) ? true : false\n }\n\n function customCreateElement(dom, id) {\n var customDOM = document.createElement(dom)\n customDOM.setAttribute('id', id)\n return customDOM\n }\n\n var videoTimeSpan = customCreateElement('span', 'countdownTime')\n videoTimeSpan.setAttribute('id', 'countdownTime')\n videoTimeSpan.style.position = 'absolute'\n videoTimeSpan.style[config.countdownPosition === 'top' ? 'top' : 'bottom'] = '15px'\n videoTimeSpan.style.left = '15px'\n videoTimeSpan.style.fontSize = '17px'\n videoTimeSpan.style.color = '#fff'\n videoTimeSpan.style.display = config.countdownHidden ? 'none' : 'block'\n\n function updateCountdown(videoLeftTime) {\n video.parentElement.appendChild(videoTimeSpan)\n var countdownTime = document.querySelector('#countdownTime')\n if (document.querySelector('iframe[class^=\"Vpon__flrec\"]')) {\n countdownTime = document.querySelector('iframe[class^=\"Vpon__flrec\"]').contentDocument.querySelector('#countdownTime');\n }\n var min = digitSet(Math.floor(videoLeftTime / 60))\n var sec = digitSet(Math.floor(videoLeftTime % 60))\n if (isNaN(min) || isNaN(sec)) {\n return;\n }\n countdownTime.innerText = min + \":\" + sec\n }\n\n var replayButton = customCreateElement('img', 'replayButton')\n replayButton.style.zIndex = 2;\n replayButton.setAttribute('aria-label', systemVar.ariaLabel.replay_button)\n var otherLink = customCreateElement('span', 'otherLink')\n\n function setVponVideoControls() {\n var replayIcon = 'data:image/png;base64,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'\n replayButton.src = replayIcon\n replayButton.style.position = 'absolute'\n replayButton.style.top = '50%'\n replayButton.style.left = '50%'\n replayButton.style.transform = 'translate(-50%, -50%)'\n replayButton.style.width = '60px'\n replayButton.style.display = 'none'\n video.parentElement.appendChild(replayButton)\n replayButton.addEventListener('click', replayVideo)\n otherLink.style.position = 'absolute'\n otherLink.style.color = '#fff'\n otherLink.style.fontSize = '17px'\n otherLink.style.top = '15px'\n otherLink.style.right = '15px'\n otherLink.innerText = templateSearchParams.has(TPL_PARAMS.VIDEO_FUNCTION_1_DESC) ? templateSearchParams.get(TPL_PARAMS.VIDEO_FUNCTION_1_DESC) : ''\n otherLink.style.display = 'none'\n video.parentElement.appendChild(otherLink)\n otherLink.addEventListener('click', openOtherLink)\n }\n\n function showVponVideoReplayControls() {\n replayButton.style.display = \"block\"\n otherLink.style.display = \"block\"\n }\n\n function replayVideo(e) {\n e.stopPropagation()\n if (window.vponOMIDBridge !== undefined && window.vponOMIDBridge.videoEvents !== undefined) {\n VponConsole('log', '[VponVideo] fire vponOMIDBridge.videoEvents.resume()');\n window.vponOMIDBridge.videoEvents.resume();\n if (vponOMIDBridge.isSupportOMEventOccur !== undefined && vponOMIDBridge.isSupportOMEventOccur) {\n VponConsole('warn', '[VponVideo] fire omEventOccur.');\n fireOMEventOccur(vponOMIDBridge.deviceType, 'resume', vponOMIDBridge.sessionId)\n }\n }\n video.currentTime = 0;\n replayButton.style.display = \"none\";\n video.play();\n }\n function openOtherLink(e) {\n let clickUrl = templateSearchParams.get(TPL_PARAMS.W_F_1_A);\n clickUrl = clickUrl.replace(/\\[.*?\\]/g, -1);\n\n if (e) {\n clickUrl = clickUrl.replace('clk_x=-1&clk_y=-1', `clk_x=${e.clientX}&clk_y=${e.clientY}`);\n }\n\n if (window.support) {\n if (e) {\n support.click(e);\n } else {\n support.click();\n }\n support.open(clickUrl);\n }\n }\n\n video.addEventListener('playing', (function () {\n var executed = false\n return function () {\n if (!executed) {\n setTrackingTimes(Math.floor(video.duration))\n executed = true\n isPlaying = true\n }\n }\n })(), false);\n video.addEventListener('timeupdate', handleTimeUpdateFunc);\n video.addEventListener('volumechange', e => {\n try {\n VponConsole('log', '[VponVideo] in volume change listener, ready to fire event');\n if (window.vponOMIDBridge !== undefined && window.vponOMIDBridge.videoEvents !== undefined) {\n VponConsole('log', '[VponVideo] fire volumechange event');\n const muted = video.muted ? 0 : 1\n window.vponOMIDBridge.videoEvents.volumeChange(muted)\n }\n } catch (error) { VponConsole('warn', error) }\n })\n }\n}\n\nwindow.VponVideo = VponVideo;\n\n\n// WEBPACK FOOTER //\n// ./src/vpon-video/vpadn-video-sdk.js","const { verifyCtid } = require('./vpadn-sdk-check.partial');\nconst { parseCtidToObj, generateUID } = require(\"./vpadn-sdk-features.partial\");\nvar SDK_NAME = \"j\",\n SDK_VERSION = \"1.2.0\",\n // window.Vpadn global namespace\n VPADN,\n // Debug status (default 0) Vpadn('create', License_Key, {'debug': true});\n DEBUG,\n // Key based on client's id Vpadn('create', License_Key);\n KEY,\n // Encoding (default document.characterSet | charset) Vpadn('create', License_Key, {'encoding': 'UTF-8'})\n // ENCODING,\n\n // Vpadn unique client ID (cookie use)\n CTID_NAME = \"vpadn-ctid\",\n // Vpadn unique client ID (url parameter use)\n CTID_URL_PARAM_NAME = \"_vpctid\",\n // Vpadn session ID (lk-value)\n SEID_NAME = \"vpadn-seid\",\n // CTID and SEID set in create event\n ISNEW_CTID,\n CTID_LIFE = 730, // 2 years - 2*365 days\n CTID,\n SEID_LIFE = 30 / (24 * 60), // 30 minutes - 30/(24*60) days\n SEID,\n // Cookie Domain\n COOKIE_DOMAIN,\n // Document Referrer\n DOCUMENT_REFERRER = document.referrer,\n // Data Parameter from ADNetwork and DSP\n GAID,\n IDFA,\n CLICK_ID,\n SRC,\n VPID_KEY = \"vpadn-vpid\",\n JSON_KEY = \"vponId\",\n JSON_THIRDPARTY_KEY = \"ce\",\n // the last cookie sync date\n LAST_COOKIE_SYNC = \"vpadn-sd\",\n //cookie expired in 7 days\n COOKIE_LIFE_DAY = 7,\n THIRD_COOKIE_ENABLED_FLAG = \"vpadn-ce\";\n\nvar secure = window.location.protocol === \"https:\";\n\n// var ET_HOST = (secure ? 'https' : 'http') + '://tags-dmp.vpadn.com/',\nvar DMP_HOST = (secure ? \"https\" : \"http\") + \"://ids-dmp.vpadn.com/\",\n protocolName = {\n 0: \"create\",\n // 1: 'mapUser',\n // // others mean event/payload\n // 999: 'others'\n },\n protocol = [];\n\n// different protocol with different url\nprotocol[protocolName[0]] = DMP_HOST + \"set\"; // drop client cookie\n// protocol[protocolName[1]] = DMP_HOST + 'map'; // cokie sync\n// protocol[protocolName[999]] = ET_HOST + 'et'; // event tracking\n\nvar urlEncodeComponent = window.encodeURIComponent;\nvar urlDecodeComponent = window.decodeURIComponent;\n\nvar cookie = {\n write: function (name, value, days, domain, path) {\n var date = new Date();\n days = days || 730; // two years\n path = path || \"/\";\n date.setTime(date.getTime() + days * 24 * 60 * 60 * 1000);\n var expires = \"; expires=\" + date.toGMTString();\n var cookieValue = `${name}=${value}${expires}; path=${path}; SameSite=None; Secure`;\n if (domain) {\n cookieValue += \"; domain=\" + domain;\n }\n document.cookie = cookieValue;\n },\n read: function (name) {\n var allCookie = \"\" + document.cookie;\n var index = allCookie.indexOf(name);\n if (name === undefined || name === \"\" || index === -1) return \"\";\n var ind1 = allCookie.indexOf(\";\", index);\n if (ind1 == -1) ind1 = allCookie.length;\n return unescape(allCookie.substring(index + name.length + 1, ind1));\n },\n remove: function (name) {\n if (this.read(name)) {\n this.write(name, \"\", -1, \"/\");\n }\n },\n};\n\nvar getUrlParameterByName = function (name, url) {\n // http://stackoverflow.com/questions/901115/how-can-i-get-query-string-values-in-javascript\n name = name.replace(/[\\[]/, \"\\\\[\").replace(/[\\]]/, \"\\\\]\");\n var regex = new RegExp(\"[\\\\?&]\" + name + \"=([^&#]*)\", \"i\"),\n results = regex.exec(url);\n return results === null\n ? \"\"\n : decodeURIComponent(results[1].replace(/\\+/g, \" \"));\n};\n\nvar generateSEID = function (key) {\n // - 11429772959540-14297738918\n return key + \"-\" + Math.floor((1 * new Date()) / 100);\n};\n\nvar testCanWriteCookies = function (domain) {\n // https://github.com/Modernizr/Modernizr/blob/master/feature-detects/cookies.js\n try {\n // Create cookie\n document.cookie = \"cookietest=1\" + (domain ? \"; domain=\" + domain : \"\");\n var ret = document.cookie.indexOf(\"cookietest=\") != -1;\n // Delete cookie\n document.cookie =\n \"cookietest=1; expires=Thu, 01-Jan-1970 00:00:01 GMT\" +\n (domain ? \"; domain=\" + domain : \"\");\n return ret;\n } catch (e) {\n return false;\n }\n};\n\nvar getTopReachableDomain = function (url) {\n // default as current page url\n if (url === undefined) {\n url = location.href;\n }\n\n try {\n var hostname;\n if (window.URL) {\n hostname = new URL(url).hostname;\n }\n\n // double check\n if (hostname === undefined) {\n var parser = document.createElement(\"a\");\n parser.href = url;\n hostname = parser.hostname;\n }\n\n // detect localhost\n if (hostname === \"localhost\") {\n return \"\";\n }\n\n var domainList = hostname.split(\".\"), // ['www', 'vpon', 'com', 'tw']\n domainListLength = domainList.length,\n domain =\n domainList[domainListLength - 2] +\n \".\" +\n domainList[domainListLength - 1],\n current = domainListLength - 2;\n\n while (!testCanWriteCookies(domain) && current >= 0) {\n domain = domainList[--current] + \".\" + domain;\n }\n\n if (current < 0) {\n return false;\n }\n\n return domain;\n } catch (e) {\n return false;\n }\n};\n\nvar sendBeaconAjax = function (url, cb, errorCb) {\n var xmlHttp = new XMLHttpRequest();\n\n xmlHttp.timeout = 10000;\n xmlHttp.withCredentials = true;\n\n xmlHttp.onreadystatechange = function () {\n if (\n xmlHttp.readyState === 4 &&\n xmlHttp.status === 200 &&\n cb !== undefined\n ) {\n cb(xmlHttp.responseText);\n } else if (xmlHttp.readyState === 4 && errorCb !== undefined) {\n errorCb(xmlHttp.responseText);\n }\n };\n xmlHttp.open(\"GET\", url, true); // true for asynchronous\n xmlHttp.send();\n};\n\nvar SetHelper = {\n setCallback: function (e) {\n var json = JSON.parse(e);\n\n if (json !== undefined && json[JSON_KEY] !== undefined) {\n // if (json[JSON_KEY] !== '0') {\n // cookie.write(VPID_KEY, json[JSON_KEY], COOKIE_LIFE_DAY, COOKIE_DOMAIN);\n // }\n\n //if 3rd cookie setting failed, set a flag in 1st party cookie\n cookie.write(\n THIRD_COOKIE_ENABLED_FLAG,\n json[JSON_THIRDPARTY_KEY],\n COOKIE_LIFE_DAY,\n COOKIE_DOMAIN\n );\n }\n },\n setErrorCallback: function (e) {},\n};\n\nvar track = function track() {\n var arg = arguments,\n eventType = arg[0];\n\n if (eventType === \"webSDK\") {\n create.apply(this, arg);\n }\n};\n\nvar create = function () {\n var arg = arguments;\n COOKIE_DOMAIN = getTopReachableDomain();\n CTID =\n cookie.read(CTID_NAME) ||\n (window.localStorage && window.localStorage.getItem(\"vpadn-ctid\")) ||\n generateUID();\n if (verifyCtid(CTID)) {\n CTID = `v1_${CTID}.${new Date().getTime()}`;\n window.localStorage && window.localStorage.setItem(\"vpadn-ctid\", CTID);\n }\n cookie.write(CTID_NAME, CTID, CTID_LIFE, COOKIE_DOMAIN); // 1st party domain cookie\n\n // set SEID (sdk loaded)- !important, we have only one session, therefore we can use the global SEID name\n SEID = cookie.read(SEID_NAME);\n if (\n !SEID || // check not exist\n getTopReachableDomain(DOCUMENT_REFERRER) !== COOKIE_DOMAIN || // check different domain\n !new RegExp(\"^\" + KEY).test(SEID)\n ) {\n // check different license key\n SEID = generateSEID(KEY);\n }\n cookie.write(SEID_NAME, SEID, SEID_LIFE, COOKIE_DOMAIN); // 1st party domain cookie\n\n //20210105: TOC\n if (\n cookie.read(THIRD_COOKIE_ENABLED_FLAG) !== \"0\" &&\n cookie.read(THIRD_COOKIE_ENABLED_FLAG) !== \"1\"\n ) {\n const ctidObj = parseCtidToObj(CTID);\n const { ctid } = ctidObj;\n sendBeaconAjax(\n protocol[protocolName[0]] +\n \"?t=\" +\n 1 * new Date() +\n \"&dn=\" +\n urlEncodeComponent(COOKIE_DOMAIN) +\n \"&ctid=\" +\n ctid,\n SetHelper.setCallback,\n SetHelper.setErrorCallback\n );\n }\n};\n\nconst getCTID = () => {\n return CTID;\n};\n\n/**\n * find particular cookie value\n * @param {string} cookieName cookie name\n * @returns cookie value\n */\nconst getCookie = (key) => {\n if (typeof key !== \"string\") {\n console.warn(\"[Vpon-WebSDK] key must be string\");\n return;\n }\n\n const cookies = document.cookie;\n const cookiesArr = cookies.split(\";\").map((item) => item.trim());\n const targetCookie = cookiesArr.find((cookie) => {\n return cookie.split(\"=\")[0] === key;\n });\n\n if (!targetCookie) {\n console.warn(`[Vpon-WebSDK] Can't find key => ${key}`);\n return;\n }\n return targetCookie.split(\"=\")[1];\n};\n\nmodule.exports = {\n track,\n generateUID,\n getCTID,\n getCookie,\n getTopReachableDomain\n};\n\n\n\n// WEBPACK FOOTER //\n// ./src/vpadn-sdk-cookie.partial.js","const { isSDKiOS } = require('./vpadn-sdk-features.partial')\nconst isElement = (element) => {\n try {\n return obj instanceof HTMLElement;\n } catch(e) {\n return (typeof obj===\"object\") &&\n (obj.nodeType===1) && (typeof obj.style === \"object\") &&\n (typeof obj.ownerDocument ===\"object\");\n }\n}\n\n\n/**\n * if env is in ios, send message to iOS developer\n * @param {String} type message type (log|warn|error)\n * @param {*} msg message\n */\nconst VponConsole = (type, msg) => {\n const typeMapping = ['debug', 'log', 'info', 'warn', 'error'];\n\n if (typeMapping.indexOf(type) !== -1) {\n console[type](msg);\n } else {\n VponConsole('warn', '[VponVideo] type is invalid');\n }\n}\n\nconst urlSearch = window.location.search;\nconst urlSearchParams = new URLSearchParams(urlSearch);\n\nconst assets = {\n iconMuteSrc: 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFAAAABQCAYAAAH5FsI7AAAKQ2lDQ1BJQ0MgcHJvZmlsZQAAeNqdU3dYk/cWPt/3ZQ9WQtjwsZdsgQAiI6wIyBBZohCSAGGEEBJAxYWIClYUFRGcSFXEgtUKSJ2I4qAouGdBiohai1VcOO4f3Ke1fXrv7e371/u855zn/M55zw+AERImkeaiagA5UoU8Otgfj09IxMm9gAIVSOAEIBDmy8JnBcUAAPADeXh+dLA//AGvbwACAHDVLiQSx+H/g7pQJlcAIJEA4CIS5wsBkFIAyC5UyBQAyBgAsFOzZAoAlAAAbHl8QiIAqg0A7PRJPgUA2KmT3BcA2KIcqQgAjQEAmShHJAJAuwBgVYFSLALAwgCgrEAiLgTArgGAWbYyRwKAvQUAdo5YkA9AYACAmUIszAAgOAIAQx4TzQMgTAOgMNK/4KlfcIW4SAEAwMuVzZdL0jMUuJXQGnfy8ODiIeLCbLFCYRcpEGYJ5CKcl5sjE0jnA0zODAAAGvnRwf44P5Dn5uTh5mbnbO/0xaL+a/BvIj4h8d/+vIwCBAAQTs/v2l/l5dYDcMcBsHW/a6lbANpWAGjf+V0z2wmgWgrQevmLeTj8QB6eoVDIPB0cCgsL7SViob0w44s+/zPhb+CLfvb8QB7+23rwAHGaQJmtwKOD/XFhbnauUo7nywRCMW735yP+x4V//Y4p0eI0sVwsFYrxWIm4UCJNx3m5UpFEIcmV4hLpfzLxH5b9CZN3DQCshk/ATrYHtctswH7uAQKLDljSdgBAfvMtjBoLkQAQZzQyefcAAJO/+Y9AKwEAzZek4wAAvOgYXKiUF0zGCAAARKCBKrBBBwzBFKzADpzBHbzAFwJhBkRADCTAPBBCBuSAHAqhGJZBGVTAOtgEtbADGqARmuEQtMExOA3n4BJcgetwFwZgGJ7CGLyGCQRByAgTYSE6iBFijtgizggXmY4EImFINJKApCDpiBRRIsXIcqQCqUJqkV1II/ItchQ5jVxA+pDbyCAyivyKvEcxlIGyUQPUAnVAuagfGorGoHPRdDQPXYCWomvRGrQePYC2oqfRS+h1dAB9io5jgNExDmaM2WFcjIdFYIlYGibHFmPlWDVWjzVjHVg3dhUbwJ5h7wgkAouAE+wIXoQQwmyCkJBHWExYQ6gl7CO0EroIVwmDhDHCJyKTqE+0JXoS+cR4YjqxkFhGrCbuIR4hniVeJw4TX5NIJA7JkuROCiElkDJJC0lrSNtILaRTpD7SEGmcTCbrkG3J3uQIsoCsIJeRt5APkE+S+8nD5LcUOsWI4kwJoiRSpJQSSjVlP+UEpZ8yQpmgqlHNqZ7UCKqIOp9aSW2gdlAvU4epEzR1miXNmxZDy6Qto9XQmmlnafdoL+l0ugndgx5Fl9CX0mvoB+nn6YP0dwwNhg2Dx0hiKBlrGXsZpxi3GS+ZTKYF05eZyFQw1zIbmWeYD5hvVVgq9ip8FZHKEpU6lVaVfpXnqlRVc1U/1XmqC1SrVQ+rXlZ9pkZVs1DjqQnUFqvVqR1Vu6k2rs5Sd1KPUM9RX6O+X/2C+mMNsoaFRqCGSKNUY7fGGY0hFsYyZfFYQtZyVgPrLGuYTWJbsvnsTHYF+xt2L3tMU0NzqmasZpFmneZxzQEOxrHg8DnZnErOIc4NznstAy0/LbHWaq1mrX6tN9p62r7aYu1y7Rbt69rvdXCdQJ0snfU6bTr3dQm6NrpRuoW623XP6j7TY+t56Qn1yvUO6d3RR/Vt9KP1F+rv1u/RHzcwNAg2kBlsMThj8MyQY+hrmGm40fCE4agRy2i6kcRoo9FJoye4Ju6HZ+M1eBc+ZqxvHGKsNN5l3Gs8YWJpMtukxKTF5L4pzZRrmma60bTTdMzMyCzcrNisyeyOOdWca55hvtm82/yNhaVFnMVKizaLx5balnzLBZZNlvesmFY+VnlW9VbXrEnWXOss623WV2xQG1ebDJs6m8u2qK2brcR2m23fFOIUjynSKfVTbtox7PzsCuya7AbtOfZh9iX2bfbPHcwcEh3WO3Q7fHJ0dcx2bHC866ThNMOpxKnD6VdnG2ehc53zNRemS5DLEpd2lxdTbaeKp26fesuV5RruutK10/Wjm7ub3K3ZbdTdzD3Ffav7TS6bG8ldwz3vQfTw91jicczjnaebp8LzkOcvXnZeWV77vR5Ps5wmntYwbcjbxFvgvct7YDo+PWX6zukDPsY+Ap96n4e+pr4i3z2+I37Wfpl+B/ye+zv6y/2P+L/hefIW8U4FYAHBAeUBvYEagbMDawMfBJkEpQc1BY0FuwYvDD4VQgwJDVkfcpNvwBfyG/ljM9xnLJrRFcoInRVaG/owzCZMHtYRjobPCN8Qfm+m+UzpzLYIiOBHbIi4H2kZmRf5fRQpKjKqLupRtFN0cXT3LNas5Fn7Z72O8Y+pjLk722q2cnZnrGpsUmxj7Ju4gLiquIF4h/hF8ZcSdBMkCe2J5MTYxD2J43MC52yaM5zkmlSWdGOu5dyiuRfm6c7Lnnc8WTVZkHw4hZgSl7I/5YMgQlAvGE/lp25NHRPyhJuFT0W+oo2iUbG3uEo8kuadVpX2ON07fUP6aIZPRnXGMwlPUit5kRmSuSPzTVZE1t6sz9lx2S05lJyUnKNSDWmWtCvXMLcot09mKyuTDeR55m3KG5OHyvfkI/lz89sVbIVM0aO0Uq5QDhZML6greFsYW3i4SL1IWtQz32b+6vkjC4IWfL2QsFC4sLPYuHhZ8eAiv0W7FiOLUxd3LjFdUrpkeGnw0n3LaMuylv1Q4lhSVfJqedzyjlKD0qWlQyuCVzSVqZTJy26u9Fq5YxVhlWRV72qX1VtWfyoXlV+scKyorviwRrjm4ldOX9V89Xlt2treSrfK7etI66Trbqz3Wb+vSr1qQdXQhvANrRvxjeUbX21K3nShemr1js20zcrNAzVhNe1bzLas2/KhNqP2ep1/XctW/a2rt77ZJtrWv913e/MOgx0VO97vlOy8tSt4V2u9RX31btLugt2PGmIbur/mft24R3dPxZ6Pe6V7B/ZF7+tqdG9s3K+/v7IJbVI2jR5IOnDlm4Bv2pvtmne1cFoqDsJB5cEn36Z8e+NQ6KHOw9zDzd+Zf7f1COtIeSvSOr91rC2jbaA9ob3v6IyjnR1eHUe+t/9+7zHjY3XHNY9XnqCdKD3x+eSCk+OnZKeenU4/PdSZ3Hn3TPyZa11RXb1nQ8+ePxd07ky3X/fJ897nj13wvHD0Ivdi2yW3S609rj1HfnD94UivW2/rZffL7Vc8rnT0Tes70e/Tf/pqwNVz1/jXLl2feb3vxuwbt24m3Ry4Jbr1+Hb27Rd3Cu5M3F16j3iv/L7a/eoH+g/qf7T+sWXAbeD4YMBgz8NZD+8OCYee/pT/04fh0kfMR9UjRiONj50fHxsNGr3yZM6T4aeypxPPyn5W/3nrc6vn3/3i+0vPWPzY8Av5i8+/rnmp83Lvq6mvOscjxx+8znk98ab8rc7bfe+477rfx70fmSj8QP5Q89H6Y8en0E/3Pud8/vwv94Tz+4A5JREAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAADa2lUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS42LWMxNDAgNzkuMTYwNDUxLCAyMDE3LzA1LzA2LTAxOjA4OjIxICAgICAgICAiPiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1wTU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjg4NzI2MkNDOTZGMjExRTg4NzMxOEQ5QzMzRDU2QUI2IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjA3OTVBREZDQzczRDExRTk5NzIyQTJFRDM0OUYzOEY0IiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjA3OTVBREZCQzczRDExRTk5NzIyQTJFRDM0OUYzOEY0IiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDQyAoTWFjaW50b3NoKSI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOjcyMzdlNGYzLTBjNTEtNDNiNC05MzFhLWM2YTE2NmMxZGQ2YyIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDo4ODcyNjJDQzk2RjIxMUU4ODczMThEOUMzM0Q1NkFCNiIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PuyKxkoAABMPSURBVHjaYvz//z8DuYAJijEEwQBqMisTE1M+kA7BZQoXEIsAcdF/iI5KIOYFYhYgZgdibpAixv9oAKTw+/fvP9jY2CqvXLnyQE1NrQhsPTaFQCz279+//1FRUcegpmM3cfLkySt6enrOQflBMDeyQt1ZgmSiChBzADEfEMswoPmaGYiLgTic2LBkRBcACCBGSmKGBa8s1GRFqGe4sKkBeUAAiNWRgkcEGnaMUF+D1DBoYQlHLSjtC6V5QApNsSgE2VAAZfvDrNbAolAVStdBaW5YmIFiQBZJoTgQK0GToQZKSEB9LQNVyElWrIAAQABRFDNE24IEQKlPFBr+r6H4D0k2wPIiECuAUiZSgJVBI5MoAIovFyDOBuJSIO7EkduU+/v7W4SFhWOhscEPxAYnT57cB6QdYNHHhC1R4DBQEpSafv369Rcktn///vsg2sfHZyNQ3BDqM7CBJkQaKAbEuvPmzTuEJpcPzc3MIMP+AfFtRkZGLyAuBuJqIJ6KI2iEf/z4cYqHh4cbqMYBiKWBOBJo5gQNDY0ArOkNGikgi6RAEYHkihJiIoVQsgFlT2Go4S+gyeYvXgOpnbABAojqBjIxUBkwEiEPsxSUGgh6h5mAYaCiUB6al78D8S+SnQwNU1gh7IxcShLhI5wuA5XsTmi5wZSYMGeBGsAKLY5hFbcWsMrdgyUCOaFqQF7/iVSMg4LuB0icCaoAVFSBsk48ECf//ft3NzBLYQtv9S9fvjwA0kbQEgqUtx1fvnx5HlpwgH0AKnISiSgcrGH1FpQParekIvH1YAbyIedZPAZagMpDIG7DIpcOxEKgICAlYYPS4VMg3gwMjsXwGGRk7AVSoPD+CEokMAP/kxD78kBHxcJt+fevGFp4cMBiDlTpvCHCQGZow2E51GXtQDwDFHl//vzZD62kmWBJRw2IU4C4HIgbampqzuKIFE8oOxeag3SBTb82qJgOcjplhqY/TmjF4zht2rTLaAaaQ12hBc2KzND0Kw3EmkjNHKxZD2Sww6pVq24hGWgMdQEjSYUMSC/UUFArzPHgwYP3oAYqE5OXCSkAuVQO6j1QDvlGrTKTccCqAIAA5Fg/aBNhFOe7fMSkyQ0lYKG0g1go4mCziIVCp0Ypbad06tCpU8UtXDWTi0JAccuQJUtzU+gSwcHBPUPFpRTSihl06B9tFSRek/oe/D77PHIQzAWVHjzy5bt337373nu/33tf6Ateukv1+azJFY2QZ3d4QIc28GmwLG/SRqSPISBO3HHOx3g8vthqtT5Wq9UXQIgUdNTAtzjAsGtMsaaN9CHSfZJb0Ou7zNEBLlcXbKGUgMoU2DZNtjwLWNOGbkQgnYL7pfi9aPQ6gpHOtVCKAqiSQMEYdszCCxmfJ4mOnnah/26hMwRJYm2OzW8kp6g3Olg/gY9KwKiv4M7veOaivySZI+o6O+/jQt8xA9K5J+/Zts2HF3MkN1HGMUGtNBqNptEhvtlk1pMhYuFP2rTRIRg4jZaNDXWop/ntoy3LekLzj+v1+p6cz2QybNwyeIu9qbTwv4Yrwrg6cNMxyVEsFmNem/Y874HWWlGV+FAqZ7PZ14QAL2lYJ2ng2R+yRBoIACCGvpA0Sd67rvuuG0qQcdsg5wPEXlsmkukZprg3DcnFdxDTXHktFYvFV1Inn8+/pfktOUe7yru+ho7gKhLzVzZGUTnddRzH7fBJWzhJsiDvlUqlbbTG88DRVYrH51KnUqm4MkmUgAWNbLZ9WGbojMvBG4VCYTmXy00F8p9Sj+jnDckndBsTqOFP4MYmoKaNRBgB8I+CIj8gDg8BRz11e6Zv4kVm+fClXC7vBOzgBsltkmF8pKmFrwhc9fO5weA4xpGeadLHwxEsMgYXObVabd9n4DraqGQYXPynCxjqG4Z7rmP8mWSXZB9j72+WWzJ2TawaaGn3eiTx/xes/3rJ/1MAdq0uJI4rjM7Ozm7WbhJX+qO0tBRDMGkLtT8pZaGFKiJsER/UQJW8KIW20pQqDYpSJbRgqIi0al4EX6pPQqOtRVxEjJU+hEZaCkkaioWWiiGN291Z153NzPS7zbn220XdbRxroBkYHGfu3j373XvPd75z554HqN7rQ6wq94/9pRlXxrmdrN8XgJIDPSw1mazsdIQH3bv4nBfpTGSQhyEMPADmGFHfTV0s1c1hSLRnpqenP47H49+IogqV34H/pCbeQiyokGSPQOC+MTs7e1kKBbq+CC34kJJtS9NpmiGdJ0vTQ3CRj09OTraWlZU9J9sYhpEPi/GAUxSm3i240dHR01VVVS/wdlSxepi37sih7WAGuhg4DxZEkZDyw8PD79TX17+8xXRwMTdBZat7O/rJSlPcWZC0oTHbQmUiVUz+koGBgTebmppeyWFkvEyGKYyC5AqXalpj7pgFipLtbI39Wh+sikMA5GEfFtF7vKen52Rzc/NrOdpyDwCk3DvUYWusA4DKaqCD+D4DtYuO7RdTZa7VYZjtQq4H6XyVn+3t7XVU8VXmSP4a+juyurr65fz8/DlUeY9hEfkBSvDnkeLi4mAsFrvY2dlZA4bw8fWhgWSfbWho6NhNTUyr+opy50UN4RGeINr5Wj5bWlq6KmgJBdVR+DOVRUVFZzJqmgoUZ16FTWjxz4O1tbUhB10FV3d397fyRmlpacni4uKHqHkFoT8VCAReWllZOSfbRCKRGAJm88ksAR7c2NjIcwicmOj6wsLCdRqVC/JBMBg8NjMz8z5dvuj3+0+sra2dlc+i0WiyoKDgLKwSac+lmYcey7Kc4q/bmOw/j42NhRsbG8PyQUVFxdPj4+MndV3/QN5bX19P5efnf0KXYor8jgVicZpxMm/aoAixEn8TjDAyMpInjsHBQZEGlZqamuOycTKZNCman9Hl93RehyNmyGHeK0VtM0dVWCDLQ0NDl1paWi7zRqZp2j6f73NYIr+ilk5yd2uvALoY0W/ugvb19T2fptncbldvb+9R5ktzXzst1f2dWiit2Q6Ck3pR5G6x7dqy6W5alqKqd3C3trYGU6lUhHj2BiKeYhnFUtmcMehDpkMRdDNwxwhQH5dvFLkLNOQ/yXttbW0hoqQ62CgBrif57lCcOoo6FEGZSZ6gPs/zXQEKwnn6s0Qp8wta4dfk/a6urrqOjo4qZJe0TOJGPhSbL02UmiJOZZKpqamvMrJEL52n4IwJMGcmJiauZbSp5JlEYxEU7/D8WFhY+BYUcR5TG2K4HqVonMphj0TOaau/v38hFAq9Dtn2Ef35AVx3C8OoV1dXJyklvk3Ct4TIOspqmU25ZQFgFLbZTaZmVAbwSRoeEd13c6QYIxwOXyJgjehHvPSwTOcNGOVu8F2ivLx8FVPiD9BSIlMPWuCfFDIA38KS7qroJEFfKPzr97KANNlu0Qr6l7tMCaYHb+F7b2JIDaS6RGYmkSG1tpn0Sbb8BR19SiBP77BHYkL3RREVCTqzHE2CTmJMsFqcqLNWXmLiEiDRSRx50iVJljJB2nDTFJCd38ZpMCm/3Y+xWCDsbDVJriAF2aoEUuEgNU1LZaaqf1G827kUTbmA1GUkxXaK1+ulatMQL+Qoc3Nz3/FtrL2o6rYqObfUegBpUZrSqc0vGKJlLKYNxYHXAXYjs2S28KPGCODen1AkcfwQe78AclEgKz+X8s/LFOZ+R3CnPv5fL+Lcd/l3e/wlQDtXAxL1Gcbf+1zaZVoZLXMbQlgRzUKyLaOa6dZorQ9zLdNEZykMdUEluLXO0EJigrJCwjAjoq8pJA0xnCNkawoNtkoiNxpjG7bKr7xT77y9z93zes+9/u/OpZun3R9erq7+7//e3/u8z+fv+fu5W1N9h/3XVFeCk+R32PwAKifqacyjxOQdUkiq23wJUO0EAEcLB6KiJkJvDdHLtCZpkbw4n5FK7QQAJ4q3gosk+JmiYKFFkPrRJ+/Bzz7mJElZp4zHKddpFbjMQspEh+lczK9BlgqqQTt4IJ3d3NzcImehjEZjCf/3BOaghQL7P4Q5m25UU1YCkdKsIsdUjxJnwOgPaHrzOHDz6+rqPty4ceMKpXlWr14N6bk21IUDOMSxnno6UAE4IXnTUfog3Qg8xrArV658sH379mhP85nN5mkYaj9hzpYwmTM++QEkwFEdR4GbjcDNr66uTkxJSXljNPNivUsvGZgRpfZxcntUz+NGeeswUEufSjwB2UC8RAzDLAHcqVOn3svKylo3RpdHTSy2WJjs/tAMrCf+AVNwodzNJWd1R/AUGHMlQFA3g9I+NW4eqGGur0qYKY7riRMn3t6/f3/8KCsC3kCk4OmZKy1VHGkrcXmo+0PTzSqyFq3kSqnJXBYPc9mBlIkeQm/p8QgGICCipUQ+TnSIe6AOFFxYWLiqoKAggRuK8bKWtNdG/JbpOAQ9RxibPnR9zPgpjA+tU9LTIkYA2RgACgoMvTj6mLPbeJgvp5VEWS8dvzlHjhx5Kzs7OzkoKCgYEtNI1/F4BQQE6FVjFDk3fqQWFwmAheTm5q4qLS0tRrqR/WrjV0xMTHl3d3cHGp+nCICJWG8d2WxY56yIiIiwpqamvPDw8FfEXBaLZSApKSm3pqbmJ+bseh0iY9ifoh0uBmEpL1++nJ6YmPiOD4Wdgpdlb4xds2bNKgoeXIv41dXV9WVra2tbbGzsmf7+/r8QyC50xEVTlt24hYaGht28eTMrMjIyfISB0Gr1mzZtiuUA/oabMKKpQK0ggcM6jEvbbB/y2cWuC13Uzzf3+u7du89xd2dEj0B0dPQi/n1JY2NjPgcC/MwV6JADz3G5wWBYefv2bWNHR0eREng9PT3mhISEioyMjEaiAkYwSeUiJnVBDEj/84mAhzmrxCY8lnBEH54/f/5brjKO7dmz52tgtMg3rl+/fsng4GDhtWvXMrk+XqzT6ZbwqCeHA/RZVFTUq/L/7+3tHeSO/VdcZR1raGi4xRz9OCDFnahTXfjCWg8xK+g7tQ8BKCysKKoJBQ+x8hPuXz7m4+fMzMzokydPruVS5/Lb+VFcarVal7p7gMlksuzatauhtrYWOADA2PkdgQPd141GxCIDONky0kIKzbioR7jYdj7uwjh9+vQ3XMoqc3JyvoPSq7cJQWp37tzZFBgYWMnBa+Zf3WEOEkU7gvgYN8qlgi/rwEmRtyA/nOpDkbXpwsWCwegsLy+/d+HChQfeJi0rK7tz8eLFB3jfY2Jw+ojLYnWXi1RPlsyvQkqMtj4HYaYGXJKZZ8+eXcvVT3pycvJCb5MeOHBgGZfUj44fP74S4+4Q/Jwh+YZyODkCQKpn7J43sGF8CDzZVxUxNhCmoGs5sqKiIoUDV5SamrpSKe3GwbrLI6N2hVieHTp0KI7ryOKjR48C5zgS5wzDTQliTlqTRg75BGEa3BfgvIOiBSZX9qVLl36wTeCFrDRoq01iDhI3LOw15uAzL8dcYRo/hrXuOnfh+6KiImi/hRfOVOI4V1lZec/dc6Ff/vDhw0ABBcZbHGISjpJJs0LDAIoW3RBEHrIlO7Zu3foFdwGsPgAgUPvgVTTAWoeXy0G3RXx6evrn0CDt7n4OLHBjS/mA1mFg76Uyx0uNsvn4FFQgF5I2d/cD8WfDhg2fYOJ3MQqYgYR7wzTBIZJG70FQrdwDN3OLdg8TA4Jqr1dIKlAWiu7gwYMRXKcsG99ozsVvhedP27JlS7RSrM114I9paWn1zMEl+hN9RuHHMVQB9pYrHqo95HPMq6ure5/7fy46k69dx12bFTdu3GhjTlaiyl36imY79CSRYMBP0Uutpb4i+bMIsWbgj5tTXFwck5+fv/x5geTOb9vmzZurmYNeKdjUFnwOPGNufHz80oKCgneDg4NnQsxqNBpb0JqKVwY+QZfHzJxdzTpJjwI7NpQDOaukpOTNuLi4hZ2dnV1cEGpaWlru4yY8wk0QyQm7J6DykHdTS2ksGTg5S6IREQwq3lBUwvN5wL8uLy/v9TEA2I4Rwd9EikQjldhcNXG0e3Ghz6QMio1IMs3sGIiwiMyOBe/tYc5uHBOTuhdVo8jQqrxkbuVjLKptwQjiywjkAm4l4/fu3bvkOQB8gAB24GIEB1EjKXSbQu7OXSekSiHvqZUSBkPMtbRqlRK1Hh1pmoWlw0oHGC0+BnFRYsfg2ADzGMQfOi1a+bi1b9++KuDgcgf3/ihLBTaFZ9NndRMHeNiJZs6+rAGFRdskvT9ApLZTYb4eIsXW/ywSEV6DFB08Rf0BgEGMCfrpFlfMZzQaTTnXWb94tBiO9gZaibMqbKi8qfR7bywGJSH5V3ONeygnATmAOwtA/oFH0Q4k98++37ZtW4Very+rr6//VWkuDrIJw6pnJBMytd4i4amwrlBcD0QDswCd03XoJH/MgTRevXq1hbteFnjLdFVV1XX+fQY69VF4j2j9Hf3bUv6HEGkiYlkdsYAzSDwbyJzvLBE6rotYwX5iAYdeNACZQimRvltPx1wpG8ICDpJssNusyIsEoOz+uPu7zcun//Jf/svP0h+P7Ib/GsP1D0WZRgOmNt3zAAAAAElFTkSuQmCC',\n iconUnmiteSrc: 'data:image/png;base64,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UmVhZHlxyWU8AAADa2lUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS42LWMxNDAgNzkuMTYwNDUxLCAyMDE3LzA1LzA2LTAxOjA4OjIxICAgICAgICAiPiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1wTU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjg4NzI2MkNDOTZGMjExRTg4NzMxOEQ5QzMzRDU2QUI2IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjA4QjFFQUJEQzczRTExRTk5NzIyQTJFRDM0OUYzOEY0IiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjA4QjFFQUJDQzczRTExRTk5NzIyQTJFRDM0OUYzOEY0IiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDQyAoTWFjaW50b3NoKSI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOjcyMzdlNGYzLTBjNTEtNDNiNC05MzFhLWM2YTE2NmMxZGQ2YyIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDo4ODcyNjJDQzk2RjIxMUU4ODczMThEOUMzM0Q1NkFCNiIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PjCdrp0AABP+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',\n videoPosterSrc: 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAApsAAAF3AQMAAADQMhJDAAAABlBMVEX///////9VfPVsAAAACXBIWXMAAA7EAAAOxAGVKw4bAAADh0lEQVR4nO2YsW7bMBCGqQqwloBaMwhyH8GjBqN+FT2CxgxBrUfTA/QhWHToVmj0EITlHU+kLBm1GGcq/g+JIonmh6N4OtJRCgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwB0qOmTDjZabNzdR2Is7nm3vfq290lirVOluXtyH7HuKdE8fz6w1K2lBlx+Tfle1628yQxdXA973+cgnjSpSjI6L+uIG2auvLO1nLUdqJA5Kpzl9hLVc5XPpgb2OLlWaDxKUv1q0cmaoNlVacGwv09Wi1ctMspSP3ZVkIXWzlyidYvE8LVp3LO1TpdfvU7Vo5XHkD0qfb0rXj+UOrAnp2dySFslS1oT0PNyS7pKlrAnp2S1aeaL0egKTpO100vs/HOFTspRjCzlv6DDEmWNp9aB0EHMuUpY9J0tbOuzkwgfYTS+vJFyTLs3eSbo3LO1FUkor58Zh/VLcwexdedeZfaMLn1pVLIWdHFKl52JUuhjPLOVbOpRCX2xbJ/VnW/k5urqn9/4p+gkrQin0j9b5qpNNkf4a1DeljyqnUPyEuYfg1ya3fhGDky7W2Tv8plnR7rGRx7+N2SCDtaO/dGugycYE6R8arjZ+TiRzjKSpSHsnjYvDFn7QcJ8Gnz0yyZ2kacYPklKijsvYFi70+rgVmjuJtJnStBhUKGH1qus/pRlLSSjltAoCGr+8wynVb6RsLCUSkeow1CZKUzYpFAtLKRKp0UWYFAp/ly419KtFKjU6D+kzNaj1PmOztPX34jtJNyXPrnZEG6Qt9d2psPznQUpjrj4m7bT0F1kRhv8Z0sHfK8NKTabnx6TTylSH8kmm5nOkx5DoD0iniZr6vYScpDtdPH1EOgbBB6XUxVBkOuR3ZsKGjUztY1IZtaumZiY1nyJ11XTaU1HsJp5uhebWUBQ6lI4ybilnyZtSUBrKJJJWoXTUcZ2f5VmK9MjSYS49xopcLvZqG6loCqhjE+J7iWHpOEEpUj8/Zr65GaOpjqcpO5+Sf0b+8f2omoYXNkpTVlOXPzWNmFQy5yQkUxufxCFt3XcF+VW5nQ+txovvJq+KtiWFDzNph6LeaEUqh5NaSU99OYh0P9Dpds7W0D8h6B8Pi+8mhbW9zHphk3Z9quSP87Zp+YWHd8I6ngIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwH/FX4Ok7MIGd0maAAAAAElFTkSuQmCC'\n}\n\nconst digitSet = (num) => {\n let strNum = num.toString();\n if (num < 0) {\n strNum = '00';\n }\n\n if (num < 10 && num >= 0) {\n strNum = '0' + num;\n }\n return strNum\n}\n\nconst isVponOMIDBridgeExist = window.vponOMIDBridge !== undefined && window.vponOMIDBridge.videoEvents !== undefined;\n\nexport {\n isElement,\n VponConsole,\n urlSearchParams,\n assets,\n digitSet,\n isVponOMIDBridgeExist\n}\n\n\n// WEBPACK FOOTER //\n// ./src/vpadn-sdk-utils.partial.js"],"sourceRoot":""}