{"version":3,"sources":["webpack:///vpadn-sdk.js","webpack:///webpack/bootstrap df7f8e479bea62346b06","webpack:///./node_modules/@babel/runtime/helpers/interopRequireDefault.js","webpack:///./src/vpadn-sdk-check.partial.js","webpack:///./src/vpadn-sdk-parameters.partial.js","webpack:///./node_modules/@babel/runtime/helpers/typeof.js","webpack:///./src/vpadn-sdk-features.partial.js","webpack:///./node_modules/@babel/runtime/helpers/defineProperty.js","webpack:///./node_modules/@babel/runtime/helpers/toConsumableArray.js","webpack:///./node_modules/@babel/runtime/regenerator/index.js","webpack:///./node_modules/@babel/runtime/helpers/asyncToGenerator.js","webpack:///./node_modules/@babel/runtime/helpers/unsupportedIterableToArray.js","webpack:///./node_modules/@babel/runtime/helpers/arrayWithHoles.js","webpack:///./node_modules/@babel/runtime/helpers/iterableToArray.js","webpack:///./node_modules/@babel/runtime/helpers/arrayLikeToArray.js","webpack:///./node_modules/@babel/runtime/helpers/nonIterableRest.js","webpack:///./node_modules/@babel/runtime/helpers/slicedToArray.js","webpack:///./src/vpadn-sdk-logic.partial.js","webpack:///./src/vpadn-sdk-main.js","webpack:///./node_modules/@babel/runtime/helpers/regeneratorRuntime.js","webpack:///./node_modules/@babel/runtime/helpers/toPropertyKey.js","webpack:///./node_modules/@babel/runtime/helpers/toPrimitive.js","webpack:///./node_modules/@babel/runtime/helpers/toArray.js","webpack:///./node_modules/@babel/runtime/helpers/arrayWithoutHoles.js","webpack:///./node_modules/@babel/runtime/helpers/nonIterableSpread.js","webpack:///./node_modules/@babel/runtime/helpers/iterableToArrayLimit.js","webpack:///./src/vpadn-sdk-cookie.partial.js","webpack:///./src/vpadn-sdk-initial.partial.js","webpack:///./src/vpadn-sdk-instance.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","_interopRequireDefault","obj","_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","currentFrameAbsolutePosition","currentParentWindow","rect","currentWindow","window","positions","top","parent","idx","frames","_step","_iterator","document","getElementsByTagName","frameElement","contentWindow","getBoundingClientRect","push","x","y","reduce","accumulator","currentValue","_regenerator","_typeof2","_toConsumableArray2","_asyncToGenerator2","_require","require","systemVar","apiConfig","websdkParams","divide","bandCount","res","coveredBannerCheck","frame_id","vponTag","iframeViewable","isInCrossDomain","underViewport","displayInViewport","myframe","getElementById","style","display","toLowerCase","visibility","rectTop","getTransferRectHeight","rectLeft","getTransferRectWidth","left","frameBoundingClientRect","fTop","fLeft","getFrameBoundingClientRect","rectBottom","bottom","rectRight","right","flag1","innerHeight","innerWidth","nowFrame","calIframeBoundingClientRect","frameDocument","nowDocument","ifs","contentDocument","coveredIntCheck","rectWidthBand","documentElement","clientWidth","rectWidthTotalBand","rectHeightBand","clientHeight","rectHeightTotalBand","notPass","threshold","checkX","j","checkY","el","elementFromPoint","frameId","getAttribute","coveredNaCheck","self","vponTagPos","width","height","undefined","pageYOffset","body","parentNode","scrollTop","pageXOffset","scrollLeft","className","parentClassName","parentElement","indexOf","direction","reqAdParameters","getReqAdParameters","iframeW","format","split","result","useWidthBand","iframeH","useHeightBand","checkInput","errMsg","adhesionPosition","licensekey","checkAttributeIsGiven","adType","checkAdType","adTypeMapping","mi","banner","na","keys","find","key","attr","trim","checkVponTagExisted","querySelectorAll","Boolean","reqParameters","cover_min","nativeCoverMin","sdk","bid","adtest","adRequestCallBack","isRotate","s_h","s_w","arrangeReqAdUrl","baseUrl","param_str","encodeURIComponent","substring","concat","queryWebApiPermission","_ref","mark","_callee","wrap","_context","prev","navigator","permissions","query","abrupt","sent","stop","_x","apply","arguments","isUrl","url","URL","error","isVpadnEndpoint","hostname","isWebview","useragent","userAgent","match","isInGAM","some","iframe","verifyCtid","ctid","re","verify","exec","checkVponTagAttributes","vponTagAttributes","getAttributeNames","console","forEach","attribute","vponTagAttrs","regex","formatMapping","cookieParamsValidator","checkObj","options","warn","networkId","a","acceptDomains","ad_identifier","ad_is_lat","ad_id_type","adRotate","adUrlHeaderName","clickUrlHeaderName","closeImgSrc","cookieCTID","connectQueue","contentData","coverPolicyCheckHeightBand","coverPolicyCheckWidthBand","debug","gamTargetingMap","impUrlHeaderName","intCloseBtnEndureTime","intCloseBtnAppearTime","isGettingAd","landing","lower_bound_vpon_refresh_time_second","openTab","pullFrameIndex","nativeAdLabel","nativeLayoutOption","reqAdFrameId","reqAdUrl","useCustomCloseCallBack","useCustomCloseBtnId","use_custom_z_index_int_30h","vponBannerTagCount","vponIntTagCount","vpon_refresh_time","isUseCustomClose","referrerPolicy","ariaLabel","close_button","mute_icon","unmute_icon","ad_img","replay_button","video_view","lat","lon","accurary","adChoiceUrl","adChoiceArrowImg","adChoiceImg","protocol","path","click","request","videoEvent","parseUriOptions","strictMode","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","vponAdTest","adTest","adIdentifier","adIsLat","useCustomClose","customClick","adRequest","apiPayload","credentials","adTypeArr","expectResult","adAmountLimit","cookie","sid","thirdCookieEnabledFlag","seid","adUrlMapping","ban_img","ban_vid","int_fit","int_vid","int_30h","assets","logo","closeBtn","oneThreeCloseBtn","zoonBtn","_typeof","findFrameAbsoluteRect","element","_step2","_iterator2","frameRect","generateUID","crypto","randomUUID","S4","Math","random","adder","initialValue","num","getCTID","CTID","prepareContextForAdRequest","getCookieByKey","vpadnCookieComponent","setCookie","idsService","cookieDomain","getTopReachableDomain","localStorage","getItem","Date","getTime","setItem","domain","referrer","RegExp","floor","parseCtidToObj","handleAdReqUrl","adReqUrl","searchParams","append","_require2","_require3","_require4","endsWith","str","suffix","s4","genGuid","getCookie","c_name","c_value","c_start","c_end","unescape","uaMatch","substr","isSDKiOS","isIPhone","isSDKiOSNotIPhone","parseParamsFromUrl","params","ary","replaceSMSContent","replace","decodeURIComponent","regexp_replace","input","tagBeingReplaced","replaceWith","ctid_dob","timestamp","version","log","fadeLock","fadeForFlrec","action","ms","callback","transitionendCallback","clearTimeout","removeEventListener","isNaN","parseFloat","opacity","setTimeout","transition","addEventListener","fading","fade","type","clearInterval","isIn","duration","gap","func","setInterval","getParams","setLocation","location","href","paramsArr","search","calculateViewRate","target","boundingRect","counter","position","viewPercent","getRootDomain","hostStringArray","_location","beaconUrl","sendBeaconAjax","SetHelper","setCallback","setErrorCallback","cookies","cookiesArr","map","item","targetCookie","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","initialIntIframeHtmlTag","guid","iframeId","createElement","setAttribute","frameBorder","container","initialCloseButtonContainer","initialIntCloseButton","appendChild","vpon_ad_create_int_iframe","info","checkInputResult","licenseKey","_defineProperty","toPropertyKey","writable","_toConsumableArray","arrayWithoutHoles","iterableToArray","unsupportedIterableToArray","nonIterableSpread","runtime","regeneratorRuntime","accidentalStrictMode","globalThis","Function","asyncGeneratorStep","gen","resolve","reject","_next","_throw","arg","Promise","then","_asyncToGenerator","fn","args","arrayLikeToArray","_arrayWithHoles","_iterableToArray","iter","_nonIterableRest","_slicedToArray","arrayWithHoles","iterableToArrayLimit","nonIterableRest","ownKeys","r","t","getOwnPropertySymbols","filter","getOwnPropertyDescriptor","_objectSpread","_defineProperty2","getOwnPropertyDescriptors","defineProperties","sendAdRequest","context","adRequestObj","iframeNum","requestHeader","requestBody","requestOptions","reqId","method","stringify","headers","fetch","response","reqCallback","reqCallbackInt","reqCallbackNa","collectDataForAdRequest","_x3","_collectDataForAdRequest","_callee2","uaData","clientHintData","topicsData","topicIds","topicTaxonomyVer","queryPermissionResult","pos","_context2","userAgentData","getHighEntropyValues","convertToHeaderFormat","t0","featurePolicy","allowsFeature","getTopics","topic","taxonomyVersion","parseInt","t1","uLat","uLon","locAcc","geolocation","getCurrentPosition","state","getGeolocation","coords","latitude","longitude","accuracy","t2","success","code","message","enableHighAccuracy","maximumAge","_getTopics","_callee3","topics","_context3","browsingTopics","serialize","v","serializeBrandArray","brand","uaDataFormated","brands","fullVersionList","mobile","model","platform","platformVersion","injectScript","script","src","head","ulrecImpressionObserver","config","impressionScrollDetector","_calculateViewRate","adIframe","postMessage","isImpression","vpon_ad_send_impression","responseMessage","vpon_ad_send_3rd_party_tracking","handleOpenBrowser","data","isCustomClose","clickPosition","clickPositionX","clickPositionY","closeBtnX","closeBtnY","isInterstitial","landingUrlObj","landingUrlQueryArr","landingUrl","querySelector","creativeView","creativeRect","closeBtnRect","isMultiPartAd","adCurrentState","entries","pair","origin","pathname","join","handleImpressionSafeLock","subtype","impressionHandlerStatus","coverCheckTimer","handleInternalBridge","_MessageChannel","MessageChannel","port1","port2","onmessage","event","_event$data","eventName","source","receiveMessageBySupport","messageObj","_event$data2","exposedPercentage","env","handleViewableDetection","ulrecImpressionScrollDetector","rootRect","adContainer","targetRect","viewableDetectionInfo","calculateIntersectionRect","iframePosition","intersectionPercent","intersectionRect","root","rootMargin","_entries$","intersectionRatio","boundingClientRect","IntersectionObserver","observe","dispatchEvent","CustomEvent","VponLogoPanel","logoContainer","drawLogo","logoContainerGenerator","logoImage","logoImageGenerator","logoContainerWidth","margin","padding","fontSize","disableVponLogo","zIndex","LOGO_PATH","setProperty","_slicedToArray2","hwnd","getAd","ctidObj","_ctidObj","reqURL","debugMode","screenDensity","qs","stringfyGAMResult","icookBidArr","groupId","devicePixelRatio","getMilliseconds","referer","debugForIcook","_x2","findTopWindowVponIframeWrapper","selector","topFrames","findInnerIframeTarget","iframes","finalResult","classList","contains","innerIframes","displayMultiAd","iframeSrc","urlSearch","urlSearchParams","URLSearchParams","clkid","isInTopframe","topWindow","isMultiAdHaveVideo","iframeXLRECContent","innerHTML","iframe13ISContent","decoder","innerText","iframe1","iframe1ClassName","add","iframe2Container","iframe2","iframe2Close","id","VponVideoContainer","createTextNode","adChoicePanel","handleSubTypeIframeSwitch","video","destroy","replaceAssets","isIframe1Ready","isIframe2Ready","isInCut2","iframe1Init","iframe2Init","initialVideo","initialFlrecEnv","setClickEvent","visibilityState","pause","checkMultiAdIsReady","videoConfig","track","progress","videoContainerSelector","VponVideo","create","onCanBePlay","VPADN_CREATIVE","paramsString","isDemo","clickTag","lnk","clkid_unencoded","prog","clickUrl","clickEndPoint","handleClick","beforeClick","support","clientX","toFixed","clientY","isIframe2Exist","vponTagOffsetTarget","topWindowVponIframeWrapper","iframe2TransitionEnd","videoContainer1","videoCurrentTime","getCurrentTime","playAtPosition","vponTagOffsetTop","switchOffset","play","videoContainer2","changeStyle","mute","countdown","handleCloseButtonClick","isFlrecTrackingSended","close","ajax","callbackfunc","addScript","addScriptUnderVponTag","prepend","handleMutationObserver","node","MutationObserver","mutations","observer","mutation","disconnect","extrcatParamsFromVponTag","handleReqCallbackToPubs","statusCode","callbackCode","printDebugToConsole","jsonObj","responseJsonObj","_extrcatParamsFromVpo","adURL","impURL","clickURL","vpadnSeq","vpadnSid","uid","aid","replaceAPIMacro","main_domain","parseUri","host","thirdPartyTagString","getUrlParameterByName","multipleThirdPartyTrackings","thr_track_array","locationURL","Location","locationUrlSearch","locationUrlSearchParams","handleUlrecAd","req","onload","all","DOMParser","parseFromString","vpon_ad_loaded","displayAd","ulrecAdLoaded","offsetWidth","childElements","children","maxWidth","max","child","removeProperty","aspectRatio","GAMContainer","insertAdjacentElement","VPADN_WEBSDK_ENV","acc","_e$data","isFullWidth","ulrecOuterLayout","assign","ulrecInnerLayout","ulrecBox","sendBeacon","img","debugForIcookTimer","timer","customCloseBtn","_extrcatParamsFromVpo2","_extrcatParamsFromVpo3","nativeObj","ad_label","displayNativeAd","registerNaClickAction","uri","$0","$1","$2","impCallback","timeId","other_frame_id","unobserve","naDom","observerVponNa","noticeRootInfo","iframeElement","getAdSizeFromFormat","_vponTag$getAttribute","_vponTag$getAttribute2","adSizeWithWidth","adSizeWithHeight","adContainerWidth","adContainerHeight","initFrame","_e$data2","_this","setRotateAd","setCustomClose","maxHeight","_getAdSizeFromFormat","newWidth","newHeight","adChoiceLogoArea","handleAdChoice","adChoiceArea","adChoiceAreaGenerator","stopPropagation","handleAdChoiceClick","handleAdChoiceClose","closeBtnImg","containerWidth","verticalAlign","adChoiceFormArea","adChoiceFormGenerator","backArrow","adChoiceBackArrowGenerator","_MessageChannel2","VponLogo","arrow","layout","isValidUrl","startsWith","hasValidIcon","icon_url","hasValidCover","cover_url","hasVideoContent","icon","videoContainer","firstChild","poster","autoplay","loop","countdownHidden","mutePosition","isPaused","cover","multiOnloadForCoverCheck","count","openBrowser","sendClick","vpsdk","frameIdSuffix","closeButtomTimer","time","_getParams","cd","iframe_contain","other_iframe_close_button","other_iframe_contain","iframe_close_button","transformCloseBtnPosition","transformCloseBtnPositionViaOrient","transformCloseBtnPositionViaScroll","condition","cssText","_e$data3","iframeInt","iframeIntTop","orientation","clickCallback","results","handleThrTrackArray","trackingTag","thrTrackObj","div","trackingList","trackingElement","trackingType","identifyTrackingType","trackingUrl","rawTrackingType","trackingTypeNumber","findElementFromOuterFrame","elementId","_findElementFromOuterFrame","useCustomCloseBtn","handleFunc","bind","initPositionStyle","contentDom","oriZIndex","marginBottom","objectKey","scrollEventPost","oriDisplay","scrollPos","iframeDom","docHeight","scrollHeight","winHeight","scrollPercent","scrollPercentRounded","diff","_toArray2","_require5","_require6","vpon_ad_create_multi_banner_iframe","checkNoNaADInsideVtag","_require7","adCounterManager","adContextController","globalContextController","adRequestPhase","vponTags","_vponTags","remainVponTag","adCounter","isExceedLimit","adId","adIdInstance","settingContext","handleAdRequest","_handleAdRequest","contextForAdReq","updateContextForAdRequest","_updateContextForAdRequest","adContext","getContext","prepareAdReqUrl","setContext","globalContext","adv_id","adv_id_lat","currentAdContext","Error","ev","containerDiv","adChoice","_regeneratorRuntime","define","Generator","Context","makeInvokeMethod","tryCatch","GeneratorFunction","GeneratorFunctionPrototype","defineIteratorMethods","_invoke","AsyncIterator","invoke","u","h","__await","callInvokeWithMethodAndArg","delegate","maybeInvokeDelegate","_sent","dispatchException","resultName","nextLoc","pushTryEntry","tryLoc","catchLoc","finallyLoc","afterLoc","tryEntries","resetTryEntry","completion","reset","values","asyncIterator","toStringTag","getPrototypeOf","g","displayName","isGeneratorFunction","setPrototypeOf","__proto__","awrap","async","reverse","pop","charAt","rval","handle","complete","finish","delegateYield","toPrimitive","String","Number","_toArray","_arrayWithoutHoles","_nonIterableSpread","_iterableToArrayLimit","SEID","DOCUMENT_REFERRER","secure","DMP_HOST","protocolName","urlEncodeComponent","generateSEID","testCanWriteCookies","ret","domainList","domainListLength","current","KEY","isBanLessthanLimit","vponBanCounter","isIntLessthanLimit","vponIntCounter","findVponSDK","scripts","injectObserver","createAd","vponTagCounter","bannerAd","intAd","initialBannerIframeHtmlTag","customZIndex","background","initialBannerCloseButton","close_btn","onclick","close_btn_img","iframeId1","iframeId2","ifrm1","marginLeft","container1","closeBtn1","bannerIframeWrap","initialBannerIframeWrap","ifrm2","container2","closeBtn2","contextObj","getAllContext","newContext","properties"],"mappings":"CAAS,SAAUA,GCIjB,QAASC,GAAoBC,GAG5B,GAAGC,EAAiBD,GACnB,MAAOC,GAAiBD,GAAUE,OAGnC,IAAIC,GAASF,EAAiBD,IAC7BI,EAAGJ,EACHK,GAAG,EACHH,WAUD,OANAJ,GAAQE,GAAUM,KAAKH,EAAOD,QAASC,EAAQA,EAAOD,QAASH,GAG/DI,EAAOE,GAAI,EAGJF,EAAOD,QAvBf,GAAID,KA4BJF,GAAoBQ,EAAIT,EAGxBC,EAAoBS,EAAIP,EAGxBF,EAAoBU,EAAI,SAASP,EAASQ,EAAMC,GAC3CZ,EAAoBa,EAAEV,EAASQ,IAClCG,OAAOC,eAAeZ,EAASQ,GAC9BK,cAAc,EACdC,YAAY,EACZC,IAAKN,KAMRZ,EAAoBmB,EAAI,SAASf,GAChC,GAAIQ,GAASR,GAAUA,EAAOgB,WAC7B,WAAwB,MAAOhB,GAAgB,SAC/C,WAA8B,MAAOA,GAEtC,OADAJ,GAAoBU,EAAEE,EAAQ,IAAKA,GAC5BA,GAIRZ,EAAoBa,EAAI,SAASQ,EAAQC,GAAY,MAAOR,QAAOS,UAAUC,eAAejB,KAAKc,EAAQC,IAGzGtB,EAAoByB,EAAI,GAGjBzB,EAAoBA,EAAoB0B,EAAI,MDM/C,SAAUtB,EAAQD,GEnExB,QAASwB,GAAuBC,GAC9B,MAAOA,IAAOA,EAAIR,WAAaQ,GAC7B,QAAWA,GAGfxB,EAAOD,QAAUwB,EAAwBvB,EAAOD,QAAQiB,YAAa,EAAMhB,EAAOD,QAAiB,QAAIC,EAAOD,SFyExG,SAAUC,EAAQD,EAASH,GAEjC,YAQA,SAAS6B,GAA2BhB,EAAGiB,GAAkB,GAAIC,GAAuB,mBAAXC,SAA0BnB,EAAEmB,OAAOC,WAAapB,EAAE,aAAe,KAAKkB,EAAI,CAAE,GAAIG,MAAMC,QAAQtB,KAAOkB,EAAKK,EAA4BvB,KAAOiB,GAAkBjB,GAAyB,gBAAbA,GAAEwB,OAAqB,CAAMN,IAAIlB,EAAIkB,EAAI,IAAI1B,GAAI,EAAOiC,EAAI,YAAiB,QAASZ,EAAGY,EAAGnB,EAAG,WAAe,MAAId,IAAKQ,EAAEwB,QAAiBE,MAAM,IAAiBA,MAAM,EAAOC,MAAO3B,EAAER,OAAWoC,EAAG,SAAWC,GAAM,KAAMA,IAAOC,EAAGL,GAAO,KAAM,IAAIM,WAAU,yIAA4I,GAA6CC,GAAzCC,GAAmB,EAAMC,GAAS,CAAY,QAASrB,EAAG,WAAeK,EAAKA,EAAGxB,KAAKM,IAAOM,EAAG,WAAe,GAAI6B,GAAOjB,EAAGkB,MAAsC,OAA9BH,GAAmBE,EAAKT,KAAaS,GAASP,EAAG,SAAWS,GAAOH,GAAS,EAAMF,EAAMK,GAAQP,EAAG,WAAe,IAAWG,GAAoC,MAAhBf,EAAW,QAAWA,EAAW,SAAO,QAAU,GAAIgB,EAAQ,KAAMF,MAC/9B,QAAST,GAA4BvB,EAAGsC,GAAU,GAAKtC,EAAL,CAAgB,GAAiB,gBAANA,GAAgB,MAAOuC,GAAkBvC,EAAGsC,EAAS,IAAIhC,GAAIL,OAAOS,UAAU8B,SAAS9C,KAAKM,GAAGyC,MAAM,GAAI,EAAiE,OAAnD,WAANnC,GAAkBN,EAAE0C,cAAapC,EAAIN,EAAE0C,YAAY5C,MAAgB,QAANQ,GAAqB,QAANA,EAAoBe,MAAMsB,KAAK3C,GAAc,cAANM,GAAqB,2CAA2CsC,KAAKtC,GAAWiC,EAAkBvC,EAAGsC,OAAzG,IAC7S,QAASC,GAAkBM,EAAKC,IAAkB,MAAPA,GAAeA,EAAMD,EAAIrB,UAAQsB,EAAMD,EAAIrB,OAAQ,KAAK,GAAIhC,GAAI,EAAGuD,EAAO,GAAI1B,OAAMyB,GAAMtD,EAAIsD,EAAKtD,IAAKuD,EAAKvD,GAAKqD,EAAIrD,EAAI,OAAOuD,GGiC5K,QAASC,KAMP,IALA,GACIC,GAEAC,EAHAC,EAAgBC,OAEhBC,KAGGF,IAAkBC,OAAOE,KAAK,CACnCL,EAAsBE,EAAcI,MACpC,KAAK,GAAIC,GAAM,EAAGA,EAAMP,EAAoBQ,OAAOjC,OAAQgC,IACzD,GAAIP,EAAoBQ,OAAOD,KAASL,EAAe,IAC+BO,GAD/BC,EAAA3C,EAC5BiC,EAAoBW,SAASC,qBAAqB,UAAS,KAApF,IAAAF,EAAA9C,MAAA6C,EAAAC,EAAArD,KAAAoB,MAAsF,IAA7EoC,GAAYJ,EAAA/B,KACfmC,GAAaC,gBAAkBZ,IACjCD,EAAOY,EAAaE,wBACpBX,EAAUY,MAAMC,EAAGhB,EAAKgB,EAAGC,EAAGjB,EAAKiB,MAEtC,MAAAnC,GAAA2B,EAAA/B,EAAAI,GAAA,QAAA2B,EAAA7B,IACDqB,EAAgBF,CAChB,QAGN,MAAOI,GAAUe,OAAO,SAACC,EAAaC,GACpC,OACEJ,EAAGG,EAAYH,EAAII,EAAaJ,EAChCC,EAAGE,EAAYF,EAAIG,EAAaH,KAE/BD,EAAG,EAAGC,EAAG,IHjEhB,GAAIrD,GAAyB3B,EAAoB,GAC7CoF,EAAezD,EAAuB3B,EAAoB,IAC1DqF,EAAW1D,EAAuB3B,EAAoB,IACtDsF,EAAsB3D,EAAuB3B,EAAoB,IACjEuF,EAAqB5D,EAAuB3B,EAAoB,IGvFpEwF,EAA2CC,EAAQ,GAA9CC,EAASF,EAATE,UAAWC,EAASH,EAATG,UAAWC,EAAYJ,EAAZI,aAErBC,EAAS,SAACxD,EAAQyD,GAEtB,IAAK,GADDC,MACK1F,EAAI,EAAGA,GAAKyF,EAAWzF,IAC9B0F,EAAI1F,GAAMgC,EAASyD,EAAazF,CAGlC,OAAO0F,IAGHC,EAAqB,SAACC,EAAUC,GAEpC,IAAKC,EAAeF,GAClB,OAAO,CAGT,KAAKG,IAAmB,CAEtB,IAAKC,EAAcJ,EAAUC,GAC3B,OAAO,CAKT,KAAKI,EAAkBL,EAAUC,GAC/B,OAAO,EAGX,OAAO,GAGHC,EAAiB,SAACF,GACtB,GAAIM,GAAU9B,SAAS+B,eAAeP,EAGtC,OAAmC,QADfM,EAAQE,MAAMC,QAChBC,eAKoB,UADfJ,EAAQE,MAAMG,WAChBD,eAOjBN,EAAgB,SAACJ,EAAUC,GAC/B,GAAIK,GAAU9B,SAAS+B,eAAeP,GAClClC,EAAOwC,EAAQ1B,wBACfgC,EAAUC,EAAsB/C,EAAKI,IAAK+B,EAAS,KACnDa,EAAWC,EAAqBjD,EAAKkD,KAAMf,EAAS,KACpDgB,GACFC,KAAM,EACNC,MAAO,EAKT,OAHAF,GAA0BG,EAA2BpD,OAAQiD,GAC7DL,EAAUK,EAAwBC,KAAON,EACzCE,EAAWG,EAAwBE,MAAQL,EACnCF,GAAW,GAAKE,GAAY,GAGhCT,EAAoB,SAACL,EAAUC,GACnC,GAAIK,GAAU9B,SAAS+B,eAAeP,GAClClC,EAAOwC,EAAQ1B,wBAEfyC,EAAaR,EAAsB/C,EAAKwD,OAAQrB,EAAS,KACzDsB,EAAYR,EAAqBjD,EAAK0D,MAAOvB,EAAS,KAEtDwB,EAASzD,OAAO0D,YAAcL,GAAc,GAAKrD,OAAO2D,WAAaJ,GAAa,CACtF,IAAIvD,QAAUE,IACZ,MAAOuD,EACF,IAAIA,EAAO,CAChB,GAAIR,IACFC,KAAM,EACNC,MAAO,GAELF,EAA0BG,EAA2BpD,OAAQiD,EACjEI,GAAaJ,EAAwBC,KAAOG,EAC5CE,EAAYN,EAAwBE,MAAQI,CAG5C,OADavD,QAAOE,IAAIwD,YAAcL,GAAc,GAAKrD,OAAOE,IAAIyD,WAAaJ,GAAa,EAG9F,OAAO,GAILH,EAA6B,QAA7BA,GAA8BQ,EAAUX,GAC5C,MAAIW,IAAY1D,IACP+C,GAEPA,EAA0BY,EAA4BD,EAASzD,OAAOK,SAAUoD,EAASpD,SAAUyC,GAC5FG,EAA2BQ,EAASzD,OAAQ8C,KAIjDY,EAA8B,SAACC,EAAeC,EAAad,GAC/D,GAAIe,GAAMF,EAAcrD,qBAAqB,SAE7C,KAAIuD,EAkBF,MAAOf,EAjBP,KAAK,GAAI7G,GAAI,EAAGsD,EAAMsE,EAAI5F,OAAQhC,EAAIsD,EAAKtD,IAAK,CAC9C,IACE,GAAIsC,GAAIsF,EAAI5H,GAAGuE,cAAcH,UAAYwD,EAAI5H,GAAG6H,gBAChD,MAAOzF,GACP,SAGF,GAAIE,GAAIsF,EAAI5H,EAEZ,KADWsC,EAAEuF,iBAAmBvF,EAAEiC,cAAcH,YACnCuD,EAAa,CACxB,GAAIjE,GAAOpB,EAAEkC,uBAGb,OAFAqC,GAAwBC,KAAOD,EAAwBC,KAAOpD,EAAKI,IACnE+C,EAAwBE,MAAQF,EAAwBE,MAAQrD,EAAKkD,KAC9DC,KAoCTiB,EAAkB,SAAClC,GASvB,IAAK,GANDmC,IAFY3D,SAAS+B,eAAeP,GAEpBJ,EAAOpB,SAAS4D,gBAAgBC,YAAa,EAAG5C,EAAU6C,qBAC1EC,EAAiB3C,EAAOpB,SAAS4D,gBAAgBI,aAAc,EAAG/C,EAAUgD,qBAE5EC,EAAU,EACVC,GAAclD,EAAU6C,mBAAqB,IAAM7C,EAAUgD,oBAAsB,GAAO,GAErFrI,EAAI,EAAGA,GAAKqF,EAAU6C,mBAAoBlI,IAGjD,IAAK,GAFDwI,GAAST,EAAc/H,GAElByI,EAAI,EAAGA,GAAKpD,EAAUgD,oBAAqBI,IAAK,CACvD,GAAIC,GAASP,EAAeM,GAExBE,EAAKvE,SAASwE,iBAAiBJ,EAAQE,EAE3C,IAAW,OAAPC,EAAJ,CAIA,GAAIE,GAAUF,EAAGG,aAAa,KAC1BlD,IAAYiD,GACdP,QALAA,KAUN,QAAIA,EAAUC,IAOVQ,EAAkB,SAAClD,GACvB,MAAO,UAAUA,GACf,GAAGjC,OAAOE,KAAOF,OAAOoF,KAAK,CAS3B,IAAK,GARDC,GAAapD,EAAQrB,wBACrBuD,EAAgBvC,EAAOyD,EAAWC,MAAO,EAAG7D,EAAU6C,oBACtDC,EAAiB3C,EAAOyD,EAAWE,OAAQ,EAAG9D,EAAUgD,qBAGxDC,OAFoCc,KAAvBxF,OAAOyF,YAA6BzF,OAAOyF,aAAejF,SAAS4D,iBAAmB5D,SAASkF,KAAKC,YAAcnF,SAASkF,MAAME,cACzGJ,KAAvBxF,OAAO6F,YAA6B7F,OAAO6F,aAAerF,SAAS4D,iBAAmB5D,SAASkF,KAAKC,YAAcnF,SAASkF,MAAMI,WACrI,GACVnB,GAAclD,EAAU6C,mBAAqB,IAAM7C,EAAUgD,oBAAsB,GAAO,GAErFrI,EAAI,EAAGA,GAAKqF,EAAU6C,mBAAoBlI,IAGjD,IAAK,GAFDwI,GAASS,EAAWvE,EAAIqD,EAAc/H,GAEjCyI,EAAI,EAAGA,GAAKpD,EAAUgD,oBAAqBI,IAAK,CACvD,GAAIC,GAASO,EAAWtE,EAAIwD,EAAeM,GAEvCE,EAAKvE,SAASwE,iBAAiBJ,EAAQE,EAE3C,IAAW,OAAPC,EAAJ,CAIA,GAAIgB,GAAYhB,EAAGgB,UACfC,EAAkBjB,EAAGkB,cAAgBlB,EAAGkB,cAAcF,cAAYP,IACjEO,EAAYA,EAAUG,QAAQ,QAAU,GAAYF,GAAkBA,EAAgBE,QAAQ,QAAU,IAC3GxB,QANAA,KAYN,QAAIA,EAAUC,GAGd,GAAItB,GAAazD,IAA+BmB,EAAKkB,EAAQrB,wBAAwB2E,OAAO,EACxFhC,EAAY3D,IAA+BkB,EAAKmB,EAAQrB,wBAAwB0E,MAAM,CAC1F,OAAGtF,QAAOE,IAAIwD,YAAcL,GAAc,GAAKrD,OAAOE,IAAIyD,WAAaJ,GAAa,MAMpFR,EAAuB,SAAC3E,EAAQ6D,EAASkE,GAC7C,GAAIC,GAAkBC,EAAmBpE,GACrCqE,EAAUF,EAAgBG,OAAOC,MAAM,KAAK,GAG5CrC,GAFUiC,EAAgBG,OAAOC,MAAM,KAAK,GAAGA,MAAM,KAAK,GAE1C5E,EAAO0E,EAAS7E,EAAU6C,qBAC1CmC,EAAS,CAMb,OALiB,KAAbN,EACFM,EAASrI,EAAS+F,EAAc1C,EAAUiF,cACpB,KAAbP,IACTM,EAASrI,EAAS+F,EAAc1C,EAAUiF,eAErCD,GAGH5D,EAAwB,SAACzE,EAAQ6D,EAASkE,GAC9C,GAAIC,GAAkBC,EAAmBpE,GAErC0E,GADUP,EAAgBG,OAAOC,MAAM,KAAK,GAClCJ,EAAgBG,OAAOC,MAAM,KAAK,GAAGA,MAAM,KAAK,IAE1DjC,EAAiB3C,EAAO+E,EAASlF,EAAUgD,qBAC3CgC,EAAS,CAMb,OALiB,KAAbN,EACFM,EAASrI,EAASmG,EAAe9C,EAAUmF,eACrB,KAAbT,IACTM,EAASrI,EAASmG,EAAe9C,EAAUmF,gBAEtCH,GAKHI,EAAa,SAAC5E,GAClB,GAAIwE,IACFK,OAAQ,GACRC,kBAAkB,GAGhBC,EAAa/E,EAAQiD,aAAazD,EAAUuF,WAC3CC,GAAsBD,KACzBP,EAAOK,QAAU,+BAEP,oBACDtH,KAAKwH,KACdP,EAAOK,QAAU,mCAGnBL,EAAOS,OAASC,EAAYlF,EAE5B,IAAI8E,GAAmB9E,EAAQiD,aAAazD,EAAUsF,iBAatD,OAVIN,GAAOM,mBAFPA,IACuB,QAArBA,EACwB,MACI,WAArBA,EACiB,SAEA,WAMvBN,GAQHU,EAAc,SAAClF,GACnB,GAAkD,OAA9CA,EAAQiD,aAAavD,EAAa4E,QACpC,KAAM,IAAI5H,WAAU,yCAGtB,IAAM4H,GAAStE,EAAQiD,aAAavD,EAAa4E,QAAQ7D,cACnD0E,GACJC,IAAK,MACLC,QAAS,YAAa,aAAc,aAAc,aAAc,cAChEC,IAAK,OAEDd,EAAS5J,OAAO2K,KAAKJ,GAAeK,KAAK,SAACC,GAC9C,OAA+C,IAAxCN,EAAcM,GAAKxB,QAAQK,IAGpC,KAAKE,EACH,KAAM,IAAI9H,WAAU,sDAGtB,OAAO8H,IAIHQ,EAAwB,SAACU,GAC7B,WAAInC,IAAamC,GAAuB,IAAfA,EAAKC,QAe1BC,EAAsB,WAC1B,GAAM5F,GAAUzB,SAASsH,iBAAiB,OAC1C,OAAOC,SAAQ9F,EAAQ7D,SAGnB+D,EAAkB,WACtB,IAEE,MADAnC,QAAOE,IAAIM,UACJ,EACP,MAAO5B,GACP,OAAO,IAILyH,EAAqB,SAACpE,GAE1B,GAAI+F,KAaJ,OAVc,MADDb,EAAYlF,KACL+F,EAAcC,UAAYhG,EAAQiD,aAAazD,EAAUyG,iBAAmB,IAChGF,EAAczB,OAAStE,EAAQiD,aAAazD,EAAU8E,QACtDyB,EAAcG,IAAM1G,EAAU0G,IAC9BH,EAAcI,IAAMnG,EAAQiD,aAAazD,EAAUuF,YACnDgB,EAAcK,OAAiD,GAAxCpG,EAAQiD,aAAa,gBAAuB,EAAI,EACvE8C,EAAcM,kBAAoBrG,EAAQiD,aAAazD,EAAU6G,oBAAsB,KACvFN,EAAcO,SAAWtG,EAAQiD,aAAazD,EAAU8G,WAAa,OACrEP,EAAcQ,IAAMhI,SAAS4D,gBAAgBI,aAC7CwD,EAAcS,IAAMjI,SAAS4D,gBAAgBC,YAEtC2D,GAGHU,EAAkB,SAACC,EAASX,GAEhC,GAAIY,GAAY,EAChB,IAAIZ,EAAe,CACjB,IAAK,GAAIN,KAAOM,GACdY,GAAalB,EAAM,IAAMmB,mBAAmBb,EAAcN,IAAQ,GAEpEkB,GAAY,IAAMA,EAAUE,UAAU,EAAGF,EAAUxK,OAAS,GAI9D,MAAO,KAAP2K,OAD8BJ,EAAUC,IAIpCI,EAAqB,cAAAC,IAAG,EAAH3H,EAAA,SAAAH,EAAA,QAAA+H,KAAG,QAAAC,GAAOzM,GAAI,MAAAyE,GAAA,QAAAiI,KAAA,SAAAC,GAAA,cAAAA,EAAAC,KAAAD,EAAArK,MAAA,aAAAqK,GAAArK,KAAA,EAC1BuK,UAAUC,YAAYC,OAAO/M,QAAM,cAAA2M,GAAAK,OAAA,SAAAL,EAAAM,KAAA,wBAAAN,GAAAO,SAAAT,KACjD,iBAF0BU,GAAA,MAAAZ,GAAAa,MAAA,KAAAC,eAIrBC,EAAQ,SAACC,GACb,IACE,QAAI,GAAIC,KAAID,GAKZ,MAAME,GACN,OAAO,IAILC,EAAkB,SAACH,GACvB,QAAKD,EAAMC,IAII,GAAIC,KAAID,GAETI,WAAa3I,EAAU2I,UAGjCC,EAAY,WAChB,GAAMC,GAAYhB,UAAUiB,SAE5B,OAAOzC,SAAQwC,EAAUE,MADX,wEAIVC,EAAU,WACd,IACE,GAAI1K,OAAOG,OAAOK,SAAU,CAG1B,OAFuB,EAAHa,EAAA,SAAOrB,OAAOG,OAAOK,SAASsH,iBAAiB,oCAE7C6C,KAAK,SAAAC,GACzB,MAAOA,GAAO3G,kBAAoBzD,WAGpC,OAAO,EAET,MAAM2J,GACN,OAAO,IASLU,EAAa,SAAAC,GACjB,GAAMC,GAAK,wFACLC,EAASD,EAAGE,KAAK,GAADlC,OAAI+B,GAE1B,OAAO/C,SAAQiD,IAQXE,EAAyB,SAACjJ,GAC9B,GAAMkJ,GAAoBlJ,EAAQmJ,mBAClC,KAAKD,EAAkB/M,OAErB,MADAiN,SAAQlB,MAAM,8CACP,CAGT,IAAI1D,IAAS,CAwBb,OAtBA0E,GAAkBG,QAAQ,SAACC,GACzB,OAAQA,GACN,IAAK5J,GAAa6J,aAAaxE,WAE1BrF,EAAa8J,MAAMzE,WAAWxH,KAAKyC,EAAQiD,aAAaqG,MAEzDF,QAAQlB,MAAM,gDACd1D,GAAS,EAEX,MACF,KAAK9E,GAAa6J,aAAajF,QAIpB,IAFP5E,EAAa+J,cAAcxF,QACzBjE,EAAQiD,aAAaqG,MAGvBF,QAAQlB,MAAM,sCACd1D,GAAS,MAKVA,GAQHkF,EAAwB,WAAmB,GAAlBC,GAAQ7B,UAAA3L,OAAA,OAAAoH,KAAAuE,UAAA,GAAAA,UAAA,MAC9BrC,EAAwBkE,EAAxBlE,IAAKnJ,EAAmBqN,EAAnBrN,MAAOsN,EAAYD,EAAZC,OAEpB,OAAInE,IAAsB,gBAARA,IACjB2D,QAAQS,KAAK,wCACN,GAGJvN,GAA0B,gBAAVA,IACnB8M,QAAQS,KAAK,0CACN,IAGJD,GAA+B,YAAnB,EAAAzK,EAAA,SAAOyK,KAAwB5N,MAAMC,QAAQ2N,KAC5DR,QAAQS,KAAK,6CACN,GAQT3P,GAAOD,SACL6F,qBACAG,iBACAE,gBACAC,oBACAe,6BACAS,8BACAK,kBACAiB,iBACApC,uBACAF,wBACAgE,aACAM,cACAF,wBACAY,sBACAxB,qBACAqC,kBACA9I,+BACAuC,kBACA6G,wBACAgB,QACAI,kBACAE,YACAI,UACAG,aACAK,yBACAS,0BHmEI,SAAUxP,EAAQD,EAASH,GAEjC,YI9lBAI,GAAOD,QAAQuF,WACbsK,UAAU,MACVC,EAAG,GACHC,eAAgB,aAAc,mBAC9BlF,iBAAkB,mBAClBmF,cAAe,gBACfC,UAAW,YACXC,WAAY,aACZ9D,kBAAmB,sBACnB+D,UAAU,EACVC,gBAAiB,QACjBC,mBAAoB,WACpBC,YAAa,wCACbC,WAAY,aACZC,gBACAC,YAAa,eACbC,2BAA4B,EAC5BC,0BAA2B,EAC3BC,MAAO,QACPvG,OAAQ,iBAERwG,gBAAiB,oBACjBC,iBAAkB,SAClBC,sBAAuB,IACvBC,sBAAuB,IACvBC,aAAa,EACb5E,SAAU,YACV6E,QAAS,GACTpG,WAAY,sBACZqG,qCAAsC,GACtCC,QAAS,UACTC,eAAgB,KAChBC,cAAe,YACftF,eAAgB,cAChBuF,mBAAoB,iBACpBhJ,oBAAqB,EACrBH,mBAAoB,EACpBoJ,aAAc,GACdC,SAAU,kCACVxF,IAAK,qBACLyF,uBAAwB,mBACxBC,oBAAqB,sBACrBC,2BAA4B,6BAC5BlH,cAAe,EACfF,aAAc,EACdqH,mBAAoB,EACpBC,gBAAiB,EACjBC,kBAAmB,KACnBhM,QAAS,OACTiM,kBAAkB,EAClBC,eAAgB,6BAChBC,WACEC,aAAc,cACdC,UAAW,WACXC,YAAa,aACbC,OAAQ,QACRC,cAAe,eACfC,WAAY,aAEdC,IAAK,MACLC,IAAK,MACLC,SAAU,WACVC,YAAa,mDACbC,iBAAkB,yvCAClBC,YAAa,kpDAGf7S,EAAOD,QAAQwF,WACbuN,SAAU,SACV5E,SAAU,mBACV6E,MACEC,MAAO,uBACPC,QAAS,kBACTC,WAAY,0BAIhBlT,EAAOD,QAAQoT,iBACbC,YAAY,EACZ7H,KAAM,SAAU,WAAY,YAAa,WAAY,OAAQ,WAAY,OAAQ,OAAQ,WAAY,OAAQ,YAAa,OAAQ,QAAS,UAC3I8H,GACE9S,KAAM,WACN+S,OAAQ,6BAEVA,QACEC,OAAQ,0IACRC,MAAO,qMAIXxT,EAAOD,QAAQ0T,cACbC,GACEC,QAAS,uUACTC,OAAS,GAEXC,GACEF,QAAS,+RACTC,OAAS,GAEXE,GACEH,QAAS,+RACTC,OAAS,IAIb5T,EAAOD,QAAQgU,gBAAkB,gDACjC/T,EAAOD,QAAQiU,YACbC,OAAS,IACTC,IAAM,MACNC,KAAO,KACPC,QAAU,IACVC,YAAc,MACdC,kBAAoB,UACpBC,IAAM,MACNC,WAAa,WACbC,YAAc,WACdC,sBAAwB,YACxBC,QAAU,IACVC,SAAU,WACVC,QAAS,WAGX7U,EAAOD,QAAQ+U,YACbpB,EAAG,sGACHG,EAAG,qDACHC,EAAG,mDACHiB,EAAG,qDACHC,EAAG,yEACHC,EAAG,oDACHC,EAAG,GACHC,GAAI,IAGNnV,EAAOD,QAAQyF,cACbqF,WAAY,sBACZ+F,gBAAiB,oBACjBJ,YAAa,eACbpG,OAAQ,iBACRgL,WAAY,eACZzE,MAAO,QACP0E,OAAQ,eACRC,aAAc,gBACdC,QAAS,YACTC,eAAgB,mBAChBC,YAAa,oBACbtJ,kBAAmB,sBACnBJ,eAAgB,cAChBsF,cAAe,YACfF,QAAS,UACTG,mBAAoB,iBACpBtF,IAAK,qBACLyF,uBAAwB,mBACxBlM,WACEuN,SAAU,WACV5E,SAAU,mBACV6E,MACE2C,UAAW,oBAGfC,YACED,WACE1D,eAAgB,6BAChB4D,YAAa,YAGjBC,YAEIzG,UAAW,YACX0G,aAAc,WAGd1G,UAAW,aACX0G,aAAc,WAGd1G,UAAW,aACX0G,aAAc,WAGd1G,UAAW,aACX0G,aAAc,WAGd1G,UAAW,KACX0G,aAAc,OAGd1G,UAAW,KACX0G,aAAc,OAGlBC,eACE5K,OAAQ,EACRD,GAAI,GAENqE,eACE,YACA,aACA,aACA,aACA,aACA,KACA,MAEFD,OACEzE,WAAY,oBACZ8D,KAAM,yFAERU,cACEjF,OAAQ,iBACRS,WAAY,uBAEdmL,QACEC,IAAK,YACLtH,KAAM,aACNuH,uBAAwB,WACxBC,KAAM,cAERC,cACEC,QAAS,0BACTC,QAAS,2BACTC,QAAS,0BACTC,QAAS,8BACTC,QAAS,4BAEXC,QACEC,KAAM,qnDACNC,SACE,y9IACFC,iBAAkB,kDAClBC,QAAS,4oBJmlBP,SAAU9W,EAAQD,GKzzBxB,QAASgX,GAAQtW,GACf,yBAEA,OAAQT,GAAOD,QAAUgX,EAAU,kBAAqBnV,SAAU,gBAAmBA,QAAOC,SAAW,SAAUpB,GAC/G,aAAcA,IACZ,SAAUA,GACZ,MAAOA,IAAK,kBAAqBmB,SAAUnB,EAAE0C,cAAgBvB,QAAUnB,IAAMmB,OAAOT,UAAY,eAAkBV,IACjHT,EAAOD,QAAQiB,YAAa,EAAMhB,EAAOD,QAAiB,QAAIC,EAAOD,QAAUgX,EAAQtW,GAE5FT,EAAOD,QAAUgX,EAAS/W,EAAOD,QAAQiB,YAAa,EAAMhB,EAAOD,QAAiB,QAAIC,EAAOD,SL+zBzF,SAAUC,EAAQD,EAASH,GAEjC,YAOA,SAAS6B,GAA2BhB,EAAGiB,GAAkB,GAAIC,GAAuB,mBAAXC,SAA0BnB,EAAEmB,OAAOC,WAAapB,EAAE,aAAe,KAAKkB,EAAI,CAAE,GAAIG,MAAMC,QAAQtB,KAAOkB,EAAKK,EAA4BvB,KAAOiB,GAAkBjB,GAAyB,gBAAbA,GAAEwB,OAAqB,CAAMN,IAAIlB,EAAIkB,EAAI,IAAI1B,GAAI,EAAOiC,EAAI,YAAiB,QAASZ,EAAGY,EAAGnB,EAAG,WAAe,MAAId,IAAKQ,EAAEwB,QAAiBE,MAAM,IAAiBA,MAAM,EAAOC,MAAO3B,EAAER,OAAWoC,EAAG,SAAWC,GAAM,KAAMA,IAAOC,EAAGL,GAAO,KAAM,IAAIM,WAAU,yIAA4I,GAA6CC,GAAzCC,GAAmB,EAAMC,GAAS,CAAY,QAASrB,EAAG,WAAeK,EAAKA,EAAGxB,KAAKM,IAAOM,EAAG,WAAe,GAAI6B,GAAOjB,EAAGkB,MAAsC,OAA9BH,GAAmBE,EAAKT,KAAaS,GAASP,EAAG,SAAWS,GAAOH,GAAS,EAAMF,EAAMK,GAAQP,EAAG,WAAe,IAAWG,GAAoC,MAAhBf,EAAW,QAAWA,EAAW,SAAO,QAAU,GAAIgB,EAAQ,KAAMF,MAC/9B,QAAST,GAA4BvB,EAAGsC,GAAU,GAAKtC,EAAL,CAAgB,GAAiB,gBAANA,GAAgB,MAAOuC,GAAkBvC,EAAGsC,EAAS,IAAIhC,GAAIL,OAAOS,UAAU8B,SAAS9C,KAAKM,GAAGyC,MAAM,GAAI,EAAiE,OAAnD,WAANnC,GAAkBN,EAAE0C,cAAapC,EAAIN,EAAE0C,YAAY5C,MAAgB,QAANQ,GAAqB,QAANA,EAAoBe,MAAMsB,KAAK3C,GAAc,cAANM,GAAqB,2CAA2CsC,KAAKtC,GAAWiC,EAAkBvC,EAAGsC,OAAzG,IAC7S,QAASC,GAAkBM,EAAKC,IAAkB,MAAPA,GAAeA,EAAMD,EAAIrB,UAAQsB,EAAMD,EAAIrB,OAAQ,KAAK,GAAIhC,GAAI,EAAGuD,EAAO,GAAI1B,OAAMyB,GAAMtD,EAAIsD,EAAKtD,IAAKuD,EAAKvD,GAAKqD,EAAIrD,EAAI,OAAOuD,GMjb5K,QAASwT,GAAsBC,GAO7B,IANA,GACIvT,GADAE,EAAgBC,OAEhBC,KACAH,EAAOsT,EACPA,EAAQxS,wBACRJ,SAASkF,KAAK9E,wBACXb,IAAkBC,OAAOE,KAAK,CACnCL,EAAsBE,EAAcI,MAAO,IAG1CkT,GAH0CC,EAAA1V,EAClBiC,EAAoBW,SAASC,qBACpD,UACD,KAFD,IAAA6S,EAAA7V,MAAA4V,EAAAC,EAAApW,KAAAoB,MAEG,IAFMoC,GAAY2S,EAAA9U,KAGnB,IAAImC,EAAaC,gBAAkBZ,EAAe,CAChD,GAAMwT,GAAY7S,EAAaE,uBAC/BX,GAAUY,MAAOC,EAAGyS,EAAUzS,EAAGC,EAAGwS,EAAUxS,MAEjD,MAAAnC,GAAA0U,EAAA9U,EAAAI,GAAA,QAAA0U,EAAA5U,IACDqB,EAAgBF,CAChB,OAYF,MATAI,GAAYA,EAAUe,OACpB,SAACC,EAAaC,GACZ,OACEJ,EAAGG,EAAYH,EAAII,EAAaJ,EAChCC,EAAGE,EAAYF,EAAIG,EAAaH,KAGlCD,EAAGhB,EAAKgB,EAAGC,EAAGjB,EAAKiB,KAGrBD,EAAGb,EAAUa,EACbC,EAAGd,EAAUc,EACbb,IAAKJ,EAAKI,IACVoD,OAAQxD,EAAKwD,OACbN,KAAMlD,EAAKkD,KACXQ,MAAO1D,EAAK0D,MACZ8B,MAAOxF,EAAKwF,MACZC,OAAQzF,EAAKyF,QAkCjB,QAASiO,KACP,GAAIC,QAAuC,kBAAtBA,QAAOC,WAC1B,MAAOD,QAAOC,YAGhB,IAAMC,GAAK,WACT,OAA+B,OAArB,EAAIC,KAAKC,UAAuB,GAAGzU,SAAS,IAAI0J,UAAU,GAGtE,OACE6K,KACAA,IACA,IACAA,IACA,IACAA,IACA,IACAA,IACA,IACAA,IACAA,IACAA,IAqCJ,QAASG,KAAwB,GAAlBC,GAAYhK,UAAA3L,OAAA,OAAAoH,KAAAuE,UAAA,GAAAA,UAAA,GAAG,EACxBxL,EAAQwV,CAEZ,OAAO,YAAa,GAAZC,GAAGjK,UAAA3L,OAAA,OAAAoH,KAAAuE,UAAA,GAAAA,UAAA,GAAG,CAEZ,OADAxL,IAASyV,GAOb,QAASC,KACP,MAAOC,GAQT,QAASC,KACP,GAEID,GAFIE,EAA0CC,EAA1CD,eAAgBE,EAA0BD,EAA1BC,UAAWC,EAAeF,EAAfE,WAC7BC,EAAeC,GAKnBP,GADElU,OAAO0U,cAAuD,kBAAhC1U,QAAO0U,aAAaC,QAElDP,EAAezS,EAAawQ,OAAOrH,OACnC9K,OAAO0U,aAAaC,QAAQhT,EAAawQ,OAAOrH,OAChD0I,IAGAY,EAAezS,EAAawQ,OAAOrH,OACnC0I,IAIA3I,EAAWqJ,KACbA,EAAO,MAAHnL,OAASmL,EAAI,KAAAnL,QAAI,GAAI6L,OAAOC,YAG9B7U,OAAO0U,cACT1U,OAAO0U,aAAaI,QAAQnT,EAAawQ,OAAOrH,KAAMoJ,EAGxD,IAAMrI,IACJqD,KAAM,IACN,UAAW,QACX6F,OAAQP,EAGVF,GAAU3S,EAAawQ,OAAOrH,KAAMoJ,EAAMrI,EAE1C,IAAIyG,GAAO8B,EAAezS,EAAawQ,OAAOG,KAG9C,KACGA,GACDmC,EAAsBjU,SAASwU,YAAcR,IAC5C,GAAIS,QAAO,QALVvN,IAKqBlI,KAAK8S,GAC5B,CACAA,EAAO,GAAHvJ,WAPFrB,GAOW,KAAAqB,OAAI6K,KAAKsB,MAAO,EAAI,GAAIN,MAAU,KAC/C,IAAM/I,IACJqD,KAAM,IACN,UAAW,KACX6F,OAAQP,EAEVF,GAAU3S,EAAawQ,OAAOG,KAAMA,EAAMzG,GAG5C,GACiE,MAA/DuI,EAAezS,EAAawQ,OAAOE,yBAC4B,MAA/D+B,EAAezS,EAAawQ,OAAOE,wBACnC,CAGAkC,EAAWC,EAFKW,EAAejB,GACvBpJ,OA4PZ,QAASsK,GAAehP,GACtB,GAAQ1E,GAAcC,EAAdD,UACF2T,EAAW,GAAInL,KAAI,GAADnB,OACnBrH,EAAUuN,UAAQlG,OAAGrH,EAAU2I,UAAQtB,OAAGrH,EAAUwN,KAAK2C,WAO9D,OAJAhV,QAAO2K,KAAKpB,GAAiBkF,QAAQ,SAAC5D,GACpC2N,EAASC,aAAaC,OAAO7N,EAAKmB,mBAAmBzC,EAAgBsB,OAGhE2N,ENzCT,GAAI3X,GAAyB3B,EAAoB,GM70BjDwF,GN80B0B7D,EAAuB3B,EAAoB,IAC9C2B,EAAuB3B,EAAoB,IAC5C2B,EAAuB3B,EAAoB,KMh1BtByF,EAAQ,IAA3CwI,EAAKzI,EAALyI,MAAO7C,EAAW5F,EAAX4F,YAAa0D,EAAUtJ,EAAVsJ,WAC5B2K,EAAyBhU,EAAQ,GAAzBG,EAAY6T,EAAZ7T,aACR8T,EAAkCjU,EAAQ,GAAlCmK,EAAqB8J,EAArB9J,sBACR+J,EAAkClU,EAAQ,IAAlCiT,EAAqBiB,EAArBjB,sBAsFFkB,EAAW,SAACC,EAAKC,GACrB,OAA4D,IAArDD,EAAI1P,QAAQ2P,EAAQD,EAAIxX,OAASyX,EAAOzX,SAG3C0X,EAAK,WACT,MAAOlC,MAAKsB,MAA4B,OAArB,EAAItB,KAAKC,WACzBzU,SAAS,IACT0J,UAAU,IAGTiN,EAAU,WACd,MACED,KACAA,IACA,IACAA,IACA,IACAA,IACA,IACAA,IACA,IACAA,IACAA,IACAA,KAIEE,EAAY,SAACC,GACjB,GAAIC,GAAU1V,SAAS2R,OACnBgE,EAAUD,EAAQhQ,QAAQ,IAAM+P,EAAS,IAI7C,KAHgB,GAAZE,IACFA,EAAUD,EAAQhQ,QAAQ+P,EAAS,OAErB,GAAZE,EACFD,EAAU,SACL,CACLC,EAAUD,EAAQhQ,QAAQ,IAAKiQ,GAAW,CAC1C,IAAIC,GAAQF,EAAQhQ,QAAQ,IAAKiQ,IACnB,GAAVC,IACFA,EAAQF,EAAQ9X,QAElB8X,EAAUG,SAASH,EAAQpN,UAAUqN,EAASC,IAEhD,MAAOF,IAYHI,EAAU,SAACC,GACf,OAC2E,IAAxEvW,OAAOuJ,UAAYvJ,OAAOuJ,UAAUiB,UAAY,IAAItE,QAAQqQ,IAI3DC,EAAW,WACf,MAAOF,GAAQ,UAAYA,EAAQ,UAAYA,EAAQ,YAGnDG,EAAW,WACf,MAAOH,GAAQ,YAGXI,EAAoB,WACxB,MAAOJ,GAAQ,UAAYA,EAAQ,UAG/BK,EAAqB,SAAC1M,GAC1B,GAAI2M,MACAlP,EAAM,GACNnJ,EAAQ,EAEZ,KAAyB,GAArB0L,EAAI/D,QAAQ,KAAY,CAC1B,GAAI2Q,GAAM5M,EAAIzD,MAAM,KAAK,GAAGA,MAAM,IAClC,KAAK,GAAIpK,KAAKya,GACZnP,EAAMmP,EAAIza,GAAGoK,MAAM,KAAK,GACxBjI,EAAQsY,EAAIza,GAAGoK,MAAM,KAAK,GAEtBjI,EAAM2H,QAAQ,WAAa,GAAK3H,EAAM2H,QAAQ,eAAiB,EACjE3H,EAAQuY,kBAAkBvY,GAInBA,EAAM2H,QAAQ,MAAQ,IAC7B3H,EAAQA,EAAMwY,QAAQ,MAAO,QAE/BxY,EAAQyY,mBAAmBzY,GAEvBA,EAAM2H,QAAQ,SAAW,GAAK3H,EAAM2H,QAAQ,SAAW,IACzD3H,EAAQA,EAAMwY,QAAQ,QAAS,QAGjCH,EAAOlP,GAAOnJ,EAGlB,MAAOqY,IAGHK,EAAiB,SAACC,EAAOC,EAAkBC,GAC/C,GAAI3L,GAAQ,GAAIwJ,QAAO,SAAWkC,EAAmB,MAAO,IAC5D,OAAOD,GAAMH,QAAQtL,EAAO2L,IAGxBjC,EAAiB,SAACkC,GACtB,IACE,GAAiB,OAAbA,OAAkC7R,KAAb6R,EACvB,OACEvM,KAAM,KACNwM,UAAW,KAGf,IAAmC,IAA/BD,EAAS7Q,MAAM,KAAKpI,OAAc,CACpC,GAAMmZ,GAAUF,EAAS7Q,MAAM,KAAK,GAC9BsE,EAAOuM,EAAS7Q,MAAM,KAAK,GAAGA,MAAM,KAAK,GACzC8Q,EAAYD,EAAS7Q,MAAM,KAAK,EAOtC,OALAxG,QAAO0U,cACL1U,OAAO0U,aAAaI,QAClB,aAAY,GAAA/L,OACTwO,EAAO,KAAAxO,OAAI+B,EAAI,KAAA/B,OAAIuO,KAGxBC,UACAzM,OACAwM,aAGF,OACExM,KAAMuM,EACNC,UAAW,MAGf,MAAOnN,GACPkB,QAAQmM,IAAIrN,KAUZsN,EAAW,KAETC,EAAe,SAAC3S,GAAwC,GAApC4S,GAAM5N,UAAA3L,OAAA,OAAAoH,KAAAuE,UAAA,GAAAA,UAAA,GAAG,KAAM6N,EAAE7N,UAAA3L,OAAA,OAAAoH,KAAAuE,UAAA,GAAAA,UAAA,GAAG,EAAG8N,EAAQ9N,UAAA3L,OAAA,EAAA2L,UAAA,OAAAvE,EACvD,KAAI,GA0BOsS,GAAT,QAASA,KACPzM,QAAQmM,IAAI,yBACZO,aAAaN,GACb1S,EAAGiT,oBAAoB,gBAAiBF,GACxCD,IA5BF,IADAxM,QAAQmM,IAAI,UAAYG,GACT,QAAXA,EAGF,MAFAI,cAAaN,OACb1S,GAAGiT,oBAAoB,gBAAiBF,EAI3B,QAAXH,IACFC,EAAMK,MAAMC,WAAWN,IAAwB,EAAjBM,WAAWN,GACzC7S,EAAGvC,MAAM2V,QAAU,EACnBC,WAAW,WACTrT,EAAGvC,MAAM6V,WAAa,WAAHtP,OAAc6O,EAAE,KACnC7S,EAAGvC,MAAM2V,QAAU,GAClB,GACqB,kBAAbN,KACTJ,EAAWW,WAAW,WACpB/M,QAAQmM,IAAI,YACZO,aAAaN,GACb1S,EAAGiT,oBAAoB,gBAAiBF,GACxCD,KACM,IAALD,EAAY,KACf7S,EAAGuT,iBAAiB,gBAAiBR,KAUzC,MAAOlZ,GACPyM,QAAQS,KAAKlN,KAIb2Z,EAAS,KAEPC,EAAO,SAACzT,GAA4B,GAAxB6S,GAAE7N,UAAA3L,OAAA,OAAAoH,KAAAuE,UAAA,GAAAA,UAAA,GAAG,EAAG0O,EAAI1O,UAAA3L,OAAA,OAAAoH,KAAAuE,UAAA,GAAAA,UAAA,GAAG,IAO/B,IANIwO,GACFG,cAAcH,GAKS,SAArBxT,EAAGvC,MAAMC,QAAb,CAGA,GAAW,IAAPmV,EAGF,MAFA7S,GAAGvC,MAAMC,QAAU,aACnBsC,EAAGvC,MAAM2V,QAAU,EAGrB,IAAMQ,GAAgB,OAATF,EACTN,EAAUQ,EAAO,EAAI,EAErBC,EAAgB,IAALhB,CACE,KAAbgB,IAAgBA,EAAW,GAC/B,IAAIC,GAHW,GAGMD,CACjBD,KACF5T,EAAGvC,MAAMC,QAAU,QACnBsC,EAAGvC,MAAM2V,QAAUA,EAGrB,IAAMW,GAAO,WACXX,EAAUQ,EAAOR,EAAUU,EAAMV,EAAUU,EAEvCV,GAAW,IACbO,cAAcH,GACdJ,EAAU,EACVpT,EAAGvC,MAAMC,QAAU,QAGjB0V,GAAW,IACbO,cAAcH,GACdJ,EAAU,GAEZpT,EAAGvC,MAAM2V,QAAUA,EAErBI,GAASQ,YAAYD,EAxBN,MA2BXE,EAAY,WAAiC,GAKxB1Y,GALR2Y,EAAWlP,UAAA3L,OAAA,OAAAoH,KAAAuE,UAAA,GAAAA,UAAA,GAAGmP,SAASC,KAClClP,EAAM,GAAIC,KAAI+O,GACdrC,KACAwC,EAAYnP,EAAIoP,OAASpP,EAAIoP,OAAOtC,QAAQ,MAAO,IAAIvQ,MAAM,QAC/DjI,EAAQ,GAAGgC,EAAA3C,EACCwb,EAAS,KAAzB,IAAA7Y,EAAA9C,MAAA6C,EAAAC,EAAArD,KAAAoB,MAA2B,IAAlBoJ,GAAGpH,EAAA/B,KACNmJ,KACFnJ,EAAQmJ,EAAIlB,MAAM,KAClBoQ,EAAOrY,EAAM,IAAMA,EAAM,KAE5B,MAAAK,GAAA2B,EAAA/B,EAAAI,GAAA,QAAA2B,EAAA7B,IACD,MAAOkY,IAGH0C,EAAoB,SAACC,GACzB,GAAKA,GAAY,yBAA2BA,GAA5C,CAOA,IAAK,GAHCC,GAAerG,EAAsBoG,GACvCE,EAAU,EAELrd,EAAI,EAAGA,GAAK,GAAIA,IAAK,CAC5B,GAAMsd,IACJ5Y,EAAG0Y,EAAa1Y,EAAI0Y,EAAalU,MAAQ,EACzCvE,EAAGyY,EAAazY,EAAKyY,EAAajU,OAASnJ,EAAK,GAIhD4D,QAAOE,IAAIM,SAASwE,iBAAiB0U,EAAS5Y,EAAG4Y,EAAS3Y,KAAOwY,GAEjEE,IAIJ,OACEE,aAAcF,EAAU,GAAK,MAyG3BG,EAAgB,WAAgC,GAA/BV,GAAQnP,UAAA3L,OAAA,OAAAoH,KAAAuE,UAAA,GAAAA,UAAA,GAAG/J,OAAOkZ,QACvC,IAAKlP,EAAMkP,EAASC,MAApB,CAIA,GAAQ9O,GAAa6O,EAAb7O,SACFwP,EAAkBxP,EAAS7D,MAAM,IAGvC,OAAIqT,GAAgBzb,QAAU,EAE1Byb,EAAgBA,EAAgBzb,OAAS,GACzC,IACAyb,EAAgBA,EAAgBzb,OAAS,GAKtCiM,IAqCHhE,EAAqB,SAACpE,GAC1B,GAAI+F,KAmBJ,OAhBc,MADCb,EAAYlF,KAEzB+F,EAAcC,UACZhG,EAAQiD,aAAavD,EAAauG,iBAAmB,IAEzDF,EAAczB,OAAStE,EAAQiD,aAAavD,EAAa4E,QACzDyB,EAAcG,IAAMxG,EAAawG,IACjCH,EAAcI,IAAMnG,EAAQiD,aAAavD,EAAaqF,YACtDgB,EAAcK,OAAsD,GAA7CpG,EAAQiD,aAAavD,EAAa6P,QAAe,EAAI,EAC5ExJ,EAAcM,kBAAoBrG,EAAQiD,aACxCvD,EAAa2G,mBAEfN,EAAcO,SACZtG,EAAQiD,aAAavD,EAAa4G,WAAa,OACjDP,EAAcQ,IAAMhI,SAAS4D,gBAAgBI,aAC7CwD,EAAcS,IAAMjI,SAAS4D,gBAAgBC,YAEtC2D,GAiBLkM,EAAO,GA8ELG,GACJE,WAAY,SAACC,EAAc1J,GACzB,GAAAgP,GAAqBZ,SAAbjK,EAAQ6K,EAAR7K,SACF8K,EAAY,GAAHhR,OAAMkG,EAAQ,8BAAAlG,OAC3B,EAAI,GAAI6L,MAAM,QAAA7L,OACTF,mBAAmB2L,GAAa,UAAAzL,OAAS+B,EAEhDkP,GACED,EACAE,EAAUC,YACVD,EAAUE,mBAGd/F,eAAgB,SAAC1M,GAGf,GAFgBiE,GAAwBjE,QAExC,CAIA,GAAM0S,GAAU5Z,SAAS2R,OACnBkI,EAAaD,EAAQ5T,MAAM,KAAK8T,IAAI,SAACC,GAAI,MAAKA,GAAK3S,SACnD4S,EAAeH,EAAW5S,KAAK,SAAC0K,GACpC,MAAOA,GAAO3L,MAAM,KAAK,KAAOkB,GAGlC,OAAK8S,GAKEA,EAAahU,MAAM,KAAK,OAJ7B6E,SAAQS,KAAK,mCAAD/C,OAAoCrB,EAAG,QAMvD4M,UAAW,SAAC5M,EAAKnJ,EAAOsN,GAGtB,GAFgBF,GAAwBjE,MAAKnJ,QAAOsN,YAEpD,CAIA,GAAM4O,GAAeC,EAAqBhT,EAAKnJ,EAAOsN,EACtDrL,UAAS2R,OAASsI,KAIhBC,EAAuB,SAAChT,EAAKnJ,EAAOsN,GACxC,GAAI4O,GAAe,GAAH1R,OAAMrB,EAAG,KAAAqB,OAAIxK,EAQ7B,OAPA1B,QAAO2K,KAAKqE,GAASP,QAAQ,SAAC5D,GAC5B,GAAqB,WAAjBmE,EAAQnE,GAEV,YADA+S,GAAgB,IAAJ1R,OAAQrB,EAAG,KAAAqB,OAAI8C,EAAQnE,IAGrC+S,IAAgB,YAEXA,GAGLT,EAAiB,SAAU/P,EAAK0Q,EAAIC,GACtC,GAAIC,GAAU,GAAIC,eAElBD,GAAQE,QAAU,IAClBF,EAAQG,iBAAkB,EAE1BH,EAAQI,mBAAqB,WAEF,IAAvBJ,EAAQK,YACW,MAAnBL,EAAQM,YACD3V,KAAPmV,EAEAA,EAAGE,EAAQO,cACqB,IAAvBP,EAAQK,gBAAgC1V,KAAZoV,GACrCA,EAAQC,EAAQO,eAGpBP,EAAQQ,KAAK,MAAOpR,GAAK,GACzB4Q,EAAQS,QAGNnJ,GACFoJ,MAAO,SAAU7e,EAAM6B,EAAOid,EAAMzG,EAAQ7F,GAC1C,GAAIuM,GAAO,GAAI7G,KACf4G,GAAOA,GAAQ,IACftM,EAAOA,GAAQ,IACfuM,EAAKC,QAAQD,EAAK5G,UAAmB,GAAP2G,EAAY,GAAK,GAAK,IACpD,IAAIG,GAAU,aAAeF,EAAKG,cAC9BC,EAAc,GAAH9S,OAAMrM,EAAI,KAAAqM,OAAIxK,GAAKwK,OAAG4S,EAAO,WAAA5S,OAAUmG,EAAI,0BACtD6F,KACF8G,GAAe,YAAc9G,GAE/BvU,SAAS2R,OAAS0J,GAEpBC,KAAM,SAAUpf,GACd,GAAIqf,GAAY,GAAKvb,SAAS2R,OAC1B6J,EAAQD,EAAU7V,QAAQxJ,EAC9B,QAAa8I,KAAT9I,GAA+B,KAATA,IAA0B,IAAXsf,EAAc,MAAO,EAC9D,IAAIC,GAAOF,EAAU7V,QAAQ,IAAK8V,EAElC,QADa,GAATC,IAAYA,EAAOF,EAAU3d,QAC1BiY,SAAS0F,EAAUjT,UAAUkT,EAAQtf,EAAK0B,OAAS,EAAG6d,KAE/DC,OAAQ,SAAUxf,GACZyf,KAAKL,KAAKpf,IACZyf,KAAKZ,MAAM7e,EAAM,IAAK,EAAG,OAK3Bud,GACFC,YAAa,SAAU1b,GACrB,GAAI4d,GAAOC,KAAKC,MAAM9d,GAKhB+d,EAAgB9H,QAETjP,KAAT4W,OAAyC5W,KAAnB4W,EAAa,QAMrCjK,EAAOoJ,MAXyB,WAa9Ba,EAAwB,GAXJ,EAapBG,IAINpC,iBAAkB,SAAU3b,MAWxBqI,EAAa,SAAC5E,GAClB,GAAIwE,IACFK,OAAQ,GACRC,kBAAkB,GAGhBC,EAAa/E,EAAQiD,aAAazD,UAAUuF,WAC3CC,uBAAsBD,KACzBP,EAAOK,QAAU,+BAEP,oBACDtH,KAAKwH,KACdP,EAAOK,QAAU,mCAGnBL,EAAOS,OAASC,EAAYlF,EAE5B,IAAI8E,GAAmB9E,EAAQiD,aAAazD,UAAUsF,iBAatD,OAVIN,GAAOM,mBAFPA,IACuB,QAArBA,EACwB,MACI,WAArBA,EACiB,SAEA,WAMvBN,GAGH+V,EAA0B,SAACva,EAASwa,GACxC,GAAIC,GAAWD,EAAO,SAClB7R,EAASpK,SAASmc,cAAc,SACpC/R,GAAOpI,MAAM8C,MAAQ,OACrBsF,EAAOpI,MAAM+C,OAAS,OACtBqF,EAAOgS,aAAa,KAAMF,GAC1B9R,EAAOgS,aAAa,YAAa,MACjChS,EAAOiS,YAAc,CAErB,IAAIC,GAAYC,4BAA4B9a,EAASya,EAAU,OAC3D3J,EAAWiK,sBAAsB/a,EAASya,EAE9CI,GAAUG,YAAYlK,GACtB+J,EAAUG,YAAYrS,GACtB3I,EAAQgb,YAAYH,IAYhBI,EAA4B,SAACjb,GAEjC,GAAIA,EAAQ6F,iBAAiB,UAAU1J,OAAS,EAI9C,MAHAiN,SAAQ8R,KACN,sFAEK,CAIT,IAAIC,GAAmBvW,EAAW5E,EAClC,IAAImb,EAAiBtW,OAAQ,CAQ3B,MAPgB7E,GAAQiD,aAAazD,UAAUqL,QAE7CzB,QAAQ8R,KACN,oDACEC,EAAiBtW,QAGhB,EAGT,GAAsC,MAAlC7E,EAAQiD,aAAa,UAGvB,MAAO,EAFPjD,GAAQ2a,aAAa,SAAU,IAKjC,IAAIS,GAAapb,EAAQiD,aAAazD,UAAUuF,YAC5CyV,EAAOY,EAAa,IAAM7J,GAK9B,OAFAgJ,GAAwBva,EAASwa,GAE1B,EAuBTtgB,GAAOD,SACLyZ,WACAG,KACAC,UACAC,YACAM,UACAE,WACAC,WACAC,oBACAC,qBACAM,iBACA9B,iBAGAqD,OACAD,SACAd,WACAC,eACAsB,YACAM,oBACA9F,cACAoG,gBACAvT,qBACAyN,QACAK,6BACAE,uBAEA6I,4BACA9H,iBACAnB,YNuuBI,SAAU9X,EAAQD,EAASH,GO9nDjC,QAASuhB,GAAgB3f,EAAK+J,EAAKnJ,GAYjC,MAXAmJ,GAAM6V,EAAc7V,GAChBA,IAAO/J,GACTd,OAAOC,eAAea,EAAK+J,GACzBnJ,MAAOA,EACPvB,YAAY,EACZD,cAAc,EACdygB,UAAU,IAGZ7f,EAAI+J,GAAOnJ,EAENZ,EAbT,GAAI4f,GAAgB,EAAQ,GAe5BphB,GAAOD,QAAUohB,EAAiBnhB,EAAOD,QAAQiB,YAAa,EAAMhB,EAAOD,QAAiB,QAAIC,EAAOD,SPqoDjG,SAAUC,EAAQD,EAASH,GQhpDjC,QAAS0hB,GAAmBhe,GAC1B,MAAOie,GAAkBje,IAAQke,EAAgBle,IAAQme,EAA2Bne,IAAQoe,IAL9F,GAAIH,GAAoB,EAAQ,IAC5BC,EAAkB,EAAQ,IAC1BC,EAA6B,EAAQ,GACrCC,EAAoB,EAAQ,GAIhC1hB,GAAOD,QAAUuhB,EAAoBthB,EAAOD,QAAQiB,YAAa,EAAMhB,EAAOD,QAAiB,QAAIC,EAAOD,SR0pDpG,SAAUC,EAAQD,EAASH,GS/pDjC,GAAI+hB,GAAU,EAAQ,KACtB3hB,GAAOD,QAAU4hB,CAGjB,KACEC,mBAAqBD,EACrB,MAAOE,GACmB,gBAAfC,YACTA,WAAWF,mBAAqBD,EAEhCI,SAAS,IAAK,0BAA0BJ,KT0qDtC,SAAU3hB,EAAQD,GUtrDxB,QAASiiB,GAAmBC,EAAKC,EAASC,EAAQC,EAAOC,EAAQ9W,EAAK+W,GACpE,IACE,GAAItB,GAAOiB,EAAI1W,GAAK+W,GAChBlgB,EAAQ4e,EAAK5e,MACjB,MAAO4L,GAEP,WADAmU,GAAOnU,GAGLgT,EAAK7e,KACP+f,EAAQ9f,GAERmgB,QAAQL,QAAQ9f,GAAOogB,KAAKJ,EAAOC,GAGvC,QAASI,GAAkBC,GACzB,MAAO,YACL,GAAIzZ,GAAO+W,KACT2C,EAAO/U,SACT,OAAO,IAAI2U,SAAQ,SAAUL,EAASC,GAEpC,QAASC,GAAMhgB,GACb4f,EAAmBC,EAAKC,EAASC,EAAQC,EAAOC,EAAQ,OAAQjgB,GAElE,QAASigB,GAAO5f,GACduf,EAAmBC,EAAKC,EAASC,EAAQC,EAAOC,EAAQ,QAAS5f,GALnE,GAAIwf,GAAMS,EAAG/U,MAAM1E,EAAM0Z,EAOzBP,OAAM/Y,OAIZrJ,EAAOD,QAAU0iB,EAAmBziB,EAAOD,QAAQiB,YAAa,EAAMhB,EAAOD,QAAiB,QAAIC,EAAOD,SV4rDnG,SAAUC,EAAQD,EAASH,GWztDjC,QAASoC,GAA4BvB,EAAGsC,GACtC,GAAKtC,EAAL,CACA,GAAiB,gBAANA,GAAgB,MAAOmiB,GAAiBniB,EAAGsC,EACtD,IAAIhC,GAAIL,OAAOS,UAAU8B,SAAS9C,KAAKM,GAAGyC,MAAM,GAAI,EAEpD,OADU,WAANnC,GAAkBN,EAAE0C,cAAapC,EAAIN,EAAE0C,YAAY5C,MAC7C,QAANQ,GAAqB,QAANA,EAAoBe,MAAMsB,KAAK3C,GACxC,cAANM,GAAqB,2CAA2CsC,KAAKtC,GAAW6hB,EAAiBniB,EAAGsC,OAAxG,IAPF,GAAI6f,GAAmB,EAAQ,GAS/B5iB,GAAOD,QAAUiC,EAA6BhC,EAAOD,QAAQiB,YAAa,EAAMhB,EAAOD,QAAiB,QAAIC,EAAOD,SXguD7G,SAAUC,EAAQD,GYzuDxB,QAAS8iB,GAAgBvf,GACvB,GAAIxB,MAAMC,QAAQuB,GAAM,MAAOA,GAEjCtD,EAAOD,QAAU8iB,EAAiB7iB,EAAOD,QAAQiB,YAAa,EAAMhB,EAAOD,QAAiB,QAAIC,EAAOD,SZ+uDjG,SAAUC,EAAQD,GalvDxB,QAAS+iB,GAAiBC,GACxB,GAAsB,mBAAXnhB,SAAmD,MAAzBmhB,EAAKnhB,OAAOC,WAA2C,MAAtBkhB,EAAK,cAAuB,MAAOjhB,OAAMsB,KAAK2f,GAEtH/iB,EAAOD,QAAU+iB,EAAkB9iB,EAAOD,QAAQiB,YAAa,EAAMhB,EAAOD,QAAiB,QAAIC,EAAOD,SbwvDlG,SAAUC,EAAQD,Gc3vDxB,QAASiD,GAAkBM,EAAKC,IACnB,MAAPA,GAAeA,EAAMD,EAAIrB,UAAQsB,EAAMD,EAAIrB,OAC/C,KAAK,GAAIhC,GAAI,EAAGuD,EAAO,GAAI1B,OAAMyB,GAAMtD,EAAIsD,EAAKtD,IAAKuD,EAAKvD,GAAKqD,EAAIrD,EACnE,OAAOuD,GAETxD,EAAOD,QAAUiD,EAAmBhD,EAAOD,QAAQiB,YAAa,EAAMhB,EAAOD,QAAiB,QAAIC,EAAOD,SdiwDnG,SAAUC,EAAQD,GetwDxB,QAASijB,KACP,KAAM,IAAIxgB,WAAU,6IAEtBxC,EAAOD,QAAUijB,EAAkBhjB,EAAOD,QAAQiB,YAAa,EAAMhB,EAAOD,QAAiB,QAAIC,EAAOD,Sf4wDlG,SAAUC,EAAQD,EAASH,GgB3wDjC,QAASqjB,GAAe3f,EAAKrD,GAC3B,MAAOijB,GAAe5f,IAAQ6f,EAAqB7f,EAAKrD,IAAMwhB,EAA2Bne,EAAKrD,IAAMmjB,IALtG,GAAIF,GAAiB,EAAQ,IACzBC,EAAuB,EAAQ,IAC/B1B,EAA6B,EAAQ,GACrC2B,EAAkB,EAAQ,GAI9BpjB,GAAOD,QAAUkjB,EAAgBjjB,EAAOD,QAAQiB,YAAa,EAAMhB,EAAOD,QAAiB,QAAIC,EAAOD,ShBqxDhG,SAAUC,EAAQD,EAASH,GAEjC,YAUA,SAAS6B,GAA2BhB,EAAGiB,GAAkB,GAAIC,GAAuB,mBAAXC,SAA0BnB,EAAEmB,OAAOC,WAAapB,EAAE,aAAe,KAAKkB,EAAI,CAAE,GAAIG,MAAMC,QAAQtB,KAAOkB,EAAKK,EAA4BvB,KAAOiB,GAAkBjB,GAAyB,gBAAbA,GAAEwB,OAAqB,CAAMN,IAAIlB,EAAIkB,EAAI,IAAI1B,GAAI,EAAOiC,EAAI,YAAiB,QAASZ,EAAGY,EAAGnB,EAAG,WAAe,MAAId,IAAKQ,EAAEwB,QAAiBE,MAAM,IAAiBA,MAAM,EAAOC,MAAO3B,EAAER,OAAWoC,EAAG,SAAWC,GAAM,KAAMA,IAAOC,EAAGL,GAAO,KAAM,IAAIM,WAAU,yIAA4I,GAA6CC,GAAzCC,GAAmB,EAAMC,GAAS,CAAY,QAASrB,EAAG,WAAeK,EAAKA,EAAGxB,KAAKM,IAAOM,EAAG,WAAe,GAAI6B,GAAOjB,EAAGkB,MAAsC,OAA9BH,GAAmBE,EAAKT,KAAaS,GAASP,EAAG,SAAWS,GAAOH,GAAS,EAAMF,EAAMK,GAAQP,EAAG,WAAe,IAAWG,GAAoC,MAAhBf,EAAW,QAAWA,EAAW,SAAO,QAAU,GAAIgB,EAAQ,KAAMF,MAC/9B,QAAST,GAA4BvB,EAAGsC,GAAU,GAAKtC,EAAL,CAAgB,GAAiB,gBAANA,GAAgB,MAAOuC,GAAkBvC,EAAGsC,EAAS,IAAIhC,GAAIL,OAAOS,UAAU8B,SAAS9C,KAAKM,GAAGyC,MAAM,GAAI,EAAiE,OAAnD,WAANnC,GAAkBN,EAAE0C,cAAapC,EAAIN,EAAE0C,YAAY5C,MAAgB,QAANQ,GAAqB,QAANA,EAAoBe,MAAMsB,KAAK3C,GAAc,cAANM,GAAqB,2CAA2CsC,KAAKtC,GAAWiC,EAAkBvC,EAAGsC,OAAzG,IAC7S,QAASC,GAAkBM,EAAKC,IAAkB,MAAPA,GAAeA,EAAMD,EAAIrB,UAAQsB,EAAMD,EAAIrB,OAAQ,KAAK,GAAIhC,GAAI,EAAGuD,EAAO,GAAI1B,OAAMyB,GAAMtD,EAAIsD,EAAKtD,IAAKuD,EAAKvD,GAAKqD,EAAIrD,EAAI,OAAOuD,GAC5K,QAAS6f,GAAQhhB,EAAGihB,GAAK,GAAIC,GAAI7iB,OAAO2K,KAAKhJ,EAAI,IAAI3B,OAAO8iB,sBAAuB,CAAE,GAAI/iB,GAAIC,OAAO8iB,sBAAsBnhB,EAAIihB,KAAM7iB,EAAIA,EAAEgjB,OAAO,SAAUH,GAAK,MAAO5iB,QAAOgjB,yBAAyBrhB,EAAGihB,GAAGziB,cAAiB0iB,EAAE7e,KAAKiJ,MAAM4V,EAAG9iB,GAAM,MAAO8iB,GAC3P,QAASI,GAActhB,GAAK,IAAK,GAAIihB,GAAI,EAAGA,EAAI1V,UAAU3L,OAAQqhB,IAAK,CAAE,GAAIC,GAAI,MAAQ3V,UAAU0V,GAAK1V,UAAU0V,KAASA,GAAI,EAAID,EAAQ3iB,OAAO6iB,IAAI,GAAIpU,QAAQ,SAAUmU,IAAK,EAAIM,EAA0B,SAAGvhB,EAAGihB,EAAGC,EAAED,MAAU5iB,OAAOmjB,0BAA4BnjB,OAAOojB,iBAAiBzhB,EAAG3B,OAAOmjB,0BAA0BN,IAAMF,EAAQ3iB,OAAO6iB,IAAIpU,QAAQ,SAAUmU,GAAK5iB,OAAOC,eAAe0B,EAAGihB,EAAG5iB,OAAOgjB,yBAAyBH,EAAGD,MAAW,MAAOjhB,GiB/tDpc,QAAS0hB,GAAcC,GACrB,GAAQC,GAAuDD,EAAvDC,aAAcne,EAAyCke,EAAzCle,QAASoe,EAAgCF,EAAhCE,UAAW1S,EAAqBwS,EAArBxS,SAAUzG,EAAWiZ,EAAXjZ,OAC5CoZ,EAA+BF,EAA/BE,cAAeC,EAAgBH,EAAhBG,YACjBC,EAAiB7e,EAAamQ,WAAWD,UAC3C4O,EAAQ,IAERF,KACFC,EAAeE,OAAS,OACxBF,EAAe9a,KAAO2W,KAAKsE,UAAUJ,IAGnCD,IACFE,EAAeI,QAAUN,GAG3BO,MAAMlT,EAAU6S,GAAgB7B,KAAK,SAAAmC,GAEnC,MADAL,GAAQK,EAASF,QAAQ3jB,IAAI,UACtB6jB,EAAS1E,SAChB,MAAO,SAAAjS,GACPkB,QAAQmM,IAAIrN,KACXwU,KAAK,SAAAmC,GACFL,IACFK,EAAQhB,GAAIW,SAAUK,IAET,WAAX5Z,GACF6Z,GAAY9e,EAASoe,EAAWS,GAGnB,OAAX5Z,GACF8Z,GAAe/e,EAASoe,EAAWS,GAGtB,OAAX5Z,GACF+Z,GAAchf,EAAS6e,KAG5B,QAEcI,GAAuBC,GAAA,MAAAC,GAAAtX,MAAC,KAADC,WAAA,QAAAqX,KAyFrC,MAzFqCA,IAAA,EAAA9f,EAAA,SAAAH,EAAA,QAAA+H,KAAtC,QAAAmY,GAAuClB,GAAO,GAAAle,GAAAse,EAAAD,EAAAgB,EAAAllB,EAAAmlB,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,CAAA,OAAAzgB,GAAA,QAAAiI,KAAA,SAAAyY,GAAA,cAAAA,EAAAvY,KAAAuY,EAAA7iB,MAAA,OAGpB,GAFhBiD,EAAYke,EAAZle,QACJse,EAAc,KACdD,EAAgB,MAEhB/W,UAAUuY,eAAyE,kBAAjDvY,WAAUuY,cAAcC,qBAAmC,CAAAF,EAAA7iB,KAAA,eAAA6iB,GAAAvY,KAAA,EAAAuY,EAAA7iB,KAAA,EAE1EuK,UAAUuY,cAAcC,sBACzC,eACA,UACA,QACA,kBACA,gBACA,mBACA,QAPET,EAAMO,EAAAlY,IAQV,KAASvN,IAAKklB,GACa,iBAAdA,GAAOllB,IAAqBklB,EAAOllB,GAAGgC,cACxCkjB,GAAOllB,EAGZmlB,GAAiBS,EAAsBV,GAC7ChB,EAAaR,KAAOyB,GAAgBM,EAAA7iB,KAAA,iBAAA6iB,EAAAvY,KAAA,GAAAuY,EAAAI,GAAAJ,EAAA,SAEpCxW,QAAQmM,IAAGqK,EAAAI,GAAQ,cAInB,kBAAoBzhB,WACxBA,SAAS0hB,cAAcC,cAAc,oBAAkB,CAAAN,EAAA7iB,KAAA,eAAA6iB,GAAAvY,KAAA,GAAAuY,EAAA7iB,KAAA,GAE1BojB,GAAW,SAA9BZ,EAAUK,EAAAlY,KAEZ6X,EAAWpjB,SACPqjB,KACFC,EAAmB,IAEvBF,EAAWlW,QAAQ,SAAAiP,GACjB,GAAQ8H,GAA2B9H,EAA3B8H,MAAOC,EAAoB/H,EAApB+H,eAEXD,IACFZ,EAAS5gB,KAAKwhB,GAGZC,GAAmBC,SAASD,GAAmBC,SAASb,KAC1DA,EAAmBY,KAIvB/B,EAAWT,GACT2B,WACAa,gBAAiBZ,GACdnB,IAENsB,EAAA7iB,KAAA,iBAAA6iB,EAAAvY,KAAA,GAAAuY,EAAAW,GAAAX,EAAA,UAEDxW,QAAQmM,IAAGqK,EAAAW,GAAQ,cAInBvgB,EAAQiD,aAAazD,EAAUkN,MAAQ1M,EAAQiD,aAAazD,EAAUmN,MAAQ3M,EAAQiD,aAAazD,EAAUoN,WAAS,CAAAgT,EAAA7iB,KAAA,SACxHuhB,EAAWT,GACT2C,KAAMxgB,EAAQiD,aAAazD,EAAUkN,KACrC+T,KAAMzgB,EAAQiD,aAAazD,EAAUmN,KACrC+T,OAAQ1gB,EAAQiD,aAAazD,EAAUoN,WACpC0R,GACHsB,EAAA7iB,KAAA,qBAEEuK,UAAUqZ,aAAmE,kBAA7CrZ,WAAUqZ,YAAYC,mBAAiC,CAAAhB,EAAA7iB,KAAA,eAAA6iB,GAAAvY,KAAA,GAAAuY,EAAA7iB,KAAA,GAEnDgK,GAAsB,cAAc,SAA7C,GAArB2Y,EAAqBE,EAAAlY,KACS,YAAhCgY,EAAsBmB,MAAmB,CAAAjB,EAAA7iB,KAAA,eAAA6iB,GAAA7iB,KAAA,GACzB+jB,GAAgB,SAA5BnB,EAAGC,EAAAlY,KACT4W,EAAWT,GACT2C,KAAMb,EAAIoB,OAAOC,SACjBP,KAAMd,EAAIoB,OAAOE,UACjBP,OAAQf,EAAIoB,OAAOG,UAChB5C,EACH,SAAAsB,EAAA7iB,KAAA,iBAAA6iB,EAAAvY,KAAA,GAAAuY,EAAAuB,GAAAvB,EAAA,UAGJxW,QAAQmM,IAAGqK,EAAAuB,GAAQ,eAAAvB,GAAAnY,OAAA,UAMvB4W,gBACAC,eACD,yBAAAsB,GAAAjY,SAAAyX,EAAA,kCACFD,EAAAtX,MAAA,KAAAC,WAED,QAASgZ,KACP,MAAO,IAAIrE,SAAQ,SAACL,EAASC,GAO3B,QAAS+E,GAAQzB,GACfvD,EAAQuD,GAGV,QAASzX,GAAMvL,GACXyM,QAAQS,KAAK,SAAD/C,OAAUnK,EAAI0kB,KAAI,OAAAva,OAAMnK,EAAI2kB,UACxCjF,EAAO1f,GAZX,GAAMiN,IACJ2X,oBAAoB,EACpBzI,QAAS,IACT0I,WAAY,EAYdla,WAAUqZ,YAAYC,mBAAmBQ,EAASlZ,EAAO0B,KAE5D,QAEcuW,KAAS,MAAAsB,GAAA5Z,MAAC,KAADC,WAAA,QAAA2Z,KAOvB,MAPuBA,IAAA,EAAApiB,EAAA,SAAAH,EAAA,QAAA+H,KAAxB,QAAAya,KAAA,GAAAC,EAAA,OAAAziB,GAAA,QAAAiI,KAAA,SAAAya,GAAA,cAAAA,EAAAva,KAAAua,EAAA7kB,MAAA,aAAA6kB,GAAAva,KAAA,EAAAua,EAAA7kB,KAAA,EAEyBwB,SAASsjB,gBAAgB,QAAlC,MAANF,GAAMC,EAAAla,KAAAka,EAAAna,OAAA,SACLka,EAAM,cAAAC,GAAAva,KAAA,EAAAua,EAAA5B,GAAA4B,EAAA,SAAAA,EAAAna,OAAA,YAEJ,yBAAAma,GAAAja,SAAA+Z,EAAA,iBAEZD,EAAA5Z,MAAA,KAAAC,WAED,QAASiY,GAAsBV,GAE7B,GAAIyC,GAAY,SAACC,GACb,MAAOA,GAAE5lB,OAAS,EAAIie,KAAKsE,UAAUqD,GAAK,IAG1CC,EAAsB,SAACjY,GACvB,GAAIvF,GAAS,EAOb,OANAuF,GAAEV,QAAQ,SAAClP,GACHqK,EAAOrI,OAAS,IAChBqI,GAAU,MAEdA,GAAU,GAAJsC,OAAOgb,EAAU3nB,EAAE8nB,OAAM,OAAAnb,OAAMgb,EAAU3nB,EAAEmb,YAE9C9Q,GAGL0d,IA2BN,OAzBI7C,GAAO8C,SACTD,EAAe,eAAiBF,EAAoB3C,EAAO8C,SAGzD9C,EAAO+C,kBACTF,EAAe,iCAAoCF,EAAoB3C,EAAO+C,kBAGnD,iBAAlB/C,GAAOgD,SAChBH,EAAe,sBAAwB7C,EAAOgD,OAAS,KAAH,MAGlDhD,EAAOiD,QACTJ,EAAe,qBAAuBJ,EAAUzC,EAAOiD,QAGrDjD,EAAOkD,WACTL,EAAe,wBAA0BJ,EAAUzC,EAAOkD,WAGxDlD,EAAOmD,kBACTN,EAAe,gCAAkCJ,EAAUzC,EAAOmD,kBAI7DN,EAmDT,QAASO,GAAaxV,GACpB,MAAO,IAAIwP,SAAQ,SAASL,EAASC,GACjC,GAAMqG,GAASnkB,SAASmc,cAAc,SACtCgI,GAAOlM,KAAO,kBACdkM,EAAOC,IAAM1V,EACbyV,EAAOrM,iBAAiB,OAAQ,WAC5B+F,MAEJ7d,SAASqkB,KAAK5H,YAAY0H,KAisBhC,QAASG,GAAwBC,GAM/B,QAASC,KACP,GAAAC,GAAyB3L,EAAkB4L,GAAnCvL,EAAWsL,EAAXtL,WAEJA,GAAc,KAIlBuL,GAAYA,EAASvkB,cAAcwkB,aAAcC,cAAc,EAAMzL,eAAe,KACpF0L,GAAwBC,EAAiB3L,GACzC4L,GAAgCD,EAAiBrjB,GACjDjC,OAAOE,IAAI8X,oBAAoB,SAAUgN,IAf3C,GAAQ/f,GAAsC8f,EAAtC9f,QAASqgB,EAA6BP,EAA7BO,gBAAiBrjB,EAAY8iB,EAAZ9iB,QAC5BijB,EAAWxa,KAAY1K,OAAOG,OAAOK,SAAS+B,eAAe0C,GAAWzE,SAAS+B,eAAe0C,EAEtGjF,QAAOE,IAAIoY,iBAAiB,SAAU0M,GAwTxC,QAASQ,GAAkBC,EAAMC,EAAexe,GAC9C,GAAQye,GAA2BF,EAA3BE,cAAevY,EAAYqY,EAAZrY,QACfwY,EAAyDD,EAAzDC,eAAgBC,EAAyCF,EAAzCE,eAAgBC,EAAyBH,EAAzBG,UAAWC,EAAcJ,EAAdI,UAC7CC,GAA4C,IAA3B9e,EAAOhB,QAAQ,MAEtC,KAAK8D,GAAMoD,GACT,OAAO,CAGT,IAAM6Y,GAAgB,GAAI/b,KAAIkD,GACxB8Y,GAAsB,aAADnd,OAAc6c,GAAc,aAAA7c,OAAiB8c,IACpEM,EAAa,EAOjB,IALIL,GAAaC,IACfG,EAAmBrlB,KAAK,eAADkI,OAAgB+c,IACvCI,EAAmBrlB,KAAK,eAADkI,OAAgBgd,KAGrCC,IAAmBN,KAAmBI,IAAcC,GAAY,CAClE,GAAMhT,GAAWvS,SAAS4lB,cAAc,yBAClCC,EAAe7lB,SAAS4lB,cAAc,sBAAwB5lB,SAASkF,KACvE4gB,EAAeD,EAAazlB,uBAClC,IAAImS,EAAU,CACZ,GAAMwT,GAAexT,EAASnS,wBACxBklB,GAAcS,EAAazlB,EAAIwlB,EAAaxlB,GAAKwlB,EAAahhB,MAAS,IACvEygB,GAAcQ,EAAaxlB,EAAIulB,EAAavlB,GAAKulB,EAAa/gB,OAAU,GAE9E2gB,GAAmBrlB,KAAK,eAADkI,OAAgB+c,IACvCI,EAAmBrlB,KAAK,eAADkI,OAAgBgd,KAIvCS,IACFN,EAAmBrlB,KAAK,YAADkI,OAAa0d,IACrC,IAEoDnmB,GAFpDC,EAAA3C,EAEgBqoB,EAAc3Q,aAAaoR,UAAS,KAArD,IAAAnmB,EAAA9C,MAAA6C,EAAAC,EAAArD,KAAAoB,MAAuD,IAA9CqoB,GAAIrmB,EAAA/B,KACX2nB,GAAmBrlB,KAAK,GAADkI,OAAI4d,EAAK,GAAE,KAAA5d,OAAIF,mBAAmB8d,EAAK,OAC/D,MAAA/nB,GAAA2B,EAAA/B,EAAAI,GAAA,QAAA2B,EAAA7B,IAEDynB,EAAa,GAAHpd,OAAMkd,EAAcW,QAAM7d,OAAGkd,EAAcY,SAAQ,KAAA9d,OAAImd,EAAmBY,KAAK,MACzF9mB,OAAOqb,KAAK8K,EAAY,UAK1B,QAASY,GAAyBhC,GAChC,GAAQ9f,GAAuD8f,EAAvD9f,QAAShD,EAA8C8iB,EAA9C9iB,QAASqjB,EAAqCP,EAArCO,gBAAiBpe,EAAoB6d,EAApB7d,OAAQ8f,EAAYjC,EAAZiC,OACnD5O,YAAW,WACT,IAAK6O,GAAwBhiB,GAAU,CAErC,GADAgiB,GAAwBhiB,IAAW,EACnB,UAAZ+hB,EAEF,WADAE,IAAgBjiB,EAAShD,EAASqjB,EAAiBpe,EAGrD4d,IAAyB7f,UAASqgB,kBAAiBrjB,cAEpD,KAGL,QAASklB,GAAqBvc,EAAQma,GAGpC,GAAAqC,GAAyB,GAAIC,gBAArBC,EAAKF,EAALE,MAAOC,EAAKH,EAALG,KAEfD,GAAME,UAAY,SAAUC,GAC1B,GAAAC,GAAqCD,EAAMhC,KAA5BkC,EAASD,EAAhBD,MAAkBG,EAAMF,EAANE,MAER,kCAAdD,GACa,iBAAXC,GACFhd,EAAOjK,cAAcwkB,aACnByC,OAAQ,aACRH,MAAO,kBACN,KAIQ,iBAAXG,GACFC,EAAwBJ,EAAO7c,EAAQma,GAI3C,IAAQiC,GAAYjC,EAAZiC,QACFc,GACJF,OAAQ,aACRH,MAAO,6BACPT,UAEFpc,GAAOjK,cAAcwkB,YAAY2C,EAAY,KAAMP,IAGrD,QAASM,GAAwBJ,EAAO7c,EAAQma,GAC9C,GAAAgD,GAA2DN,EAAMhC,KAAlDkC,EAASI,EAAhBN,MAAkBO,EAAiBD,EAAjBC,kBAAmBC,EAAGF,EAAHE,IAAKxC,EAAIsC,EAAJtC,KAC1CxgB,EAAuD8f,EAAvD9f,QAAShD,EAA8C8iB,EAA9C9iB,QAASqjB,EAAqCP,EAArCO,gBAAiBpe,EAAoB6d,EAApB7d,OAAQ8f,EAAYjC,EAAZiC,OAEnD,QAAOW,GACL,IAAK,cAEHnC,EAAkBC,EADaxjB,EAAQiD,aAAavD,EAAaiM,yBAA2B,KAC5C1G,EAChD,MACF,KAAK,aACH0D,EAAOjK,cAAcwkB,aACnByC,OAAQ,aACRH,MAAO,gBACPT,WACC,IACH,MACF,KAAK,oBACH,GAAIC,GAAwBhiB,GAC1B,MAGF,IADAgiB,GAAwBhiB,IAAW,EACvB,QAARgjB,EAKF,WAJArd,GAAOjK,cAAcwkB,aACnByC,OAAQ,aACRH,MAAO,6BACN,IAIL,IADAS,EAAwBtd,EAAQma,GAChB,UAAZiC,EAEF,WADAE,IAAgBjiB,EAAShD,EAASqjB,EAAiBpe,EAGrD4d,IAAyB7f,UAASqgB,kBAAiBrjB,WACnD,MACF,KAAK,sBACC+lB,GAAqB,KACvB3C,GAAwBC,EAAiB0C,GACzCzC,GAAgCD,EAAiBrjB,KAMzD,QAASimB,GAAwBhD,EAAUH,GA+BzC,QAASoD,KACP,GAAMC,GAAWC,EAAYznB,wBACvB0nB,EAAapD,EAAStkB,wBACtB2nB,EAAwBC,EAA0BJ,EAAUE,EAClEpD,GAASvkB,cAAcwkB,aACrByC,OAAQ,aACRH,MAAO,uBACPc,yBACC,KAGL,QAASC,GAA0BJ,EAAUE,GAC3C,GAAIF,EAASloB,KAAOooB,EAAWhlB,QAAU8kB,EAAS9kB,QAAUglB,EAAWpoB,IACrE,OACEuoB,gBAAiB3nB,EAAGwnB,EAAWxnB,EAAGC,EAAGunB,EAAWvnB,GAChD2nB,oBAAqB,EACrBC,kBAAmBzoB,IAAI,EAAGoD,OAAO,EAAGN,KAAK,EAAGQ,MAAM,GAItD,IAAI4kB,EAASloB,KAAOooB,EAAWpoB,IAAK,CAClC,GAAIkoB,EAAS9kB,QAAUglB,EAAWhlB,OAAQ,CACxC,GAAQpD,GAA6BooB,EAA7BpoB,IAAKoD,EAAwBglB,EAAxBhlB,OAAQN,EAAgBslB,EAAhBtlB,KAAMQ,EAAU8kB,EAAV9kB,KAC3B,QACEilB,gBAAiB3nB,EAAGwnB,EAAWxnB,EAAGC,EAAGunB,EAAWvnB,GAChD2nB,oBAAqB,IACrBC,kBAAmBzoB,MAAKoD,SAAQN,OAAMQ,UAI1C,GAAQtD,GAA6BooB,EAA7BpoB,IAAK8C,EAAwBslB,EAAxBtlB,KAAMQ,EAAkB8kB,EAAlB9kB,MAAO+B,EAAW+iB,EAAX/iB,OAClBjC,EAAW8kB,EAAX9kB,MAER,QACEmlB,gBAAiB3nB,EAAGwnB,EAAWxnB,EAAGC,EAAGunB,EAAWvnB,GAChD2nB,oBAAuC,KAAhBplB,EAASpD,GAAcqF,EAC9CojB,kBAAmBzoB,MAAKoD,SAAQN,OAAMQ,UAI1C,GAAQtD,GAAQkoB,EAARloB,IACA8C,EAAgCslB,EAAhCtlB,KAAMQ,EAA0B8kB,EAA1B9kB,MAAOF,EAAmBglB,EAAnBhlB,OAAQiC,EAAW+iB,EAAX/iB,MAE7B,QACEkjB,gBAAiB3nB,EAAGwnB,EAAWxnB,EAAGC,EAAGunB,EAAWvnB,GAChD2nB,oBAAuC,KAAhBplB,EAASpD,GAAcqF,EAC9CojB,kBAAmBzoB,MAAKoD,SAAQN,OAAMQ,UA5E1C,GAAQyB,GAAqB8f,EAArB9f,OACR,IAAgB,UADa8f,EAAZiC,QACQ,CACvB,GAAMnb,IACJ+c,KAAM,KACNC,WAAY,MACZlkB,WAAY,EAAG,GAAK,GAAK,GAAK,GAAK,GAAK,GAAK,GAAK,GAAK,GAAK,IAExDkT,EAAW,SAAA6O,GACf,GAAAoC,GAAoEpC,EAAQ,GAApEqC,EAAiBD,EAAjBC,kBAAmBJ,EAAgBG,EAAhBH,iBAAkBK,EAAkBF,EAAlBE,mBACrC9oB,EAA6ByoB,EAA7BzoB,IAAKoD,EAAwBqlB,EAAxBrlB,OAAQN,EAAgB2lB,EAAhB3lB,KAAMQ,EAAUmlB,EAAVnlB,MACrBklB,EAAsBnG,SAA6B,IAApBwG,EACrC7D,GAASvkB,cAAcwkB,aACrByC,OAAQ,aACRH,MAAO,uBACPc,uBACEE,gBAAiB3nB,EAAGkoB,EAAmBloB,EAAGC,EAAGioB,EAAmBjoB,GAChE2nB,sBACAC,kBAAmBzoB,MAAKoD,SAAQN,OAAMQ,WAEvC,KAIL,YAFe,IAAIylB,sBAAqBpR,EAAUhM,GAC3Cqd,QAAQhE,GAIjB,GAAMmD,GAAc3d,KAAY1K,OAAOG,OAAOK,SAAS+B,eAAe,GAADwG,OAAI9D,EAAO,aAAczE,SAAS+B,eAAe,GAADwG,OAAI9D,EAAO,YAChIjF,QAAOE,IAAIoY,iBAAiB,SAAU6P,GACtCnoB,OAAOE,IAAIipB,cAAc,GAAIC,aAAY,WAgX3C,QAASC,GAAcze,EAAQ3I,EAASiF,GACpC,GAAMoiB,GAAgB1e,EAAOwb,cAAc,iBAEvCkD,IACAA,EAAcpN,SAIA,QADFja,EAAQiD,aAAazD,EAAUsK,YAK/Cwd,EAAS3e,EAAQ3I,EAASiF,GAG9B,QAASqiB,GAAS3e,EAAQ3I,EAASiF,GAC/B,GAAMoiB,GAAgBE,EAAuB5e,EAAQ3I,EAASiF,GACxDuiB,EAAYC,GAClBJ,GAAchR,iBAAiB,QAAS,WAClC6D,KAAKxW,WAAWygB,cAAc,oBAChCjK,KAAKxW,WAAWygB,cAAc,mBAAmB+C,cAAc,GAAIC,aAAY,YAGnFE,EAAcrM,YAAYwM,GAC1B7e,EAAOqS,YAAYqM,GAGvB,QAASE,GAAuB5e,EAAQ3I,EAASiF,GAC7C,GAAMoiB,GAAgB9oB,SAASmc,cAAc,OAEzCgN,EAAqB,CAErB/e,GAAOvG,cACTslB,EAA0C,KAArB/e,EAAOvG,YAAsB,GAAK,GAA0B,KAArBuG,EAAOvG,aAGjErE,OAAO2D,aAAegmB,IACxBA,EAAyC,KAApB3pB,OAAO2D,WAAqB,GAAK,GAAyB,KAApB3D,OAAO2D,YAG/DgmB,IACHA,EAAqB,GAevB,QAVAL,EAAc1M,aAAa,KAAM,iBACjC0M,EAAc9mB,MAAMkX,SAAW,WAC/B4P,EAAc9mB,MAAM8C,MAJA,EAIQqkB,EAAqC,KACjEL,EAAc9mB,MAAM+C,OAAS+jB,EAAc9mB,MAAM8C,MACjDgkB,EAAc9mB,MAAMonB,OAAS,MAC7BN,EAAc9mB,MAAMqnB,QAAU,MAC9BP,EAAc9mB,MAAMgB,MAAQ,KAC5B8lB,EAAc9mB,MAAMc,OAAS,KAC7BgmB,EAAc9mB,MAAMsnB,SAAW,MAC/BR,EAAc9mB,MAAMC,QAAUzC,OAAO+pB,gBAAkB,OAAS,QACxD7iB,GACN,IAAK,UACHoiB,EAAc9mB,MAAMwnB,OAAS/nB,EAAQiD,aAAa,+BAAiC,GACnF,MACF,KAAK,UACHokB,EAAc9mB,MAAMwnB,OAAS/nB,EAAQiD,aAAa,uBAAyB,GAC3E,MACF,SACEokB,EAAc9mB,MAAMwnB,OAAS/nB,EAAQiD,aAAa,uBAAyB,IAG/E,MAAOokB,GAGX,QAASI,KACL,GAAM5W,GAAOtS,SAASmc,cAAc,MAWpC,OAVA7J,GAAK8J,aAAa,KAAM,aACxB9J,EAAK8J,aAAa,MAAOqN,IACzBnX,EAAKtQ,MAAMkX,SAAW,WACtB5G,EAAKtQ,MAAM8C,MAAQ,OACnBwN,EAAKtQ,MAAM+C,OAAS,OACpBuN,EAAKtQ,MAAMgB,MAAQ,KACnBsP,EAAKtQ,MAAMc,OAAS,KACpBwP,EAAKtQ,MAAMC,QAAU,QACrBqQ,EAAKtQ,MAAM0nB,YAAY,SAAU,MAAO,aAEjCpX,EjBrJX,GAAIpV,GAAyB3B,EAAoB,GAC7CoF,EAAezD,EAAuB3B,EAAoB,IAC1DouB,EAAkBzsB,EAAuB3B,EAAoB,KAC7DsF,EAAsB3D,EAAuB3B,EAAoB,IACjEgkB,EAAmBriB,EAAuB3B,EAAoB,IAC9DuF,EAAqB5D,EAAuB3B,EAAoB,IiBtyDpEwF,EAAmFC,EAAQ,GAArFC,EAASF,EAATE,UAAW6N,EAAe/N,EAAf+N,gBAAiB8a,EAAI7oB,EAAJ6oB,KAAMxa,EAAYrO,EAAZqO,aAAcjO,EAAYJ,EAAZI,aAAcsP,EAAU1P,EAAV0P,WACpEuE,EAA8IhU,EAAQ,GAAhJwU,EAASR,EAATQ,UAAWL,EAAQH,EAARG,SAAUgB,EAAkBnB,EAAlBmB,mBAAoBM,EAAczB,EAAdyB,eAAgB9B,EAAcK,EAAdL,eAAgBqD,EAAIhD,EAAJgD,KAAgBd,GAAFlC,EAARiC,SAAsBjC,EAAZkC,cAAcsB,EAASxD,EAATwD,UAAWM,EAAiB9D,EAAjB8D,kBACxH7D,EAAuJjU,EAAQ,GAAzJO,EAAkB0T,EAAlB1T,mBAAoBI,EAAesT,EAAftT,gBAAiBgD,EAAcsQ,EAAdtQ,eAAgBuD,EAAe+M,EAAf/M,gBAAiBrC,GAAkBoP,EAAlBpP,mBAAoBc,GAAWsO,EAAXtO,YAAa6B,GAAqByM,EAArBzM,sBAAuBgB,GAAKyL,EAALzL,MAAOU,GAAO+K,EAAP/K,QAErI2f,GAAK,cAAAphB,IAAG,EAAH3H,EAAA,SAAAH,EAAA,QAAA+H,KAAG,QAAAC,GAAOlH,EAASoe,GAAS,GAAAiK,GAAAC,EAAAzf,EAAAwM,EAAAlR,EAAAokB,EAAAC,EAAAvjB,EAAAwjB,EAAAC,EAAAC,EAAAxK,EAAAyK,EAAAC,CAAA,OAAA3pB,GAAA,QAAAiI,KAAA,SAAAC,GAAA,cAAAA,EAAAC,KAAAD,EAAArK,MAAA,OA+C0D,MA9C3FsrB,MAEAtU,EAAUvU,EAAUgL,YACtB6d,EAAUnV,EAAea,EAAUvU,EAAUgL,aACpCzM,OAAO0U,aAAaC,QAAQlT,EAAUgL,cAC/C6d,EAAUnV,EAAenV,OAAO0U,aAAaC,QAAQlT,EAAUgL,cAChE8d,EAE2BD,EAApBxf,EAAIyf,EAAJzf,KAAMwM,EAASiT,EAATjT,UACVlR,EAAkBC,GAAmBpE,GACrCuoB,EAAS9hB,EAAgBjH,EAAUkM,SAAUvH,GAC7CqkB,EAAsD,SAA1CxoB,EAAQiD,aAAazD,EAAUqL,QAA+D,MAA1C7K,EAAQiD,aAAazD,EAAUqL,OAC/F5F,EAASC,GAAYlF,GACrByoB,EAAgB1qB,OAAO+qB,iBAAmB/qB,OAAO+qB,iBAAmB,EAEpEJ,EAAK,GAC8B,aAAnC3U,EAAUvU,EAAUgL,cACtBke,EAAK,SAAH5hB,OAAY+B,GACgB,aAA1BkL,EAAU,eACZ2U,GAAM,cAAgB3U,EAAU,eAGkB,OAAlD/T,EAAQiD,aAAazD,EAAUyK,iBACjCye,GAAM,WAAJ5hB,OAAe9G,EAAQiD,aAAazD,EAAUyK,iBAEA,OAA9CjK,EAAQiD,aAAazD,EAAU0K,aACjCwe,GAAM,eAAJ5hB,OAAmB9G,EAAQiD,aAAazD,EAAU0K,aAIlDye,EAAoB/hB,mBAAmB5G,EAAQiD,aAAazD,EAAUsL,kBACpE6d,IACJD,GAAM,IAAJ5hB,OAAQtH,EAAUkL,YAAW,KAAA5D,OAAI6hB,IAInB,cAAdtT,IACFqT,GAAM,YAAJ5hB,OAAgBuO,IAIhBmT,IACFpf,QAAQmM,IAAI,gFACZnM,QAAQmM,IAAI,kBAAoBgT,IAGlCA,EAASA,EAASG,EAAK,SAAWD,EAAgB,eAAgB,GAAI9V,OAAOoW,kBAAkB3hB,EAAArK,KAAA,GACpEkiB,GAAyBjf,WAAS,SAAvDme,EAAY/W,EAAAM,KACduP,UAAYA,SAASC,OACvBiH,EAAaG,YAAWT,OAAOM,EAAaG,iBAAa0K,QAAS/R,SAASC,QAGvE0R,GAAe,mCAAoC,qCAEP,IAA9CA,EAAY3kB,QAAQE,EAAgBgC,OAChC0iB,EAAU9U,EAAU,aAAeA,EAAU,aAAe,GAAHjN,OAAM+B,EAAI,KAAA/B,QAAI,GAAI6L,OAAOC,WACxFqW,GAAcJ,IAGhB5K,GACEE,eACAne,UACAoe,YACA1S,SAAU6c,EACVtjB,UACC,yBAAAmC,GAAAO,SAAAT,KACJ,iBAnEUU,EAAAshB,GAAA,MAAAliB,GAAAa,MAAA,KAAAC,eA2RLqhB,GAAiC,SAACC,GACtC,IACE,GAAMC,IAAY,EAAHjqB,EAAA,SAAOrB,OAAOE,IAAIM,SAASsH,iBAAiB,UAC3D,IAAyB,IAArBwjB,EAAUltB,OACZ,MAAO,KAMT,OAJmCktB,GAAU7jB,KAAK,SAACmD,EAAQoR,GAEzD,MADeuP,KAAuB3gB,GAASygB,KAIjD,MAAMzsB,GAEN,MADAyM,SAAQS,KAAKlN,IACN,IAIL2sB,GAAwB,QAAxBA,GAAyBC,EAASH,GACtC,GAAII,IAAc,CAuBlB,OArBeD,GAAQ7gB,KAAK,SAAAC,GAC1B,SAAOA,EAAO8gB,UAAUC,SAASN,IAAczgB,EAAO3G,iBAAmB2G,EAAO3G,gBAAgBmiB,cAAciF,MAI9GI,GAAc,EAEdD,EAAQlgB,QAAQ,SAAAV,GACd,GAAMghB,GAAehhB,EAAO3G,iBAAmB2G,EAAO3G,gBAAgB6D,iBAAiB,WAAY,EAAHzG,EAAA,SAAOuJ,EAAO3G,gBAAgB6D,iBAAiB,aACnH,KAAxB8jB,EAAaxtB,QACAwtB,EAAajhB,KAAK,SAAAC,GAE/B,MADe2gB,IAAuB3gB,GAASygB,OAI/CI,GAAc,KAMfA,GAeHI,GAAiB,SAACzY,EAAS0Y,EAAW7pB,EAASqjB,GACnD,GAAMyG,GAAY,GAAI7hB,KAAI4hB,GAAWzS,OAC/B2S,EAAkB,GAAIC,iBAAgBF,GACtCG,EAA2C,UAAnCF,EAAgB/uB,IAAI,WAAyB+Z,mBAAmBgV,EAAgB/uB,IAAI,YAAYuJ,MAAM,MAAM,GAAGA,MAAM,KAAK,IAAMwlB,EAAgB/uB,IAAI,SAC5JkvB,EAAensB,OAAOE,MAAQF,OAC9BosB,EAAYD,EAAensB,OAASA,OAAOE,IAC3CmsB,EAAqBtkB,QAAQqL,EAAQ1N,KAAK0gB,cAAc,mBAAqBhT,EAAQ1N,KAAK0gB,cAAc,oBAC1GkG,EAAqBD,EAAqBjZ,EAAQ1N,KAAK0gB,cAAc,kBAAkBmG,UAAYnZ,EAAQ1N,KAAK0gB,cAAc,iBAAiBmG,UAC/IC,EAAoBH,EAAqBjZ,EAAQ1N,KAAK0gB,cAAc,mBAAmBmG,UAAYnZ,EAAQ1N,KAAK0gB,cAAc,kBAAkBmG,UAC9IE,EAAUjsB,SAASmc,cAAc,WACvC8P,GAAQF,UAAYD,EACpBA,EAAqBG,EAAQC,UAC7BD,EAAQF,UAAYC,EACpBA,EAAoBC,EAAQC,SAC5B,IAAMC,GAAU1qB,EAAQ6F,iBAAiB,UAAU,GAC7C8kB,EAAmB,gBAAH7jB,QAAmB,GAAI6L,OAAOC,UACpD8X,GAAQjB,UAAUmB,IAAID,GACtBD,EAAQnqB,MAAM2V,QAAU,CACxB,IAAM2U,GAAmBtsB,SAASmc,cAAc,OAC1CoQ,EAAUvsB,SAASmc,cAAc,SACvCoQ,GAAQvqB,MAAM2V,QAAU,CACxB,IAAM6U,GAAexsB,SAASmc,cAAc,IAC5CqQ,GAAaC,GAAK,iBAClBD,EAAatB,UAAUmB,IAAI,0BAC3BG,EAAaT,UAAY,uDACzB,IAAIW,GAAqB,IACzB1G,KAAgB,EACZ6F,IACFa,EAAqB1sB,SAASmc,cAAc,OAC5CuQ,EAAmBD,GAAK,iBACxBC,EAAmB1qB,MAAMkX,SAAW,WACpCwT,EAAmB1qB,MAAM2V,QAAU,GAErC2U,EAAiBG,GAAK,mBACtBH,EAAiBpB,WAAa,mBAC9BoB,EAAiB7P,YAAY8P,EAC7B,IAAMvqB,GAAQhC,SAASmc,cAAc,UACxB3c,OAAOE,IAAIM,SAASqkB,MAAQ7kB,OAAOE,IAAIM,SAAS4lB,cAAc,QAAQ,IAC9EnJ,YAAYza,GACjBA,EAAMiW,KAAO,UA6DbjW,GAAMya,YAAYzc,SAAS2sB,eA5Df,43BA8DZf,EAAU5rB,SAASkF,KAAKuX,YAAY6P,EACpC,IAAQrM,GAAU6E,EAAV7E,KACR2M,IAAcT,EAAQhnB,WAAY1D,GAChCiF,OAAQ,SACRuZ,SACC,WACD,GAAMqM,GAAmBtsB,SAAS4lB,cAAc,oBAC5C0G,KACFA,EAAiB5Q,SACjBkQ,EAAUpU,oBAAoB,SAAUqV,GAA2B,IAEjEV,EAAQhsB,cAAc2sB,OAAwD,kBAAxCX,GAAQhsB,cAAc2sB,MAAMC,SACpEZ,EAAQhsB,cAAc2sB,MAAMC,YAGhClE,EAAcsD,EAAQhnB,WAAY1D,EAAS,UAC3ConB,EAAcyD,EAAkB7qB,EAAS,SAEzC,IAAMurB,GAAgB,SAAC1d,GACrB,MAAOA,GAAQiH,QAAQ,aAAc,GAAFhO,OAAK,GAAImB,KAAI4hB,GAAWlF,QAAM7d,OAAG,GAAImB,KAAI4hB,GAAWjF,SAAQ,WAEjGyF,GAAqBkB,EAAclB,GACnCE,EAAoBgB,EAAchB,EAElC,IAAIiB,IAAiB,EACjBC,GAAiB,EACjBJ,EAAQ,KACRK,EAAW,IAEf3tB,QAAOsY,iBAAiB,UAAW,SAAS9Z,GACrB,iBAAjBA,EAAEinB,KAAKgC,QACTgG,GAAiB,EACjBG,OAIJxB,EAAU9T,iBAAiB,UAAW,SAAS9Z,GACxB,iBAAjBA,EAAEinB,KAAKgC,QACTiG,GAAiB,EACjBG,MAIJ,IAAMD,GAAc,WAClBE,EAAa,WACXC,IACAC,EAAcrB,EAAQ1oB,gBAAgBmiB,cAAc,kBAAmB,QAEvEgG,EAAU9T,iBAAiB,SAAU+U,GAA2B,GAE5DhB,IACFa,EAAmB1qB,MAAM2V,QAAU,EAEnCiU,EAAU5rB,SAAS8X,iBAAiB,mBAAoB,WACrB,WAA7B9X,SAASytB,gBACXX,EAAMY,QAEN9B,EAAUjD,cAAc,GAAIC,aAAY,cAK9CgD,EAAUjD,cAAc,GAAIC,aAAY,WACxCuD,EAAQnqB,MAAM2V,QAAU,EAExBgW,OAIEN,EAAc,WAIlB,GAHAG,EAAcjB,EAAQ9oB,gBAAgBmiB,cAAc,kBAAmB,QACvE0G,EAAiB7P,YAAY+P,GAC7BD,EAAQvqB,MAAM2V,QAAU,EACpBkU,EAAoB,CACrB,IACOU,EAAQpsB,cAAc2sB,MAAMC,SAC9BR,EAAQpsB,cAAc2sB,MAAMC,UAE9B,MAAO3uB,IAIemuB,EAAQ9oB,gBAAgBmiB,cAAc,gBAC9CmG,UAAY,GAEhC4B,KAGIA,EAAsB,WACtBV,GAAkBC,GACpBtB,EAAUjD,cAAc,GAAIC,aAAY,YAItC0E,EAAe,SAACjW,GACpB,IAAKwU,EAEH,WADAxU,IAIF,KACM8U,EAAQhsB,cAAc2sB,MAAMC,SAC9BZ,EAAQhsB,cAAc2sB,MAAMC,UAE9B,MAAO3uB,GACPyM,QAAQS,KAAKlN,GAGS+tB,EAAQ1oB,gBAAgBmiB,cAAc,gBAC9CmG,UAAY,GAC5BH,EAAU5rB,SAASkF,KAAKuX,YAAYiQ,EACpC,IAAIkB,GAAczB,EAAQhsB,cAAcytB,WACxCA,GAAYC,MAAQD,EAAYC,UAChCD,EAAYC,MAAM7vB,EAAI0tB,EAClBF,EAAgB/uB,IAAI,UACtBmxB,EAAYC,MAAMC,SAAWtC,EAAgB/uB,IAAI,SAEnDJ,OAAO2K,KAAK4mB,GAAa9iB,QAAQ,SAAC5D,GACA,gBAArB0mB,GAAY1mB,KAA+D,IAA1C0mB,EAAY1mB,GAAKxB,QAAQ,cACnEkoB,EAAY1mB,GAAO8lB,EAAcY,EAAY1mB,MAIjD,IAAI6mB,GAAyBnC,EAAU5rB,SAAS4lB,cAAc,kBAC9DkH,GAAQ,GAAIkB,WAAUD,EAAwBH,GAC9Cd,EAAMmB,SACNnB,EAAMoB,YAAY7W,IAGdkW,EAAkB,WACtB,GAAMY,GAAiB3uB,OAAO2uB,mBACxBC,EAAe,GAAI1kB,KAAI4hB,GAAWzS,OAClC/D,EAAe,GAAI2W,iBAAgB2C,EACzCD,GAAeE,OAASvZ,EAAarY,IAAI,UACzC0xB,EAAeG,SAAWxZ,EAAarY,IAAI,YAC3C0xB,EAAeI,IAAMJ,EAAeG,SAAW,KAAOxZ,EAAarY,IAAI,OACvE0xB,EAAeK,gBAAkBL,EAAeE,QAAUF,EAAeG,SAAW,KAAO5C,EAC3FyC,EAAeM,KAAON,EAAeE,QAAUF,EAAeG,SAAW,KAAOxZ,EAAarY,IAAI,QAG7F0xB,EAAeI,KACjBJ,EAAeO,SAAW,GAAHnmB,OAAMF,mBAAmB8lB,EAAeI,MAC3DJ,EAAeK,kBACjBL,EAAeQ,cAAgB,+CAC/BR,EAAeO,SAAW,GAAHnmB,OAAM4lB,EAAeQ,cAAa,OAAApmB,OAAMF,mBAAmB8lB,EAAeK,iBAAgB,QAAAjmB,OAAOF,mBAAmB8lB,EAAeI,QAG5JJ,EAAeO,SAAW,KAG5BP,EAAeS,YAAc,SAAC5wB,EAAGyL,EAAKolB,GAC/BV,EAAeO,WAGO,kBAAhBG,IACTA,IAEFC,QAAQngB,MAAM3Q,GACd8wB,QAAQjU,KAAKpR,KAEfoB,QAAQmM,IAAImX,GACZ3uB,OAAO2uB,eAAiBA,GAGpBX,EAAgB,SAACzU,EAAQuJ,GAC7BvJ,EAAOjB,iBAAiB,QAAS,SAASmP,GACxChB,GAAiB3D,CACjB,IAAMwD,GAAe/M,EAAO3Y,uBAK5B4kB,IAAmBG,eAHjBC,iBAAmB6B,EAAM8H,QAAUjJ,EAAaxlB,GAAKwlB,EAAahhB,MAAS,KAAKkqB,QAAQ,GACxF3J,iBAAmB4B,EAAMgI,QAAUnJ,EAAavlB,GAAKulB,EAAa/gB,OAAU,KAAKiqB,QAAQ,IAEvCpiB,QAASuhB,eAAeO,WAAW,EAAO,aAI9FQ,GAAiB,EACjBC,EAAsBhD,CAC1B,KAAKR,EAAc,CACjB,GAAMyD,GAA6BxE,GAA+BwB,EAC9DgD,KACFD,EAAsBC,GAI1B,GAAMC,GAAuB,WAC3B,GAAIC,GAAkBnD,EAAQ1oB,gBAAgBmiB,cAAc,gBACxD2J,EAAmBzC,EAAM0C,gBAC7BF,GAAgB7S,YAAYiQ,GAC5BI,EAAM2C,eAAeF,IAGjB1C,EAA4B,WAChC,GAAM6C,GAAmBP,EAAoB/uB,wBAAwBV,IACjEiwB,EAAe,CACnB,IAAI9D,EAAoB,CACtB,IAAKM,EAAQ1oB,gBACX,MAEFksB,GAAexD,EAAQ1oB,gBAAgBmiB,cAAc,gBAAgB5hB,aAAe,GAChFkrB,EAAiBtD,EAAU1oB,YAAcwsB,GAAoBC,EAAe/D,EAAU1oB,YAAcwsB,GAAoBC,GAAgBD,IAAqB,EAAIC,GACnK7C,EAAM8C,OAEN9C,EAAMY,QAIV,GAAKwB,GAAmBhC,EAIxB,GAAIrB,EAAoB,CACtB,GAAIyD,GAAkBnD,EAAQ1oB,gBAAgBmiB,cAAc,gBACxDiK,EAAkBtD,EAAQ9oB,gBAAgBmiB,cAAc,gBACxD2J,EAAmBzC,EAAM0C,gBAM7B,IAJyC,UAArC9C,EAAmB1qB,MAAMC,UAC3ByqB,EAAmB1qB,MAAMC,QAAU,SAGjCytB,GAAoB,EAAIC,IAAiBT,EAAgB,CAC3D,IAAiB,IAAb/B,EACF,MAEAmC,GAAgBvD,UAAY,GAC5Be,EAAMgD,aACJC,MACE7W,SAAU,eAEZ8W,WACE/tB,QAAS,WAGbqtB,EAAgB7S,YAAYiQ,GAC5BI,EAAM2C,eAAeF,GACrB/C,EAAaxqB,MAAM2V,QAAU,EAC7B6U,EAAaxqB,MAAM6V,WAAa,OAChCX,EAAasV,EAAc,MAAO,EAAGyD,GACrC3D,EAAiBpB,UAAUxP,OAAO,+BAClC6Q,EAAQ/U,oBAAoB,gBAAiB6X,GAC7C9C,EAAQzU,iBAAiB,gBAAiBuX,GAC1C7C,EAAahV,oBAAoB,QAASyY,GAC1C9C,GAAW,MAER,CACL,GAAIA,EACF,MAEAZ,GAAQ/U,oBAAoB,gBAAiB6X,GAC7CQ,EAAgB9D,UAAY,GAC5B8D,EAAgBpT,YAAYiQ,GAC5BI,EAAM2C,eAAeF,GACrBzC,EAAMgD,aACJC,MACE7W,SAAU,cAEZ8W,WACE/tB,QAAS,UAGbqqB,EAAiBpB,UAAUmB,IAAI,+BAC/BnV,EAAasV,EAAc,KAAM,EAAG,WAClCA,EAAahV,oBAAoB,QAASyY,GAC1CzD,EAAa1U,iBAAiB,QAASmY,KAEpCC,KACHrL,GAAwBC,EAAiB,KACzCC,GAAgCD,EAAiBrjB,GACjDyuB,IAAwB,GAE1B/C,GAAW,OAIf,IAAIuC,GAAoB,EAAG,CACzB,GAAIvC,EACF,MAEAb,GAAiBpB,UAAUmB,IAAI,+BAC/BnV,EAAasV,EAAc,KAAM,EAAG,WAClCA,EAAahV,oBAAoB,QAASyY,GAC1CzD,EAAa1U,iBAAiB,QAASmY,KAEpCC,KACHrL,GAAwBC,EAAiB,KACzCC,GAAgCD,EAAiBrjB,GACjDyuB,IAAwB,GAE1B/C,GAAW,MAER,CACL,IAAKA,EACH,MAEAX,GAAaxqB,MAAM2V,QAAU,EAC7B6U,EAAaxqB,MAAM6V,WAAa,OAChCX,EAAasV,EAAc,MAAO,EAAGyD,GACrC3D,EAAiBpB,UAAUxP,OAAO,+BAElC8Q,EAAahV,oBAAoB,QAASyY,GAC1C9C,GAAW,IAMb8C,EAAyB,SAACjyB,GAC9B,GAAmC,MAA/BwuB,EAAaxqB,MAAM2V,QAAvB,CACA,GAAM2X,GAAkBzD,EAAqBM,EAAQ1oB,gBAAgBmiB,cAAc,gBAAkB,KAC/F2J,EAAmB1D,EAAqBiB,EAAM0C,iBAAmB,IACnEF,KAAoBA,EAAgB1J,cAAc,WACpD0J,EAAgBvD,UAAY,GAC5BuD,EAAgB7S,YAAYiQ,GAC5BI,EAAM2C,eAAeF,GACrBzC,EAAMgD,aACJC,MACE7W,SAAU,eAEZ8W,WACE/tB,QAAS,YAIfitB,GAAiB,EACjB5C,EAAiB5Q,SACjBkQ,EAAUpU,oBAAoB,SAAUqV,GAA2B,GACnEjB,EAAUjD,cAAc,GAAIC,aAAY,YAE1CuD,GAAQhsB,cAAcH,SAAS6a,OAC/BsR,EAAQhsB,cAAcH,SAAS+a,MAAM+Q,EAAmB9lB,MAAM,WAAW,GA/VtD,uLA+VoF8lB,EAAmB9lB,MAAM,WAAW,IAC3ImmB,EAAQhsB,cAAcH,SAASmwB,QAC/B5D,EAAQpsB,cAAcH,SAAS6a,OAC/B0R,EAAQpsB,cAAcH,SAAS+a,MAAMiR,EAAkBhmB,MAAM,WAAW,GAvVrD,8HAuVmFgmB,EAAkBhmB,MAAM,WAAW,IACzIumB,EAAQpsB,cAAcH,SAASmwB,SAI3BC,GAAO,SAAC3mB,EAAK4N,GACjB,GAAIgZ,GAAe,OAASjd,KAAKC,SAASzU,SAAS,IAAI0J,UAAU,EAAG,GACpE9I,QAAO6wB,GAAgBhZ,EACvBiZ,GAAU7mB,EAAM,iBAAmB4mB,IAG/BC,GAAY,SAAC7mB,GACjB,GAAI0a,GAASnkB,SAASmc,cAAc,SACpCgI,GAAOC,IAAM3a,EACbzJ,SAASkF,KAAKuX,YAAY0H,IAGtBoM,GAAwB,SAAC9mB,EAAKhI,GAClCoJ,QAAQmM,IAAI,oEACZ,IAAImN,GAASnkB,SAASmc,cAAc,SACpCgI,GAAOC,IAAM3a,EACb0a,EAAOsI,GAAK,QACZhrB,EAAQ+uB,QAAQrM,IAGZsM,GAAyB,SAACC,EAAOrlB,EAAS5J,EAASiF,GACxC,GAAIiqB,kBAAiB,SAAUC,EAAWC,GACvDD,EAAU9lB,QAAQ,SAASgmB,GACzBjI,EAAc6H,EAAMjvB,EAASiF,GAC7BmqB,EAASE,iBAGJrI,QAAQgI,EAAMrlB,IAGnB2lB,GAA2B,SAACvvB,GAChC,GAAImE,GAAkBC,GAAmBpE,GACrCwoB,EAAsD,SAA1CxoB,EAAQiD,aAAazD,EAAUqL,QAA+D,MAA1C7K,EAAQiD,aAAazD,EAAUqL,OAC/FxE,EAAoBlC,EAAgBkC,kBACpCgF,EAAUrL,EAAQiD,aAAazD,EAAU6L,QAE7C,OADAA,IAAUA,GAAsB,QAAXA,GACblH,kBAAkBqkB,YAAWniB,oBAAmBgF,YAGpDmkB,GAA0B,SAACnpB,EAAmBopB,EAAYjH,GAC9D,GAAyB,MAArBniB,EACF,IACE,GAAIqpB,IAAgB,CACF,IAAdD,IACFC,EAAe,GAEjB,GAAIzT,UAAS5V,EAAoB,IAAMqpB,EAAe,OACtD,MAAO/yB,GACH6rB,GACFpf,QAAQmM,IAAI5Y,KAMdgzB,GAAsB,SAACC,GAC3B,IAAK,GAAInqB,KAAOmqB,GACVA,EAAQt0B,eAAemK,IACzB2D,QAAQmM,IAAI9P,EAAM,OAASmqB,EAAQnqB,GAGvC2D,SAAQmM,IAAI,iFAGRuJ,GAAc,SAAC9e,EAASoe,EAAWyR,GAEvC,GAAAC,GAAiEP,GAAyBvvB,GAAnFmE,EAAe2rB,EAAf3rB,gBAAiBqkB,EAASsH,EAATtH,UAAWniB,EAAiBypB,EAAjBzpB,kBAAmBgF,EAAOykB,EAAPzkB,OAGlDmd,IACFmH,GAAoBE,EAGtB,IAAIJ,GAAaI,EAAgB,oBAIjC,IAFAL,GAAwBnpB,EAAmBopB,EAAYjH,GAErC,GAAdiH,EAAiB,CACnB,GAAIM,GAAQF,EAA0B,SAElCG,EAASH,EAAgB,aACzBI,EAAWJ,EAAgB,aAC3BK,EAAWL,EAAgB,aAC3BM,EAAWN,EAAgB,aAC3BO,EAAMP,EAAgB,cACtBQ,EAAMR,EAAgB,cACtB1pB,EAAMhC,EAAgBgC,IACtBqY,EAAQqR,EAAuB,MAC/B5qB,EAAS,EAET8qB,GAAM9rB,QAAQ,aAAe,EAC/B8rB,EAAQA,EAAMjb,QAAQ,iBAAkB,2BAC/Bib,EAAM9rB,QAAQ,aAAe,IACtC8rB,EAAQA,EAAMjb,QAAQ,iBAAkB,6BAE1C7P,EAAS,SACT8qB,EAAQA,EAAQ,YAAc1kB,EAAU,aAAe6kB,EAAW,aAAeC,EAAW,QAAUC,EAAM,QAAUC,EAAM,QAAUlqB,EAAM,aAAeS,mBAAmB0pB,GAAgBL,GAE9L,IAAIM,GAAcC,GAASzyB,OAAOkZ,UAAUwZ,IAG5ClyB,UAAS2R,OAAS,aAAe2f,EAAgB,aAAe,0BAAoCU,EAAc,kCAClHhyB,SAAS2R,OAAS,aAAe2f,EAAgB,aAAe,0BAAoCU,EAAc,iCAElH,IAAI9kB,GAAe,EACnBzL,GAAQ6F,iBAAiB,UAAUwD,QAAQ,SAAUV,GAC/CA,EAAOqiB,IAAMtX,EAAS/K,EAAOqiB,GAAI5M,KACnC3S,EAAe9C,EAAOqiB,KAG1B,IAAI3H,IACF0M,MAAOA,EACPC,OAAQA,EACRU,oBAAqBC,GAAsB,UAAWZ,GACtDa,4BAA6BD,GAAsB,YAAaZ,GAChEc,gBAAiBF,GAAsB,kBAAmBZ,GAC1DvR,SAGEsS,EAAcjB,EAAgBkB,SAC5BC,EAAoB,GAAI/oB,KAAI6oB,GAAa1Z,OACzC6Z,EAA0B,GAAIjH,iBAAgBgH,EAEpD,IAA+C,UAA3CC,EAAwBj2B,IAAI,YAA+D,UAArCi2B,EAAwBj2B,IAAI,KAEpF,WADAk2B,KAAezlB,eAAczL,UAASqjB,kBAAiBpe,UAIzD,IAAI2E,IACF,WAAa,EACb,YAAa,EAIf,IAFAolB,GAAuBzwB,SAAS+B,eAAemL,GAAc/H,WAAYkG,EAAS5J,EAASiF,GAE5C,UAA3CgsB,EAAwBj2B,IAAI,YAA+D,UAArCi2B,EAAwBj2B,IAAI,KAAkB,CACtG,GAAMm2B,GAAM,GAAItY,eAkBhB,OAjBAsY,GAAI/X,KAAK,MAAO0X,GAChBK,EAAI9X,YACJ8X,EAAIC,OAAS,SAAS70B,GACpBkgB,QAAQ4U,KACN5O,EAAa,wDACbA,EAAa,4CAEd/F,KAAK,SAAAmC,GACJ,GAAMrR,GAAS,GAAI8jB,WACbngB,EAAU3D,EAAO+jB,gBAAgBh1B,EAAE+a,OAAOuH,SAAU,YAC1D+K,IAAezY,EAAS4e,EAAO/vB,EAASqjB,GACxCmO,GAAe/lB,EAAcxG,EAAQjF,EAASqjB,GAC9C4B,GAAgBxZ,EAAczL,EAASqjB,EAAiB,WACxD,MAAO,SAAAnb,GACLkB,QAAQS,KAAK3B,OAMrBupB,GAAUhmB,EAAczL,EAASqjB,EAAiBpe,KAIhDisB,GAAgB,SAACpO,GA2FrB,QAAS4O,KACPxM,EAAqBhL,MAAOlX,QAASyI,EAAczL,UAASqjB,kBAAiBpe,SAAQ8f,QAAS,UAC9FD,GAA0B9hB,QAASyI,EAAczL,UAASqjB,kBAAiBpe,SAAQ8f,QAAS,UAC5FqC,EAAcnE,EAASvf,WAAY1D,EAASiF,GAC5CkmB,GAAclI,EAASvf,WAAY1D,GACjCiF,SACAuZ,UAhGJ,GAAQ/S,GAAmDqX,EAAnDrX,aAAczL,EAAqC8iB,EAArC9iB,QAASqjB,EAA4BP,EAA5BO,gBAAiBpe,EAAW6d,EAAX7d,OACxC8qB,EAAiB1M,EAAjB0M,MAAOvR,EAAU6E,EAAV7E,MACX4H,EAAc7nB,SAAS+B,eAAe,GAADwG,OAAI2E,EAAY,aACrDwX,EAAW1kB,SAAS+B,eAAe,GAADwG,OAAI2E,IACtC3B,EAAY9J,EAAQiD,aAAazD,EAAUsK,UAC/C,IAAkB,QAAdA,EAAqB,CACvB,GAA4B,IAAxB9J,EAAQ2xB,YAAmB,CAC7B,GAAMC,GAAgB5xB,EAAQgE,cAAc6tB,SACtCC,EAAW91B,MAAMsB,KAAKs0B,GAAe7yB,OACzC,SAACgzB,EAAKC,GAAK,MAAKrgB,MAAKogB,IAAIA,EAAKC,EAAML,cAAc,EAEpD1O,GAAS1iB,MAAM8C,MAAQyuB,EAAW,EAAI,GAAHhrB,OAAMgrB,EAAQ,MAAO,WAExD7O,GAAS1iB,MAAM8C,MAAQ,GAAHyD,OAAM9G,EAAQ2xB,YAAW,KAE/C1O,GAAS1iB,MAAM0xB,eAAe,UAC9BhP,EAAS1iB,MAAM2xB,YAAc,UAC7BjP,EAAS1iB,MAAMonB,OAAS,OACxBvB,EAAY7lB,MAAM8C,MAAQ,OAC1B+iB,EAAY7lB,MAAMonB,OAAS,MAC3BvB,EAAY7lB,MAAM0xB,eAAe,UACjC7L,EAAY7lB,MAAM2xB,YAAc,UAGlC,GAAIzpB,KAAW,CACb,GAAM0pB,IAAe,EAAA/yB,EAAA,SAAIrB,OAAOG,OAAOK,SAASsH,iBAAiB,oCAAoC8X,OAAO,SAAAhV,GAAM,MAAIA,GAAO3G,kBAAoBzD,WAAU,EAC3J4zB,GAAaC,sBAAsB,WAAYhM,GAC/C+L,EAAa5xB,MAAMC,QAAU,OAG/B,GAAM6xB,GAAmBA,MACnB9oB,EAAevJ,EAAQmJ,oBAAoBpK,OAAO,SAACuzB,EAAK73B,GAC5D,MAAAojB,QAAWyU,OAAG,EAAAxU,EAAA,YAAGrjB,EAAOuF,EAAQiD,aAAaxI,SAE/C43B,GAAiB9oB,aAAeA,CAChC,IAAMoC,GAAyB3L,EAAQiD,aAAazD,EAAUmM,yBAA2B,MAErElD,KAAY1K,OAAOG,OAASH,QACpCsY,iBAAiB,UAAW,SAAS9Z,GAC/C,GAAAg2B,GAAwBh2B,EAAEinB,KAAlBgC,EAAK+M,EAAL/M,MAAOhC,EAAI+O,EAAJ/O,IAED,kBAAVgC,GACFjpB,EAAEopB,OAAOzC,aACPsC,MAAO,eACPhC,KAAM6O,GACL,KAGS,gBAAV7M,GACFjC,EAAkBC,EAAM7X,EAAwB1G,KAQpD,WAAmD,GAArButB,GAAW1qB,UAAA3L,OAAA,OAAAoH,KAAAuE,UAAA,IAAAA,UAAA,GACjC2qB,EAAmBl0B,SAASmc,cAAc,MAChD9f,QAAO83B,OAAOD,EAAiBlyB,OAC7BkX,SAAU,WACVxZ,IAAK,EACL8C,KAAM,EACNsC,MAAO,OACPC,OAAQ,OACR,YAAa,aAEf,IAAMqvB,GAAmBp0B,SAASmc,cAAc,MAChD9f,QAAO83B,OAAOC,EAAiBpyB,OAC7BkX,SAAU,QACVxZ,IAAK,EACL8C,KAAM,EACNsC,MAAO,OACPC,OAAQ,OACR9C,QAAS,OACT,cAAe,SACf,kBAAmB,UAErB,IAAMoyB,GAAWr0B,SAASmc,cAAc,MACxC9f,QAAO83B,OAAOE,EAASryB,OACrBkX,SAAU,WACVpU,MAAOmvB,EAAc,OAAS,SAGhCC,EAAiBzX,YAAY2X,GAC7BA,EAAiB3X,YAAY4X,GAC7BxM,EAAYpL,YAAYyX,GACxBG,EAAS5X,YAAYiI,IAlCY,QAAdnZ,GACrBmZ,EAAStI,aAAa,MAAOoV,GAC7B9M,EAASmO,OAASM,GAmEdzI,GAAgB,SAACJ,GACrB,GAAIvhB,WAA6C,kBAAzBA,WAAUurB,WAChCvrB,UAAUurB,WAAW,yCAAD/rB,OAA0C+hB,QACzD,CACL,GAAMiK,GAAMv0B,SAASmc,cAAc,MACnCoY,GAAInQ,IAAM,yCAAH7b,OAA4C+hB,GACnDiK,EAAIzvB,MAAQ,EACZyvB,EAAIxvB,OAAS,EACb/E,SAASkF,KAAKuX,YAAY8X,GAE5BC,GAAmBlK,IAGfkK,GAAqB,SAAClK,GAC1B,GAAMmK,GAAQlc,YAAY,WACxB,IACE,GAAMmc,GAAiBl1B,OAAOG,OAAOK,SAAS4lB,cAAc,6BAExD8O,KACFA,EAAe5c,iBAAiB,QAAS,WACvC,GAAI/O,WAA6C,kBAAzBA,WAAUurB,WAChCvrB,UAAUurB,WAAW,mDAAD/rB,OAAoD+hB,QACnE,CACL,GAAMiK,GAAMv0B,SAASmc,cAAc,MACnCoY,GAAInQ,IAAM,mDAAH7b,OAAsD+hB,GAC7DiK,EAAIzvB,MAAQ,EACZyvB,EAAIxvB,OAAS,EACb/E,SAASkF,KAAKuX,YAAY8X,MAG9Brc,cAAcuc,IAEhB,MAAMr2B,MACP,MAGCoiB,GAAiB,SAAC/e,EAASoe,EAAWyR,GAE1C,GAAAqD,GAAiE3D,GAAyBvvB,GAAnFmE,EAAe+uB,EAAf/uB,gBAAiBqkB,EAAS0K,EAAT1K,UAAWniB,EAAiB6sB,EAAjB7sB,kBAAmBgF,EAAO6nB,EAAP7nB,OAElDmd,IACFmH,GAAoBE,EAGtB,IAAIJ,GAAaI,EAAgB,oBAIjC,IAFAL,GAAwBnpB,EAAmBopB,EAAYjH,GAErC,GAAdiH,EAAiB,CACnB,GAAIM,GAAQF,EAA0B,SAElCG,EAASH,EAAgB,aACzBI,EAAWJ,EAAgB,aAC3BK,EAAWL,EAAgB,aAC3BM,EAAWN,EAAgB,aAC3BO,EAAMP,EAAgB,cACtBQ,EAAMR,EAAgB,cACtB1pB,EAAMhC,EAAgBgC,IACtBqY,EAAQqR,EAAuB,MAC/B5qB,EAAS,KAET8qB,GAAM9rB,QAAQ,aAAe,GAC/B8rB,EAAQA,EAAMjb,QAAQ,iBAAkB,2BACxC7P,EAAS,WACA8qB,EAAM9rB,QAAQ,aAAe,GACtC8rB,EAAQA,EAAMjb,QAAQ,iBAAkB,+BACxC7P,EAAS,WACA8qB,EAAM9rB,QAAQ,gBAAkB,GACzC8rB,EAAQA,EAAMjb,QAAQ,iBAAkB,+BACxCib,GAAS,UAAY9xB,IAAIF,OAAO2D,WAAa,WAAazD,IAAIF,OAAO0D,YACrEwD,EAAS,cACA8qB,EAAM9rB,QAAQ,aAAe,IACtC8rB,EAAQA,EAAMjb,QAAQ,iBAAkB,4BACxC7P,EAAS,WAEX8qB,EAAQA,EAAQ,YAAc1kB,EAAU,aAAe6kB,EAAW,aAAeC,EAAW,QAAUC,EAAM,QAAUC,EAAM,QAAUlqB,EAAM,aAAeS,mBAAmB0pB,GAAgBL,GAC9L,IAAIM,GAAcC,GAASzyB,OAAOkZ,UAAUwZ,IAG5ClyB,UAAS2R,OAAS,aAAe2f,EAAgB,aAAe,0BAAoCU,EAAc,kCAClHhyB,SAAS2R,OAAS,aAAe2f,EAAgB,aAAe,0BAAoCU,EAAc,iCAClH,IAAI9kB,GAAezL,EAAQ6F,iBAAiB,UAAU,GAAGmlB,GACrD3H,GACF0M,MAAOA,EACPC,OAAQA,EACRU,oBAAqBC,GAAsB,UAAWZ,GACtDa,4BAA6BD,GAAsB,YAAaZ,GAChEc,gBAAiBF,GAAsB,kBAAmBZ,GAC1DvR,SAEE5U,GACF,WAAa,EACb,YAAa,EAEfolB,IAAuBzwB,SAAS+B,eAAemL,GAAc/H,WAAYkG,EAAS5J,EAASiF,GAC3FwsB,GAAUhmB,EAAczL,EAASqjB,EAAiBpe,KAIhD+Z,GAAgB,SAAChf,EAAS6vB,GAE9B,GAAAsD,GAAiE5D,GAAyBvvB,GAAlEwoB,GAAF2K,EAAfhvB,gBAA0BgvB,EAAT3K,WAAWniB,EAAiB8sB,EAAjB9sB,kBAAmBgF,EAAO8nB,EAAP9nB,OAElDmd,IACFmH,GAAoBE,EAGtB,IAAIJ,GAAaI,EAAgB,oBAIjC,IAFAL,GAAwBnpB,EAAmBopB,EAAYjH,GAErC,GAAdiH,EAAiB,CAGnBZ,GAAU,iDAEV,IAAIkB,GAAQF,EAA0B,SAClCuD,EAAY1e,EAAmBqb,EACnCqD,GAAUC,SAAWD,EAAUC,SAAWD,EAAUC,SAAW7zB,EAAU+L,cACzE6nB,EAAUpD,OAASH,EAAgB,aACnCuD,EAAUnD,SAAWK,GAAgBT,EAAgB,cACrDuD,EAAUnD,SAAWK,GAAgB8C,EAAUnD,cAC3C1sB,IAAa6vB,EAAU,YAAc,IAAMA,EAAU,aACvDA,EAAU1C,oBAAsB0C,EAAU,YAI5CA,EAAUtG,KAAO,gBAAJhmB,OAAoBuE,EAAO,qBAAAvE,OAAoBssB,EAAUrpB,GACtEqpB,EAAU5U,MAAQqR,EAAuB,KACzC,IAAIU,GAAcC,GAASzyB,OAAOkZ,UAAUwZ,IAG5ClyB,UAAS2R,OAAS,aAAe2f,EAAgB,aAAe,0BAAoCU,EAAc,kCAClHhyB,SAAS2R,OAAS,aAAe2f,EAAgB,aAAe,0BAAoCU,EAAc,kCAElH+C,GAAgBtzB,EAASozB,GACzBG,GAAsBvzB,EAASozB,KAI7B5C,GAAW,SAAC7c,GAMhB,IALA,GAAIhZ,GAAI0S,EACN/S,EAAIK,EAAE6S,OAAO7S,EAAE2S,WAAa,SAAW,SAAStE,KAAK2K,GACrD6f,KACAr5B,EAAI,GAECA,KAAKq5B,EAAI74B,EAAE8K,IAAItL,IAAMG,EAAEH,IAAM,EAOpC,OALAq5B,GAAI74B,EAAE4S,EAAE9S,SACR+4B,EAAI74B,EAAE8K,IAAI,KAAKqP,QAAQna,EAAE4S,EAAEC,OAAQ,SAAUimB,EAAIC,EAAIC,GAC/CD,IAAIF,EAAI74B,EAAE4S,EAAE9S,MAAMi5B,GAAMC,KAGvBH,GAGHI,GAAc,aAEhBnF,IAAwB,EAEtBxJ,GAAmB,WACvB,GAAI4O,KAGJ,OAAO,UAAU9zB,EAAUC,EAASqjB,EAAiBpe,GACnD,GAAc,UAAVA,GAAgC,SAAVA,EAAmB,CAC3C,GAAI6uB,GAAiB,EAEnBA,GADEpgB,EAAS3T,EAAU,MACJA,EAAS8G,UAAU,EAAG9G,EAAS5D,OAAS,GAAK,IAE7C4D,EAAS8G,UAAU,EAAG9G,EAAS5D,OAAS,GAAK,QAGjCoH,KAA3BswB,EAAOC,KACThe,aAAa+d,EAAOC,IACpBD,EAAOC,OAAkBvwB,IAG3BswB,EAAO9zB,GAAYoW,WAAW,WAC5B,GAAIrW,EAAmBC,EAAUC,GAAU,CACzC,GAAM4J,IACJ+c,KAAM,KACNC,WAAY,MACZlkB,WAAY,GAAK,IAEbkT,EAAW,SAAA6O,GACf,GAAM/M,GAAc4I,SAAwC,IAA/BmE,EAAQ,GAAGqC,kBACrCpP,GAAc,KAGjBnZ,SAAS+B,eAAeP,IAAaxB,SAAS+B,eAAeP,GAAUrB,cAAcwkB,aAAcC,cAAc,EAAMzL,eAAe,KACxH,SAAVzS,EACGwpB,KACHrL,GAAwBC,EAAiB3L,GACzC4L,GAAgCD,EAAiBrjB,GACjDyuB,IAAwB,IAG1BrL,GAAwBC,EAAiB3L,GACzC4L,GAAgCD,EAAiBrjB,IAEnD2I,EAAOorB,UAAUx1B,SAAS+B,eAAeP,MAErC4I,EAAS,GAAIqe,sBAAqBpR,EAAUhM,EAClDjB,GAAOse,QAAQ1oB,SAAS+B,eAAeP,QAEvCklB,IAAgBllB,EAAUC,EAASqjB,EAAiBpe,IAErD,SAEE,IAAIA,EAAOhB,QAAQ,QAAU,EAAG,CACrC,GAAM2F,IACJ+c,KAAM,KACNC,WAAY,MACZlkB,WAAY,GAAK,IAEbkT,EAAW,SAAA6O,GACf,GAAM/M,GAAc4I,SAAwC,IAA/BmE,EAAQ,GAAGqC,kBACxC1D,IAAwBC,EAAiB3L,GACzC4L,GAAgCD,EAAiBrjB,GACjD2I,EAAOorB,UAAUx1B,SAAS+B,eAAeP,KAErC4I,EAAS,GAAIqe,sBAAqBpR,EAAUhM,EAClDjB,GAAOse,QAAQ1oB,SAAS+B,eAAeP,QAClC,IAAc,MAAVkF,EAAgB,CACzB,GAAI+uB,GAAQh0B,EAAQmkB,cAAc,kBAClC,IAAIpmB,OAAOipB,sBAAwBgN,EAAO,CACxC,GAAMpe,GAAW,SAAU6O,EAAS2K,GAGlC,KAAI3K,EAAQ,GAAGqC,mBAAqB,IAApC,CACA,GAAMpP,GAAc4I,SAAwC,IAA/BmE,EAAQ,GAAGqC,kBAExC1D,IAAwBC,EAAiB3L,GACzC4L,GAAgCD,EAAiBrjB,GACjDi0B,EAAeF,UAAUC,KAErBpqB,GACJ+c,KAAM,KACNC,WAAY,MACZlkB,WAAY,IAAM,GAAK,IAAM,IAE3BuxB,EAAiB,GAAIjN,sBAAqBpR,EAAUhM,EACxDqqB,GAAehN,QAAQ+M,OAEvB7d,YAAW,WACJjT,EAAelD,IAElBojB,GAAwBC,GACxBC,GAAgCD,EAAiBrjB,IAEjDilB,OAAgB1hB,GAAWvD,EAASqjB,EAAiBpe,IAEtD,SAEA,CACL,GAAM2E,IACJ+c,KAAM,KACNC,WAAY,MACZlkB,WAAY,GAAK,IAEbkT,EAAW,SAAA6O,GACf,GAAM/M,GAAc4I,SAAwC,IAA/BmE,EAAQ,GAAGqC,kBACxC1D,IAAwBC,EAAiB3L,GACzC4L,GAAgCD,EAAiBrjB,GACjD2I,EAAOorB,UAAUx1B,SAAS+B,eAAeP,KAErC4I,EAAS,GAAIqe,sBAAqBpR,EAAUhM,EAClDjB,GAAOse,QAAQ1oB,SAAS+B,eAAeP,QAKxCG,OACHnC,OAAOE,IAAIi2B,eAAiB,SAAClxB,EAASmxB,EAAerN,GACnD,IAC2C,OAArCvoB,SAAS+B,eAAe0C,IAC1BmxB,EAAcz1B,eAAiBy1B,EAAcz1B,cAAcH,SAAS+B,eAAe0C,IAAYmxB,EAAcz1B,cAAcH,SAAS+B,eAAe0C,GAAStE,cAAcwkB,aAAc4D,qBAAqB,KAE/MvoB,SAAS+B,eAAe0C,IAAYzE,SAAS+B,eAAe0C,GAAStE,cAAcwkB,aAAc4D,qBAAqB,KACtH,MAAO5e,GACPkB,QAAQmM,IAAIrN,KAKlB,IAAMksB,IAAsB,SAACp0B,EAASgD,GACpC,GAAAqxB,GAAwBr0B,EAAQiD,aAAazD,EAAU8E,QAAQC,MAAM,KAAI+vB,GAAA,EAAApM,EAAA,SAAAmM,EAAA,GAAlEhxB,EAAKixB,EAAA,GAAEhxB,EAAMgxB,EAAA,GACdC,EAAkBlxB,EAClBmxB,EAAmBlxB,EAAOiB,MAAM,KAAK,EAG3C,QAASgwB,kBAAiBC,mBAAkBC,oBAFhBl2B,SAAS+B,eAAe0C,GAASZ,aAAemyB,GAAiBhH,QAAQ,GAEvCmH,qBADjCn2B,SAAS+B,eAAe0C,GAAST,cAAgBiyB,GAAkBjH,QAAQ,KAgDpGvI,MAoLAyM,GAAY,SAACzuB,EAAShD,EAASqjB,EAAiBpe,GACpD,GAAMotB,GAAmBA,MACnB9oB,EAAevJ,EAAQmJ,oBAAoBpK,OAAO,SAACuzB,EAAK73B,GAC5D,MAAAojB,QAAWyU,OAAG,EAAAxU,EAAA,YAAGrjB,EAAOuF,EAAQiD,aAAaxI,SAE/C43B,GAAiB9oB,aAAeA,CAChC,IAAIoC,GAAyB3L,EAAQiD,aAAazD,EAAUmM,yBAA2B,IACzE,eAAV1G,GAAoC,WAAVA,GAC5B0vB,GAAU3xB,EAAShD,EAASiF,GAEf,YAAXA,IACFsf,IAAgB,GAElBxmB,OAAOsY,iBAAiB,UAAW,SAAS9Z,GAC1C,GAAAq4B,GAAwBr4B,EAAEinB,KAAlBgC,EAAKoP,EAALpP,MAAOhC,EAAIoR,EAAJpR,IAED,kBAAVgC,GACFjpB,EAAEopB,OAAOzC,aACPsC,MAAO,eACPhC,KAAM6O,GACL,KAGS,gBAAV7M,GACFjC,EAAkBC,EAAM7X,EAAwB1G,KAGpD1G,SAAS+B,eAAe0C,GAAS2X,aAAa,MAAO0I,EAAgB0M,OACrExxB,SAAS+B,eAAe0C,GAASouB,OAAS,WAAY,GAAAyD,GAAA,IACpD3P,GAAqBhL,MAAOlX,UAAShD,UAASqjB,kBAAiBpe,WAC/D6f,GAA0B9hB,UAAShD,UAASqjB,kBAAiBpe,UAC7D,IAAQuZ,GAAU6E,EAAV7E,KAmBR,IAlBArI,WAAW,WACTgV,GAAc0J,EAAKnxB,WAAY1D,GAC7BiF,SACAuZ,UAEF4I,EAAcyN,EAAKnxB,WAAY1D,EAASiF,IACvC,GACHusB,GAAexuB,EAASiC,EAAQjF,EAASqjB,GAE3B,UAAVpe,GACF6vB,GAAY9xB,EAAShD,EAASiF,GAGF,MAA1B0G,GACFopB,GAAe/xB,EAAShD,GAItBqjB,EAAgB0M,MAAM9rB,QAAQ,aAAe,EAAG,CAClD1F,SAAS+B,eAAe0C,GAASzC,MAAMy0B,UAAY,OACnDz2B,SAAS+B,eAAe0C,GAASzC,MAAMuxB,SAAW,MAClD,IAAAmD,GAAmFb,GAAoBp0B,EAASgD,GAAxGuxB,EAAeU,EAAfV,gBAAiBC,EAAgBS,EAAhBT,iBAAkBC,EAAgBQ,EAAhBR,iBAAkBC,EAAiBO,EAAjBP,iBAC7D,IAAID,EAAmBC,EAAmB,CACxC,GAAMQ,IAAYX,EAAkBE,EAC9BU,GAAaX,EAAmBC,CACtCl2B,UAAS+B,eAAe0C,GAASzC,MAAM8C,MAAQ,GAAHyD,OAAMouB,EAAQ,MAC1D32B,SAAS+B,eAAe0C,GAASzC,MAAM+C,OAAS,GAAHwD,OAAMquB,EAAS,UACvD,CACL,GAAMD,IAAYX,EAAkBG,EAC9BS,GAAaX,EAAmBE,CACtCn2B,UAAS+B,eAAe0C,GAASzC,MAAM8C,MAAQ,GAAHyD,OAAMouB,EAAQ,MAC1D32B,SAAS+B,eAAe0C,GAASzC,MAAM+C,OAAS,GAAHwD,OAAMquB,EAAS,UAM9DnN,GAAY,qnDAEZmD,GAAgB,SAAC/E,EAAapmB,EAAS4J,EAASgM,GACpD,GAAMwf,GAAmBhP,EAAYjC,cAAc,kBAE/CiR,IACAA,EAAiBnb,SAIJ,QADDja,EAAQiD,aAAazD,EAAUsK,YAI/CurB,GAAejP,EAAapmB,EAAS4J,EAASgM,IAG1Cyf,GAAiB,SAACjP,EAAapmB,EAAS4J,EAASgM,GACrD,GAAQ3Q,GAAW2E,EAAX3E,OACFqwB,EAAeC,GAAsBnP,EAAanhB,EACxDqwB,GAAajf,iBAAiB,QAAS,SAASmP,GAC9CA,EAAMgQ,kBACNC,GAAoBrP,EAAapmB,EAAS4J,EAASgM,GACpB5V,EAAQiD,aAAazD,EAAUmM,yBAA2B,MAC/C,YAAX1G,IAAmD,IAA3BA,EAAOhB,QAAQ,QACpEyxB,GAAoBtP,EAAapmB,EAASiF,KAI9CmhB,EAAYpL,YAAYsa,IAGpBI,GAAsB,SAACtP,EAAapmB,EAASiF,GACjD,GAAM6L,GAAWvS,SAASmc,cAAc,KAClCib,EAAcp3B,SAASmc,cAAc,MAW3C,QATA5J,EAASka,GAAK,kBACdpwB,OAAO83B,OAAO5hB,EAASvQ,OACrB8C,MAAO,OACPC,OAAQ,OACRmU,SAAU,WACV1W,KAAM,MACN9C,IAAK,QAGCgH,GACN,IAAK,UACH6L,EAASvQ,MAAMwnB,OAAS/nB,EAAQiD,aAAa,+BAAiC,GAC9E,MACF,SACE6N,EAASvQ,MAAMwnB,OAAS/nB,EAAQiD,aAAa,uBAAyB,IAG1E0yB,EAAYp1B,MAAM8C,MAAQ,OAC1BsyB,EAAYhT,IAAM,y9IAElB7R,EAASkK,YAAY2a,GACrBvP,EAAYpL,YAAYlK,GAExBA,EAASuF,iBAAiB,QAAS,SAASmP,GAC1CA,EAAMgQ,kBACNpP,EAAYnM,YAIVsb,GAAwB,SAACnP,EAAanhB,GAC1C,GAAM4L,GAAOtS,SAASmc,cAAc,OAC9BG,EAAYtc,SAASmc,cAAc,OACrCkb,EAAiB,CAEjBxP,GAAYhkB,cACdwzB,EAA2C,KAA1BxP,EAAYhkB,YAAsB,GAAK,GAA+B,KAA1BgkB,EAAYhkB,aAGvErE,OAAO2D,aAAek0B,IACxBA,EAAqC,KAApB73B,OAAO2D,WAAqB,GAAK,GAAyB,KAApB3D,OAAO2D,YAG3Dk0B,IACHA,EAAiB,GAuBnB,OAlBAh7B,QAAO83B,OAAO7hB,EAAKtQ,OACjBC,QAAS,QACT6C,MAJkB,EAIXuyB,EAAiC,KACxCC,cAAe,WAGjBhb,EAAUmQ,GAAK,iBACfpwB,OAAO83B,OAAO7X,EAAUta,OACtBkX,SAAU,WACVxZ,IAAgB,OAAXgH,EAAkB,OAAS,EAChC5D,OAAmB,OAAX4D,EAAkB,EAAI,OAC9B1D,MAAkB,OAAX0D,EAbW,EAaO2wB,EAAiC,KAAO,EACjE7N,OAAQ,IAEVlX,EAAK8R,IAAMnjB,EAAUuN,YAErB8N,EAAUG,YAAYnK,GAEfgK,GAGH4a,GAAsB,SAACrP,EAAapmB,EAAS4J,EAASgM,GAC1D,GAAQ3Q,GAAW2E,EAAX3E,OACF6wB,EAAmBC,GAAsB/1B,EAAS4J,GAClDosB,EAAYC,GAA2Bj2B,EAASiF,EACtDmhB,GAAYpL,YAAY8a,GACxB1P,EAAYpL,YAAYgb,EAExB,IAAM/S,GAAWmD,EAAYjC,cAAc,mBAEvCpmB,QAAOwuB,WACTxuB,OAAOmlB,aACLsC,MAAO,kBACN,KAGDvC,GACFA,EAASvkB,cAAcwkB,aACrBsC,MAAO,kBACN,KAGLwQ,EAAU3f,iBAAiB,QAAS,SAASmP,GAK3C,GAJAA,EAAMgQ,kBACNM,EAAiB7b,SACjBC,KAAKD,WAC0Bja,EAAQiD,aAAazD,EAAUmM,yBAA2B,QAC/B,IAA3B1G,EAAOhB,QAAQ,OAAe,CAC3D,GAAM6M,GAAWvS,SAAS4lB,cAAc,mBACpCrT,IACFA,EAASmJ,SAITlc,OAAOwuB,WACTxuB,OAAOmlB,aACLsC,MAAO,oBACN,KAGDvC,GACFA,EAASvkB,cAAcwkB,aACrBsC,MAAO,oBACN,OAIPsQ,EAAiBzf,iBAAiB,OAAQ,WACxC,GAAA6f,GAAyB,GAAI9Q,gBAArBC,EAAK6Q,EAAL7Q,MAAOC,EAAK4Q,EAAL5Q,KAEfD,GAAME,UAAY,SAAUC,GAC1B,GAAOhC,GAAQgC,EAARhC,IAMP,IAJa,mBAATA,GACFzlB,OAAOqb,KAAK,gDAGD,kBAAToK,EAA0B,CAC5BwS,EAAU/b,QACV,IAAMkc,GAAWL,EAAiBpyB,WAAWygB,cAAc,iBAEvDgS,IACFA,EAASlc,SAIA,SAATuJ,GACE5N,GAAgC,kBAAbA,IACrBA,KAKNsE,KAAKxb,cAAcwkB,YAAY,KAAM,KAAMoC,OAIzC2Q,GAA6B,SAACj2B,EAASiF,GAC3C,GAAMmxB,GAAQ73B,SAASmc,cAAc,KAC/BoY,EAAMv0B,SAASmc,cAAc,MAenC,QAbAoY,EAAInQ,IAAMnjB,EAAUsN,iBACpBspB,EAAMpL,GAAK,sBACXoL,EAAMpb,YAAY8X,GAElBA,EAAIvyB,MAAMuxB,SAAW,OAErBl3B,OAAO83B,OAAO0D,EAAM71B,OAClBkX,SAAU,WACVxZ,IAAgB,YAAXgH,IAAoD,IAA3BA,EAAOhB,QAAQ,QAA4B,KAAXgB,EAAiB,OAAS,OACxFlE,KAAM,OACNsC,MAAO,SAGD4B,GACN,IAAK,UACHmxB,EAAM71B,MAAMwnB,OAAS/nB,EAAQiD,aAAa,+BAAiC,GAC3E,MACF,SACEmzB,EAAM71B,MAAMwnB,OAAS/nB,EAAQiD,aAAa,uBAAyB,IAGvE,MAAOmzB,IAGHL,GAAwB,SAAC/1B,EAAS4J,GACtC,GAAQ3E,GAAW2E,EAAX3E,OACF4V,EAAYtc,SAASmc,cAAc,SAkBzC,QAjBI9Q,EAAe,MACjBiR,EAAU8H,IAAM,GAAH7b,OAAMtH,EAAUqN,YAAW,YAAA/F,OAAW8C,EAAe,OAElEiR,EAAU8H,IAAMnjB,EAAUqN,YAE5BgO,EAAUF,aAAa,YAAa,MACpCE,EAAUF,aAAa,cAAe,KACtCE,EAAUmQ,GAAK,sBAEfpwB,OAAO83B,OAAO7X,EAAUta,OACtBkX,SAAU,WACVxZ,IAAK,EACL8C,KAAM,EACNsC,MAAO,OACPC,OAAQ,SAGF2B,GACN,IAAK,UACH4V,EAAUta,MAAMwnB,OAAS/nB,EAAQiD,aAAa,+BAAiC,GAC/E,MACF,SACE4X,EAAUta,MAAMwnB,OAAS/nB,EAAQiD,aAAa,uBAAyB,IAG3E,MAAO4X,IAwFHyY,GAAkB,SAACtzB,EAASozB,GAKhC,GAAIiD,GAAS1oB,EAAa3N,EAAQiD,aAAazD,EAAUgM,qBAAuB,GAAY,QACxFsC,EAASH,EAAa3N,EAAQiD,aAAazD,EAAUgM,qBAAuB,GAAW,MAE3F,KAAK,GAAIrR,KAAKi5B,GACZiD,EAASrhB,EAAeqhB,EAAQl8B,EAAGi5B,EAAUj5B,GAG/C,IAAMm8B,GAAa,SAACtuB,GAAG,MAAoB,gBAARA,IAAoBA,EAAIuuB,WAAW,SAChEC,EAAeF,EAAWlD,EAAUqD,UACpCC,EAAgBJ,EAAWlD,EAAUuD,WAErCC,EAAkBF,GAAiBtD,EAAUuD,UAAUjjB,SAAS,MAEtE1T,GAAQsqB,UAAY+L,CACpB,IAAIQ,GAAO72B,EAAQmkB,cAAc,wBAC7Blf,EAASC,GAAYlF,EACzB,IAAK42B,EAkCHnU,EAAa,6CAA6C/F,KAAK,WAC7D,GAAMoa,GAAiB92B,EAAQmkB,cAAc,oBAC7C2S,GAAeC,WAAWx2B,MAAMC,QAAU,MAE1C,IAAM6qB,GAAQ,GAAIkB,WAAUuK,GAC1BnU,IAAKyQ,EAAUuD,UACfK,OAAQ,yCACRC,UAAU,EACVC,MAAM,EACNC,iBAAiB,EACjBC,aAAc,SACdhL,OACE7vB,EAAE62B,EAAU72B,IAMhB,IAFA8uB,EAAMmB,SACNnB,EAAMoB,YAAY,iBAAMpB,GAAM8C,SAC1BpwB,OAAOipB,sBAAwBqE,GAASyL,EAAgB,CACnC,GAAI9P,sBACnB,SAACvC,GACKA,EAAQ,GAAGqC,mBAAqB,GAC7BuE,EAAMgM,YAAYhM,EAAMY,QAEzBZ,EAAMgM,YAAYhM,EAAM8C,SAI9BxH,KAAM,KACNC,WAAY,MACZlkB,WAAY,EAAG,GAAK,IAAM,GAAK,IAAM,GAAK,KAIrCukB,QAAQ6P,GAEzB7R,OAAgB1hB,GAAWvD,EAASozB,EAAWnuB,KAG7C4xB,GAAQL,EACVK,EAAKlU,IAAMyQ,EAAUqD,SACZI,IACTA,EAAKt2B,MAAMC,QAAU,YA5EH,CACpBsN,EAAS6D,KAAKogB,IAAI,EAAGjkB,GAAW0oB,GAAkBE,EAAqB,EAAJ,IAEnE12B,EAAQO,MAAMC,QAAU,MAExB,IAAI82B,GAAQt3B,EAAQmkB,cAAc,yBAE9BoT,EAA4B,WAC9B,GAAIC,GAAQ,CACZ,OAAO,cACLA,GACa1pB,IACX9N,EAAQO,MAAMC,QAAU,GACxBykB,OAAgB1hB,GAAWvD,EAASozB,EAAWnuB,OAKjD4xB,IAAQL,GACVK,EAAKzF,OAASmG,EACdV,EAAKlU,IAAMyQ,EAAUqD,UACZI,IACTA,EAAKt2B,MAAMC,QAAU,QAGnB82B,GAASZ,GACXY,EAAMlG,OAASmG,EACfD,EAAM3U,IAAMyQ,EAAUuD,WACbW,IACTA,EAAM/2B,MAAMC,QAAU,QAmD1B,GAAQge,GAAU4U,EAAV5U,MACF4H,EAAcpmB,EAAQmkB,cAAc,kBAC1CgH,IAAc/E,EAAapmB,GACzBiF,OAAQ,KACRuZ,WAIE+U,GAAwB,SAACvzB,EAASozB,GAStC,QAASqE,KAEP,GAAI/U,GAAS1N,EAAehG,EAAWokB,EAAUrpB,GAAI,MAAOumB,GAAgB8C,EAAUtG,KACtF,IAAI7Q,UAASyG,KAGf,QAASgV,KAIPC,MAAMzqB,UAAM3J,OAAWA,IAAa,SAAY6vB,EAAUnD,SAAU,GAAMjF,IAE1EhrB,EAAQ+V,oBAAoB,QAAS2hB,GAnBvC,GAAIjyB,GAAMzF,EAAQiD,aAAazD,EAAUuF,YAErCimB,EAAK,YAAHlkB,OAAerB,GAAGqB,OAAG6K,KAAKC,SAASzU,SAAS,IAAI0J,UAAU,EAAG,IAEnE7G,GAAQqW,iBAAiB,QAASohB,GAClCz3B,EAAQqW,iBAAiB,QAASqhB,IAkB9B5C,GAAc,SAAC9xB,EAAShD,GAE5B,GAAIsG,GAAWtG,EAAQiD,aAAazD,EAAU8G,WAAa,QACvDsxB,EAAgB50B,EAAQ6D,UAAU7D,EAAQ7G,OAAS,EAAG6G,EAAQ7G,OAElEy7B,GAAkC,MAAjBA,EAAyB,KAAO,KAEhC,UAAbtxB,GACF6P,WAAW,WACTiS,GAAMpoB,EAAS43B,IACdp4B,EAAUwM,oBAOX6rB,GAAoB,WACxB,GAAIhE,OAAStwB,EACb,OAAO,UAAUu0B,GACfhiB,aAAa+d,GACbA,EAAS1d,WAAW,WACH5X,SAAS4lB,cAAc,yBAC7B5jB,MAAMC,QAAU,SACxBs3B,OAIHvT,IAAgB,EAChBC,GAAiB,OAEfgN,GAAiB,SAACzxB,EAAUkF,EAAQjF,EAASqjB,GACjD,GAAA0U,GAAehhB,EAAUsM,EAAgB0M,OAAjCiI,EAAED,EAAFC,GACF17B,MAAeiH,KAAPy0B,EAAmB,EAAIA,EACjCF,EAAOxX,SAAShkB,GAAS,EAAIgkB,SAAShkB,GAAS,EAC/CwU,EAAWvS,SAAS+B,eAAeP,EAAW,SAQlD,QAPAk4B,EAAiB15B,SAAS+B,eAAeP,EAAW,YAChDk4B,IACFA,EAAe13B,MAAMC,QAAU,SAE7BsQ,GACFyF,EAAKzF,EAAUgnB,GAET7yB,GACN,IAAK,SACH,GAAI0D,GAASpK,SAAS+B,eAAeP,EACrC,IAA4B,QAAxB4I,EAAOpI,MAAMC,QAAmB,CAElC,GAAIszB,GAAiB,EAGnBA,GADEpgB,EAAS3T,EAAU,MACJA,EAAS8G,UAAU,EAAG9G,EAAS5D,OAAS,GAAK,IAE7C4D,EAAS8G,UAAU,EAAG9G,EAAS5D,OAAS,GAAK,GAG7CoC,UAAS+B,eAAewzB,GAC9BvzB,MAAMC,QAAU,MAC7B,IAAI03B,GAA4B35B,SAAS+B,eAAewzB,EAAiB,UACrEqE,EAAuB55B,SAAS+B,eAAewzB,EAAiB,WAChEoE,KACFC,EAAqB53B,MAAMC,QAAU,OACrC23B,EAAqB53B,MAAMwnB,OAAS,MAIxCpf,EAAOpI,MAAMC,QAAU,OACvB,IAAI43B,GAAsB75B,SAAS+B,eAAeP,EAAW,UACzDk4B,EAAiB15B,SAAS+B,eAAeP,EAAW,WACpDq4B,KACFH,EAAe13B,MAAMC,QAAU,QAC/By3B,EAAe13B,MAAMwnB,OAAS,OAGhC,MACF,KAAK,UACHkQ,EAAiB15B,SAAS+B,eAAeP,EAAW,YAChDk4B,IACFA,EAAe13B,MAAMC,QAAU,SAGjC+V,EAAKzF,EAAUgnB,GACfO,KACAt6B,OAAOsY,iBAAiB,oBAAqBiiB,IAC7Cv6B,OAAOsY,iBAAiB,SAAUkiB,GAElC,MAEF,KAAK,UACHN,EAAiB15B,SAAS+B,eAAeP,EAAW,YAChDk4B,IACFA,EAAe13B,MAAMC,QAAU,QAEjC,IAAIsQ,GAAWvS,SAAS4lB,cAAc,wBAGtC5N,GAAKzF,EAAUgnB,GAIfO,KACAt6B,OAAOsY,iBAAiB,oBAAqBiiB,IAC7Cv6B,OAAOsY,iBAAiB,SAAUkiB,GAClC,MACF,KAAK,UAuEH,GAGSC,GAAT,QAASA,GAAUp+B,EAAGG,EAAGkjB,GACb,KAANA,IACsB,UAApBrjB,EAAEmG,MAAMC,UACVpG,EAAEmG,MAAMC,QAAU,QAClBjG,EAAEgG,MAAMC,QAAU,SAEpB2V,WAAW,WACTqiB,EAAUp+B,EAAGG,IAAKkjB,IACjB,OAjFD5R,EAA6B7L,EAAQiD,aAAazD,EAAUqM,6BAA+B,OACjGosB,GAAiB15B,SAAS+B,eAAeP,EAAW,YACpDk4B,EAAe13B,MAAMC,QAAU,QAE/By3B,EAAe13B,MAAMwnB,OAASlc,CAC9B,IAAIiF,GAAWvS,SAAS+B,eAAeP,EAAW,SAClD+Q,GAASvQ,MAAMk4B,QAAU,GAKzB79B,OAAO83B,OAAO5hB,EAASvQ,OACrBkX,SAAU,WACVlW,MAAO,EACPtD,IAAK,EACLoF,MAAO,UACPC,OAAQ,UACRykB,OAAQ,UAEVjX,EAASvQ,MAAMC,QAAUhB,EAAUyM,iBAAmB,OAAS,QAC/D6E,EAASwZ,UAAY,uFAErBxZ,EAASqT,cAAc,OAAO5jB,MAAM0nB,YAAY,UAAW,MAAO,aAClE1R,EAAKzF,EAAUgnB,EAKf,KACE/5B,OAAOsY,iBAAiB,UAAW,SAAA9Z,GACjC,GAAqB,oBAAjBA,EAAEinB,KAAKgC,MAA6B,CACtChB,GAAiB,MACjB,IAAQhG,GAAU6E,EAAV7E,KACR2M,IAAc8M,EAAgBj4B,GAC5BiF,SACAuZ,UAQJ,GAJqB,kBAAjBjiB,EAAEinB,KAAKgC,QACThB,GAAiB,QAGC,uBAAhBjoB,EAAEinB,KAAKgC,MACT1U,EAASvQ,MAAMC,QAAU,QACzB+V,EAAKzF,EAAUgnB,OAIZ,IAAmB,uBAAhBv7B,EAAEinB,KAAKgC,MACb1U,EAASvQ,MAAMC,QAAU,WAGtB,IAAoB,eAAhBjE,EAAEinB,KAAKgC,OAA0C,mBAAhBjpB,EAAEinB,KAAKgC,OAChC,iBAAdjpB,EAAEinB,KAAKgC,OAAwC,yBAAdjpB,EAAEinB,KAAKgC,MAC3C,CACE,GAAAkT,GAAiCn8B,EAAEinB,KAA3BhN,EAAIkiB,EAAJliB,KAAM9G,EAAcgpB,EAAdhpB,cAEZoB,GAASvQ,MAAMC,QADJ,qBAATgW,OAAkDjT,KAAnBmM,EACR,QAChBA,EACgB,OAEA,WAI/B,MAAOxH,GACPkB,QAAQmM,IAAIrN,IAiBd,SAAkB9N,EAAGG,EAAGkjB,GACtB+a,EAAUp+B,EAAGG,EAAGkjB,IAETwa,EAAgBnnB,EAAU,KAKnCunB,GAA4B,WAChC,GAAIM,GAAYp6B,SAAS4lB,cAAc,yBAAyBA,cAAc,UAC1ErT,EAAWvS,SAAS4lB,cAAc,yBAAyBA,cAAc,KACzEyU,EAAeD,EAAUh6B,wBAAwBV,GAGnD6S,GAASvQ,MAAMtC,IADb26B,EAAe,EACqB,EAAfA,EAAoB,KAEtB,OAInBN,GAAqC,WACd,KAAvBv6B,OAAO86B,cAA8C,KAAxB96B,OAAO86B,aACtC1iB,WAAW,WACTkiB,MACC,MAIDE,GAAqC,WACd,KAAvBx6B,OAAO86B,cAA8C,KAAxB96B,OAAO86B,aACtC1iB,WAAW,WACTkiB,MACC,MAIDS,GAAgB,WACD,GAAft5B,EAAUuK,GAAyB,GAAfvK,EAAUuK,GAAyB,GAAfvK,EAAUuK,EACpDoe,EAAKlR,SAAWzX,EAAU2L,QAG1BpN,OAAOkZ,SAASC,KAAO1X,EAAU2L,SAI/BwlB,GAAwB,SAACl2B,EAAMuN,GAEnCvN,EAAOA,EAAKqa,QAAQ,OAAQ,OAAOA,QAAQ,OAAQ,MACnD,IAAItL,GAAQ,GAAIwJ,QAAO,SAAWvY,EAAO,aACvCs+B,EAAUvvB,EAAMR,KAAKhB,EACvB,OAAmB,QAAZ+wB,EAAmB,GAAKhkB,mBAAmBgkB,EAAQ,GAAGjkB,QAAQ,MAAO,OAGxEwb,GAAkB,SAACtoB,GAAG,GAAE1L,GAAKwL,UAAA3L,OAAA,OAAAoH,KAAAuE,UAAA,GAAAA,UAAA,IAAI,CAAC,OAAKE,GAAI8M,QAAQ,WAAYxY,IAE/D8mB,GAA0B,SAACC,EAAiB3L,GAChD,GAAIsY,GAAS3M,EAAgB2M,OAAS,eAAgB,GAAIrd,OAAOoW,sBAGrB,KAAhChrB,OAAOuJ,UAAUurB,WAE3BvrB,UAAUurB,WAAWvC,GAAgBN,EAAQtY,IAG7CmX,GAAUyB,GAAgBN,EAAQtY,KAIhCshB,GAAsB,SAAChxB,EAAKwO,GAChC,GAAMyiB,GAAc16B,SAASmc,cAAclE,EAC3CyiB,GAAYtW,IAAM3a,EACL,QAATwO,IACFyiB,EAAY51B,MAAQ,MACpB41B,EAAY31B,OAAS,MACrB21B,EAAY14B,MAAQ,gBAEtBhC,SAASkF,KAAKuX,YAAYie,IAGtB3V,GAAkC,SAACD,EAAiBrjB,GACxD,GAAIqjB,EAAgBwN,gBAAiB,CACnC,GAAMqI,GAAc9e,KAAKC,MAAMgJ,EAAgBwN,gBAe/C,YAdAj2B,QAAO2K,KAAK2zB,GAAa7vB,QAAQ,SAAA5D,GAC/B,OAAOA,GACL,IAAK,OACHyzB,EAAYzzB,GAAK4D,QAAQ,SAAAiP,GACvB0gB,GAAoB1gB,EAAM,QAE5B,MACF,KAAK,SACH4gB,EAAYzzB,GAAK4D,QAAQ,SAAAiP,GACvB0gB,GAAoB1gB,EAAM,eAQpC,GAAI+K,EAAgBqN,oBAAqB,CACvC,GAAIyI,GAAM56B,SAASmc,cAAc,MACjCye,GAAI7O,UAAYjH,EAAgBqN,oBAChCnyB,SAASkF,KAAKuX,YAAYme,GAG5B,GAAI9V,EAAgBuN,4BAA6B,CAC/C,GAAIwI,GAAe/V,EAAgBuN,4BAA4BrsB,MAAM,IAEjEvE,GAAQ6F,iBAAiB,UAAU1J,OAAS,IAC9CiN,QAAQmM,IAAI,uDACZvV,EAAQ6F,iBAAiB,UAAUwD,QAAQ,SAAA8H,GAAO,MAAIA,GAAQ8I,WAEhE,KAAK,GAAI9f,GAAI,EAAGA,EAAIi/B,EAAaj9B,OAAQhC,IAAK,CAC5C,GAAIk/B,GAAkBD,EAAaj/B,GAAGoK,MAAM,KACxC+0B,EAAeC,GAAqBF,EAAgB,IACpDG,EAAczkB,mBAAmBskB,EAAgB,GAChC,SAAjBC,EACFN,GAAoBQ,EAAa,OACP,OAAjBF,EACTN,GAAoBQ,EAAa,UAEjCpwB,QAAQmM,IAAI,4BAMdgkB,GAAuB,SAACE,GAC5B,GAAIC,GAAqBD,EAAgBl1B,MAAM,KAAK,GAChD+0B,EAAe,EACnB,QAAQI,GACN,IAAK,IACHJ,EAAe,KACf,MACF,KAAK,IACHA,EAAe,KAKnB,MAAOA,IAGHK,GAA4B,SAACC,GACjC,MAAOC,IAA2B97B,OAAOG,OAAQ07B,IAG7CC,GAA6B,QAA7BA,GAA8B97B,EAAQ67B,GAC1C,IACE,GAAMzoB,GAAUpT,EAAOQ,SAAS+B,eAAes5B,EAE/C,IAAIzoB,EACF,MAAOA,EAGT0oB,GAA2B97B,EAAOG,OAAQ07B,GAC1C,MAAMj9B,GACN,MAAO,QAILo4B,GAAiB,SAAC/xB,EAAShD,GAC/B,GAAIwoB,GAAsD,SAA1CxoB,EAAQiD,aAAazD,EAAUqL,QAA+D,MAA1C7K,EAAQiD,aAAazD,EAAUqL,OAC/Fc,EAAyB3L,EAAQiD,aAAazD,EAAUmM,yBAA2B,KACnFC,EAAsB5L,EAAQiD,aAAazD,EAAUoM,sBAAwB,KAC7EkuB,EAAoBv7B,SAAS+B,eAAesL,EAC3CkuB,IAAqB/7B,SAAWA,OAAOE,MAC1C67B,EAAoBH,GAA0B/tB,GAEhD,IACImuB,IADYx7B,SAAS+B,eAAe0C,EAAU,UACjC,SAAUA,GACVzE,SAAS+B,eAAe0C,EAAU,UAExCkK,OACT,KACEnP,OAAO4N,KACP,MAAOhP,GACH6rB,GACFpf,QAAQmM,IAAI5Y,KAIdm9B,GACFA,EAAkBzjB,iBAAiB,QAAS0jB,EAAWC,SjB5oB9C,GiB4oByDh3B,IAE9DwlB,GACFpf,QAAQ8R,KAAK,qDAIf+e,GAAoB,KAClBtF,GAAY,SAAC3xB,EAAShD,EAASiF,GACnC,GAAIi1B,GAAal6B,EAAQ6F,iBAAiB,OAAO,GAE7CiL,GADY9Q,EAAQ6F,iBAAiB,UAAU,GACpCtH,SAAS+B,eAAe0C,EAAU,UACjDk3B,GAAW35B,MAAe,QAAI,OAC9BuQ,EAASvQ,MAAe,QAAI,OAE5BxC,OAAOsY,iBAAiB,UAAW,SAAU9Z,GAC3C,GAAoB,eAAhBA,EAAEinB,KAAKgC,OAA0C,UAAhBjpB,EAAEinB,KAAKgC,OAAqC,YAAhBjpB,EAAEinB,KAAKgC,MAAqB,CAC3F,GAAIjlB,GAAQhE,EAAEinB,KAAKjjB,KAGnB,IADA05B,GAAoB15B,GACfA,EAAS,MAEd,IAAI45B,GAAYD,EAAW35B,MAAMwnB,MACjCmS,GAAW35B,MAAMk4B,QAAU,GAE3ByB,EAAW35B,MAAM65B,aAAe,MAChCx/B,OAAO2K,KAAKhF,GAAO8X,IAAI,SAAUgiB,EAAWtgB,GAC1C,GAAIzd,GAAQiE,EAAM85B,EAElBH,GAAW35B,MAAM85B,GAAa/9B,IAGhC49B,EAAW35B,MAAM,WAAa45B,MACzB,IAAoB,SAAhB59B,EAAEinB,KAAKgC,MAChB1U,EAAS5D,YACJ,IAAqB,aAAjB3Q,EAAEinB,KAAKgC,MAChBznB,OAAOsY,iBAAiB,SAAUikB,GAAgBt6B,IAAU,OAEzD,IAAoB,mBAAhBzD,EAAEinB,KAAKgC,MAA4B,CAC1C,IAAKyU,GAAqB,MAC1B,IAAIE,GAAYD,EAAW35B,MAAMwnB,OAC7BwS,EAAaL,EAAW35B,MAAMC,OAClC05B,GAAW35B,MAAMk4B,QAAU,GAC3ByB,EAAW35B,MAAM65B,aAAe,MAChCx/B,OAAO2K,KAAK00B,IAAmB5hB,IAAI,SAAUgiB,EAAWtgB,GACtD,GAAIzd,GAAQ29B,GAAkBI,EAC9BH,GAAW35B,MAAM85B,GAAa/9B,IAGhC49B,EAAW35B,MAAM,WAAa45B,EAC9BD,EAAW35B,MAAe,QAAIg6B,KAE/B,IAGCD,GAAkB,SAACt6B,GACvB,GAAIw6B,GAAY,CAEhB,OAAO,YACL,GACIt2B,GADAu2B,EAAYz6B,EAAQ6F,iBAAiB,UAAU,GAE/ClC,EAAYpF,SAAS4D,gBAAgBwB,UAAYpF,SAASkF,KAAKE,UAC/D+2B,EAAYn8B,SAAS4D,gBAAgBw4B,aACrCC,EAAYr8B,SAAS4D,gBAAgBI,aACrCs4B,EAAiBl3B,GAAc+2B,EAAYE,GAC3CE,EAAuB7kB,YAA4B,IAAhB4kB,GAAqBtN,QAAQ,IAChEwN,EAAOp3B,EAAY62B,CACvBt2B,GAAaP,EAAY62B,EAAa,KAAO,OAC7CA,EAAY72B,EAER82B,GACFA,EAAU/7B,cAAcwkB,aACtBxN,OAAQ,WACR/R,UAAWA,EACXo3B,KAAMA,EACNF,cAAeC,EACf52B,UAAWA,GACV,MAMThK,GAAOD,SACLmuB,SACAuG,QACAE,aACAC,yBACAhQ,eACAC,kBACAyR,YACAoD,eACA3O,mBACAwM,aACAqD,eACA+C,oBACArG,kBACA6G,6BACAC,sCACAC,sCACAO,iBACAnI,yBACAvN,2BACAE,mCACAiW,wBACAxE,kBACAJ,aACA2F,mBACA/jB,OACA0I,0BACAhB,kBjBiwDI,SAAU/jB,EAAQD,EAASH,GAEjC,YAQA,SAASyjB,GAAQhhB,EAAGihB,GAAK,GAAIC,GAAI7iB,OAAO2K,KAAKhJ,EAAI,IAAI3B,OAAO8iB,sBAAuB,CAAE,GAAI/iB,GAAIC,OAAO8iB,sBAAsBnhB,EAAIihB,KAAM7iB,EAAIA,EAAEgjB,OAAO,SAAUH,GAAK,MAAO5iB,QAAOgjB,yBAAyBrhB,EAAGihB,GAAGziB,cAAiB0iB,EAAE7e,KAAKiJ,MAAM4V,EAAG9iB,GAAM,MAAO8iB,GAC3P,QAASI,GAActhB,GAAK,IAAK,GAAIihB,GAAI,EAAGA,EAAI1V,UAAU3L,OAAQqhB,IAAK,CAAE,GAAIC,GAAI,MAAQ3V,UAAU0V,GAAK1V,UAAU0V,KAASA,GAAI,EAAID,EAAQ3iB,OAAO6iB,IAAI,GAAIpU,QAAQ,SAAUmU,IAAK,EAAIM,EAA0B,SAAGvhB,EAAGihB,EAAGC,EAAED,MAAU5iB,OAAOmjB,0BAA4BnjB,OAAOojB,iBAAiBzhB,EAAG3B,OAAOmjB,0BAA0BN,IAAMF,EAAQ3iB,OAAO6iB,IAAIpU,QAAQ,SAAUmU,GAAK5iB,OAAOC,eAAe0B,EAAGihB,EAAG5iB,OAAOgjB,yBAAyBH,EAAGD,MAAW,MAAOjhB,GANpc,GAAId,GAAyB3B,EAAoB,GAC7CoF,EAAezD,EAAuB3B,EAAoB,IAC1DgkB,EAAmBriB,EAAuB3B,EAAoB,IAC9DuF,EAAqB5D,EAAuB3B,EAAoB,IAChEkhC,EAAYv/B,EAAuB3B,EAAoB,KkB3yI3DwF,EAOIC,EAAQ,GANV2T,EAAc5T,EAAd4T,eACA9O,EAAkB9E,EAAlB8E,mBAEAyN,EAAKvS,EAALuS,MACAK,EAA0B5S,EAA1B4S,2BACAiB,EAAc7T,EAAd6T,eAEFI,EAIIhU,EAAQ,GAHVqG,EAAmB2N,EAAnB3N,oBACAqD,EAAsBsK,EAAtBtK,uBACA/D,EAAWqO,EAAXrO,YAEFsO,EAGIjU,EAAQ,GAFV6S,EAAoBoB,EAApBpB,qBACAJ,EAAOwB,EAAPxB,QAEFyB,EAAyBlU,EAAQ,GAAzBG,EAAY+T,EAAZ/T,aACRu7B,EAAmD17B,EAAQ,IAAnD0e,EAAagd,EAAbhd,cAAegB,EAAuBgc,EAAvBhc,wBACvBic,EAII37B,EAAQ,IAHV47B,EAAkCD,EAAlCC,mCACAlgB,EAAyBigB,EAAzBjgB,0BACAmgB,EAAqBF,EAArBE,sBAEFC,EAII97B,EAAQ,IAHV+7B,EAAgBD,EAAhBC,iBACAC,EAAmBF,EAAnBE,oBACAC,EAAuBH,EAAvBG,yBAGF,SAAWz9B,EAAQQ,GAsBjB,QAASk9B,GAAeC,GACtB,GAAAC,IAAA,EAAAX,EAAA,SAAoCU,GAA7B17B,EAAO27B,EAAA,GAAKC,EAAaD,EAAAv+B,MAAA,EAEhC,IAAK4C,EAAL,CAMA,IAF2BiJ,EAAuBjJ,GAIhD,WADAy7B,GAAeG,EAIjB,IAAM32B,GAASC,EAAYlF,EAG3B,IAF0B67B,EAAU52B,EAAQ,GAApC62B,cAIN,WADAL,GAAeG,EAIjB,IAAe,WAAX32B,EAAqB,CAEvB,GAAe,IADAk2B,EAAmCn7B,GAGhD,WADAy7B,GAAeG,GAKnB,GAAe,OAAX32B,EAAiB,CAEnB,GAAe,IADAgW,EAA0Bjb,GAGvC,WADAy7B,GAAeG,GAKnB,GAAc,OAAX32B,EAAgB,CAEjB,IADem2B,EAAsBp7B,GAGnC,WADAy7B,GAAeG,GAKnB,GAAMxd,GAAuB,WAAXnZ,EAAsB,KAAkB,OAAXA,EAAkB,aAAW1B,GACtEw4B,EAAOC,GAEbC,GAAeF,EAAM/7B,EAASoe,GAC9B8d,EAAgBH,GAChBN,EAAeG,IAgEjB,QAGeM,GAAet0B,GAAA,MAAAu0B,GAAAt0B,MAAC,KAADC,WAK9B,QAAAq0B,KAFC,MAEDA,IAAA,EAAA98B,EAAA,SAAAH,EAAA,QAAA+H,KALA,QAAAC,GAA+B60B,GAAI,GAAAK,EAAA,OAAAl9B,GAAA,QAAAiI,KAAA,SAAAC,GAAA,cAAAA,EAAAC,KAAAD,EAAArK,MAAA,aAAAqK,GAAArK,KAAA,EACHs/B,EAA0BN,EAAK,QAAvDK,EAAeh1B,EAAAM,KACrBuW,EAAcme,EAAiB,wBAAAh1B,GAAAO,SAAAT,MAChCi1B,EAAAt0B,MAAA,KAAAC,WAAA,QAKcu0B,GAAyBnT,GAAA,MAAAoT,GAAAz0B,MAAC,KAADC,WAexC,QAAAw0B,KAFC,MAEDA,IAAA,EAAAj9B,EAAA,SAAAH,EAAA,QAAA+H,KAfA,QAAAmY,GAAyC2c,GAAI,GAAA7d,GAAAle,EAAAmE,EAAAuH,EAAAyS,CAAA,OAAAjf,GAAA,QAAAiI,KAAA,SAAAyY,GAAA,cAAAA,EAAAvY,KAAAuY,EAAA7iB,MAAA,OAGmB,MAFxDmhB,GAAUqe,EAAUC,WAAWT,GAC7B/7B,EAA6Bke,EAA7Ble,QAASmE,EAAoB+Z,EAApB/Z,gBACXuH,EAAW+wB,GAAkBz8B,UAASmE,oBAAkByb,EAAA7iB,KAAA,EACnCkiB,EAAwBf,EAAQ,QAOQ,MAP7DC,GAAYyB,EAAAlY,KACduP,UAAYA,SAASC,OACvBiH,EAAaG,YAAWT,OACnBM,EAAaG,iBAChB0K,QAAS/R,SAASC,QAGtBqlB,EAAUG,WAAWX,EAAIle,OAAOK,OAASxS,WAAUyS,kBAAgByB,EAAAnY,OAAA,SAC5D80B,EAAUC,WAAWT,GAAK,wBAAAnc,GAAAjY,SAAAyX,MAClCkd,EAAAz0B,MAAA,KAAAC,WAOD,QAAS20B,GAAgBve,GACvB,GAAQle,GAA6Bke,EAA7Ble,QAASmE,EAAoB+Z,EAApB/Z,gBACTgO,EAAmBC,EAAnBD,eACFkW,EAAUsU,EAAcH,WAAW,WACjC3zB,EAAoBwf,EAApBxf,KAAMwM,EAAcgT,EAAdhT,UACV3J,EAAWyH,EAAehP,EAE1BnE,GAAQiD,aAAavD,EAAa8P,eACpC9D,EAAS2H,aAAaC,OACpBspB,OACA58B,EAAQiD,aAAavD,EAAa8P,eAIlCxP,EAAQiD,aAAavD,EAAa+P,UACpC/D,EAAS2H,aAAaC,OACpBupB,WACA78B,EAAQiD,aAAavD,EAAa+P,UAIlC5G,IACF6C,EAAS2H,aAAaC,OAAO,OAAQzK,GACjCsJ,EAAezS,EAAawQ,OAAOC,MACrCzE,EAAS2H,aAAaC,OACpB,YACAnB,EAAezS,EAAawQ,OAAOC,MAKzC,IAAIwY,GAAoB3oB,EAAQiD,aAAavD,EAAaoL,gBACtD6d,IACFjd,EAAS2H,aAAaC,OAAO5T,EAAagL,YAAaie,GAGrDtT,GACF3J,EAAS2H,aAAaC,OAAO,UAAW+B,EAG1C,IAAMoT,GAAgB1qB,EAAO+qB,iBAAmB/qB,EAAO+qB,iBAAmB,CAI1E,OAHApd,GAAS2H,aAAaC,OAAO,OAAQmV,GACrC/c,EAAS2H,aAAaC,OAAO,aAAa,GAAIX,OAAOoW,mBAE9Crd,EAST,QAASuwB,GAAeF,EAAM/7B,EAASoe,GACrC,GAAQjM,GAAmBC,EAAnBD,cAEHwqB,GAAcH,WAAW,YAC5BG,EAAcD,WACZ,UACAxpB,EAAef,EAAezS,EAAawQ,OAAOrH,OAAS9K,EAAO0U,aAAaC,QAAQhT,EAAawQ,OAAOrH,OAASmJ,KAIxH,IAAM/M,GAASC,EAAYlF,GAEvB88B,GACF98B,UACAiF,SACAmZ,aAEI7U,EAAevJ,EAAQmJ,oBAAoBpK,OAAO,SAACuzB,EAAK73B,GAC5D,MAAAojB,QAAYyU,OAAG,EAAAxU,EAAA,YAAGrjB,EAAOuF,EAAQiD,aAAaxI,SAGhDqiC,GAAiBvzB,aAAeA,EAChCuzB,EAAiB34B,gBAAkBC,EAAmBpE,GACtDu8B,EAAUG,WAAWX,EAAMe,GAnP7B,IAAKl3B,IACH,KAAMm3B,OAAM,mCAMd,IAAMR,GAAYhB,IACZoB,EAAgBnB,IAChBQ,EAAenqB,EAAM,GACrBgqB,EAAYP,GAElBppB,KAOAupB,EADiBl9B,EAASsH,iBAAiB,SA6D3C9H,EAAOsY,iBACL,UACA,SAAU2mB,GACR,GAAQxX,GAAUwX,EAAGxZ,KAAbgC,KAER,IAAc,iBAAVA,EAA0B,CAC5B,GAAI3K,GAAYtc,EAASsH,iBAAiB,yBAE1C,KAAKgV,EAAU1e,OAEb,WADAiN,SAAQS,KAAK,+CAIfgR,GAAUxR,QAAQ,SAAC8H,GACjBA,EAAQ5Q,MAAMwnB,OAAS,KACvB5W,EAAQ5Q,MAAMC,QAAU,OAExB2Q,EAAQgT,cAAc,UAAUzlB,cAAcwkB,aAE1CsC,MAAO,WAET,OAKN,GAAc,kBAAVA,EAA2B,CAC7Bpc,QAAQmM,IAAI,8BACZ,KACE,GAAI0nB,GAAe1+B,EAASsH,iBAC1B,2BACA,EACFo3B,GAAa18B,MAAM8C,MAAQ,OAC3B45B,EAAa18B,MAAM+C,OAAS,MAE5B,IAAM45B,GAAWD,EAAa9Y,cAAc,kBACxC+Y,IACFA,EAASjjB,SAEX,MAAO/R,GACPkB,QAAQlB,MAAM,mCAADpB,OAAoCoB,KAIrD,GAAc,2BAAVsd,EAAoC,CACtC,GAAM6B,GAAgB9oB,EAAS4lB,cAAc,iBAE7C,IADApmB,EAAO+pB,iBAAkB,GACpBT,EACH,MAGFA,GAAc9mB,MAAMC,QAAU,UAGlC,IAgHDzC,OAAQQ,WlBsyIL,SAAUrE,EAAQD,EAASH,GmBzjJjC,QAASqjC,KACP,YAeA,SAASC,GAAO3f,EAAGlhB,EAAGihB,GACpB,MAAO5iB,QAAOC,eAAe4iB,EAAGlhB,GAC9BD,MAAOkhB,EACPziB,YAAY,EACZD,cAAc,EACdygB,UAAU,IACRkC,EAAElhB,GASR,QAAS4K,GAAKsW,EAAGlhB,EAAGihB,EAAGviB,GACrB,GAAId,GAAIoC,GAAKA,EAAElB,oBAAqBgiC,GAAY9gC,EAAI8gC,EAClDtzB,EAAInP,OAAO4xB,OAAOryB,EAAEkB,WACpBd,EAAI,GAAI+iC,GAAQriC,MAClB,OAAON,GAAEoP,EAAG,WACVzN,MAAOihC,EAAiB9f,EAAGD,EAAGjjB,KAC5BwP,EAEN,QAASyzB,GAAS/f,EAAGlhB,EAAGihB,GACtB,IACE,OACEhH,KAAM,SACNgG,IAAKiB,EAAEpjB,KAAKkC,EAAGihB,IAEjB,MAAOC,GACP,OACEjH,KAAM,QACNgG,IAAKiB,IAUX,QAAS4f,MACT,QAASI,MACT,QAASC,MAST,QAASC,GAAsBlgB,IAC5B,OAAQ,QAAS,UAAUpU,QAAQ,SAAU9M,GAC5C6gC,EAAO3f,EAAGlhB,EAAG,SAAUkhB,GACrB,MAAOvD,MAAK0jB,QAAQrhC,EAAGkhB,OAI7B,QAASogB,GAAcpgB,EAAGlhB,GACxB,QAASuhC,GAAOtgB,EAAG7iB,EAAGR,EAAG4P,GACvB,GAAIxP,GAAIijC,EAAS/f,EAAED,GAAIC,EAAG9iB,EAC1B,IAAI,UAAYJ,EAAEic,KAAM,CACtB,GAAIunB,GAAIxjC,EAAEiiB,IACRwhB,EAAID,EAAEzhC,KACR,OAAO0hC,IAAK,UAAY/sB,EAAQ+sB,IAAM/iC,EAAEZ,KAAK2jC,EAAG,WAAazhC,EAAE6f,QAAQ4hB,EAAEC,SAASvhB,KAAK,SAAUe,GAC/FqgB,EAAO,OAAQrgB,EAAGtjB,EAAG4P,IACpB,SAAU0T,GACXqgB,EAAO,QAASrgB,EAAGtjB,EAAG4P,KACnBxN,EAAE6f,QAAQ4hB,GAAGthB,KAAK,SAAUe,GAC/BsgB,EAAEzhC,MAAQmhB,EAAGtjB,EAAE4jC,IACd,SAAUtgB,GACX,MAAOqgB,GAAO,QAASrgB,EAAGtjB,EAAG4P,KAGjCA,EAAExP,EAAEiiB,KAEN,GAAIgB,EACJ7iB,GAAEuf,KAAM,WACN5d,MAAO,SAAemhB,EAAGxiB,GACvB,QAASijC,KACP,MAAO,IAAI3hC,GAAE,SAAUA,EAAGihB,GACxBsgB,EAAOrgB,EAAGxiB,EAAGsB,EAAGihB,KAGpB,MAAOA,GAAIA,EAAIA,EAAEd,KAAKwhB,EAA4BA,GAA8BA,OAItF,QAASX,GAAiBhhC,EAAGihB,EAAGviB,GAC9B,GAAIN,GAAIqjC,CACR,OAAO,UAAU7jC,EAAG4P,GAClB,GAAIpP,IAAM8B,EAAG,KAAMsgC,OAAM,+BACzB,IAAIpiC,IAAMa,EAAG,CACX,GAAI,UAAYrB,EAAG,KAAM4P,EACzB,QACEzN,MAAOmhB,EACPphB,MAAM,GAGV,IAAKpB,EAAEwjB,OAAStkB,EAAGc,EAAEuhB,IAAMzS,IAAK,CAC9B,GAAIxP,GAAIU,EAAEkjC,QACV,IAAI5jC,EAAG,CACL,GAAIwjC,GAAIK,EAAoB7jC,EAAGU,EAC/B,IAAI8iC,EAAG,CACL,GAAIA,IAAMj/B,EAAG,QACb,OAAOi/B,IAGX,GAAI,SAAW9iC,EAAEwjB,OAAQxjB,EAAEyM,KAAOzM,EAAEojC,MAAQpjC,EAAEuhB,QAAS,IAAI,UAAYvhB,EAAEwjB,OAAQ,CAC/E,GAAI9jB,IAAMqjC,EAAG,KAAMrjC,GAAIa,EAAGP,EAAEuhB,GAC5BvhB,GAAEqjC,kBAAkBrjC,EAAEuhB,SACjB,WAAavhB,EAAEwjB,QAAUxjB,EAAEwM,OAAO,SAAUxM,EAAEuhB,IACrD7hB,GAAI8B,CACJ,IAAIlB,GAAIiiC,EAASjhC,EAAGihB,EAAGviB,EACvB,IAAI,WAAaM,EAAEib,KAAM,CACvB,GAAI7b,EAAIM,EAAEoB,KAAOb,EAAIpB,EAAGmB,EAAEihB,MAAQ1d,EAAG,QACrC,QACExC,MAAOf,EAAEihB,IACTngB,KAAMpB,EAAEoB,MAGZ,UAAYd,EAAEib,OAAS7b,EAAIa,EAAGP,EAAEwjB,OAAS,QAASxjB,EAAEuhB,IAAMjhB,EAAEihB,OAIlE,QAAS4hB,GAAoB7hC,EAAGihB,GAC9B,GAAIviB,GAAIuiB,EAAEiB,OACR9jB,EAAI4B,EAAER,SAASd,EACjB,IAAIN,IAAM8iB,EAAG,MAAOD,GAAE2gB,SAAW,KAAM,UAAYljC,GAAKsB,EAAER,SAAiB,SAAMyhB,EAAEiB,OAAS,SAAUjB,EAAEhB,IAAMiB,EAAG2gB,EAAoB7hC,EAAGihB,GAAI,UAAYA,EAAEiB,SAAW,WAAaxjB,IAAMuiB,EAAEiB,OAAS,QAASjB,EAAEhB,IAAM,GAAI9f,WAAU,oCAAsCzB,EAAI,aAAc6D,CAC1R,IAAI3E,GAAIqjC,EAAS7iC,EAAG4B,EAAER,SAAUyhB,EAAEhB,IAClC,IAAI,UAAYriB,EAAEqc,KAAM,MAAOgH,GAAEiB,OAAS,QAASjB,EAAEhB,IAAMriB,EAAEqiB,IAAKgB,EAAE2gB,SAAW,KAAMr/B,CACrF,IAAIiL,GAAI5P,EAAEqiB,GACV,OAAOzS,GAAIA,EAAE1N,MAAQmhB,EAAEjhB,EAAEgiC,YAAcx0B,EAAEzN,MAAOkhB,EAAEzgB,KAAOR,EAAEiiC,QAAS,WAAahhB,EAAEiB,SAAWjB,EAAEiB,OAAS,OAAQjB,EAAEhB,IAAMiB,GAAID,EAAE2gB,SAAW,KAAMr/B,GAAKiL,GAAKyT,EAAEiB,OAAS,QAASjB,EAAEhB,IAAM,GAAI9f,WAAU,oCAAqC8gB,EAAE2gB,SAAW,KAAMr/B,GAE9P,QAAS2/B,GAAahhB,GACpB,GAAIlhB,IACFmiC,OAAQjhB,EAAE,GAEZ,KAAKA,KAAMlhB,EAAEoiC,SAAWlhB,EAAE,IAAK,IAAKA,KAAMlhB,EAAEqiC,WAAanhB,EAAE,GAAIlhB,EAAEsiC,SAAWphB,EAAE,IAAKvD,KAAK4kB,WAAWlgC,KAAKrC,GAE1G,QAASwiC,GAActhB,GACrB,GAAIlhB,GAAIkhB,EAAEuhB,cACVziC,GAAEia,KAAO,eAAiBja,GAAEigB,IAAKiB,EAAEuhB,WAAaziC,EAElD,QAAS+gC,GAAQ7f,GACfvD,KAAK4kB,aACHJ,OAAQ,SACNjhB,EAAEpU,QAAQo1B,EAAcvkB,MAAOA,KAAK+kB,OAAM,GAEhD,QAASC,GAAO3iC,GACd,GAAIA,GAAK,KAAOA,EAAG,CACjB,GAAIihB,GAAIjhB,EAAEwN,EACV,IAAIyT,EAAG,MAAOA,GAAEnjB,KAAKkC,EACrB,IAAI,kBAAqBA,GAAEQ,KAAM,MAAOR,EACxC,KAAKyZ,MAAMzZ,EAAEJ,QAAS,CACpB,GAAIxB,IAAK,EACPR,EAAI,QAAS4C,KACX,OAASpC,EAAI4B,EAAEJ,QAAS,GAAIlB,EAAEZ,KAAKkC,EAAG5B,GAAI,MAAOoC,GAAKT,MAAQC,EAAE5B,GAAIoC,EAAKV,MAAO,EAAIU,CACpF,OAAOA,GAAKT,MAAQmhB,EAAG1gB,EAAKV,MAAO,EAAIU,EAE3C,OAAO5C,GAAE4C,KAAO5C,GAGpB,KAAM,IAAIuC,WAAUuU,EAAQ1U,GAAK;AAnLnCrC,EAAOD,QAAUkjC,EAAsB,WACrC,MAAO5gC,IACNrC,EAAOD,QAAQiB,YAAa,EAAMhB,EAAOD,QAAiB,QAAIC,EAAOD,OACxE,IAAIwjB,GACFlhB,KACAihB,EAAI5iB,OAAOS,UACXJ,EAAIuiB,EAAEliB,eACNX,EAAIC,OAAOC,gBAAkB,SAAU4iB,EAAGlhB,EAAGihB,GAC3CC,EAAElhB,GAAKihB,EAAElhB,OAEXnC,EAAI,kBAAqB2B,QAASA,UAClCiO,EAAI5P,EAAE4B,UAAY,aAClBxB,EAAIJ,EAAEglC,eAAiB,kBACvBpB,EAAI5jC,EAAEilC,aAAe,eASvB,KACEhC,KAAW,IACX,MAAO3f,GACP2f,EAAS,SAAgB3f,EAAGlhB,EAAGihB,GAC7B,MAAOC,GAAElhB,GAAKihB,GAwBlBjhB,EAAE4K,KAAOA,CACT,IAAI62B,GAAI,iBACN5jC,EAAI,iBACJqC,EAAI,YACJjB,EAAI,YACJsD,KAIEvD,IACJ6hC,GAAO7hC,EAAGwO,EAAG,WACX,MAAOmQ,OAET,IAAI1f,GAAII,OAAOykC,eACbtd,EAAIvnB,GAAKA,EAAEA,EAAE0kC,OACfnd,IAAKA,IAAMvE,GAAKviB,EAAEZ,KAAK0nB,EAAGhY,KAAOxO,EAAIwmB,EACrC,IAAIud,GAAI5B,EAA2BriC,UAAYgiC,EAAUhiC,UAAYT,OAAO4xB,OAAOjxB,EAmHnF,OAAOkiC,GAAkBpiC,UAAYqiC,EAA4B/iC,EAAE2kC,EAAG,eACpEhjC,MAAOohC,EACP5iC,cAAc,IACZH,EAAE+iC,EAA4B,eAChCphC,MAAOmhC,EACP3iC,cAAc,IACZ2iC,EAAkB8B,YAAcnC,EAAOM,EAA4BK,EAAG,qBAAsBxhC,EAAEijC,oBAAsB,SAAU/hB,GAChI,GAAIlhB,GAAI,kBAAqBkhB,IAAKA,EAAEpgB,WACpC,SAASd,IAAMA,IAAMkhC,GAAqB,uBAAyBlhC,EAAEgjC,aAAehjC,EAAE9B,QACrF8B,EAAE0K,KAAO,SAAUwW,GACpB,MAAO7iB,QAAO6kC,eAAiB7kC,OAAO6kC,eAAehiB,EAAGigB,IAA+BjgB,EAAEiiB,UAAYhC,EAA4BN,EAAO3f,EAAGsgB,EAAG,sBAAuBtgB,EAAEpiB,UAAYT,OAAO4xB,OAAO8S,GAAI7hB,GACpMlhB,EAAEojC,MAAQ,SAAUliB,GACrB,OACEwgB,QAASxgB,IAEVkgB,EAAsBE,EAAcxiC,WAAY+hC,EAAOS,EAAcxiC,UAAWd,EAAG,WACpF,MAAO2f,QACL3d,EAAEshC,cAAgBA,EAAethC,EAAEqjC,MAAQ,SAAUniB,EAAGD,EAAGviB,EAAGN,EAAGR,OACnE,KAAWA,IAAMA,EAAIsiB,QACrB,IAAI1S,GAAI,GAAI8zB,GAAc12B,EAAKsW,EAAGD,EAAGviB,EAAGN,GAAIR,EAC5C,OAAOoC,GAAEijC,oBAAoBhiB,GAAKzT,EAAIA,EAAEhN,OAAO2f,KAAK,SAAUe,GAC5D,MAAOA,GAAEphB,KAAOohB,EAAEnhB,MAAQyN,EAAEhN,UAE7B4gC,EAAsB2B,GAAIlC,EAAOkC,EAAGvB,EAAG,aAAcX,EAAOkC,EAAGv1B,EAAG,WACnE,MAAOmQ,QACLkjB,EAAOkC,EAAG,WAAY,WACxB,MAAO,uBACL/iC,EAAEgJ,KAAO,SAAUkY,GACrB,GAAIlhB,GAAI3B,OAAO6iB,GACbD,IACF,KAAK,GAAIviB,KAAKsB,GAAGihB,EAAE5e,KAAK3D,EACxB,OAAOuiB,GAAEqiB,UAAW,QAAS9iC,KAC3B,KAAOygB,EAAErhB,QAAS,CAChB,GAAIshB,GAAID,EAAEsiB,KACV,IAAIriB,IAAKlhB,GAAG,MAAOQ,GAAKT,MAAQmhB,EAAG1gB,EAAKV,MAAO,EAAIU,EAErD,MAAOA,GAAKV,MAAO,EAAIU,IAExBR,EAAE2iC,OAASA,EAAQ5B,EAAQjiC,WAC5BgC,YAAaigC,EACb2B,MAAO,SAAe1iC,GACpB,GAAI2d,KAAK7S,KAAO,EAAG6S,KAAKnd,KAAO,EAAGmd,KAAKxS,KAAOwS,KAAKmkB,MAAQ5gB,EAAGvD,KAAK7d,MAAO,EAAI6d,KAAKikB,SAAW,KAAMjkB,KAAKuE,OAAS,OAAQvE,KAAKsC,IAAMiB,EAAGvD,KAAK4kB,WAAWz1B,QAAQ01B,IAAiBxiC,EAAG,IAAK,GAAIihB,KAAKtD,MAAM,MAAQsD,EAAEuiB,OAAO,IAAM9kC,EAAEZ,KAAK6f,KAAMsD,KAAOxH,OAAOwH,EAAEpgB,MAAM,MAAQ8c,KAAKsD,GAAKC,IAEtR9V,KAAM,WACJuS,KAAK7d,MAAO,CACZ,IAAIohB,GAAIvD,KAAK4kB,WAAW,GAAGE,UAC3B,IAAI,UAAYvhB,EAAEjH,KAAM,KAAMiH,GAAEjB,GAChC,OAAOtC,MAAK8lB,MAEd1B,kBAAmB,SAA2B/hC,GAG5C,QAAS0jC,GAAOhlC,EAAGN,GACjB,MAAOoP,GAAEyM,KAAO,QAASzM,EAAEyS,IAAMjgB,EAAGihB,EAAEzgB,KAAO9B,EAAGN,IAAM6iB,EAAEiB,OAAS,OAAQjB,EAAEhB,IAAMiB,KAAM9iB,EAHzF,GAAIuf,KAAK7d,KAAM,KAAME,EAKrB,KAAK,GAJDihB,GAAItD,KAICvf,EAAIuf,KAAK4kB,WAAW3iC,OAAS,EAAGxB,GAAK,IAAKA,EAAG,CACpD,GAAIR,GAAI+f,KAAK4kB,WAAWnkC,GACtBoP,EAAI5P,EAAE6kC,UACR,IAAI,SAAW7kC,EAAEukC,OAAQ,MAAOuB,GAAO,MACvC,IAAI9lC,EAAEukC,QAAUxkB,KAAK7S,KAAM,CACzB,GAAI9M,GAAIU,EAAEZ,KAAKF,EAAG,YAChB4jC,EAAI9iC,EAAEZ,KAAKF,EAAG,aAChB,IAAII,GAAKwjC,EAAG,CACV,GAAI7jB,KAAK7S,KAAOlN,EAAEwkC,SAAU,MAAOsB,GAAO9lC,EAAEwkC,UAAU,EACtD,IAAIzkB,KAAK7S,KAAOlN,EAAEykC,WAAY,MAAOqB,GAAO9lC,EAAEykC,gBACzC,IAAIrkC,GACT,GAAI2f,KAAK7S,KAAOlN,EAAEwkC,SAAU,MAAOsB,GAAO9lC,EAAEwkC,UAAU,OACjD,CACL,IAAKZ,EAAG,KAAMhB,OAAM,yCACpB,IAAI7iB,KAAK7S,KAAOlN,EAAEykC,WAAY,MAAOqB,GAAO9lC,EAAEykC,gBAKtDn3B,OAAQ,SAAgBgW,EAAGlhB,GACzB,IAAK,GAAIihB,GAAItD,KAAK4kB,WAAW3iC,OAAS,EAAGqhB,GAAK,IAAKA,EAAG,CACpD,GAAI7iB,GAAIuf,KAAK4kB,WAAWthB,EACxB,IAAI7iB,EAAE+jC,QAAUxkB,KAAK7S,MAAQpM,EAAEZ,KAAKM,EAAG,eAAiBuf,KAAK7S,KAAO1M,EAAEikC,WAAY,CAChF,GAAIzkC,GAAIQ,CACR,QAGJR,IAAM,UAAYsjB,GAAK,aAAeA,IAAMtjB,EAAEukC,QAAUniC,GAAKA,GAAKpC,EAAEykC,aAAezkC,EAAI,KACvF,IAAI4P,GAAI5P,EAAIA,EAAE6kC,aACd,OAAOj1B,GAAEyM,KAAOiH,EAAG1T,EAAEyS,IAAMjgB,EAAGpC,GAAK+f,KAAKuE,OAAS,OAAQvE,KAAKnd,KAAO5C,EAAEykC,WAAY9/B,GAAKob,KAAKgmB,SAASn2B,IAExGm2B,SAAU,SAAkBziB,EAAGlhB,GAC7B,GAAI,UAAYkhB,EAAEjH,KAAM,KAAMiH,GAAEjB,GAChC,OAAO,UAAYiB,EAAEjH,MAAQ,aAAeiH,EAAEjH,KAAO0D,KAAKnd,KAAO0gB,EAAEjB,IAAM,WAAaiB,EAAEjH,MAAQ0D,KAAK8lB,KAAO9lB,KAAKsC,IAAMiB,EAAEjB,IAAKtC,KAAKuE,OAAS,SAAUvE,KAAKnd,KAAO,OAAS,WAAa0gB,EAAEjH,MAAQja,IAAM2d,KAAKnd,KAAOR,GAAIuC,GAE1NqhC,OAAQ,SAAgB1iB,GACtB,IAAK,GAAIlhB,GAAI2d,KAAK4kB,WAAW3iC,OAAS,EAAGI,GAAK,IAAKA,EAAG,CACpD,GAAIihB,GAAItD,KAAK4kB,WAAWviC,EACxB,IAAIihB,EAAEohB,aAAenhB,EAAG,MAAOvD,MAAKgmB,SAAS1iB,EAAEwhB,WAAYxhB,EAAEqhB,UAAWE,EAAcvhB,GAAI1e,IAG9F,MAAS,SAAgB2e,GACvB,IAAK,GAAIlhB,GAAI2d,KAAK4kB,WAAW3iC,OAAS,EAAGI,GAAK,IAAKA,EAAG,CACpD,GAAIihB,GAAItD,KAAK4kB,WAAWviC,EACxB,IAAIihB,EAAEkhB,SAAWjhB,EAAG,CAClB,GAAIxiB,GAAIuiB,EAAEwhB,UACV,IAAI,UAAY/jC,EAAEub,KAAM,CACtB,GAAI7b,GAAIM,EAAEuhB,GACVuiB,GAAcvhB,GAEhB,MAAO7iB,IAGX,KAAMoiC,OAAM,0BAEdqD,cAAe,SAAuB7jC,EAAGihB,EAAGviB,GAC1C,MAAOif,MAAKikB,UACVpiC,SAAUmjC,EAAO3iC,GACjBgiC,WAAY/gB,EACZghB,QAASvjC,GACR,SAAWif,KAAKuE,SAAWvE,KAAKsC,IAAMiB,GAAI3e,IAE9CvC,EA7SL,GAAI0U,GAAU,EAAQ,GAAwB,OA+S9C/W,GAAOD,QAAUkjC,EAAqBjjC,EAAOD,QAAQiB,YAAa,EAAMhB,EAAOD,QAAiB,QAAIC,EAAOD,SnBgkJrG,SAAUC,EAAQD,EAASH,GoB72JjC,QAASwhB,GAAcmC,GACrB,GAAItjB,GAAIkmC,EAAY5iB,EAAG,SACvB,OAAO,UAAYxM,EAAQ9W,GAAKA,EAAIA,EAAI,GAJ1C,GAAI8W,GAAU,EAAQ,GAAwB,QAC1CovB,EAAc,EAAQ,GAK1BnmC,GAAOD,QAAUqhB,EAAephB,EAAOD,QAAQiB,YAAa,EAAMhB,EAAOD,QAAiB,QAAIC,EAAOD,SpBq3J/F,SAAUC,EAAQD,EAASH,GqB13JjC,QAASumC,GAAY5iB,EAAGD,GACtB,GAAI,UAAYvM,EAAQwM,KAAOA,EAAG,MAAOA,EACzC,IAAIlhB,GAAIkhB,EAAE3hB,OAAOukC,YACjB,QAAI,KAAW9jC,EAAG,CAChB,GAAIpC,GAAIoC,EAAElC,KAAKojB,EAAGD,GAAK,UACvB,IAAI,UAAYvM,EAAQ9W,GAAI,MAAOA,EACnC,MAAM,IAAIuC,WAAU,gDAEtB,OAAQ,WAAa8gB,EAAI8iB,OAASC,QAAQ9iB,GAT5C,GAAIxM,GAAU,EAAQ,GAAwB,OAW9C/W,GAAOD,QAAUomC,EAAanmC,EAAOD,QAAQiB,YAAa,EAAMhB,EAAOD,QAAiB,QAAIC,EAAOD,SrBi4J7F,SAAUC,EAAQD,EAASH,GsBx4JjC,QAAS0mC,GAAShjC,GAChB,MAAO4f,GAAe5f,IAAQke,EAAgBle,IAAQme,EAA2Bne,IAAQ8f,IAL3F,GAAIF,GAAiB,EAAQ,IACzB1B,EAAkB,EAAQ,IAC1BC,EAA6B,EAAQ,GACrC2B,EAAkB,EAAQ,GAI9BpjB,GAAOD,QAAUumC,EAAUtmC,EAAOD,QAAQiB,YAAa,EAAMhB,EAAOD,QAAiB,QAAIC,EAAOD,StBk5J1F,SAAUC,EAAQD,EAASH,GuBx5JjC,QAAS2mC,GAAmBjjC,GAC1B,GAAIxB,MAAMC,QAAQuB,GAAM,MAAOsf,GAAiBtf,GAFlD,GAAIsf,GAAmB,EAAQ,GAI/B5iB,GAAOD,QAAUwmC,EAAoBvmC,EAAOD,QAAQiB,YAAa,EAAMhB,EAAOD,QAAiB,QAAIC,EAAOD,SvB+5JpG,SAAUC,EAAQD,GwBn6JxB,QAASymC,KACP,KAAM,IAAIhkC,WAAU,wIAEtBxC,EAAOD,QAAUymC,EAAoBxmC,EAAOD,QAAQiB,YAAa,EAAMhB,EAAOD,QAAiB,QAAIC,EAAOD,SxBy6JpG,SAAUC,EAAQD,GyB56JxB,QAAS0mC,GAAsBnjB,EAAGpjB,GAChC,GAAIqjB,GAAI,MAAQD,EAAI,KAAO,mBAAsB1hB,SAAU0hB,EAAE1hB,OAAOC,WAAayhB,EAAE,aACnF,IAAI,MAAQC,EAAG,CACb,GAAIlhB,GACFtB,EACAd,EACA4jC,EACAh0B,KACAtN,GAAI,EACJ9B,GAAI,CACN,KACE,GAAIR,GAAKsjB,EAAIA,EAAEpjB,KAAKmjB,IAAIzgB,KAAM,IAAM3C,EAAG,CACrC,GAAIQ,OAAO6iB,KAAOA,EAAG,MACrBhhB,IAAI,MACC,QAASA,GAAKF,EAAIpC,EAAEE,KAAKojB,IAAIphB,QAAU0N,EAAEnL,KAAKrC,EAAED,OAAQyN,EAAE5N,SAAW/B,GAAIqC,GAAI,IACpF,MAAO+gB,GACP7iB,GAAI,EAAIM,EAAIuiB,EACZ,QACA,IACE,IAAK/gB,GAAK,MAAQghB,EAAU,SAAMsgB,EAAItgB,EAAU,SAAK7iB,OAAOmjC,KAAOA,GAAI,OACvE,QACA,GAAIpjC,EAAG,KAAMM,IAGjB,MAAO8O,IAGX7P,EAAOD,QAAU0mC,EAAuBzmC,EAAOD,QAAQiB,YAAa,EAAMhB,EAAOD,QAAiB,QAAIC,EAAOD,SzBk7JvG,SAAUC,EAAQD,EAASH,GAEjC,Y0B/8JA,IAsBEmY,GAEA2uB,EAEAtmB,EA1BFhb,EAAuBC,EAAQ,GAAvBqJ,EAAUtJ,EAAVsJ,WACR2K,EAAwChU,EAAQ,GAAxC2T,EAAcK,EAAdL,eAAgB3B,EAAWgC,EAAXhC,YA2BtBsvB,EAAoBtiC,SAASwU,SAe3B+tB,EAAsC,WAA7B/iC,OAAOkZ,SAASjK,SAGzB+zB,GAAYD,EAAS,QAAU,QAAU,wBAC3CE,GACEpzB,EAAG,UAKLZ,IAGFA,GAASg0B,EAAa,IAAMD,EAAW,KAIvC,IAAIE,GAAqBljC,OAAO6I,mBAG5BsJ,GAFqBnS,OAAOgX,oBAG9BuE,MAAO,SAAU7e,EAAM6B,EAAOid,EAAMzG,EAAQ7F,GAC1C,GAAIuM,GAAO,GAAI7G,KACf4G,GAAOA,GAAQ,IACftM,EAAOA,GAAQ,IACfuM,EAAKC,QAAQD,EAAK5G,UAAmB,GAAP2G,EAAY,GAAK,GAAK,IACpD,IAAIG,GAAU,aAAeF,EAAKG,cAC9BC,EAAc,GAAH9S,OAAMrM,EAAI,KAAAqM,OAAIxK,GAAKwK,OAAG4S,EAAO,WAAA5S,OAAUmG,EAAI,0BACtD6F,KACF8G,GAAe,YAAc9G,GAE/BvU,SAAS2R,OAAS0J,GAEpBC,KAAM,SAAUpf,GACd,GAAIqf,GAAY,GAAKvb,SAAS2R,OAC1B6J,EAAQD,EAAU7V,QAAQxJ,EAC9B,QAAa8I,KAAT9I,GAA+B,KAATA,IAA0B,IAAXsf,EAAc,MAAO,EAC9D,IAAIC,GAAOF,EAAU7V,QAAQ,IAAK8V,EAElC,QADa,GAATC,IAAYA,EAAOF,EAAU3d,QAC1BiY,SAAS0F,EAAUjT,UAAUkT,EAAQtf,EAAK0B,OAAS,EAAG6d,KAE/DC,OAAQ,SAAUxf,GACZyf,KAAKL,KAAKpf,IACZyf,KAAKZ,MAAM7e,EAAM,IAAK,EAAG,QAe3BymC,EAAe,SAAUz7B,GAE3B,MAAOA,GAAM,IAAMkM,KAAKsB,MAAO,EAAI,GAAIN,MAAU,MAG/CwuB,EAAsB,SAAUruB,GAElC,IAEEvU,SAAS2R,OAAS,gBAAkB4C,EAAS,YAAcA,EAAS,GACpE,IAAIsuB,IAAiD,GAA3C7iC,SAAS2R,OAAOjM,QAAQ,cAKlC,OAHA1F,UAAS2R,OACP,uDACC4C,EAAS,YAAcA,EAAS,IAC5BsuB,EACP,MAAO7kC,GACP,OAAO,IAIPiW,EAAwB,SAAUxK,OAExBzE,KAARyE,IACFA,EAAMiP,SAASC,KAGjB,KACE,GAAI9O,EAMJ,IALIrK,OAAOkK,MACTG,EAAW,GAAIH,KAAID,GAAKI,cAIT7E,KAAb6E,EAAwB,CAC1B,GAAIoF,GAASjP,SAASmc,cAAc,IACpClN,GAAO0J,KAAOlP,EACdI,EAAWoF,EAAOpF,SAIpB,GAAiB,cAAbA,EACF,MAAO,EAWT,KARA,GAAIi5B,GAAaj5B,EAAS7D,MAAM,KAC9B+8B,EAAmBD,EAAWllC,OAC9B2W,EACEuuB,EAAWC,EAAmB,GAC9B,IACAD,EAAWC,EAAmB,GAChCC,EAAUD,EAAmB,GAEvBH,EAAoBruB,IAAWyuB,GAAW,GAChDzuB,EAASuuB,IAAaE,GAAW,IAAMzuB,CAGzC,SAAIyuB,EAAU,IAIPzuB,EACP,MAAOvW,GACP,OAAO,IAIPwb,EAAiB,SAAU/P,EAAK0Q,EAAIC,GACtC,GAAIC,GAAU,GAAIC,eAElBD,GAAQE,QAAU,IAClBF,EAAQG,iBAAkB,EAE1BH,EAAQI,mBAAqB,WAEF,IAAvBJ,EAAQK,YACW,MAAnBL,EAAQM,YACD3V,KAAPmV,EAEAA,EAAGE,EAAQO,cACqB,IAAvBP,EAAQK,gBAAgC1V,KAAZoV,GACrCA,EAAQC,EAAQO,eAGpBP,EAAQQ,KAAK,MAAOpR,GAAK,GACzB4Q,EAAQS,QAGNrB,GACFC,YAAa,SAAU1b,GACrB,GAAI4d,GAAOC,KAAKC,MAAM9d,OAETgH,KAAT4W,OAAyC5W,KAAnB4W,EAAa,QAMrCjK,EAAOoJ,MA9JiB,WAgKtBa,EAAwB,GAjKZ,EAmKZG,IAINpC,iBAAkB,SAAU3b,MAG1B6vB,EAAQ,WACV,GAAI5P,GAAM1U,SAGQ,YAFJ0U,EAAI,IAGhBgQ,EAAO3kB,MAAMqS,KAAMsC,IAInBgQ,EAAS,WA0BX,GAxBAlS,EAAgB9H,IAChBP,EACE/B,EAAO2J,KAjNG,eAkNT9b,OAAO0U,cAAgB1U,OAAO0U,aAAaC,QAAQ,eACpDnB,IACE3I,EAAWqJ,KACbA,EAAO,MAAHnL,OAASmL,EAAI,KAAAnL,QAAI,GAAI6L,OAAOC,WAChC7U,OAAO0U,cAAgB1U,OAAO0U,aAAaI,QAAQ,aAAcZ,IAEnE/B,EAAOoJ,MAxNK,aAwNYrH,EAjNZ,IAiN6BqI,GAGzCsmB,EAAO1wB,EAAO2J,KAvNF,cAyNT+mB,GACDpuB,EAAsBquB,KAAuBvmB,GAC5C,GAAItH,QAAO,QApOdwuB,IAoOyBjkC,KAAKqjC,KAG5BA,EAAOM,MAvOTM,KAyOAtxB,EAAOoJ,MAhOK,aAgOYsnB,EA3NZ,GAAK,KA2NwBtmB,GAII,MAA3CpK,EAAO2J,KA7MmB,aA8MiB,MAA3C3J,EAAO2J,KA9MmB,YA+M1B,CACA,GAAMwO,GAAUnV,EAAejB,GACvBpJ,EAASwf,EAATxf,IACRkP,GACE/K,EAASg0B,EAAa,IACpB,MACA,EAAI,GAAIruB,MACR,OACAsuB,EAAmB3mB,GACnB,SACAzR,EACFmP,EAAUC,YACVD,EAAUE,oBAKVlG,EAAU,WACd,MAAOC,IAQH8B,EAAY,SAACtO,GACjB,GAAmB,gBAARA,GAET,WADA2D,SAAQS,KAAK,mCAIf,IAAMsO,GAAU5Z,SAAS2R,OACnBkI,EAAaD,EAAQ5T,MAAM,KAAK8T,IAAI,SAACC,GAAI,MAAKA,GAAK3S,SACnD4S,EAAeH,EAAW5S,KAAK,SAAC0K,GACpC,MAAOA,GAAO3L,MAAM,KAAK,KAAOkB,GAGlC,OAAK8S,GAIEA,EAAahU,MAAM,KAAK,OAH7B6E,SAAQS,KAAK,mCAAD/C,OAAoCrB,IAMpDvL,GAAOD,SACLmyB,QACA7a,cACAS,UACA+B,YACAvB,0B1Bw6JI,SAAUtY,EAAQD,EAASH,GAEjC,YAGA,IAAI2B,GAAyB3B,EAAoB,GAC7CsF,EAAsB3D,EAAuB3B,EAAoB,I2BxtKrEwF,EAAoBC,EAAQ,GAAtBC,EAASF,EAATE,UACN+T,EAKIhU,EAAQ,GAJVqF,EAAU2O,EAAV3O,WACAR,EAAkBmP,EAAlBnP,mBACAc,EAAWqO,EAAXrO,YACAhF,EAAeqT,EAAfrT,gBAEFsT,EAAsBjU,EAAQ,GAAxBgS,EAAWiC,EAAXjC,YACNkC,EAIIlU,EAAQ,IAHV6oB,EAAK3U,EAAL2U,MACAkQ,EAAkC7kB,EAAlC6kB,mCACAC,EAAkC9kB,EAAlC8kB,mCAIIkJ,EAAqB,SAAAC,GACzB,MAAIA,GAAiBliC,EAAUsM,qBAG7B1C,QAAQ8R,KACN,4CACA1b,EAAUsM,mBACV,aAEK,IAIL61B,EAAqB,SAAAC,GACzB,MAAIA,GAAiBpiC,EAAUuM,kBAG7B3C,QAAQ8R,KACN,kDACA1b,EAAUuM,gBACV,aAEK,IAIL81B,EAAc,SAAApnC,GAClB,GAAMqnC,GAAU/jC,OAAOE,IAAIM,SAASsH,iBAAiB,SAErD,QADmB,EAAHzG,EAAA,SAAO0iC,GACLt8B,KAAK,SAAAkd,GAAM,MAAIA,GAAOC,IAAIpe,MAAM,MAAM,KAAO,kBAALuC,OAAuBrM,EAAI,UAGjFsnC,EAAiB,WAGrB,OAAgBx+B,KAFAs+B,EAAY,aAED,CACzB,GAAMnf,GAASnkB,SAASmc,cAAc,SACtCgI,GAAOC,IAAM,gCACbD,EAAOkd,OAAQ,EACf7hC,OAAOE,IAAIM,SAASC,qBAAqB,QAAQ,GAAGwc,YAAY0H,KAO9Dsf,EAAW,WACf,IAAK9hC,IACH,IACE6hC,IACA,MAAO75B,GACPkB,QAAQmM,IAAIrN,GAOhB,IAJA,GAAIwzB,GAAWn9B,SAASC,qBAAqBgB,EAAUQ,SACnDiiC,EAAiB,EACjBP,EAAiB,EACjBE,EAAiB,EACdK,EAAiBvG,EAASv/B,QAAQ,CACvC,GAAI6D,GAAU07B,EAASuG,GACnBzZ,EAAYxoB,EAAQiD,aAAazD,EAAUqL,OAC3C5F,EAASC,EAAYlF,EAEzB,IAAe,WAAXiF,GAAuBw8B,EAAmBC,GAAiB,CAC7D,GAAMQ,GAAW/G,EAAmCn7B,EAChDkiC,GAAW,IACbR,GAAkBQ,EAClB9Z,EAAMpoB,EAAS,WAEZ,IAAe,OAAXiF,GAAmB08B,EAAmBC,GAAiB,CAChE,GAAMO,GAAQlnB,EAA0Bjb,EACpCmiC,GAAQ,IACVP,GAAkBO,EAClB/Z,EAAMpoB,EAAS,eAEZ,IAAe,OAAXiF,EAAiB,CAC1B,GAAIkW,GAAmBvW,EAAW5E,EAC9Bmb,GAAiBtW,OACf2jB,GACFpf,QAAQ8R,KACN,oDACAC,EAAiBtW,QAIjBu2B,EAAsBp7B,IACxBooB,EAAMpoB,OAIVoJ,SAAQ8R,KAAK,+BAEf+mB,OAIE7G,EAAwB,SAAAp7B,GAC5B,MAAIA,GAAQ6F,iBAAiB,OAAO1J,OAAS,GAC3CiN,QAAQ8R,KACN,oEAEK,GAG6B,MAAlClb,EAAQiD,aAAa,YACvBjD,EAAQ2a,aAAa,SAAU,MAK1B,IAaHwgB,EAAqC,SAAAn7B,GAEzC,GAAIA,EAAQ6F,iBAAiB,UAAU1J,OAAS,EAI9C,MAHAiN,SAAQ8R,KACN,sFAEK,CAIT,IAAIC,GAAmBvW,EAAW5E,EAClC,IAAImb,EAAiBtW,OAAQ,CAQ3B,MAPgB7E,GAAQiD,aAAazD,EAAUqL,QAE7CzB,QAAQ8R,KACN,oDACAC,EAAiBtW,QAGd,EAIT,GAAIsW,EAAiBrW,iBAAkB,CACrC,GACwC,QAAtCqW,EAAiBrW,kBACqB,WAAtCqW,EAAiBrW,iBAWjB,MAHAsE,SAAQ8R,KACN,6GAEK,CARP,IAAe,cADFlb,EAAQiD,aAAazD,EAAU8E,QAG1C,MADA8E,SAAQ8R,KAAK,yDACN,EAUb,GAAsC,MAAlClb,EAAQiD,aAAa,UAGvB,MAAO,EAFPjD,GAAQ2a,aAAa,SAAU,IAKjC,IAAIS,GAAapb,EAAQiD,aAAazD,EAAUuF,YAC5CyV,EAAOY,EAAa,IAAM7J,GAK9B,OAFA6wB,GAA2BpiC,EAASwa,EAAMW,EAAiBrW,kBAEpD,GAYHmW,EAA4B,SAAAjb,GAEhC,GAAIA,EAAQ6F,iBAAiB,UAAU1J,OAAS,EAI9C,MAHAiN,SAAQ8R,KACN,sFAEK,CAIT,IAAIC,GAAmBvW,EAAW5E,EAClC,IAAImb,EAAiBtW,OAAQ,CAQ3B,MAPgB7E,GAAQiD,aAAazD,EAAUqL,QAE7CzB,QAAQ8R,KACN,oDACAC,EAAiBtW,QAGd,EAGT,GAAsC,MAAlC7E,EAAQiD,aAAa,UAGvB,MAAO,EAFPjD,GAAQ2a,aAAa,SAAU,IAKjC,IAAIS,GAAapb,EAAQiD,aAAazD,EAAUuF,YAC5CyV,EAAOY,EAAa,IAAM7J,GAK9B,OAFAgJ,GAAwBva,EAASwa,GAE1B,GAGHM,EAA8B,SAClC9a,EACAwa,EACAvV,EACAH,GAEA,GAAI+V,GAAYtc,SAASmc,cAAc,OACjC2nB,EAAeriC,EAAQiD,aAAa,uBAAyB,GAGnE,IAFA4X,EAAUmQ,GAAKxQ,EAAO,WACtBK,EAAUta,MAAMC,QAAU,OACZ,UAAVyE,EAAoB,CACtB,GAAId,GAAkBC,EAAmBpE,GAGrC0E,EAAUP,EAAgBG,OAAOC,MAAM,KAAK,GAAGA,MAAM,KAAK,EAGzC,SAArBO,EACK+V,EAAUta,MAAMtC,IAAM,MACtB4c,EAAUta,MAAMc,OAAS,MAC9BwZ,EAAUta,MAAMonB,OAAS,MACzB9M,EAAUta,MAAMqnB,QAAU,MAC1B/M,EAAUta,MAAMkX,SAAW,QAC3BoD,EAAUta,MAAMQ,KAAO,MACvB8Z,EAAUta,MAAM8C,MAAQ,OACxBwX,EAAUta,MAAM+C,OAASoB,EAAU,KACnCmW,EAAUta,MAAMwnB,OAAS,OACzBlN,EAAUta,MAAM+hC,WACd,oNAEFznB,GAAUta,MAAMkX,SAAW,QAC3BoD,EAAUta,MAAMwnB,OAASsa,EACzBxnB,EAAUta,MAAM8C,MAAQ,OACxBwX,EAAUta,MAAM+C,OAAS,OACzBuX,EAAUta,MAAMQ,KAAO,MACvB8Z,EAAUta,MAAMtC,IAAM,KAExB,OAAO4c,IAIH0nB,EAA2B,SAACviC,EAASwa,GACzC,GAAIrW,GAAkBC,EAAmBpE,GAGrCwiC,GAFUr+B,EAAgBG,OAAOC,MAAM,KAAK,GAClCJ,EAAgBG,OAAOC,MAAM,KAAK,GAAGA,MAAM,KAAK,GAC9ChG,SAASmc,cAAc,KAGvC8nB,GAAUxX,GAAKxQ,EAAO,SACtBgoB,EAAUC,QAAU,SAAUzX,GAC5B,GAAInQ,GAAYtc,SAAS+B,eAAeka,EAAO,WAC/CK,GAAUta,MAAMwnB,OAAS,KACzBlN,EAAUta,MAAMC,QAAU,OAG5B,IAAIkiC,GAAgBnkC,SAASmc,cAAc,MAQ3C,OAPAgoB,GAAc/nB,aAAa,aAAcnb,EAAU2M,UAAUC,cAC7Do2B,EAAUtrB,KAAO,sBACjBsrB,EAAUjiC,MAAMwnB,OAAS,OACzBya,EAAUjiC,MAAMkX,SAAW,QAC3BirB,EAAcniC,MAAM8C,MAAQ,OAC5Bq/B,EAAc/f,IAAMnjB,EAAU+K,YAC9Bi4B,EAAUxnB,YAAY0nB,GACfF,GAGHznB,EAAwB,SAAC/a,EAASwa,GACtC,GAAI7O,GACF3L,EAAQiD,aAAazD,EAAUmM,yBAA2B,KACxD62B,EAAYjkC,SAASmc,cAAc,KACnCgoB,EAAgBnkC,SAASmc,cAAc,MAC3CgoB,GAAc/nB,aAAa,aAAcnb,EAAU2M,UAAUC,cAC7Do2B,EAAUxX,GAAKxQ,EAAO,SACtBgoB,EAAUC,QAAU,SAAUzX,GAE5B,GAAI7Z,GAAU5S,SAAS+B,eAAeka,EAItC,IAAIrJ,IACExF,GAA0B62B,EAAUjiC,MAAM2V,SAAW,GAAG,CAC1D/E,EAAQzN,WAAWuW,SAEnBuoB,EAAUjiC,MAAMwnB,OAAS,KACzBya,EAAUjiC,MAAMC,QAAU,MAC1B,IAAIqa,GAAYtc,SAAS+B,eAAeka,EAAO,WAC3CK,KACFA,EAAUta,MAAMwnB,OAAS,KACzBlN,EAAUta,MAAM8C,MAAQ,IACxBwX,EAAUta,MAAM+C,OAAS,KAE3BvF,OAAOgY,oBACL,oBACAuiB,GAEFv6B,OAAOgY,oBAAoB,SAAUwiB,KAI3CiK,EAAUjiC,MAAM8C,MAAQ,OACxBm/B,EAAUjiC,MAAM+C,OAAS,OACzBk/B,EAAUjiC,MAAMwnB,OAAS,QACzBya,EAAUjiC,MAAMkX,SAAW,WAC3B+qB,EAAUjiC,MAAMQ,KAAO,MACvByhC,EAAUjiC,MAAMtC,IAAM,MACtBykC,EAAcniC,MAAM8C,MAAQ,OAC5Bq/B,EAAc/f,IACZ,y9IACF6f,EAAUxnB,YAAY0nB,EAKtB,KACE3kC,OAAOsY,iBAAiB,UAAW,SAAA9Z,GAKjC,GAAoB,qBAAhBA,EAAEinB,KAAKhN,KAA6B,CACtC,GAAQ9G,GAAmBnT,EAAEinB,KAArB9T,cACRlQ,GAAUyM,kBAAsC,IAAnByD,EAC7B8yB,EAAUjiC,MAAMC,SAA6B,IAAnBkP,EAA0B,OAAS,WAGjE,MAAOxH,GACPkB,QAAQmM,IAAIrN,GAKd,MAH8B,OAA1ByD,IACF62B,EAAUjiC,MAAMC,QAAU,QAErBgiC,GAGHJ,EAA6B,SAACpiC,EAASwa,EAAM1V,GACjD,GAAIX,GAAkBC,EAAmBpE,GACrCqE,EAAUF,EAAgBG,OAAOC,MAAM,KAAK,GAC5CG,EAAUP,EAAgBG,OAAOC,MAAM,KAAK,GAAGA,MAAM,KAAK,GAC1Do+B,EAAYnoB,EAAO,KACnBooB,EAAYpoB,EAAO,KAEnBnP,EAAUrL,EAAQiD,aAAazD,EAAU6L,QAC7CA,IAAUA,GAAsB,QAAXA,CAErB,IAAIw3B,GAAQtkC,SAASmc,cAAc,SASnC,IARAmoB,EAAMtiC,MAAM8C,MAAQgB,EAAU,KAC9Bw+B,EAAMtiC,MAAM+C,OAASoB,EAAU,KAC/Bm+B,EAAMtiC,MAAMuxB,SAAW,OACvB+Q,EAAMloB,aAAa,KAAMgoB,GACzBE,EAAMloB,aAAa,YAAa,MAChCkoB,EAAMtiC,MAAMC,QAAU,QACtBqiC,EAAMjoB,YAAc,EAEhB9V,EAAkB,CAEpB+9B,EAAMtiC,MAAMkX,SAAW,QACvBorB,EAAMtiC,MAAMQ,KAAO,MACnB8hC,EAAMtiC,MAAMuiC,WAAa,IAAMz+B,EAAU,EAAI,IAE7C,IAAI0+B,GAAajoB,EACf9a,EACA2iC,EACA,SACA79B,GAEEk+B,EAAYT,EAAyBviC,EAAS2iC,EAElDI,GAAW/nB,YAAYgoB,GACvBD,EAAW/nB,YAAY6nB,GACvB7iC,EAAQgb,YAAY+nB,OACf,CACL,GAAIE,GAAmBC,EAAwBP,EAAWt+B,EAASK,EACnEu+B,GAAiBjoB,YAAY6nB,GAC7B7iC,EAAQgb,YAAYioB,GAGtB,GAAIE,GAAQ5kC,SAASmc,cAAc,SAQnC,IAPAyoB,EAAM5iC,MAAM8C,MAAQgB,EAAU,KAC9B8+B,EAAM5iC,MAAM+C,OAASoB,EAAU,KAC/By+B,EAAMxoB,aAAa,KAAMioB,GACzBO,EAAMxoB,aAAa,YAAa,MAChCwoB,EAAM5iC,MAAMC,QAAU,OACtB2iC,EAAMvoB,YAAc,EAEhB9V,EAAkB,CACpBq+B,EAAM5iC,MAAMkX,SAAW,QACvB0rB,EAAM5iC,MAAMQ,KAAO,MACnBoiC,EAAM5iC,MAAMuiC,WAAa,IAAMz+B,EAAU,EAAI,IAE7C,IAAI++B,GAAatoB,EACf9a,EACA4iC,EACA,SACA99B,GAEEu+B,EAAYd,EAAyBviC,EAAS4iC,EAElDQ,GAAWpoB,YAAYqoB,GACvBD,EAAWpoB,YAAYmoB,GACvBnjC,EAAQgb,YAAYooB,OAEpBD,GAAM5iC,MAAMonB,OAAS,WACrB3nB,EAAQgb,YAAYmoB,IAIlBD,EAA0B,SAAC1oB,EAAMnW,EAASK,GAC9C,GAAMmW,GAAYtc,SAASmc,cAAc,MAMzC,OALAG,GAAUmQ,GAAKxQ,EAAO,WACtBK,EAAUta,MAAMkX,SAAW,WAC3BoD,EAAUta,MAAM8C,MAAQgB,EAAU,KAClCwW,EAAUta,MAAM+C,OAASoB,EAAU,KACnCmW,EAAUta,MAAMonB,OAAS,OAClB9M,GAGHN,EAA0B,SAACva,EAASwa,GACxC,GAAIC,GAAWD,EAAO,SAClB7R,EAASpK,SAASmc,cAAc,SACpC/R,GAAOpI,MAAM8C,MAAQ,OACrBsF,EAAOpI,MAAM+C,OAAS,OACtBqF,EAAOgS,aAAa,KAAMF,GAC1B9R,EAAOgS,aAAa,YAAa,MACjChS,EAAOiS,YAAc,CAErB,IAAIC,GAAYC,EAA4B9a,EAASya,EAAU,OAC3D3J,EAAWiK,EAAsB/a,EAASya,EAE9CI,GAAUG,YAAYlK,GACtB+J,EAAUG,YAAYrS,GACtB3I,EAAQgb,YAAYH,GAKtB3gB,GAAOD,SACLwnC,qBACAE,qBACAK,WACA7G,qCACAlgB,4BACAH,8BACAynB,2BACAxnB,wBACAqnB,6BACA7nB,0BACA6gB,0B3B6oKI,SAAUlhC,EAAQD,EAASH,GAEjC,YAMA,SAASyjB,GAAQhhB,EAAGihB,GAAK,GAAIC,GAAI7iB,OAAO2K,KAAKhJ,EAAI,IAAI3B,OAAO8iB,sBAAuB,CAAE,GAAI/iB,GAAIC,OAAO8iB,sBAAsBnhB,EAAIihB,KAAM7iB,EAAIA,EAAEgjB,OAAO,SAAUH,GAAK,MAAO5iB,QAAOgjB,yBAAyBrhB,EAAGihB,GAAGziB,cAAiB0iB,EAAE7e,KAAKiJ,MAAM4V,EAAG9iB,GAAM,MAAO8iB,GAC3P,QAASI,GAActhB,GAAK,IAAK,GAAIihB,GAAI,EAAGA,EAAI1V,UAAU3L,OAAQqhB,IAAK,CAAE,GAAIC,GAAI,MAAQ3V,UAAU0V,GAAK1V,UAAU0V,KAASA,GAAI,EAAID,EAAQ3iB,OAAO6iB,IAAI,GAAIpU,QAAQ,SAAUmU,IAAK,EAAIM,EAA0B,SAAGvhB,EAAGihB,EAAGC,EAAED,MAAU5iB,OAAOmjB,0BAA4BnjB,OAAOojB,iBAAiBzhB,EAAG3B,OAAOmjB,0BAA0BN,IAAMF,EAAQ3iB,OAAO6iB,IAAIpU,QAAQ,SAAUmU,GAAK5iB,OAAOC,eAAe0B,EAAGihB,EAAG5iB,OAAOgjB,yBAAyBH,EAAGD,MAAW,MAAOjhB,G4BtnLpc,QAAS++B,KACP,GAAM9jB,IACJnS,OAAQ,EACRD,GAAI,EACJE,GAAI,GAGE2K,EAAkBvQ,EAAlBuQ,aAER,OAAO,UAAChL,GAAoB,GAAZ8M,GAAGjK,UAAA3L,OAAA,OAAAoH,KAAAuE,UAAA,GAAAA,UAAA,GAAG,CAEpB,OADA0P,GAAQvS,IAAW8M,GAEjByF,QAASA,EAAQvS,GACjB62B,cAAetkB,EAAQvS,GAAUgL,EAAchL,KAUrD,QAASs2B,KACP,GAAI+H,KAEJ,QACEC,cAAe,WACb,MAAOD,IAET9G,WAAY,SAACT,GACd,GAAKA,IAAQ/lB,MAAM+lB,GAGhB,MAAOuH,GAAWvH,IAEpBW,WAAY,SAACX,EAAMyH,GACfzH,IAAQ/lB,MAAM+lB,IAIdyH,GAAqC,YAAtB,EAAArkC,EAAA,SAAOqkC,KAA2BxnC,MAAMC,QAAQunC,KAIjEF,EAAWvH,GAAQyH,KASzB,QAAShI,KACP,GAAI8H,KAEJ,QACE9G,WAAY,SAACiH,GACX,MAAKA,IAAeA,EAAWtnC,OAIL,gBAAfsnC,GACFH,EAAWG,GAGOA,EAAW1kC,OACpC,SAACC,EAAaC,GACZ,MAAKqkC,GAAWrkC,GAIhB4e,OAAY7e,OAAaC,aAAcqkC,EAAWrkC,KAHzCD,OAVJskC,GAoBX5G,WAAY,SAACj3B,EAAKnJ,GACdmJ,GAAsB,kBAARA,IAAqC,YAAf,EAAAtG,EAAA,SAAOsG,KAI7C69B,EAAW79B,GAAOnJ,K5B6hLxB,GAAIb,GAAyB3B,EAAoB,GAC7CgkB,EAAmBriB,EAAuB3B,EAAoB,IAC9DqF,EAAW1D,EAAuB3B,EAAoB,I4B1nL1DwF,EAAyBC,EAAQ,GAAzBG,EAAYJ,EAAZI,YAgGRxF,GAAOD,SACLqhC,mBACAE,0BACAD","file":"vpadn-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 = 16);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/***/ (function(module, exports) {\n\nfunction _interopRequireDefault(obj) {\n return obj && obj.__esModule ? obj : {\n \"default\": obj\n };\n}\nmodule.exports = _interopRequireDefault, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;\n\n/***/ }),\n/* 1 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _interopRequireDefault = __webpack_require__(0);\nvar _regenerator = _interopRequireDefault(__webpack_require__(7));\nvar _typeof2 = _interopRequireDefault(__webpack_require__(3));\nvar _toConsumableArray2 = _interopRequireDefault(__webpack_require__(6));\nvar _asyncToGenerator2 = _interopRequireDefault(__webpack_require__(8));\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__(2),\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 = (0, _asyncToGenerator2[\"default\"])( /*#__PURE__*/_regenerator[\"default\"].mark(function _callee(name) {\n return _regenerator[\"default\"].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 = (0, _toConsumableArray2[\"default\"])(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 && ((0, _typeof2[\"default\"])(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/* 2 */\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/* 3 */\n/***/ (function(module, exports) {\n\nfunction _typeof(o) {\n \"@babel/helpers - typeof\";\n\n return (module.exports = _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) {\n return typeof o;\n } : function (o) {\n return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o;\n }, module.exports.__esModule = true, module.exports[\"default\"] = module.exports), _typeof(o);\n}\nmodule.exports = _typeof, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;\n\n/***/ }),\n/* 4 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _interopRequireDefault = __webpack_require__(0);\nvar _toConsumableArray2 = _interopRequireDefault(__webpack_require__(6));\nvar _defineProperty2 = _interopRequireDefault(__webpack_require__(5));\nvar _slicedToArray2 = _interopRequireDefault(__webpack_require__(14));\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; }\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) { (0, _defineProperty2[\"default\"])(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; }\nvar _require = __webpack_require__(1),\n isUrl = _require.isUrl,\n checkAdType = _require.checkAdType,\n verifyCtid = _require.verifyCtid;\nvar _require2 = __webpack_require__(2),\n websdkParams = _require2.websdkParams;\nvar _require3 = __webpack_require__(1),\n cookieParamsValidator = _require3.cookieParamsValidator;\nvar _require4 = __webpack_require__(24),\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 = (0, _slicedToArray2[\"default\"])(curr, 2),\n key = _curr[0],\n value = _curr[1];\n return _objectSpread(_objectSpread({}, prev), {}, (0, _defineProperty2[\"default\"])({}, 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 = (0, _toConsumableArray2[\"default\"])(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 = (0, _toConsumableArray2[\"default\"])(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 = (0, _toConsumableArray2[\"default\"])(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/* 5 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar toPropertyKey = __webpack_require__(18);\nfunction _defineProperty(obj, key, value) {\n key = toPropertyKey(key);\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n return obj;\n}\nmodule.exports = _defineProperty, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;\n\n/***/ }),\n/* 6 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar arrayWithoutHoles = __webpack_require__(21);\nvar iterableToArray = __webpack_require__(11);\nvar unsupportedIterableToArray = __webpack_require__(9);\nvar nonIterableSpread = __webpack_require__(22);\nfunction _toConsumableArray(arr) {\n return arrayWithoutHoles(arr) || iterableToArray(arr) || unsupportedIterableToArray(arr) || nonIterableSpread();\n}\nmodule.exports = _toConsumableArray, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;\n\n/***/ }),\n/* 7 */\n/***/ (function(module, exports, __webpack_require__) {\n\n// TODO(Babel 8): Remove this file.\n\nvar runtime = __webpack_require__(17)();\nmodule.exports = runtime;\n\n// Copied from https://github.com/facebook/regenerator/blob/main/packages/runtime/runtime.js#L736=\ntry {\n regeneratorRuntime = runtime;\n} catch (accidentalStrictMode) {\n if (typeof globalThis === \"object\") {\n globalThis.regeneratorRuntime = runtime;\n } else {\n Function(\"r\", \"regeneratorRuntime = r\")(runtime);\n }\n}\n\n\n/***/ }),\n/* 8 */\n/***/ (function(module, exports) {\n\nfunction asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) {\n try {\n var info = gen[key](arg);\n var value = info.value;\n } catch (error) {\n reject(error);\n return;\n }\n if (info.done) {\n resolve(value);\n } else {\n Promise.resolve(value).then(_next, _throw);\n }\n}\nfunction _asyncToGenerator(fn) {\n return function () {\n var self = this,\n args = arguments;\n return new Promise(function (resolve, reject) {\n var gen = fn.apply(self, args);\n function _next(value) {\n asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"next\", value);\n }\n function _throw(err) {\n asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"throw\", err);\n }\n _next(undefined);\n });\n };\n}\nmodule.exports = _asyncToGenerator, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;\n\n/***/ }),\n/* 9 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar arrayLikeToArray = __webpack_require__(12);\nfunction _unsupportedIterableToArray(o, minLen) {\n if (!o) return;\n if (typeof o === \"string\") return arrayLikeToArray(o, minLen);\n var n = Object.prototype.toString.call(o).slice(8, -1);\n if (n === \"Object\" && o.constructor) n = o.constructor.name;\n if (n === \"Map\" || n === \"Set\") return Array.from(o);\n if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return arrayLikeToArray(o, minLen);\n}\nmodule.exports = _unsupportedIterableToArray, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;\n\n/***/ }),\n/* 10 */\n/***/ (function(module, exports) {\n\nfunction _arrayWithHoles(arr) {\n if (Array.isArray(arr)) return arr;\n}\nmodule.exports = _arrayWithHoles, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;\n\n/***/ }),\n/* 11 */\n/***/ (function(module, exports) {\n\nfunction _iterableToArray(iter) {\n if (typeof Symbol !== \"undefined\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter);\n}\nmodule.exports = _iterableToArray, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;\n\n/***/ }),\n/* 12 */\n/***/ (function(module, exports) {\n\nfunction _arrayLikeToArray(arr, len) {\n if (len == null || len > arr.length) len = arr.length;\n for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i];\n return arr2;\n}\nmodule.exports = _arrayLikeToArray, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;\n\n/***/ }),\n/* 13 */\n/***/ (function(module, exports) {\n\nfunction _nonIterableRest() {\n throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}\nmodule.exports = _nonIterableRest, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;\n\n/***/ }),\n/* 14 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar arrayWithHoles = __webpack_require__(10);\nvar iterableToArrayLimit = __webpack_require__(23);\nvar unsupportedIterableToArray = __webpack_require__(9);\nvar nonIterableRest = __webpack_require__(13);\nfunction _slicedToArray(arr, i) {\n return arrayWithHoles(arr) || iterableToArrayLimit(arr, i) || unsupportedIterableToArray(arr, i) || nonIterableRest();\n}\nmodule.exports = _slicedToArray, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;\n\n/***/ }),\n/* 15 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _interopRequireDefault = __webpack_require__(0);\nvar _regenerator = _interopRequireDefault(__webpack_require__(7));\nvar _slicedToArray2 = _interopRequireDefault(__webpack_require__(14));\nvar _toConsumableArray2 = _interopRequireDefault(__webpack_require__(6));\nvar _defineProperty2 = _interopRequireDefault(__webpack_require__(5));\nvar _asyncToGenerator2 = _interopRequireDefault(__webpack_require__(8));\nvar _this2 = void 0;\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; }\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) { (0, _defineProperty2[\"default\"])(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; }\nvar _require = __webpack_require__(2),\n systemVar = _require.systemVar,\n parseUriOptions = _require.parseUriOptions,\n hwnd = _require.hwnd,\n nativeLayout = _require.nativeLayout,\n websdkParams = _require.websdkParams,\n act_script = _require.act_script;\nvar _require2 = __webpack_require__(4),\n getCookie = _require2.getCookie,\n endsWith = _require2.endsWith,\n parseParamsFromUrl = _require2.parseParamsFromUrl,\n regexp_replace = _require2.regexp_replace,\n parseCtidToObj = _require2.parseCtidToObj,\n fade = _require2.fade,\n fadeLock = _require2.fadeLock,\n fadeForFlrec = _require2.fadeForFlrec,\n getParams = _require2.getParams,\n calculateViewRate = _require2.calculateViewRate;\nvar _require3 = __webpack_require__(1),\n coveredBannerCheck = _require3.coveredBannerCheck,\n isInCrossDomain = _require3.isInCrossDomain,\n coveredNaCheck = _require3.coveredNaCheck,\n arrangeReqAdUrl = _require3.arrangeReqAdUrl,\n getReqAdParameters = _require3.getReqAdParameters,\n checkAdType = _require3.checkAdType,\n queryWebApiPermission = _require3.queryWebApiPermission,\n isUrl = _require3.isUrl,\n isInGAM = _require3.isInGAM;\n// --------- process flow -------------\nvar getAd = /*#__PURE__*/function () {\n var _ref = (0, _asyncToGenerator2[\"default\"])( /*#__PURE__*/_regenerator[\"default\"].mark(function _callee(vponTag, iframeNum) {\n var ctidObj, _ctidObj, ctid, timestamp, reqAdParameters, reqURL, debugMode, adType, screenDensity, qs, stringfyGAMResult, adRequestObj, icookBidArr, groupId;\n return _regenerator[\"default\"].wrap(function _callee$(_context) {\n while (1) switch (_context.prev = _context.next) {\n case 0:\n ctidObj = {};\n if (getCookie(systemVar.cookieCTID)) {\n ctidObj = parseCtidToObj(getCookie(systemVar.cookieCTID));\n } else if (window.localStorage.getItem(systemVar.cookieCTID)) {\n ctidObj = parseCtidToObj(window.localStorage.getItem(systemVar.cookieCTID));\n }\n _ctidObj = ctidObj, ctid = _ctidObj.ctid, timestamp = _ctidObj.timestamp;\n reqAdParameters = getReqAdParameters(vponTag);\n reqURL = arrangeReqAdUrl(systemVar.reqAdUrl, reqAdParameters);\n debugMode = vponTag.getAttribute(systemVar.debug) === 'true' || vponTag.getAttribute(systemVar.debug) === '1';\n adType = checkAdType(vponTag);\n screenDensity = window.devicePixelRatio ? window.devicePixelRatio : 1;\n qs = '';\n if (getCookie(systemVar.cookieCTID) != 'undefined') {\n qs = \"&Ctid=\".concat(ctid);\n if (getCookie('Vpadn-Sid') != 'undefined') {\n qs += '&Vpadn-Sid=' + getCookie('Vpadn-Sid');\n }\n }\n if (vponTag.getAttribute(systemVar.ad_identifier) !== null) {\n qs += \"&adv_id=\".concat(vponTag.getAttribute(systemVar.ad_identifier));\n }\n if (vponTag.getAttribute(systemVar.ad_is_lat) !== null) {\n qs += \"&adv_id_lat=\".concat(vponTag.getAttribute(systemVar.ad_is_lat));\n }\n\n //Check if getTargetingMap attribute is not null.\n stringfyGAMResult = encodeURIComponent(vponTag.getAttribute(systemVar.gamTargetingMap));\n if (!!stringfyGAMResult) {\n qs += \"&\".concat(systemVar.contentData, \"=\").concat(stringfyGAMResult);\n }\n\n //20210105: test for attr of GAM\n if (timestamp !== 'undefined') {\n qs += \"&Ctiddob=\".concat(timestamp);\n //qs += `&Ctiddob=1635696000000000000`\n }\n if (debugMode) {\n console.log(' ---------------------------------------------------------------------------');\n console.log('getAd() Url -> ' + reqURL);\n }\n reqURL = reqURL + qs + '&u_sd=' + screenDensity + '×tamp=' + new Date().getMilliseconds();\n _context.next = 19;\n return collectDataForAdRequest({\n vponTag: vponTag\n });\n case 19:\n adRequestObj = _context.sent;\n if (location && location.href) {\n adRequestObj.requestBody = _objectSpread(_objectSpread({}, adRequestObj.requestBody), {}, {\n referer: location.href\n });\n }\n icookBidArr = ['8a80854b806fa8710181182c55a34f1b', '8a80854b806fa87101808e0434c8602f'];\n if (icookBidArr.indexOf(reqAdParameters.bid) !== -1) {\n groupId = getCookie('Vpadn-Sid') ? getCookie('Vpadn-Sid') : \"\".concat(ctid, \"_\").concat(new Date().getTime());\n debugForIcook(groupId);\n }\n sendAdRequest({\n adRequestObj: adRequestObj,\n vponTag: vponTag,\n iframeNum: iframeNum,\n reqAdUrl: reqURL,\n adType: adType\n });\n case 24:\n case \"end\":\n return _context.stop();\n }\n }, _callee);\n }));\n return function getAd(_x, _x2) {\n return _ref.apply(this, arguments);\n };\n}();\n\n/**\n * Send ad request to banner api server\n * @param {object} context ad context\n */\nfunction sendAdRequest(context) {\n var adRequestObj = context.adRequestObj,\n vponTag = context.vponTag,\n iframeNum = context.iframeNum,\n reqAdUrl = context.reqAdUrl,\n adType = context.adType;\n var requestHeader = adRequestObj.requestHeader,\n requestBody = adRequestObj.requestBody;\n var requestOptions = websdkParams.apiPayload.adRequest;\n var reqId = null;\n if (requestBody) {\n requestOptions.method = 'POST';\n requestOptions.body = JSON.stringify(requestBody);\n }\n if (requestHeader) {\n requestOptions.headers = requestHeader;\n }\n fetch(reqAdUrl, requestOptions).then(function (response) {\n reqId = response.headers.get('req_id');\n return response.json();\n })[\"catch\"](function (error) {\n console.log(error);\n }).then(function (response) {\n if (reqId) {\n response = _objectSpread({\n reqId: reqId\n }, response);\n }\n if (adType === 'banner') {\n reqCallback(vponTag, iframeNum, response);\n }\n if (adType === 'mi') {\n reqCallbackInt(vponTag, iframeNum, response);\n }\n if (adType === 'na') {\n reqCallbackNa(vponTag, response);\n }\n });\n}\nfunction collectDataForAdRequest(_x3) {\n return _collectDataForAdRequest.apply(this, arguments);\n}\nfunction _collectDataForAdRequest() {\n _collectDataForAdRequest = (0, _asyncToGenerator2[\"default\"])( /*#__PURE__*/_regenerator[\"default\"].mark(function _callee2(context) {\n var vponTag, requestBody, requestHeader, uaData, i, clientHintData, topicsData, topicIds, topicTaxonomyVer, queryPermissionResult, pos;\n return _regenerator[\"default\"].wrap(function _callee2$(_context2) {\n while (1) switch (_context2.prev = _context2.next) {\n case 0:\n vponTag = context.vponTag;\n requestBody = null;\n requestHeader = null;\n if (!(navigator.userAgentData && typeof navigator.userAgentData.getHighEntropyValues === 'function')) {\n _context2.next = 16;\n break;\n }\n _context2.prev = 4;\n _context2.next = 7;\n return navigator.userAgentData.getHighEntropyValues(['architecture', 'bitness', 'model', 'platformVersion', 'uaFullVersion', 'fullVersionList']);\n case 7:\n uaData = _context2.sent;\n for (i in uaData) {\n if (typeof uaData[i] !== 'boolean' && !uaData[i].length) {\n delete uaData[i];\n }\n }\n clientHintData = convertToHeaderFormat(uaData);\n requestHeader = _objectSpread({}, clientHintData);\n _context2.next = 16;\n break;\n case 13:\n _context2.prev = 13;\n _context2.t0 = _context2[\"catch\"](4);\n console.log(_context2.t0);\n case 16:\n if (!('browsingTopics' in document && document.featurePolicy.allowsFeature('browsing-topics'))) {\n _context2.next = 27;\n break;\n }\n _context2.prev = 17;\n _context2.next = 20;\n return getTopics();\n case 20:\n topicsData = _context2.sent;\n if (topicsData.length) {\n topicIds = [];\n topicTaxonomyVer = \"0\";\n topicsData.forEach(function (item) {\n var topic = item.topic,\n taxonomyVersion = item.taxonomyVersion;\n if (topic) {\n topicIds.push(topic);\n }\n if (taxonomyVersion && parseInt(taxonomyVersion) > parseInt(topicTaxonomyVer)) {\n topicTaxonomyVer = taxonomyVersion;\n }\n });\n requestBody = _objectSpread({\n topicIds: topicIds,\n taxonomyVersion: topicTaxonomyVer\n }, requestBody);\n }\n _context2.next = 27;\n break;\n case 24:\n _context2.prev = 24;\n _context2.t1 = _context2[\"catch\"](17);\n console.log(_context2.t1);\n case 27:\n if (!(vponTag.getAttribute(systemVar.lat) && vponTag.getAttribute(systemVar.lon) && vponTag.getAttribute(systemVar.accurary))) {\n _context2.next = 31;\n break;\n }\n requestBody = _objectSpread({\n uLat: vponTag.getAttribute(systemVar.lat),\n uLon: vponTag.getAttribute(systemVar.lon),\n locAcc: vponTag.getAttribute(systemVar.accurary)\n }, requestBody);\n _context2.next = 46;\n break;\n case 31:\n if (!(navigator.geolocation && typeof navigator.geolocation.getCurrentPosition === 'function')) {\n _context2.next = 46;\n break;\n }\n _context2.prev = 32;\n _context2.next = 35;\n return queryWebApiPermission('geolocation');\n case 35:\n queryPermissionResult = _context2.sent;\n if (!(queryPermissionResult.state === 'granted')) {\n _context2.next = 41;\n break;\n }\n _context2.next = 39;\n return getGeolocation();\n case 39:\n pos = _context2.sent;\n requestBody = _objectSpread({\n uLat: pos.coords.latitude,\n uLon: pos.coords.longitude,\n locAcc: pos.coords.accuracy\n }, requestBody);\n case 41:\n _context2.next = 46;\n break;\n case 43:\n _context2.prev = 43;\n _context2.t2 = _context2[\"catch\"](32);\n console.log(_context2.t2);\n case 46:\n return _context2.abrupt(\"return\", {\n requestHeader: requestHeader,\n requestBody: requestBody\n });\n case 47:\n case \"end\":\n return _context2.stop();\n }\n }, _callee2, null, [[4, 13], [17, 24], [32, 43]]);\n }));\n return _collectDataForAdRequest.apply(this, arguments);\n}\nfunction getGeolocation() {\n return new Promise(function (resolve, reject) {\n var options = {\n enableHighAccuracy: true,\n timeout: 10000,\n maximumAge: 0\n };\n function success(pos) {\n resolve(pos);\n }\n function error(err) {\n console.warn(\"ERROR(\".concat(err.code, \"): \").concat(err.message));\n reject(err);\n }\n navigator.geolocation.getCurrentPosition(success, error, options);\n });\n}\nfunction getTopics() {\n return _getTopics.apply(this, arguments);\n}\nfunction _getTopics() {\n _getTopics = (0, _asyncToGenerator2[\"default\"])( /*#__PURE__*/_regenerator[\"default\"].mark(function _callee3() {\n var topics;\n return _regenerator[\"default\"].wrap(function _callee3$(_context3) {\n while (1) switch (_context3.prev = _context3.next) {\n case 0:\n _context3.prev = 0;\n _context3.next = 3;\n return document.browsingTopics();\n case 3:\n topics = _context3.sent;\n return _context3.abrupt(\"return\", topics);\n case 7:\n _context3.prev = 7;\n _context3.t0 = _context3[\"catch\"](0);\n return _context3.abrupt(\"return\", []);\n case 10:\n case \"end\":\n return _context3.stop();\n }\n }, _callee3, null, [[0, 7]]);\n }));\n return _getTopics.apply(this, arguments);\n}\nfunction convertToHeaderFormat(uaData) {\n // Define a function that will be used to serialize individual values into the correct format.\n var serialize = function serialize(v) {\n return v.length > 0 ? JSON.stringify(v) : \"\";\n };\n // Define a function that will be used to serialize an array of brand values into the correct format.\n var serializeBrandArray = function serializeBrandArray(a) {\n var result = \"\";\n a.forEach(function (i) {\n if (result.length > 0) {\n result += \", \";\n }\n result += \"\".concat(serialize(i.brand), \";v=\").concat(serialize(i.version));\n });\n return result;\n };\n var uaDataFormated = {};\n if (uaData.brands) {\n uaDataFormated[\"x-sec-ch-ua\"] = serializeBrandArray(uaData.brands);\n }\n if (uaData.fullVersionList) {\n uaDataFormated[\"x-sec-ch-ua-full-version-list\"] = serializeBrandArray(uaData.fullVersionList);\n }\n if (typeof uaData.mobile === 'boolean') {\n uaDataFormated[\"x-sec-ch-ua-mobile\"] = uaData.mobile ? \"?1\" : \"?0\";\n }\n if (uaData.model) {\n uaDataFormated[\"x-sec-ch-ua-model\"] = serialize(uaData.model);\n }\n if (uaData.platform) {\n uaDataFormated[\"x-sec-ch-ua-platform\"] = serialize(uaData.platform);\n }\n if (uaData.platformVersion) {\n uaDataFormated[\"x-sec-ch-ua-platform-version\"] = serialize(uaData.platformVersion);\n }\n\n // Create a new object containing UA-CH values in the same format as the UA-CH HTTP headers.\n return uaDataFormated;\n}\n\n/**\n * find Vpon iframe wrapper in top window\n * @returns {Boolean} result\n */\nvar findTopWindowVponIframeWrapper = function findTopWindowVponIframeWrapper(selector) {\n try {\n var topFrames = (0, _toConsumableArray2[\"default\"])(window.top.document.querySelectorAll('iframe'));\n if (topFrames.length === 0) {\n return null;\n }\n var topWindowVponIframeWrapper = topFrames.find(function (iframe, index) {\n var result = findInnerIframeTarget([iframe], selector);\n return result;\n });\n return topWindowVponIframeWrapper;\n } catch (err) {\n console.warn(err);\n return false;\n }\n};\nvar findInnerIframeTarget = function findInnerIframeTarget(iframes, selector) {\n var finalResult = false;\n var result = iframes.some(function (iframe) {\n return iframe.classList.contains(selector) || iframe.contentDocument && iframe.contentDocument.querySelector(selector) ? true : false;\n });\n if (result) {\n finalResult = true;\n } else {\n iframes.forEach(function (iframe) {\n var innerIframes = iframe.contentDocument && iframe.contentDocument.querySelectorAll('iframe') ? (0, _toConsumableArray2[\"default\"])(iframe.contentDocument.querySelectorAll('iframe')) : [];\n if (innerIframes.length !== 0) {\n var _result = innerIframes.some(function (iframe) {\n var result = findInnerIframeTarget([iframe], selector);\n return result;\n });\n if (_result) {\n finalResult = true;\n }\n }\n });\n }\n return finalResult;\n};\nfunction injectScript(path) {\n return new Promise(function (resolve, reject) {\n var script = document.createElement('script');\n script.type = 'text/javascript';\n script.src = path;\n script.addEventListener('load', function () {\n resolve();\n });\n document.head.appendChild(script);\n });\n}\nvar displayMultiAd = function displayMultiAd(element, iframeSrc, vponTag, responseMessage) {\n var urlSearch = new URL(iframeSrc).search;\n var urlSearchParams = new URLSearchParams(urlSearch);\n var clkid = urlSearchParams.get('subtype') === 'flrec' ? decodeURIComponent(urlSearchParams.get('clickUrl').split('d=')[1].split('&')[0]) : urlSearchParams.get('clkid');\n var isInTopframe = window.top === window;\n var topWindow = isInTopframe ? window : window.top;\n var isMultiAdHaveVideo = Boolean(element.body.querySelector(\"#iframe_xlrecv\") || element.body.querySelector(\"#iframe_1_3_isv\"));\n var iframeXLRECContent = isMultiAdHaveVideo ? element.body.querySelector(\"#iframe_xlrecv\").innerHTML : element.body.querySelector(\"#iframe_xlrec\").innerHTML;\n var iframe13ISContent = isMultiAdHaveVideo ? element.body.querySelector(\"#iframe_1_3_isv\").innerHTML : element.body.querySelector(\"#iframe_1_3_is\").innerHTML;\n var decoder = document.createElement('textarea');\n decoder.innerHTML = iframeXLRECContent;\n iframeXLRECContent = decoder.innerText;\n decoder.innerHTML = iframe13ISContent;\n iframe13ISContent = decoder.innerText;\n var iframe1 = vponTag.querySelectorAll('iframe')[0];\n var iframe1ClassName = \"Vpon__flrec__\".concat(new Date().getTime());\n iframe1.classList.add(iframe1ClassName);\n iframe1.style.opacity = 0;\n var iframe2Container = document.createElement('div');\n var iframe2 = document.createElement(\"iframe\");\n iframe2.style.opacity = 0;\n var iframe2Close = document.createElement('a');\n iframe2Close.id = 'iframe2__close';\n iframe2Close.classList.add('Vpon_floatBanner-close');\n iframe2Close.innerHTML = '';\n var VponVideoContainer = null;\n isMultiPartAd = true;\n if (isMultiAdHaveVideo) {\n VponVideoContainer = document.createElement(\"div\");\n VponVideoContainer.id = \"videoContainer\";\n VponVideoContainer.style.position = 'relative';\n VponVideoContainer.style.opacity = 0;\n }\n iframe2Container.id = \"Vpon_floatBanner\";\n iframe2Container.classList += \"Vpon_floatBanner\";\n iframe2Container.appendChild(iframe2);\n var style = document.createElement(\"style\");\n var head = window.top.document.head || window.top.document.querySelector(\"head\")[0];\n head.appendChild(style);\n style.type = \"text/css\";\n var css = \"\\n .Vpon_floatBanner {\\n position: fixed;\\n top: 0;\\n left: 50%;\\n z-index: 2147483647;\\n width: 100%;\\n max-width: 640px;\\n height: 31.25vw;\\n max-height: 200px;\\n transform: translate(-50%, -100%);\\n transition: all .4s ease;\\n }\\n .Vpon_floatBanner--animation {\\n transform: translate(-50%, 0);\\n }\\n .Vpon_floatBanner iframe {\\n width: 100%;\\n height: 100%;\\n border: 0;\\n }\\n .Vpon_floatBanner-close {\\n position: absolute;\\n top: 0;\\n right: 0;\\n z-index: 9999999;\\n display: block;\\n width: 30px;\\n height: 30px;\\n }\\n .Vpon_floatBanner-close img {\\n max-width: 100%;\\n border: none;\\n vertical-align: top;\\n user-select: none;\\n user-drag: none;\\n -webkit-user-select: none;\\n -webkit-user-drag: none;\\n }\\n \";\n var iframe1Css = \"\\n \\n \";\n var iframe2Css = \"\\n \\n \";\n style.appendChild(document.createTextNode(css));\n topWindow.document.body.appendChild(iframe2Container);\n var reqId = responseMessage.reqId;\n adChoicePanel(iframe1.parentNode, vponTag, {\n adType: 'banner',\n reqId: reqId\n }, function () {\n var iframe2Container = document.querySelector('#Vpon_floatBanner');\n if (iframe2Container) {\n iframe2Container.remove();\n topWindow.removeEventListener(\"scroll\", handleSubTypeIframeSwitch, false);\n }\n if (iframe1.contentWindow.video && typeof iframe1.contentWindow.video.destroy === 'function') {\n iframe1.contentWindow.video.destroy();\n }\n });\n VponLogoPanel(iframe1.parentNode, vponTag, 'banner');\n VponLogoPanel(iframe2Container, vponTag, 'banner');\n var replaceAssets = function replaceAssets(content) {\n return content.replace(/.\\/assets/g, \"\".concat(new URL(iframeSrc).origin).concat(new URL(iframeSrc).pathname, \"assets\"));\n };\n iframeXLRECContent = replaceAssets(iframeXLRECContent);\n iframe13ISContent = replaceAssets(iframe13ISContent);\n var isIframe1Ready = false;\n var isIframe2Ready = false;\n var video = null;\n var isInCut2 = null;\n window.addEventListener('message', function (e) {\n if (e.data.event === 'iframe1Ready') {\n isIframe1Ready = true;\n iframe1Init();\n }\n });\n topWindow.addEventListener('message', function (e) {\n if (e.data.event === 'iframe2Ready') {\n isIframe2Ready = true;\n iframe2Init();\n }\n });\n var iframe1Init = function iframe1Init() {\n initialVideo(function () {\n initialFlrecEnv();\n setClickEvent(iframe1.contentDocument.querySelector(\"#vponAdWrapper\"), 'cut1');\n topWindow.addEventListener(\"scroll\", handleSubTypeIframeSwitch, false);\n if (isMultiAdHaveVideo) {\n VponVideoContainer.style.opacity = 1;\n topWindow.document.addEventListener(\"visibilitychange\", function () {\n if (document.visibilityState === \"hidden\") {\n video.pause();\n } else {\n topWindow.dispatchEvent(new CustomEvent(\"scroll\"));\n }\n });\n }\n topWindow.dispatchEvent(new CustomEvent(\"scroll\"));\n iframe1.style.opacity = 1;\n checkMultiAdIsReady();\n });\n };\n var iframe2Init = function iframe2Init() {\n setClickEvent(iframe2.contentDocument.querySelector(\"#vponAdWrapper\"), 'cut2');\n iframe2Container.appendChild(iframe2Close);\n iframe2.style.opacity = 1;\n if (isMultiAdHaveVideo) {\n try {\n if (iframe2.contentWindow.video.destroy) {\n iframe2.contentWindow.video.destroy();\n }\n } catch (err) {}\n var videoContainer2 = iframe2.contentDocument.querySelector(\"#videoDivTag\");\n videoContainer2.innerHTML = '';\n }\n checkMultiAdIsReady();\n };\n var checkMultiAdIsReady = function checkMultiAdIsReady() {\n if (isIframe1Ready && isIframe2Ready) {\n topWindow.dispatchEvent(new CustomEvent(\"scroll\"));\n }\n };\n var initialVideo = function initialVideo(callback) {\n if (!isMultiAdHaveVideo) {\n callback();\n return;\n }\n try {\n if (iframe1.contentWindow.video.destroy) {\n iframe1.contentWindow.video.destroy();\n }\n } catch (err) {\n console.warn(err);\n }\n var videoContainer1 = iframe1.contentDocument.querySelector(\"#videoDivTag\");\n videoContainer1.innerHTML = '';\n topWindow.document.body.appendChild(VponVideoContainer);\n var videoConfig = iframe1.contentWindow.videoConfig;\n videoConfig.track = videoConfig.track || {};\n videoConfig.track.e = clkid;\n if (urlSearchParams.get('prog')) {\n videoConfig.track.progress = urlSearchParams.get('prog');\n }\n Object.keys(videoConfig).forEach(function (key) {\n if (typeof videoConfig[key] === \"string\" && videoConfig[key].indexOf(\"./assets\") !== -1) {\n videoConfig[key] = replaceAssets(videoConfig[key]);\n }\n });\n var videoContainerSelector = topWindow.document.querySelector('#videoContainer');\n video = new VponVideo(videoContainerSelector, videoConfig);\n video.create();\n video.onCanBePlay(callback);\n };\n var initialFlrecEnv = function initialFlrecEnv() {\n var VPADN_CREATIVE = window.VPADN_CREATIVE || {};\n var paramsString = new URL(iframeSrc).search;\n var searchParams = new URLSearchParams(paramsString);\n VPADN_CREATIVE.isDemo = searchParams.get(\"isDemo\");\n VPADN_CREATIVE.clickTag = searchParams.get(\"clickTag\");\n VPADN_CREATIVE.lnk = VPADN_CREATIVE.clickTag ? null : searchParams.get(\"lnk\");\n VPADN_CREATIVE.clkid_unencoded = VPADN_CREATIVE.isDemo || VPADN_CREATIVE.clickTag ? null : clkid;\n VPADN_CREATIVE.prog = VPADN_CREATIVE.isDemo || VPADN_CREATIVE.clickTag ? null : searchParams.get(\"prog\");\n\n // Serve inside Vpon platform\n if (VPADN_CREATIVE.lnk) {\n VPADN_CREATIVE.clickUrl = \"\".concat(encodeURIComponent(VPADN_CREATIVE.lnk));\n if (VPADN_CREATIVE.clkid_unencoded) {\n VPADN_CREATIVE.clickEndPoint = \"https://tw-api.vpadn.com/api/webviewAdClick/\";\n VPADN_CREATIVE.clickUrl = \"\".concat(VPADN_CREATIVE.clickEndPoint, \"?d=\").concat(encodeURIComponent(VPADN_CREATIVE.clkid_unencoded), \"&ls=\").concat(encodeURIComponent(VPADN_CREATIVE.lnk));\n }\n } else {\n VPADN_CREATIVE.clickUrl = null;\n }\n VPADN_CREATIVE.handleClick = function (e, url, beforeClick) {\n if (!VPADN_CREATIVE.clickUrl) {\n return;\n }\n if (typeof beforeClick === \"function\") {\n beforeClick();\n }\n support.click(e);\n support.open(url);\n };\n console.log(VPADN_CREATIVE);\n window.VPADN_CREATIVE = VPADN_CREATIVE;\n };\n var setClickEvent = function setClickEvent(target, state) {\n target.addEventListener('click', function (event) {\n adCurrentState = state;\n var creativeRect = target.getBoundingClientRect();\n var clickPositionObj = {\n clickPositionX: ((event.clientX - creativeRect.x) / creativeRect.width * 100).toFixed(2),\n clickPositionY: ((event.clientY - creativeRect.y) / creativeRect.height * 100).toFixed(2)\n };\n handleOpenBrowser({\n clickPosition: clickPositionObj,\n landing: VPADN_CREATIVE.clickUrl\n }, false, 'banner');\n });\n };\n var isIframe2Exist = true;\n var vponTagOffsetTarget = iframe1;\n if (!isInTopframe) {\n var topWindowVponIframeWrapper = findTopWindowVponIframeWrapper(iframe1ClassName);\n if (topWindowVponIframeWrapper) {\n vponTagOffsetTarget = topWindowVponIframeWrapper;\n }\n }\n var iframe2TransitionEnd = function iframe2TransitionEnd() {\n var videoContainer1 = iframe1.contentDocument.querySelector(\"#videoDivTag\");\n var videoCurrentTime = video.getCurrentTime();\n videoContainer1.appendChild(VponVideoContainer);\n video.playAtPosition(videoCurrentTime);\n };\n var handleSubTypeIframeSwitch = function handleSubTypeIframeSwitch() {\n var vponTagOffsetTop = vponTagOffsetTarget.getBoundingClientRect().top;\n var switchOffset = 0;\n if (isMultiAdHaveVideo) {\n if (!iframe1.contentDocument) {\n return;\n }\n switchOffset = iframe1.contentDocument.querySelector(\"#videoDivTag\").clientHeight / 2;\n if (isIframe2Exist ? topWindow.innerHeight - vponTagOffsetTop >= switchOffset : topWindow.innerHeight - vponTagOffsetTop >= switchOffset && vponTagOffsetTop >= -1 * switchOffset) {\n video.play();\n } else {\n video.pause();\n }\n }\n if (!isIframe2Exist || !isIframe2Ready) {\n return;\n }\n if (isMultiAdHaveVideo) {\n var videoContainer1 = iframe1.contentDocument.querySelector(\"#videoDivTag\");\n var videoContainer2 = iframe2.contentDocument.querySelector(\"#videoDivTag\");\n var videoCurrentTime = video.getCurrentTime();\n if (VponVideoContainer.style.display !== 'block') {\n VponVideoContainer.style.display = 'block';\n }\n if (vponTagOffsetTop > -1 * switchOffset || !isIframe2Exist) {\n if (isInCut2 === false) {\n return;\n } else {\n videoContainer1.innerHTML = \"\";\n video.changeStyle({\n mute: {\n position: \"rightBottom\"\n },\n countdown: {\n display: \"block\"\n }\n });\n videoContainer1.appendChild(VponVideoContainer);\n video.playAtPosition(videoCurrentTime);\n iframe2Close.style.opacity = 0;\n iframe2Close.style.transition = 'none';\n fadeForFlrec(iframe2Close, 'out', 0, handleCloseButtonClick);\n iframe2Container.classList.remove(\"Vpon_floatBanner--animation\");\n iframe2.removeEventListener('transitionend', iframe2TransitionEnd);\n iframe2.addEventListener('transitionend', iframe2TransitionEnd);\n iframe2Close.removeEventListener(\"click\", handleCloseButtonClick);\n isInCut2 = false;\n }\n } else {\n if (isInCut2) {\n return;\n } else {\n iframe2.removeEventListener('transitionend', iframe2TransitionEnd);\n videoContainer2.innerHTML = \"\";\n videoContainer2.appendChild(VponVideoContainer);\n video.playAtPosition(videoCurrentTime);\n video.changeStyle({\n mute: {\n position: \"leftBottom\"\n },\n countdown: {\n display: \"none\"\n }\n });\n iframe2Container.classList.add(\"Vpon_floatBanner--animation\");\n fadeForFlrec(iframe2Close, 'in', 3, function () {\n iframe2Close.removeEventListener(\"click\", handleCloseButtonClick);\n iframe2Close.addEventListener(\"click\", handleCloseButtonClick);\n });\n if (!isFlrecTrackingSended) {\n vpon_ad_send_impression(responseMessage, 100);\n vpon_ad_send_3rd_party_tracking(responseMessage, vponTag);\n isFlrecTrackingSended = true;\n }\n isInCut2 = true;\n }\n }\n } else {\n if (vponTagOffsetTop <= 0) {\n if (isInCut2) {\n return;\n } else {\n iframe2Container.classList.add(\"Vpon_floatBanner--animation\");\n fadeForFlrec(iframe2Close, 'in', 3, function () {\n iframe2Close.removeEventListener(\"click\", handleCloseButtonClick);\n iframe2Close.addEventListener(\"click\", handleCloseButtonClick);\n });\n if (!isFlrecTrackingSended) {\n vpon_ad_send_impression(responseMessage, 100);\n vpon_ad_send_3rd_party_tracking(responseMessage, vponTag);\n isFlrecTrackingSended = true;\n }\n isInCut2 = true;\n }\n } else {\n if (!isInCut2) {\n return;\n } else {\n iframe2Close.style.opacity = 0;\n iframe2Close.style.transition = 'none';\n fadeForFlrec(iframe2Close, 'out', 0, handleCloseButtonClick);\n iframe2Container.classList.remove(\"Vpon_floatBanner--animation\");\n iframe2Close.removeEventListener(\"click\", handleCloseButtonClick);\n isInCut2 = false;\n }\n }\n }\n };\n var handleCloseButtonClick = function handleCloseButtonClick(e) {\n if (iframe2Close.style.opacity !== \"1\") return;\n var videoContainer1 = isMultiAdHaveVideo ? iframe1.contentDocument.querySelector(\"#videoDivTag\") : null;\n var videoCurrentTime = isMultiAdHaveVideo ? video.getCurrentTime() : null;\n if (videoContainer1 && !videoContainer1.querySelector(\"video\")) {\n videoContainer1.innerHTML = \"\";\n videoContainer1.appendChild(VponVideoContainer);\n video.playAtPosition(videoCurrentTime);\n video.changeStyle({\n mute: {\n position: \"rightBottom\"\n },\n countdown: {\n display: \"block\"\n }\n });\n }\n isIframe2Exist = false;\n iframe2Container.remove();\n topWindow.removeEventListener(\"scroll\", handleSubTypeIframeSwitch, false);\n topWindow.dispatchEvent(new CustomEvent(\"scroll\"));\n };\n iframe1.contentWindow.document.open();\n iframe1.contentWindow.document.write(iframeXLRECContent.split('')[0] + iframe1Css + '' + iframeXLRECContent.split('')[1]);\n iframe1.contentWindow.document.close();\n iframe2.contentWindow.document.open();\n iframe2.contentWindow.document.write(iframe13ISContent.split('')[0] + iframe2Css + '' + iframe13ISContent.split('')[1]);\n iframe2.contentWindow.document.close();\n};\nvar ajax = function ajax(url, callback) {\n var callbackfunc = 'vpon' + Math.random().toString(10).substring(2, 15);\n window[callbackfunc] = callback;\n addScript(url + '&callbackfunc=' + callbackfunc);\n};\nvar addScript = function addScript(url) {\n var script = document.createElement('script');\n script.src = url;\n document.body.appendChild(script);\n};\nvar addScriptUnderVponTag = function addScriptUnderVponTag(url, vponTag) {\n console.log('[web-sdk]addScriptUnderVponTag: poc to iAS-SDK viewability issues');\n var script = document.createElement('script');\n script.src = url;\n script.id = '3ptcn';\n vponTag.prepend(script);\n};\nvar handleMutationObserver = function handleMutationObserver(node, options, vponTag, adType) {\n var observer = new MutationObserver(function (mutations, observer) {\n mutations.forEach(function (mutation) {\n VponLogoPanel(node, vponTag, adType);\n observer.disconnect();\n });\n });\n observer.observe(node, options);\n};\nvar extrcatParamsFromVponTag = function extrcatParamsFromVponTag(vponTag) {\n var reqAdParameters = getReqAdParameters(vponTag);\n var debugMode = vponTag.getAttribute(systemVar.debug) === 'true' || vponTag.getAttribute(systemVar.debug) === '1';\n var adRequestCallBack = reqAdParameters.adRequestCallBack;\n var openTab = vponTag.getAttribute(systemVar.openTab);\n openTab = openTab ? openTab == 'true' ? true : false : true;\n return {\n reqAdParameters: reqAdParameters,\n debugMode: debugMode,\n adRequestCallBack: adRequestCallBack,\n openTab: openTab\n };\n};\nvar handleReqCallbackToPubs = function handleReqCallbackToPubs(adRequestCallBack, statusCode, debugMode) {\n if (adRequestCallBack != null) {\n try {\n var callbackCode = -1;\n if (statusCode == 0) {\n // return code 0 when adn server return code 0, others return code -1.\n callbackCode = 0;\n }\n new Function(adRequestCallBack + '(' + callbackCode + ')')();\n } catch (err) {\n if (debugMode) {\n console.log(err);\n }\n }\n }\n};\nvar printDebugToConsole = function printDebugToConsole(jsonObj) {\n for (var key in jsonObj) {\n if (jsonObj.hasOwnProperty(key)) {\n console.log(key + ' -> ' + jsonObj[key]);\n }\n }\n console.log(' ---------------------------------------------------------------------------');\n};\nvar reqCallback = function reqCallback(vponTag, iframeNum, responseJsonObj) {\n var _extrcatParamsFromVpo = extrcatParamsFromVponTag(vponTag),\n reqAdParameters = _extrcatParamsFromVpo.reqAdParameters,\n debugMode = _extrcatParamsFromVpo.debugMode,\n adRequestCallBack = _extrcatParamsFromVpo.adRequestCallBack,\n openTab = _extrcatParamsFromVpo.openTab;\n\n // var debugMode = iframeInfos[systemVar.reqAdFrameId].debugMode\n if (debugMode) {\n printDebugToConsole(responseJsonObj);\n }\n var statusCode = responseJsonObj['Vpadn-Status-Code'];\n handleReqCallbackToPubs(adRequestCallBack, statusCode, debugMode);\n if (statusCode == 0) {\n var adURL = responseJsonObj['Location'];\n //adURL = adURL.replace(\"//m.vpon.com/\", \"//a2.vpon.com/img/test/mi/Hsiang/websdk-staging-test/\");\n var impURL = responseJsonObj['Vpadn-Imp'];\n var clickURL = responseJsonObj['Vpadn-Clk'];\n var vpadnSeq = responseJsonObj['Vpadn-Seq'];\n var vpadnSid = responseJsonObj['Vpadn-Sid'];\n var uid = responseJsonObj['Vpadn-Guid'];\n var aid = responseJsonObj['Vpadn-Adid'];\n var bid = reqAdParameters.bid;\n var reqId = responseJsonObj['reqId'];\n var adType = '';\n if (adURL.indexOf('t=ban_img') > 0) {\n adURL = adURL.replace('vpadn-tpl.html', 'vpadn-tpl-ban_w-cs.html');\n } else if (adURL.indexOf('t=ban_vid') > 0) {\n adURL = adURL.replace('vpadn-tpl.html', 'vpadn-tpl-ban-vid_w.html');\n }\n adType = 'banner';\n adURL = adURL + '&openTab=' + openTab + '&vpadnSeq=' + vpadnSeq + '&vpadnSid=' + vpadnSid + '&uid=' + uid + '&aid=' + aid + '&bid=' + bid + '&clickUrl=' + encodeURIComponent(replaceAPIMacro(clickURL));\n var main_domain = parseUri(window.location).host;\n // set cookie\n //document.cookie = 'Vpadn-Guid=' + x['Vpadn-Guid'] + '; max-age=' + 63072000 + '; domain=' + main_domain + '; path=/'\n document.cookie = 'Vpadn-Sid=' + responseJsonObj['Vpadn-Sid'] + '; max-age=' + 1800 + '; domain=' + main_domain + '; path=/; SameSite=None; Secure';\n document.cookie = 'Vpadn-Seq=' + responseJsonObj['Vpadn-Seq'] + '; max-age=' + 1800 + '; domain=' + main_domain + '; path=/; SameSite=None; Secure';\n var reqAdFrameId = '';\n vponTag.querySelectorAll('iframe').forEach(function (iframe) {\n if (iframe.id && endsWith(iframe.id, iframeNum)) {\n reqAdFrameId = iframe.id;\n }\n });\n var responseMessage = {\n adURL: adURL,\n impURL: impURL,\n thirdPartyTagString: getUrlParameterByName('3_p_t_c', adURL),\n multipleThirdPartyTrackings: getUrlParameterByName('3_p_t_c_n', adURL),\n thr_track_array: getUrlParameterByName('thr_track_array', adURL),\n reqId: reqId\n };\n var locationURL = responseJsonObj.Location;\n var locationUrlSearch = new URL(locationURL).search;\n var locationUrlSearchParams = new URLSearchParams(locationUrlSearch);\n if (locationUrlSearchParams.get('subtype') === 'ulrec' || locationUrlSearchParams.get('t') === 'ulrec') {\n handleUlrecAd({\n reqAdFrameId: reqAdFrameId,\n vponTag: vponTag,\n responseMessage: responseMessage,\n adType: adType\n });\n return;\n }\n var options = {\n 'childList': true,\n 'attributes': true\n };\n handleMutationObserver(document.getElementById(reqAdFrameId).parentNode, options, vponTag, adType);\n if (locationUrlSearchParams.get('subtype') === 'flrec' || locationUrlSearchParams.get('t') === 'flrec') {\n var req = new XMLHttpRequest();\n req.open('GET', locationURL);\n req.send();\n req.onload = function (e) {\n Promise.all([injectScript('https://img-cs.vpadn.com/js/cs-vpon-video-sdk.min.js'), injectScript('https://m.vpon.com/sdk/vpon-support.js')]).then(function (response) {\n var parser = new DOMParser();\n var element = parser.parseFromString(e.target.response, \"text/html\");\n displayMultiAd(element, adURL, vponTag, responseMessage);\n vpon_ad_loaded(reqAdFrameId, adType, vponTag, responseMessage);\n coverCheckTimer(reqAdFrameId, vponTag, responseMessage, 'flrec');\n })[\"catch\"](function (error) {\n console.warn(error);\n });\n };\n return;\n }\n displayAd(reqAdFrameId, vponTag, responseMessage, adType);\n }\n};\nvar handleUlrecAd = function handleUlrecAd(config) {\n var reqAdFrameId = config.reqAdFrameId,\n vponTag = config.vponTag,\n responseMessage = config.responseMessage,\n adType = config.adType;\n var adURL = responseMessage.adURL,\n reqId = responseMessage.reqId;\n var adContainer = document.getElementById(\"\".concat(reqAdFrameId, \"_contain\"));\n var adIframe = document.getElementById(\"\".concat(reqAdFrameId));\n var networkId = vponTag.getAttribute(systemVar.networkId);\n if (networkId === \"skm\") {\n if (vponTag.offsetWidth === 0) {\n var childElements = vponTag.parentElement.children;\n var maxWidth = Array.from(childElements).reduce(function (max, child) {\n return Math.max(max, child.offsetWidth);\n }, 0);\n adIframe.style.width = maxWidth > 0 ? \"\".concat(maxWidth, \"px\") : '100%';\n } else {\n adIframe.style.width = \"\".concat(vponTag.offsetWidth, \"px\");\n }\n adIframe.style.removeProperty('height');\n adIframe.style.aspectRatio = '320/480';\n adIframe.style.margin = 'auto';\n adContainer.style.width = '100%';\n adContainer.style.margin = '0px';\n adContainer.style.removeProperty('height');\n adContainer.style.aspectRatio = '320/480';\n }\n if (isInGAM()) {\n var GAMContainer = (0, _toConsumableArray2[\"default\"])(window.parent.document.querySelectorAll('iframe[id^=\"google_ads_iframe\"]')).filter(function (iframe) {\n return iframe.contentDocument === document;\n })[0];\n GAMContainer.insertAdjacentElement('afterend', adContainer);\n GAMContainer.style.display = 'none';\n }\n var VPADN_WEBSDK_ENV = VPADN_WEBSDK_ENV || {};\n var vponTagAttrs = vponTag.getAttributeNames().reduce(function (acc, name) {\n return _objectSpread(_objectSpread({}, acc), {}, (0, _defineProperty2[\"default\"])({}, name, vponTag.getAttribute(name)));\n }, {});\n VPADN_WEBSDK_ENV.vponTagAttrs = vponTagAttrs;\n var useCustomCloseCallBack = vponTag.getAttribute(systemVar.useCustomCloseCallBack) || null;\n var ulrecWindow = isInGAM() ? window.parent : window;\n ulrecWindow.addEventListener('message', function (e) {\n var _e$data = e.data,\n event = _e$data.event,\n data = _e$data.data;\n if (event === 'getWebSDKEnv') {\n e.source.postMessage({\n event: 'setWebSDKEnv',\n data: VPADN_WEBSDK_ENV\n }, '*');\n }\n if (event === 'openBrowser') {\n handleOpenBrowser(data, useCustomCloseCallBack, adType);\n }\n });\n handleUlrecStructure(networkId === 'skm');\n adIframe.setAttribute('src', adURL);\n adIframe.onload = ulrecAdLoaded;\n function handleUlrecStructure() {\n var isFullWidth = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n var ulrecOuterLayout = document.createElement(\"div\");\n Object.assign(ulrecOuterLayout.style, {\n position: \"absolute\",\n top: 0,\n left: 0,\n width: \"100%\",\n height: \"100%\",\n \"clip-path\": \"inset(0%)\"\n });\n var ulrecInnerLayout = document.createElement(\"div\");\n Object.assign(ulrecInnerLayout.style, {\n position: \"fixed\",\n top: 0,\n left: 0,\n width: \"100%\",\n height: \"100%\",\n display: \"flex\",\n \"align-items\": \"center\",\n \"justify-content\": \"center\"\n });\n var ulrecBox = document.createElement(\"div\");\n Object.assign(ulrecBox.style, {\n position: \"relative\",\n width: isFullWidth ? \"100%\" : \"auto\"\n });\n ulrecOuterLayout.appendChild(ulrecInnerLayout);\n ulrecInnerLayout.appendChild(ulrecBox);\n adContainer.appendChild(ulrecOuterLayout);\n ulrecBox.appendChild(adIframe);\n }\n function ulrecAdLoaded() {\n handleInternalBridge(this, {\n frameId: reqAdFrameId,\n vponTag: vponTag,\n responseMessage: responseMessage,\n adType: adType,\n subtype: 'ulrec'\n });\n handleImpressionSafeLock({\n frameId: reqAdFrameId,\n vponTag: vponTag,\n responseMessage: responseMessage,\n adType: adType,\n subtype: 'ulrec'\n });\n VponLogoPanel(adIframe.parentNode, vponTag, adType);\n adChoicePanel(adIframe.parentNode, vponTag, {\n adType: adType,\n reqId: reqId\n });\n }\n};\nfunction ulrecImpressionObserver(config) {\n var frameId = config.frameId,\n responseMessage = config.responseMessage,\n vponTag = config.vponTag;\n var adIframe = isInGAM() ? window.parent.document.getElementById(frameId) : document.getElementById(frameId);\n window.top.addEventListener('scroll', impressionScrollDetector);\n function impressionScrollDetector() {\n var _calculateViewRate = calculateViewRate(adIframe),\n viewPercent = _calculateViewRate.viewPercent;\n if (viewPercent < 0.9) {\n return;\n }\n adIframe && adIframe.contentWindow.postMessage({\n isImpression: true,\n viewPercent: viewPercent\n }, '*');\n vpon_ad_send_impression(responseMessage, viewPercent);\n vpon_ad_send_3rd_party_tracking(responseMessage, vponTag);\n window.top.removeEventListener('scroll', impressionScrollDetector);\n }\n}\nvar debugForIcook = function debugForIcook(groupId) {\n if (navigator && typeof navigator.sendBeacon === 'function') {\n navigator.sendBeacon(\"https://log.vpadn.com?ev=adRequest&id=\".concat(groupId));\n } else {\n var img = document.createElement('img');\n img.src = \"https://log.vpadn.com?ev=adRequest&id=\".concat(groupId);\n img.width = 0;\n img.height = 0;\n document.body.appendChild(img);\n }\n debugForIcookTimer(groupId);\n};\nvar debugForIcookTimer = function debugForIcookTimer(groupId) {\n var timer = setInterval(function () {\n try {\n var customCloseBtn = window.parent.document.querySelector('.interstitial-close-button');\n if (customCloseBtn) {\n customCloseBtn.addEventListener('click', function () {\n if (navigator && typeof navigator.sendBeacon === 'function') {\n navigator.sendBeacon(\"https://log.vpadn.com?ev=customCloseBtnClick&id=\".concat(groupId));\n } else {\n var img = document.createElement('img');\n img.src = \"https://log.vpadn.com?ev=customCloseBtnClick&id=\".concat(groupId);\n img.width = 0;\n img.height = 0;\n document.body.appendChild(img);\n }\n });\n clearInterval(timer);\n }\n } catch (err) {}\n }, 100);\n};\nvar reqCallbackInt = function reqCallbackInt(vponTag, iframeNum, responseJsonObj) {\n var _extrcatParamsFromVpo2 = extrcatParamsFromVponTag(vponTag),\n reqAdParameters = _extrcatParamsFromVpo2.reqAdParameters,\n debugMode = _extrcatParamsFromVpo2.debugMode,\n adRequestCallBack = _extrcatParamsFromVpo2.adRequestCallBack,\n openTab = _extrcatParamsFromVpo2.openTab;\n if (debugMode) {\n printDebugToConsole(responseJsonObj);\n }\n var statusCode = responseJsonObj['Vpadn-Status-Code'];\n handleReqCallbackToPubs(adRequestCallBack, statusCode, debugMode);\n if (statusCode == 0) {\n var adURL = responseJsonObj['Location'];\n //adURL = adURL.replace(\"//m.vpon.com/\", \"//a2.vpon.com/img/test/mi/Hsiang/websdk-staging-test/\");\n var impURL = responseJsonObj['Vpadn-Imp'];\n var clickURL = responseJsonObj['Vpadn-Clk'];\n var vpadnSeq = responseJsonObj['Vpadn-Seq'];\n var vpadnSid = responseJsonObj['Vpadn-Sid'];\n var uid = responseJsonObj['Vpadn-Guid'];\n var aid = responseJsonObj['Vpadn-Adid'];\n var bid = reqAdParameters.bid;\n var reqId = responseJsonObj['reqId'];\n var adType = 'int';\n if (adURL.indexOf('t=int_fit') > 0) {\n adURL = adURL.replace('vpadn-tpl.html', 'vpadn-tpl-int_w-cs.html');\n adType = 'int_fit';\n } else if (adURL.indexOf('t=int_vid') > 0) {\n adURL = adURL.replace('vpadn-tpl.html', 'vpadn-tpl-int-vid_w-cs.html');\n adType = 'int_vid';\n } else if (adURL.indexOf('t=int_liquid') > 0) {\n adURL = adURL.replace('vpadn-tpl.html', 'vpadn-tpl-int-liquid_w.html');\n adURL += '&width=' + top.window.innerWidth + '&height=' + top.window.innerHeight;\n adType = 'int_liquid';\n } else if (adURL.indexOf('t=int_30h') > 0) {\n adURL = adURL.replace('vpadn-tpl.html', 'vpadn-tpl-int-30h_w.html');\n adType = 'int_30h';\n }\n adURL = adURL + '&openTab=' + openTab + '&vpadnSeq=' + vpadnSeq + '&vpadnSid=' + vpadnSid + '&uid=' + uid + '&aid=' + aid + '&bid=' + bid + '&clickUrl=' + encodeURIComponent(replaceAPIMacro(clickURL));\n var main_domain = parseUri(window.location).host;\n // set cookie\n //document.cookie = 'Vpadn-Guid=' + x['Vpadn-Guid'] + '; max-age=' + 63072000 + '; domain=' + main_domain + '; path=/'\n document.cookie = 'Vpadn-Sid=' + responseJsonObj['Vpadn-Sid'] + '; max-age=' + 1800 + '; domain=' + main_domain + '; path=/; SameSite=None; Secure';\n document.cookie = 'Vpadn-Seq=' + responseJsonObj['Vpadn-Seq'] + '; max-age=' + 1800 + '; domain=' + main_domain + '; path=/; SameSite=None; Secure';\n var reqAdFrameId = vponTag.querySelectorAll('iframe')[0].id;\n var responseMessage = {\n adURL: adURL,\n impURL: impURL,\n thirdPartyTagString: getUrlParameterByName('3_p_t_c', adURL),\n multipleThirdPartyTrackings: getUrlParameterByName('3_p_t_c_n', adURL),\n thr_track_array: getUrlParameterByName('thr_track_array', adURL),\n reqId: reqId\n };\n var options = {\n 'childList': true,\n 'attributes': true\n };\n handleMutationObserver(document.getElementById(reqAdFrameId).parentNode, options, vponTag, adType);\n displayAd(reqAdFrameId, vponTag, responseMessage, adType);\n }\n};\nvar reqCallbackNa = function reqCallbackNa(vponTag, responseJsonObj) {\n var _extrcatParamsFromVpo3 = extrcatParamsFromVponTag(vponTag),\n reqAdParameters = _extrcatParamsFromVpo3.reqAdParameters,\n debugMode = _extrcatParamsFromVpo3.debugMode,\n adRequestCallBack = _extrcatParamsFromVpo3.adRequestCallBack,\n openTab = _extrcatParamsFromVpo3.openTab;\n if (debugMode) {\n printDebugToConsole(responseJsonObj);\n }\n var statusCode = responseJsonObj['Vpadn-Status-Code'];\n handleReqCallbackToPubs(adRequestCallBack, statusCode, debugMode);\n if (statusCode == 0) {\n // Include vpadn-sdk-w-util-v1.js to fulfill some utilizations : vpsdk.click, vpsdk.openBrowser, and so on.\n addScript(\"https://m.vpadn.com/sdk/vpadn-sdk-w-util-v1.js\");\n // addScript(\"//a2.vpon.com/img/test/mi/Hsiang/sdk-test/vpadn-sdk-w-util-v1.js\");\n var adURL = responseJsonObj['Location'];\n var nativeObj = parseParamsFromUrl(adURL);\n nativeObj.ad_label = nativeObj.ad_label ? nativeObj.ad_label : systemVar.nativeAdLabel;\n nativeObj.impURL = responseJsonObj['Vpadn-Imp'];\n nativeObj.clickURL = replaceAPIMacro(responseJsonObj['Vpadn-Clk']);\n nativeObj.clickURL = replaceAPIMacro(nativeObj.clickURL);\n if (undefined != nativeObj[\"3_p_t_c\"] && '' != nativeObj[\"3_p_t_c\"]) {\n nativeObj.thirdPartyTagString = nativeObj[\"3_p_t_c\"];\n }\n // In order to pass the parameters 'openTab' & 'clickAction' to vpadn-sdk-w-util-v1.js in web native ad, we just append these parameters in the landing page url currently.\n // In vpadn-sdk-w-util-v1.js, function openBrowser() will recover the landing page url after getting those parameters by deleting them all.\n nativeObj.lnk += \"&vponOpenTab=\".concat(openTab, \"&vponClickAction=\").concat(nativeObj.a);\n nativeObj.reqId = responseJsonObj['reqId'];\n var main_domain = parseUri(window.location).host;\n // Set cookie\n //document.cookie = 'Vpadn-Guid=' + x['Vpadn-Guid'] + '; max-age=' + 63072000 + '; domain=' + main_domain + '; path=/'\n document.cookie = 'Vpadn-Sid=' + responseJsonObj['Vpadn-Sid'] + '; max-age=' + 1800 + '; domain=' + main_domain + '; path=/; SameSite=None; Secure';\n document.cookie = 'Vpadn-Seq=' + responseJsonObj['Vpadn-Seq'] + '; max-age=' + 1800 + '; domain=' + main_domain + '; path=/; SameSite=None; Secure';\n displayNativeAd(vponTag, nativeObj);\n registerNaClickAction(vponTag, nativeObj);\n }\n};\nvar parseUri = function parseUri(str) {\n var o = parseUriOptions,\n m = o.parser[o.strictMode ? 'strict' : 'loose'].exec(str),\n uri = {},\n i = 14;\n while (i--) uri[o.key[i]] = m[i] || '';\n uri[o.q.name] = {};\n uri[o.key[12]].replace(o.q.parser, function ($0, $1, $2) {\n if ($1) uri[o.q.name][$1] = $2;\n });\n return uri;\n};\nvar impCallback = function impCallback() {};\nvar isFlrecTrackingSended = false;\nvar coverCheckTimer = function () {\n var timeId = {};\n // let milliseconds = 100\n // let test = {};\n return function (frame_id, vponTag, responseMessage, adType) {\n if (adType == 'banner' || adType == 'flrec') {\n var other_frame_id = '';\n if (endsWith(frame_id, '_1')) {\n other_frame_id = frame_id.substring(0, frame_id.length - 1) + '2';\n } else {\n other_frame_id = frame_id.substring(0, frame_id.length - 1) + '1';\n }\n if (timeId[other_frame_id] !== undefined) {\n clearTimeout(timeId[other_frame_id]);\n timeId[other_frame_id] = undefined;\n }\n timeId[frame_id] = setTimeout(function () {\n if (coveredBannerCheck(frame_id, vponTag)) {\n var options = {\n root: null,\n rootMargin: '0px',\n threshold: [0.9, 1]\n };\n var callback = function callback(entries) {\n var viewPercent = parseInt(entries[0].intersectionRatio * 100);\n if (viewPercent < 90) {\n return;\n }\n document.getElementById(frame_id) && document.getElementById(frame_id).contentWindow.postMessage({\n isImpression: true,\n viewPercent: viewPercent\n }, '*');\n if (adType == 'flrec') {\n if (!isFlrecTrackingSended) {\n vpon_ad_send_impression(responseMessage, viewPercent);\n vpon_ad_send_3rd_party_tracking(responseMessage, vponTag);\n isFlrecTrackingSended = true;\n }\n } else {\n vpon_ad_send_impression(responseMessage, viewPercent);\n vpon_ad_send_3rd_party_tracking(responseMessage, vponTag);\n }\n iframe.unobserve(document.getElementById(frame_id));\n };\n var iframe = new IntersectionObserver(callback, options);\n iframe.observe(document.getElementById(frame_id));\n } else {\n coverCheckTimer(frame_id, vponTag, responseMessage, adType);\n }\n }, 100);\n } else if (adType.indexOf('int') >= 0) {\n var options = {\n root: null,\n rootMargin: '0px',\n threshold: [0.9, 1]\n };\n var callback = function callback(entries) {\n var viewPercent = parseInt(entries[0].intersectionRatio * 100);\n vpon_ad_send_impression(responseMessage, viewPercent);\n vpon_ad_send_3rd_party_tracking(responseMessage, vponTag);\n iframe.unobserve(document.getElementById(frame_id));\n };\n var iframe = new IntersectionObserver(callback, options);\n iframe.observe(document.getElementById(frame_id));\n } else if (adType == 'na') {\n var naDom = vponTag.querySelector('.vpon-native-ad');\n if (window.IntersectionObserver && naDom) {\n var _callback = function _callback(entries, observer) {\n // console.log(entries[0].intersectionRatio);\n // console.table(entries);\n if (entries[0].intersectionRatio <= 0.5) return;\n var viewPercent = parseInt(entries[0].intersectionRatio * 100);\n //console.log('%cimpression','color:red');\n vpon_ad_send_impression(responseMessage, viewPercent);\n vpon_ad_send_3rd_party_tracking(responseMessage, vponTag);\n observerVponNa.unobserve(naDom);\n };\n var _options = {\n root: null,\n rootMargin: '0px',\n threshold: [0.25, 0.5, 0.75, 1]\n };\n var observerVponNa = new IntersectionObserver(_callback, _options);\n observerVponNa.observe(naDom);\n } else {\n setTimeout(function () {\n if (coveredNaCheck(vponTag)) {\n //console.log('%cimpression','color:red');\n vpon_ad_send_impression(responseMessage);\n vpon_ad_send_3rd_party_tracking(responseMessage, vponTag);\n } else {\n coverCheckTimer(undefined, vponTag, responseMessage, adType);\n }\n }, 100);\n }\n } else {\n var _options2 = {\n root: null,\n rootMargin: '0px',\n threshold: [0.9, 1]\n };\n var _callback2 = function _callback2(entries) {\n var viewPercent = parseInt(entries[0].intersectionRatio * 100);\n vpon_ad_send_impression(responseMessage, viewPercent);\n vpon_ad_send_3rd_party_tracking(responseMessage, vponTag);\n _iframe.unobserve(document.getElementById(frame_id));\n };\n var _iframe = new IntersectionObserver(_callback2, _options2);\n _iframe.observe(document.getElementById(frame_id));\n }\n };\n}();\nif (!isInCrossDomain()) {\n window.top.noticeRootInfo = function (frameId, iframeElement, intersectionRatio) {\n try {\n if (document.getElementById(frameId) === null) {\n iframeElement.contentWindow && iframeElement.contentWindow.document.getElementById(frameId) && iframeElement.contentWindow.document.getElementById(frameId).contentWindow.postMessage({\n intersectionRatio: intersectionRatio\n }, '*');\n }\n document.getElementById(frameId) && document.getElementById(frameId).contentWindow.postMessage({\n intersectionRatio: intersectionRatio\n }, '*');\n } catch (error) {\n console.log(error);\n }\n };\n}\nvar getAdSizeFromFormat = function getAdSizeFromFormat(vponTag, frameId) {\n var _vponTag$getAttribute = vponTag.getAttribute(systemVar.format).split('x'),\n _vponTag$getAttribute2 = (0, _slicedToArray2[\"default\"])(_vponTag$getAttribute, 2),\n width = _vponTag$getAttribute2[0],\n height = _vponTag$getAttribute2[1];\n var adSizeWithWidth = width;\n var adSizeWithHeight = height.split('_')[0];\n var adContainerWidth = +(+document.getElementById(frameId).clientWidth / +adSizeWithWidth).toFixed(2);\n var adContainerHeight = +(+document.getElementById(frameId).clientHeight / +adSizeWithHeight).toFixed(2);\n return {\n adSizeWithWidth: adSizeWithWidth,\n adSizeWithHeight: adSizeWithHeight,\n adContainerWidth: adContainerWidth,\n adContainerHeight: adContainerHeight\n };\n};\nfunction handleOpenBrowser(data, isCustomClose, adType) {\n var clickPosition = data.clickPosition,\n landing = data.landing;\n var clickPositionX = clickPosition.clickPositionX,\n clickPositionY = clickPosition.clickPositionY,\n closeBtnX = clickPosition.closeBtnX,\n closeBtnY = clickPosition.closeBtnY;\n var isInterstitial = adType.indexOf('int') !== -1;\n if (!isUrl(landing)) {\n return false;\n }\n var landingUrlObj = new URL(landing);\n var landingUrlQueryArr = [\"clk_rel_x=\".concat(clickPositionX), \"clk_rel_y=\".concat(clickPositionY)];\n var landingUrl = '';\n if (closeBtnX && closeBtnY) {\n landingUrlQueryArr.push(\"close_btn_x=\".concat(closeBtnX));\n landingUrlQueryArr.push(\"close_btn_y=\".concat(closeBtnY));\n }\n if (isInterstitial && !isCustomClose && (!closeBtnX || !closeBtnY)) {\n var closeBtn = document.querySelector('a[id$=\"_int_1_close\"]');\n var creativeView = document.querySelector('div[id$=_contain]') || document.body;\n var creativeRect = creativeView.getBoundingClientRect();\n if (closeBtn) {\n var closeBtnRect = closeBtn.getBoundingClientRect();\n var _closeBtnX = (closeBtnRect.x - creativeRect.x) / creativeRect.width * 100;\n var _closeBtnY = (closeBtnRect.y - creativeRect.y) / creativeRect.height * 100;\n landingUrlQueryArr.push(\"close_btn_x=\".concat(_closeBtnX));\n landingUrlQueryArr.push(\"close_btn_y=\".concat(_closeBtnY));\n }\n }\n if (isMultiPartAd) {\n landingUrlQueryArr.push(\"clk_part=\".concat(adCurrentState));\n }\n var _iterator = _createForOfIteratorHelper(landingUrlObj.searchParams.entries()),\n _step;\n try {\n for (_iterator.s(); !(_step = _iterator.n()).done;) {\n var pair = _step.value;\n landingUrlQueryArr.push(\"\".concat(pair[0], \"=\").concat(encodeURIComponent(pair[1])));\n }\n } catch (err) {\n _iterator.e(err);\n } finally {\n _iterator.f();\n }\n landingUrl = \"\".concat(landingUrlObj.origin).concat(landingUrlObj.pathname, \"?\").concat(landingUrlQueryArr.join('&'));\n window.open(landingUrl, \"_blank\");\n}\nvar impressionHandlerStatus = {};\nfunction handleImpressionSafeLock(config) {\n var frameId = config.frameId,\n vponTag = config.vponTag,\n responseMessage = config.responseMessage,\n adType = config.adType,\n subtype = config.subtype;\n setTimeout(function () {\n if (!impressionHandlerStatus[frameId]) {\n impressionHandlerStatus[frameId] = true;\n if (subtype !== 'ulrec') {\n coverCheckTimer(frameId, vponTag, responseMessage, adType);\n return;\n }\n ulrecImpressionObserver({\n frameId: frameId,\n responseMessage: responseMessage,\n vponTag: vponTag\n });\n }\n }, 200);\n}\nfunction handleInternalBridge(iframe, config) {\n //port1: AD SDK\n //port2: Creative\n var _MessageChannel = new MessageChannel(),\n port1 = _MessageChannel.port1,\n port2 = _MessageChannel.port2;\n port1.onmessage = function (event) {\n var _event$data = event.data,\n eventName = _event$data.event,\n source = _event$data.source;\n if (eventName === 'vpadnInternalBridgeConnected') {\n if (source === 'vpadnSupport') {\n iframe.contentWindow.postMessage({\n source: 'vpadnAdSdk',\n event: 'askCreativeEnv'\n }, \"*\");\n }\n }\n if (source === 'vpadnSupport') {\n receiveMessageBySupport(event, iframe, config);\n }\n };\n var subtype = config.subtype;\n var messageObj = {\n source: 'vpadnAdSdk',\n event: 'vpadnInternalBridgeConnect',\n subtype: subtype\n };\n iframe.contentWindow.postMessage(messageObj, \"*\", [port2]);\n}\nfunction receiveMessageBySupport(event, iframe, config) {\n var _event$data2 = event.data,\n eventName = _event$data2.event,\n exposedPercentage = _event$data2.exposedPercentage,\n env = _event$data2.env,\n data = _event$data2.data;\n var frameId = config.frameId,\n vponTag = config.vponTag,\n responseMessage = config.responseMessage,\n adType = config.adType,\n subtype = config.subtype;\n switch (eventName) {\n case 'openBrowser':\n var useCustomCloseCallBack = vponTag.getAttribute(websdkParams.useCustomCloseCallBack) || null;\n handleOpenBrowser(data, useCustomCloseCallBack, adType);\n break;\n case 'askSubtype':\n iframe.contentWindow.postMessage({\n source: 'vpadnAdSdk',\n event: 'answerSubtype',\n subtype: subtype\n }, \"*\");\n break;\n case 'answerCreativeEnv':\n if (impressionHandlerStatus[frameId]) {\n return;\n }\n impressionHandlerStatus[frameId] = true;\n if (env === 'app') {\n iframe.contentWindow.postMessage({\n source: 'vpadnAdSdk',\n event: 'registMraidExposureChange'\n }, \"*\");\n return;\n }\n handleViewableDetection(iframe, config);\n if (subtype !== 'ulrec') {\n coverCheckTimer(frameId, vponTag, responseMessage, adType);\n return;\n }\n ulrecImpressionObserver({\n frameId: frameId,\n responseMessage: responseMessage,\n vponTag: vponTag\n });\n break;\n case 'mraidExposureChange':\n if (exposedPercentage >= 90) {\n vpon_ad_send_impression(responseMessage, exposedPercentage);\n vpon_ad_send_3rd_party_tracking(responseMessage, vponTag);\n }\n break;\n }\n}\nfunction handleViewableDetection(adIframe, config) {\n var frameId = config.frameId,\n subtype = config.subtype;\n if (subtype !== 'ulrec') {\n var options = {\n root: null,\n rootMargin: '0px',\n threshold: [0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1]\n };\n var callback = function callback(entries) {\n var _entries$ = entries[0],\n intersectionRatio = _entries$.intersectionRatio,\n intersectionRect = _entries$.intersectionRect,\n boundingClientRect = _entries$.boundingClientRect;\n var top = intersectionRect.top,\n bottom = intersectionRect.bottom,\n left = intersectionRect.left,\n right = intersectionRect.right;\n var intersectionPercent = parseInt(intersectionRatio * 100);\n adIframe.contentWindow.postMessage({\n source: 'vpadnAdSdk',\n event: 'boardcastViewPercent',\n viewableDetectionInfo: {\n iframePosition: {\n x: boundingClientRect.x,\n y: boundingClientRect.y\n },\n intersectionPercent: intersectionPercent,\n intersectionRect: {\n top: top,\n bottom: bottom,\n left: left,\n right: right\n }\n }\n }, '*');\n };\n var iframe = new IntersectionObserver(callback, options);\n iframe.observe(adIframe);\n return;\n }\n var adContainer = isInGAM() ? window.parent.document.getElementById(\"\".concat(frameId, \"_contain\")) : document.getElementById(\"\".concat(frameId, \"_contain\"));\n window.top.addEventListener('scroll', ulrecImpressionScrollDetector);\n window.top.dispatchEvent(new CustomEvent('scroll'));\n function ulrecImpressionScrollDetector() {\n var rootRect = adContainer.getBoundingClientRect();\n var targetRect = adIframe.getBoundingClientRect();\n var viewableDetectionInfo = calculateIntersectionRect(rootRect, targetRect);\n adIframe.contentWindow.postMessage({\n source: 'vpadnAdSdk',\n event: 'boardcastViewPercent',\n viewableDetectionInfo: viewableDetectionInfo\n }, '*');\n }\n function calculateIntersectionRect(rootRect, targetRect) {\n if (rootRect.top >= targetRect.bottom || rootRect.bottom <= targetRect.top) {\n return {\n iframePosition: {\n x: targetRect.x,\n y: targetRect.y\n },\n intersectionPercent: 0,\n intersectionRect: {\n top: 0,\n bottom: 0,\n left: 0,\n right: 0\n }\n };\n }\n if (rootRect.top <= targetRect.top) {\n if (rootRect.bottom >= targetRect.bottom) {\n var _top = targetRect.top,\n _bottom = targetRect.bottom,\n _left = targetRect.left,\n _right = targetRect.right;\n return {\n iframePosition: {\n x: targetRect.x,\n y: targetRect.y\n },\n intersectionPercent: 100,\n intersectionRect: {\n top: _top,\n bottom: _bottom,\n left: _left,\n right: _right\n }\n };\n }\n var _top2 = targetRect.top,\n _left2 = targetRect.left,\n _right2 = targetRect.right,\n _height = targetRect.height;\n var _bottom2 = rootRect.bottom;\n return {\n iframePosition: {\n x: targetRect.x,\n y: targetRect.y\n },\n intersectionPercent: (_bottom2 - _top2) * 100 / _height,\n intersectionRect: {\n top: _top2,\n bottom: _bottom2,\n left: _left2,\n right: _right2\n }\n };\n }\n var top = rootRect.top;\n var left = targetRect.left,\n right = targetRect.right,\n bottom = targetRect.bottom,\n height = targetRect.height;\n return {\n iframePosition: {\n x: targetRect.x,\n y: targetRect.y\n },\n intersectionPercent: (bottom - top) * 100 / height,\n intersectionRect: {\n top: top,\n bottom: bottom,\n left: left,\n right: right\n }\n };\n }\n}\n\n/**\n *\n * @param {*} frameId if of frame used to fire ad request\n * @param {*} vponTag vpon tag\n * @param {*} responseMessage message from Vpon ADNW\n * @param {*} adType ad type\n */\nvar displayAd = function displayAd(frameId, vponTag, responseMessage, adType) {\n var VPADN_WEBSDK_ENV = VPADN_WEBSDK_ENV || {};\n var vponTagAttrs = vponTag.getAttributeNames().reduce(function (acc, name) {\n return _objectSpread(_objectSpread({}, acc), {}, (0, _defineProperty2[\"default\"])({}, name, vponTag.getAttribute(name)));\n }, {});\n VPADN_WEBSDK_ENV.vponTagAttrs = vponTagAttrs;\n var useCustomCloseCallBack = vponTag.getAttribute(systemVar.useCustomCloseCallBack) || null;\n if (adType == 'int_liquid' || adType == 'int_30h') {\n initFrame(frameId, vponTag, adType);\n }\n if (adType === 'int_30h') {\n isMultiPartAd = true;\n }\n window.addEventListener('message', function (e) {\n var _e$data2 = e.data,\n event = _e$data2.event,\n data = _e$data2.data;\n if (event === 'getWebSDKEnv') {\n e.source.postMessage({\n event: 'setWebSDKEnv',\n data: VPADN_WEBSDK_ENV\n }, '*');\n }\n if (event === 'openBrowser') {\n handleOpenBrowser(data, useCustomCloseCallBack, adType);\n }\n });\n document.getElementById(frameId).setAttribute('src', responseMessage.adURL);\n document.getElementById(frameId).onload = function () {\n var _this = this;\n handleInternalBridge(this, {\n frameId: frameId,\n vponTag: vponTag,\n responseMessage: responseMessage,\n adType: adType\n });\n handleImpressionSafeLock({\n frameId: frameId,\n vponTag: vponTag,\n responseMessage: responseMessage,\n adType: adType\n });\n var reqId = responseMessage.reqId;\n setTimeout(function () {\n adChoicePanel(_this.parentNode, vponTag, {\n adType: adType,\n reqId: reqId\n });\n VponLogoPanel(_this.parentNode, vponTag, adType);\n }, 1);\n vpon_ad_loaded(frameId, adType, vponTag, responseMessage);\n if (adType == 'banner') {\n setRotateAd(frameId, vponTag, adType);\n }\n if (useCustomCloseCallBack != null) {\n setCustomClose(frameId, vponTag);\n }\n\n // 因應 RWD 的部份,暫時先只對 video banner 做 RWD\n if (responseMessage.adURL.indexOf('t=ban_vid') > 0) {\n document.getElementById(frameId).style.maxHeight = '100%';\n document.getElementById(frameId).style.maxWidth = '100%';\n var _getAdSizeFromFormat = getAdSizeFromFormat(vponTag, frameId),\n adSizeWithWidth = _getAdSizeFromFormat.adSizeWithWidth,\n adSizeWithHeight = _getAdSizeFromFormat.adSizeWithHeight,\n adContainerWidth = _getAdSizeFromFormat.adContainerWidth,\n adContainerHeight = _getAdSizeFromFormat.adContainerHeight;\n if (adContainerWidth < adContainerHeight) {\n var newWidth = +adSizeWithWidth * adContainerWidth;\n var newHeight = +adSizeWithHeight * adContainerWidth;\n document.getElementById(frameId).style.width = \"\".concat(newWidth, \"px\");\n document.getElementById(frameId).style.height = \"\".concat(newHeight, \"px\");\n } else {\n var _newWidth = +adSizeWithWidth * adContainerHeight;\n var _newHeight = +adSizeWithHeight * adContainerHeight;\n document.getElementById(frameId).style.width = \"\".concat(_newWidth, \"px\");\n document.getElementById(frameId).style.height = \"\".concat(_newHeight, \"px\");\n }\n }\n };\n};\nvar LOGO_PATH = \"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\";\nvar adChoicePanel = function adChoicePanel(adContainer, vponTag, options, callback) {\n var adChoiceLogoArea = adContainer.querySelector('#Vpon-ad-choice');\n if (adChoiceLogoArea) {\n adChoiceLogoArea.remove();\n }\n // Check if networkId exists and return if it's \"skm\"\n var networkId = vponTag.getAttribute(systemVar.networkId);\n if (networkId === \"skm\") {\n return;\n }\n handleAdChoice(adContainer, vponTag, options, callback);\n};\nvar handleAdChoice = function handleAdChoice(adContainer, vponTag, options, callback) {\n var adType = options.adType;\n var adChoiceArea = adChoiceAreaGenerator(adContainer, adType);\n adChoiceArea.addEventListener('click', function (event) {\n event.stopPropagation();\n handleAdChoiceClick(adContainer, vponTag, options, callback);\n var useCustomCloseCallBack = vponTag.getAttribute(systemVar.useCustomCloseCallBack) || null;\n if (!useCustomCloseCallBack && adType !== 'int_30h' && adType.indexOf('int') !== -1) {\n handleAdChoiceClose(adContainer, vponTag, adType);\n }\n });\n adContainer.appendChild(adChoiceArea);\n};\nvar handleAdChoiceClose = function handleAdChoiceClose(adContainer, vponTag, adType) {\n var closeBtn = document.createElement('a');\n var closeBtnImg = document.createElement('img');\n closeBtn.id = 'ad-choice-close';\n Object.assign(closeBtn.style, {\n width: '45px',\n height: '45px',\n position: 'absolute',\n left: '5px',\n top: '5px'\n });\n switch (adType) {\n case 'int_30h':\n closeBtn.style.zIndex = vponTag.getAttribute('use_custom_z_index_int_30h') || 100000;\n break;\n default:\n closeBtn.style.zIndex = vponTag.getAttribute('use_custom_z_index') || 100000;\n }\n closeBtnImg.style.width = '45px';\n closeBtnImg.src = 'data:image/png;base64,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';\n closeBtn.appendChild(closeBtnImg);\n adContainer.appendChild(closeBtn);\n closeBtn.addEventListener('click', function (event) {\n event.stopPropagation();\n adContainer.remove();\n });\n};\nvar adChoiceAreaGenerator = function adChoiceAreaGenerator(adContainer, adType) {\n var logo = document.createElement('img');\n var container = document.createElement('div');\n var containerWidth = 0;\n if (adContainer.clientWidth) {\n containerWidth = adContainer.clientWidth * 0.035 > 23 ? 23 : adContainer.clientWidth * 0.035;\n }\n if (window.innerWidth && !containerWidth) {\n containerWidth = window.innerWidth * 0.035 > 23 ? 23 : window.innerWidth * 0.035;\n }\n if (!containerWidth) {\n containerWidth = 23;\n }\n var screenDensity = 1;\n Object.assign(logo.style, {\n display: 'block',\n width: containerWidth * screenDensity + 'px',\n verticalAlign: 'bottom'\n });\n container.id = 'Vpon-ad-choice';\n Object.assign(container.style, {\n position: 'absolute',\n top: adType !== 'na' ? 'auto' : 0,\n bottom: adType !== 'na' ? 0 : 'auto',\n right: adType !== 'na' ? containerWidth * screenDensity + 'px' : 0,\n zIndex: 2\n });\n logo.src = systemVar.adChoiceImg;\n container.appendChild(logo);\n return container;\n};\nvar handleAdChoiceClick = function handleAdChoiceClick(adContainer, vponTag, options, callback) {\n var adType = options.adType;\n var adChoiceFormArea = adChoiceFormGenerator(vponTag, options);\n var backArrow = adChoiceBackArrowGenerator(vponTag, adType);\n adContainer.appendChild(adChoiceFormArea);\n adContainer.appendChild(backArrow);\n var adIframe = adContainer.querySelector('iframe[id$=\"_1\"]');\n if (window.VponVideo) {\n window.postMessage({\n event: 'adChoiceActive'\n }, '*');\n }\n if (adIframe) {\n adIframe.contentWindow.postMessage({\n event: 'adChoiceActive'\n }, '*');\n }\n backArrow.addEventListener('click', function (event) {\n event.stopPropagation();\n adChoiceFormArea.remove();\n this.remove();\n var useCustomCloseCallBack = vponTag.getAttribute(systemVar.useCustomCloseCallBack) || null;\n if (!useCustomCloseCallBack && adType.indexOf('int') !== -1) {\n var closeBtn = document.querySelector('#ad-choice-close');\n if (closeBtn) {\n closeBtn.remove();\n }\n }\n if (window.VponVideo) {\n window.postMessage({\n event: 'adChoiceInactive'\n }, '*');\n }\n if (adIframe) {\n adIframe.contentWindow.postMessage({\n event: 'adChoiceInactive'\n }, '*');\n }\n });\n adChoiceFormArea.addEventListener('load', function () {\n var _MessageChannel2 = new MessageChannel(),\n port1 = _MessageChannel2.port1,\n port2 = _MessageChannel2.port2;\n port1.onmessage = function (event) {\n var data = event.data;\n if (data === 'clickPolicyBtn') {\n window.open('https://www.vpon.com/zh-hant/privacy-policy/');\n }\n if (data === 'adChoiceStep2') {\n backArrow.remove();\n var VponLogo = adChoiceFormArea.parentNode.querySelector('#Vpon-logoArea');\n if (VponLogo) {\n VponLogo.remove();\n }\n }\n if (data === 'done') {\n if (callback && typeof callback === 'function') {\n callback();\n }\n }\n };\n this.contentWindow.postMessage(null, \"*\", [port2]);\n });\n};\nvar adChoiceBackArrowGenerator = function adChoiceBackArrowGenerator(vponTag, adType) {\n var arrow = document.createElement('a');\n var img = document.createElement('img');\n img.src = systemVar.adChoiceArrowImg;\n arrow.id = 'Vpon-ad-choice-back';\n arrow.appendChild(img);\n img.style.maxWidth = '100%';\n Object.assign(arrow.style, {\n position: 'absolute',\n top: adType === 'int_30h' || adType.indexOf('int') === -1 && adType !== '' ? '10px' : '60px',\n left: '10px',\n width: '20px'\n });\n switch (adType) {\n case 'int_30h':\n arrow.style.zIndex = vponTag.getAttribute('use_custom_z_index_int_30h') || 100000;\n break;\n default:\n arrow.style.zIndex = vponTag.getAttribute('use_custom_z_index') || 100000;\n }\n return arrow;\n};\nvar adChoiceFormGenerator = function adChoiceFormGenerator(vponTag, options) {\n var adType = options.adType;\n var container = document.createElement('iframe');\n if (options['reqId']) {\n container.src = \"\".concat(systemVar.adChoiceUrl, \"?req_id=\").concat(options['reqId']);\n } else {\n container.src = systemVar.adChoiceUrl;\n }\n container.setAttribute('scrolling', 'no');\n container.setAttribute('frameborder', '0');\n container.id = 'Vpon-ad-choice-form';\n Object.assign(container.style, {\n position: 'absolute',\n top: 0,\n left: 0,\n width: '100%',\n height: '100%'\n });\n switch (adType) {\n case 'int_30h':\n container.style.zIndex = vponTag.getAttribute('use_custom_z_index_int_30h') || 100000;\n break;\n default:\n container.style.zIndex = vponTag.getAttribute('use_custom_z_index') || 100000;\n }\n return container;\n};\nfunction VponLogoPanel(iframe, vponTag, adType) {\n var logoContainer = iframe.querySelector('#Vpon-logoArea');\n if (logoContainer) {\n logoContainer.remove();\n }\n // Check if networkId exists and return if it's \"skm\"\n var networkId = vponTag.getAttribute(systemVar.networkId);\n if (networkId === \"skm\") {\n return; // Fixed the typo from 'retunr' to 'return'\n }\n drawLogo(iframe, vponTag, adType);\n}\nfunction drawLogo(iframe, vponTag, adType) {\n var logoContainer = logoContainerGenerator(iframe, vponTag, adType);\n var logoImage = logoImageGenerator();\n logoContainer.addEventListener('click', function () {\n if (this.parentNode.querySelector('#Vpon-ad-choice')) {\n this.parentNode.querySelector('#Vpon-ad-choice').dispatchEvent(new CustomEvent('click'));\n }\n });\n logoContainer.appendChild(logoImage);\n iframe.appendChild(logoContainer);\n}\nfunction logoContainerGenerator(iframe, vponTag, adType) {\n var logoContainer = document.createElement(\"div\");\n //20211221 by Max: CM反應logo過大,故將logo size縮小為原本的50%\n var logoContainerWidth = 0;\n if (iframe.clientWidth) {\n logoContainerWidth = iframe.clientWidth * 0.035 > 23 ? 23 : iframe.clientWidth * 0.035;\n }\n if (window.innerWidth && !logoContainerWidth) {\n logoContainerWidth = window.innerWidth * 0.035 > 23 ? 23 : window.innerWidth * 0.035;\n }\n if (!logoContainerWidth) {\n logoContainerWidth = 23;\n }\n var screenDensity = 1;\n logoContainer.setAttribute(\"id\", \"Vpon-logoArea\");\n logoContainer.style.position = \"absolute\";\n logoContainer.style.width = logoContainerWidth * screenDensity + \"px\";\n logoContainer.style.height = logoContainer.style.width;\n logoContainer.style.margin = \"0px\";\n logoContainer.style.padding = \"0px\";\n logoContainer.style.right = \"0%\";\n logoContainer.style.bottom = \"0%\";\n logoContainer.style.fontSize = \"0px\";\n logoContainer.style.display = window.disableVponLogo ? 'none' : 'block';\n switch (adType) {\n case 'int_30h':\n logoContainer.style.zIndex = vponTag.getAttribute('use_custom_z_index_int_30h') || 100000;\n break;\n case 'int_fit':\n logoContainer.style.zIndex = vponTag.getAttribute('use_custom_z_index') || 100000;\n break;\n default:\n logoContainer.style.zIndex = vponTag.getAttribute('use_custom_z_index') || 100000;\n }\n return logoContainer;\n}\nfunction logoImageGenerator() {\n var logo = document.createElement(\"img\");\n logo.setAttribute(\"id\", \"Vpon-logo\");\n logo.setAttribute(\"src\", LOGO_PATH);\n logo.style.position = \"absolute\";\n logo.style.width = \"100%\";\n logo.style.height = \"auto\";\n logo.style.right = \"0%\";\n logo.style.bottom = \"0%\";\n logo.style.display = \"block\";\n logo.style.setProperty('margin', '0px', 'important');\n return logo;\n}\nvar displayNativeAd = function displayNativeAd(vponTag, nativeObj) {\n // Step 1: append native ad structure into vpon tag\n // Step 2: obstructive detection\n\n var layout = nativeLayout[vponTag.getAttribute(systemVar.nativeLayoutOption) || 0]['content'];\n var imgNum = nativeLayout[vponTag.getAttribute(systemVar.nativeLayoutOption) || 0]['imgNum'];\n for (var i in nativeObj) {\n layout = regexp_replace(layout, i, nativeObj[i]);\n }\n var isValidUrl = function isValidUrl(url) {\n return typeof url === 'string' && url.startsWith('http');\n };\n var hasValidIcon = isValidUrl(nativeObj.icon_url);\n var hasValidCover = isValidUrl(nativeObj.cover_url);\n var hasVideoContent = hasValidCover && nativeObj.cover_url.endsWith(\"mp4\");\n vponTag.innerHTML = layout;\n var icon = vponTag.querySelector('.vpon-icon-image img');\n var adType = checkAdType(vponTag);\n if (!hasVideoContent) {\n imgNum = Math.max(1, imgNum - (!hasValidIcon || !hasValidCover ? 1 : 0));\n vponTag.style.display = 'none';\n var cover = vponTag.querySelector('.vpon-cover-image img');\n var multiOnloadForCoverCheck = function () {\n var count = 0;\n return function () {\n count++;\n if (count >= imgNum) {\n vponTag.style.display = '';\n coverCheckTimer(undefined, vponTag, nativeObj, adType);\n }\n };\n }();\n if (icon && hasValidIcon) {\n icon.onload = multiOnloadForCoverCheck;\n icon.src = nativeObj.icon_url;\n } else if (icon) {\n icon.style.display = 'none';\n }\n if (cover && hasValidCover) {\n cover.onload = multiOnloadForCoverCheck;\n cover.src = nativeObj.cover_url;\n } else if (cover) {\n cover.style.display = 'none';\n }\n } else {\n // hasVideoContent\n // inject video-sdk\n injectScript('https://m.vpon.com/sdk/vpadn-video-sdk.js').then(function () {\n var videoContainer = vponTag.querySelector('.vpon-cover-image');\n videoContainer.firstChild.style.display = 'none';\n var video = new VponVideo(videoContainer, {\n src: nativeObj.cover_url,\n poster: 'https://dummyimage.com/667x375/000/000',\n autoplay: false,\n loop: true,\n countdownHidden: false,\n mutePosition: 'bottom',\n track: {\n e: nativeObj.e\n }\n });\n video.create();\n video.onCanBePlay(function () {\n return video.play();\n });\n if (window.IntersectionObserver && video && videoContainer) {\n var observer = new IntersectionObserver(function (entries) {\n if (entries[0].intersectionRatio <= 0.5) {\n if (!video.isPaused()) video.pause();\n } else {\n if (video.isPaused()) video.play();\n }\n }, {\n root: null,\n rootMargin: '0px',\n threshold: [0, 0.3, 0.45, 0.5, 0.55, 0.7, 1]\n });\n observer.observe(videoContainer);\n }\n coverCheckTimer(undefined, vponTag, nativeObj, adType);\n });\n // if icon && hasValidIcon, load icon\n if (icon && hasValidIcon) {\n icon.src = nativeObj.icon_url;\n } else if (icon) {\n icon.style.display = 'none';\n }\n }\n var reqId = nativeObj.reqId;\n var adContainer = vponTag.querySelector('.vpon-native-ad');\n adChoicePanel(adContainer, vponTag, {\n adType: 'na',\n reqId: reqId\n });\n};\nvar registerNaClickAction = function registerNaClickAction(vponTag, nativeObj) {\n var key = vponTag.getAttribute(systemVar.licensekey);\n // parameter 'id' is for function vpsdk.click to identify whether this is the first time or not\n var id = \"vponClick\".concat(key).concat(Math.random().toString(10).substring(2, 15));\n vponTag.addEventListener('click', openBrowser);\n vponTag.addEventListener('click', sendClick);\n function openBrowser() {\n //if lnk with macros(click position), replace with -1.\n var script = regexp_replace(act_script[nativeObj.a], \"lnk\", replaceAPIMacro(nativeObj.lnk));\n new Function(script)();\n }\n function sendClick() {\n /**\n * 210326: Rollback vpsdk.click parameters as production ver\n */\n vpsdk.click(undefined, undefined, {\n \"clickUrl\": nativeObj.clickURL,\n \"id\": id\n });\n // Remove click action to prevent sending clickUrl multiple times.\n vponTag.removeEventListener('click', sendClick);\n }\n};\nvar setRotateAd = function setRotateAd(frameId, vponTag) {\n var isRotate = vponTag.getAttribute(systemVar.isRotate) || 'false';\n var frameIdSuffix = frameId.substring(frameId.length - 2, frameId.length);\n frameIdSuffix = frameIdSuffix == '_1' ? '_2' : '_1';\n if (isRotate !== 'false') {\n setTimeout(function () {\n getAd(vponTag, frameIdSuffix);\n }, systemVar.vpon_refresh_time);\n }\n};\n\n/**\n * to be depreacted\n */\nvar closeButtomTimer = function () {\n var timeId = undefined;\n return function (time) {\n clearTimeout(timeId);\n timeId = setTimeout(function () {\n var closeBtn = document.querySelector('a[id$=\"_int_1_close\"]');\n closeBtn.style.display = 'block';\n }, time);\n };\n}();\nvar isMultiPartAd = false;\nvar adCurrentState = 'cut1';\nvar vpon_ad_loaded = function vpon_ad_loaded(frame_id, adType, vponTag, responseMessage) {\n var _getParams = getParams(responseMessage.adURL),\n cd = _getParams.cd;\n var value = cd === undefined ? 3 : cd;\n var time = parseInt(value) > 0 ? parseInt(value) : 0;\n var closeBtn = document.getElementById(frame_id + '_close');\n iframe_contain = document.getElementById(frame_id + '_contain');\n if (iframe_contain) {\n iframe_contain.style.display = 'block';\n }\n if (closeBtn) {\n fade(closeBtn, time);\n }\n switch (adType) {\n case 'banner':\n var iframe = document.getElementById(frame_id);\n if (iframe.style.display == 'none') {\n var other_frame_id = '';\n // switch iframe\n if (endsWith(frame_id, '_1')) {\n other_frame_id = frame_id.substring(0, frame_id.length - 1) + '2';\n } else {\n other_frame_id = frame_id.substring(0, frame_id.length - 1) + '1';\n }\n var other_iframe = document.getElementById(other_frame_id);\n other_iframe.style.display = 'none';\n var other_iframe_close_button = document.getElementById(other_frame_id + '_close');\n var other_iframe_contain = document.getElementById(other_frame_id + '_contain');\n if (other_iframe_close_button) {\n other_iframe_contain.style.display = 'none';\n other_iframe_contain.style.zIndex = '-1';\n }\n }\n iframe.style.display = 'block';\n var iframe_close_button = document.getElementById(frame_id + '_close');\n var iframe_contain = document.getElementById(frame_id + '_contain');\n if (iframe_close_button) {\n iframe_contain.style.display = 'block';\n iframe_contain.style.zIndex = '9998';\n }\n break;\n case 'int_fit':\n iframe_contain = document.getElementById(frame_id + '_contain');\n if (iframe_contain) {\n iframe_contain.style.display = 'block';\n }\n fade(closeBtn, time);\n transformCloseBtnPosition();\n window.addEventListener('orientationchange', transformCloseBtnPositionViaOrient);\n window.addEventListener('scroll', transformCloseBtnPositionViaScroll);\n break;\n case 'int_vid':\n iframe_contain = document.getElementById(frame_id + '_contain');\n if (iframe_contain) {\n iframe_contain.style.display = 'block';\n }\n var closeBtn = document.querySelector('a[id$=\"_int_1_close\"]');\n // closeBtn.style.display = 'none'\n\n fade(closeBtn, time);\n // transformCloseBtnPosition()\n // closeButtomTimer(systemVar.intCloseBtnEndureTime)\n\n transformCloseBtnPosition();\n window.addEventListener('orientationchange', transformCloseBtnPositionViaOrient);\n window.addEventListener('scroll', transformCloseBtnPositionViaScroll);\n break;\n case 'int_30h':\n ///fix display:none\n var condition = function condition(l, c, t) {\n if (t !== 60) {\n if (l.style.display !== \"block\") {\n l.style.display = \"block\";\n c.style.display = \"block\";\n }\n setTimeout(function () {\n condition(l, c, ++t);\n }, 100);\n }\n };\n var validdom = function validdom(l, c, t) {\n condition(l, c, t);\n };\n var use_custom_z_index_int_30h = vponTag.getAttribute(systemVar.use_custom_z_index_int_30h) || 9999998;\n iframe_contain = document.getElementById(frame_id + '_contain');\n iframe_contain.style.display = 'block';\n //set zIndex\n iframe_contain.style.zIndex = use_custom_z_index_int_30h;\n var closeBtn = document.getElementById(frame_id + '_close');\n closeBtn.style.cssText = '';\n /**\n * force to declare close button as display when adType is int_30h\n */\n // systemVar.isUseCustomClose ? closeBtn.style.display = 'none' : closeBtn.style.display = 'block'\n Object.assign(closeBtn.style, {\n position: 'absolute',\n right: 0,\n top: 0,\n width: '31.05px',\n height: '31.05px',\n zIndex: 9999999\n });\n closeBtn.style.display = systemVar.isUseCustomClose ? 'none' : 'block';\n closeBtn.innerHTML = \"\";\n closeBtn.querySelector('img').style.setProperty('padding', '0px', 'important');\n fade(closeBtn, time);\n /**\n * 因應讓 adTech 可以使用 customCloseButton,在素材端會透過 support.setExpandProperties\n * 來使用 postMessage 來通知 WebSDK,因會傳多數的 message 過來,故多做了判斷\n */\n try {\n window.addEventListener('message', function (e) {\n if (e.data.event === 'supportCollapse') {\n adCurrentState = 'cut1';\n var reqId = responseMessage.reqId;\n adChoicePanel(iframe_contain, vponTag, {\n adType: adType,\n reqId: reqId\n });\n }\n if (e.data.event === 'supportExpand') {\n adCurrentState = 'cut2';\n }\n if (e.data.event == 'supportShowCloseBtn') {\n closeBtn.style.display = 'block';\n fade(closeBtn, time);\n } else if (e.data.event == 'supportHideCloseBtn') {\n closeBtn.style.display = 'none';\n } else if (e.data.event != 'initPostion' && e.data.event != 'supportCollapse' && e.data.event != 'supportExpand' && e.data.event != 'supportExpandComplete') {\n var _e$data3 = e.data,\n type = _e$data3.type,\n useCustomClose = _e$data3.useCustomClose;\n if (type !== 'expandProperties' && useCustomClose === undefined) {\n closeBtn.style.display = 'block';\n } else if (useCustomClose) {\n closeBtn.style.display = 'none';\n } else {\n closeBtn.style.display = 'block';\n }\n }\n });\n } catch (error) {\n console.log(error);\n }\n validdom(iframe_contain, closeBtn, 0);\n break;\n }\n};\nvar transformCloseBtnPosition = function transformCloseBtnPosition() {\n var iframeInt = document.querySelector(\"[vpon_ad_format='mi']\").querySelector('iframe');\n var closeBtn = document.querySelector(\"[vpon_ad_format='mi']\").querySelector('a');\n var iframeIntTop = iframeInt.getBoundingClientRect().top;\n if (iframeIntTop < 0) {\n closeBtn.style.top = -iframeIntTop + 5 + 'px';\n } else {\n closeBtn.style.top = '5px';\n }\n};\nvar transformCloseBtnPositionViaOrient = function transformCloseBtnPositionViaOrient() {\n if (window.orientation !== 90 && window.orientation !== -90) {\n setTimeout(function () {\n transformCloseBtnPosition();\n }, 200);\n }\n};\nvar transformCloseBtnPositionViaScroll = function transformCloseBtnPositionViaScroll() {\n if (window.orientation !== 90 && window.orientation !== -90) {\n setTimeout(function () {\n transformCloseBtnPosition();\n }, 200);\n }\n};\nvar clickCallback = function clickCallback() {\n if (systemVar.a == 0 || systemVar.a == 1 || systemVar.a == 3) {\n hwnd.location = systemVar.landing;\n // window.open(systemVar.landing,\"_blank\");\n } else {\n window.location.href = systemVar.landing;\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 + '=([^&#]*)'),\n results = regex.exec(url);\n return results === null ? '' : decodeURIComponent(results[1].replace(/\\+/g, ' '));\n};\nvar replaceAPIMacro = function replaceAPIMacro(url) {\n var value = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : -1;\n return url.replace(/\\[.*?\\]/g, value);\n};\nvar vpon_ad_send_impression = function vpon_ad_send_impression(responseMessage, viewPercent) {\n var impURL = responseMessage.impURL + '×tamp=' + new Date().getMilliseconds();\n //addScript(replaceAPIMacro(impURL, viewPercent));\n\n if (typeof window.navigator.sendBeacon != \"undefined\") {\n //20210407: Change Get to Post.\n navigator.sendBeacon(replaceAPIMacro(impURL, viewPercent));\n } else {\n addScript(replaceAPIMacro(impURL, viewPercent));\n }\n};\nvar handleThrTrackArray = function handleThrTrackArray(url, type) {\n var trackingTag = document.createElement(type);\n trackingTag.src = url;\n if (type === 'img') {\n trackingTag.width = '0px';\n trackingTag.height = '0px';\n trackingTag.style = 'display:none';\n }\n document.body.appendChild(trackingTag);\n};\nvar vpon_ad_send_3rd_party_tracking = function vpon_ad_send_3rd_party_tracking(responseMessage, vponTag) {\n if (responseMessage.thr_track_array) {\n var thrTrackObj = JSON.parse(responseMessage.thr_track_array);\n Object.keys(thrTrackObj).forEach(function (key) {\n switch (key) {\n case 'urls':\n thrTrackObj[key].forEach(function (item) {\n handleThrTrackArray(item, 'img');\n });\n break;\n case 'jsUrls':\n thrTrackObj[key].forEach(function (item) {\n handleThrTrackArray(item, 'script');\n });\n break;\n }\n });\n return;\n }\n if (responseMessage.thirdPartyTagString) {\n var div = document.createElement('div');\n div.innerHTML = responseMessage.thirdPartyTagString;\n document.body.appendChild(div);\n }\n if (responseMessage.multipleThirdPartyTrackings) {\n var trackingList = responseMessage.multipleThirdPartyTrackings.split(',');\n //Claar script tag under vpontag\n if (vponTag.querySelectorAll('script').length > 0) {\n console.log('[web-sdk] Clear script tag under specific vpon tag.');\n vponTag.querySelectorAll('script').forEach(function (element) {\n return element.remove();\n });\n }\n for (var i = 0; i < trackingList.length; i++) {\n var trackingElement = trackingList[i].split(';');\n var trackingType = identifyTrackingType(trackingElement[0]);\n var trackingUrl = decodeURIComponent(trackingElement[1]);\n if (trackingType === 'img') {\n handleThrTrackArray(trackingUrl, 'img');\n } else if (trackingType === 'js') {\n handleThrTrackArray(trackingUrl, 'script');\n } else {\n console.log('Unknown Tracking Type');\n }\n }\n }\n};\nvar identifyTrackingType = function identifyTrackingType(rawTrackingType) {\n var trackingTypeNumber = rawTrackingType.split('=')[1];\n var trackingType = '';\n switch (trackingTypeNumber) {\n case '0':\n trackingType = 'img';\n break;\n case '1':\n trackingType = 'js';\n break;\n default:\n break;\n }\n return trackingType;\n};\nvar findElementFromOuterFrame = function findElementFromOuterFrame(elementId) {\n return _findElementFromOuterFrame(window.parent, elementId);\n};\nvar _findElementFromOuterFrame = function _findElementFromOuterFrame(window, elementId) {\n try {\n var element = window.document.getElementById(elementId);\n if (element) {\n return element;\n }\n _findElementFromOuterFrame(window.parent, elementId);\n } catch (err) {\n return null;\n }\n};\nvar setCustomClose = function setCustomClose(frameId, vponTag) {\n var debugMode = vponTag.getAttribute(systemVar.debug) === 'true' || vponTag.getAttribute(systemVar.debug) === '1';\n var useCustomCloseCallBack = vponTag.getAttribute(systemVar.useCustomCloseCallBack) || null;\n var useCustomCloseBtnId = vponTag.getAttribute(systemVar.useCustomCloseBtnId) || null;\n var useCustomCloseBtn = document.getElementById(useCustomCloseBtnId);\n if (!useCustomCloseBtn && window !== window.top) {\n useCustomCloseBtn = findElementFromOuterFrame(useCustomCloseBtnId);\n }\n var closeBtnX = document.getElementById(frameId + '_close');\n var handleFunc = function handleFunc(frameId) {\n var closeBtn = document.getElementById(frameId + '_close');\n closeBtn.click();\n try {\n window[useCustomCloseCallBack]();\n } catch (err) {\n if (debugMode) {\n console.log(err);\n }\n }\n };\n if (useCustomCloseBtn) {\n useCustomCloseBtn.addEventListener('click', handleFunc.bind(_this2, frameId));\n } else {\n if (debugMode) {\n console.info(\"ERROR: customClosebtnId data error or not exist.\");\n }\n }\n};\nvar initPositionStyle = null;\nvar initFrame = function initFrame(frameId, vponTag, adType) {\n var contentDom = vponTag.querySelectorAll('div')[0];\n var iframeDom = vponTag.querySelectorAll('iframe')[0];\n var closeBtn = document.getElementById(frameId + '_close');\n contentDom.style['display'] = 'none';\n closeBtn.style['display'] = 'none';\n window.addEventListener('message', function (e) {\n if (e.data.event == 'initPostion' || e.data.event == 'expand' || e.data.event == 'collapse') {\n var style = e.data.style;\n //Save initPosition style for supportCollapse.\n initPositionStyle = style;\n if (!style) {\n return;\n }\n // Make css style empty but z-index should not be chaged by post message event;\n var oriZIndex = contentDom.style.zIndex;\n contentDom.style.cssText = '';\n // 1/3 沒補這個 1px 的話 view detection 會是 99\n contentDom.style.marginBottom = '1px';\n Object.keys(style).map(function (objectKey, index) {\n var value = style[objectKey];\n // z-index is not allowed setting by creative.\n contentDom.style[objectKey] = value;\n });\n //set back z-index\n contentDom.style['z-index'] = oriZIndex;\n } else if (e.data.event == 'close') {\n closeBtn.click();\n } else if (e.data.event === \"onscroll\") {\n window.addEventListener(\"scroll\", scrollEventPost(vponTag), false);\n } else if (e.data.event == 'supportCollapse') {\n if (!initPositionStyle) {\n return;\n }\n var _oriZIndex = contentDom.style.zIndex;\n var oriDisplay = contentDom.style.display;\n contentDom.style.cssText = '';\n contentDom.style.marginBottom = '1px';\n Object.keys(initPositionStyle).map(function (objectKey, index) {\n var value = initPositionStyle[objectKey];\n contentDom.style[objectKey] = value;\n });\n //set back z-index\n contentDom.style['z-index'] = _oriZIndex;\n contentDom.style['display'] = oriDisplay;\n }\n }, false);\n};\nvar scrollEventPost = function scrollEventPost(vponTag) {\n var scrollPos = 0;\n var diff = 0;\n return function () {\n var iframeDom = vponTag.querySelectorAll('iframe')[0];\n var direction;\n var scrollTop = document.documentElement.scrollTop + document.body.scrollTop;\n var docHeight = document.documentElement.scrollHeight;\n var winHeight = document.documentElement.clientHeight;\n var scrollPercent = scrollTop / (docHeight - winHeight);\n var scrollPercentRounded = parseFloat((scrollPercent * 100).toFixed(2));\n var diff = scrollTop - scrollPos;\n direction = scrollTop < scrollPos ? \"up\" : \"down\";\n scrollPos = scrollTop;\n //console.log(scrollTop,diff,scrollPercent,scrollPercentRounded,direction,docHeight,winHeight);\n if (iframeDom) {\n iframeDom.contentWindow.postMessage({\n action: 'onscroll',\n scrollTop: scrollTop,\n diff: diff,\n scrollPercent: scrollPercentRounded,\n direction: direction\n }, '*');\n }\n };\n};\n// --------- process flow -------------\n\nmodule.exports = {\n getAd: getAd,\n ajax: ajax,\n addScript: addScript,\n addScriptUnderVponTag: addScriptUnderVponTag,\n reqCallback: reqCallback,\n reqCallbackInt: reqCallbackInt,\n parseUri: parseUri,\n impCallback: impCallback,\n coverCheckTimer: coverCheckTimer,\n displayAd: displayAd,\n setRotateAd: setRotateAd,\n closeButtomTimer: closeButtomTimer,\n vpon_ad_loaded: vpon_ad_loaded,\n transformCloseBtnPosition: transformCloseBtnPosition,\n transformCloseBtnPositionViaOrient: transformCloseBtnPositionViaOrient,\n transformCloseBtnPositionViaScroll: transformCloseBtnPositionViaScroll,\n clickCallback: clickCallback,\n getUrlParameterByName: getUrlParameterByName,\n vpon_ad_send_impression: vpon_ad_send_impression,\n vpon_ad_send_3rd_party_tracking: vpon_ad_send_3rd_party_tracking,\n identifyTrackingType: identifyTrackingType,\n setCustomClose: setCustomClose,\n initFrame: initFrame,\n scrollEventPost: scrollEventPost,\n fade: fade,\n collectDataForAdRequest: collectDataForAdRequest,\n sendAdRequest: sendAdRequest\n};\n\n/***/ }),\n/* 16 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _interopRequireDefault = __webpack_require__(0);\nvar _regenerator = _interopRequireDefault(__webpack_require__(7));\nvar _defineProperty2 = _interopRequireDefault(__webpack_require__(5));\nvar _asyncToGenerator2 = _interopRequireDefault(__webpack_require__(8));\nvar _toArray2 = _interopRequireDefault(__webpack_require__(20));\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) { (0, _defineProperty2[\"default\"])(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; }\nvar _require = __webpack_require__(4),\n parseCtidToObj = _require.parseCtidToObj,\n getReqAdParameters = _require.getReqAdParameters,\n adder = _require.adder,\n prepareContextForAdRequest = _require.prepareContextForAdRequest,\n handleAdReqUrl = _require.handleAdReqUrl;\nvar _require2 = __webpack_require__(1),\n checkVponTagExisted = _require2.checkVponTagExisted,\n checkVponTagAttributes = _require2.checkVponTagAttributes,\n checkAdType = _require2.checkAdType;\nvar _require3 = __webpack_require__(4),\n vpadnCookieComponent = _require3.vpadnCookieComponent,\n getCTID = _require3.getCTID;\nvar _require4 = __webpack_require__(2),\n websdkParams = _require4.websdkParams;\nvar _require5 = __webpack_require__(15),\n sendAdRequest = _require5.sendAdRequest,\n collectDataForAdRequest = _require5.collectDataForAdRequest;\nvar _require6 = __webpack_require__(25),\n vpon_ad_create_multi_banner_iframe = _require6.vpon_ad_create_multi_banner_iframe,\n vpon_ad_create_int_iframe = _require6.vpon_ad_create_int_iframe,\n checkNoNaADInsideVtag = _require6.checkNoNaADInsideVtag;\nvar _require7 = __webpack_require__(26),\n adCounterManager = _require7.adCounterManager,\n adContextController = _require7.adContextController,\n globalContextController = _require7.globalContextController;\n(function (window, document) {\n if (!checkVponTagExisted()) {\n throw Error(\"[Vpon-WebSDK] Vpon tag not exist\");\n }\n\n /**\n * Initialize needs context and instance.\n */\n var adContext = adContextController();\n var globalContext = globalContextController();\n var adIdInstance = adder(0);\n var adCounter = adCounterManager();\n prepareContextForAdRequest();\n // initialThirdPartyVendor();\n\n /**\n * Ad request phase entry point.\n */\n var vponTags = document.querySelectorAll(\"vpon\");\n adRequestPhase(vponTags);\n function adRequestPhase(vponTags) {\n var _vponTags = (0, _toArray2[\"default\"])(vponTags),\n vponTag = _vponTags[0],\n remainVponTag = _vponTags.slice(1);\n if (!vponTag) {\n return;\n }\n var isVponTagAttrValid = checkVponTagAttributes(vponTag);\n if (!isVponTagAttrValid) {\n adRequestPhase(remainVponTag);\n return;\n }\n var adType = checkAdType(vponTag);\n var _adCounter = adCounter(adType, 1),\n isExceedLimit = _adCounter.isExceedLimit;\n if (isExceedLimit) {\n adRequestPhase(remainVponTag);\n return;\n }\n if (adType === 'banner') {\n var result = vpon_ad_create_multi_banner_iframe(vponTag);\n if (result === 0) {\n adRequestPhase(remainVponTag);\n return;\n }\n }\n if (adType === 'mi') {\n var _result = vpon_ad_create_int_iframe(vponTag);\n if (_result === 0) {\n adRequestPhase(remainVponTag);\n return;\n }\n }\n if (adType === 'na') {\n var _result2 = checkNoNaADInsideVtag(vponTag);\n if (!_result2) {\n adRequestPhase(remainVponTag);\n return;\n }\n }\n var iframeNum = adType === 'banner' ? '_1' : adType === 'mi' ? '_int_1' : undefined;\n var adId = adIdInstance();\n settingContext(adId, vponTag, iframeNum);\n handleAdRequest(adId);\n adRequestPhase(remainVponTag);\n }\n\n /**\n * Todo: When ad response component refactoring in the\n * future, Move this message handler to internalBridge.\n */\n window.addEventListener(\"message\", function (ev) {\n var event = ev.data.event;\n if (event === \"supportClose\") {\n var container = document.querySelectorAll(\"[id*='_int_1_contain']\");\n if (!container.length) {\n console.warn(\"[Vpon-WebSDK] Not have interstitial contain.\");\n return;\n }\n container.forEach(function (element) {\n element.style.zIndex = \"-1\";\n element.style.display = \"none\";\n element.querySelector(\"iframe\").contentWindow.postMessage({\n event: \"destroy\"\n }, \"*\");\n });\n }\n if (event === \"supportExpand\") {\n console.log(\"[Vpon-WebSDK] supportExpand\");\n try {\n var containerDiv = document.querySelectorAll(\"div[id*=_int_1_contain]\")[0];\n containerDiv.style.width = \"100%\";\n containerDiv.style.height = \"100%\";\n var adChoice = containerDiv.querySelector(\"#Vpon-ad-choice\");\n if (adChoice) {\n adChoice.remove();\n }\n } catch (error) {\n console.error(\"[web-sdk] supportExpand Failed: \".concat(error));\n }\n }\n if (event === \"supportDisableVponLogo\") {\n var logoContainer = document.querySelector(\"#Vpon-logoArea\");\n window.disableVponLogo = true;\n if (!logoContainer) {\n return;\n }\n logoContainer.style.display = \"none\";\n }\n }, false);\n\n /**\n * Handle ad request.\n */\n function handleAdRequest(_x) {\n return _handleAdRequest.apply(this, arguments);\n }\n /**\n * Update context for ad request needs.\n */\n function _handleAdRequest() {\n _handleAdRequest = (0, _asyncToGenerator2[\"default\"])( /*#__PURE__*/_regenerator[\"default\"].mark(function _callee(adId) {\n var contextForAdReq;\n return _regenerator[\"default\"].wrap(function _callee$(_context) {\n while (1) switch (_context.prev = _context.next) {\n case 0:\n _context.next = 2;\n return updateContextForAdRequest(adId);\n case 2:\n contextForAdReq = _context.sent;\n sendAdRequest(contextForAdReq);\n case 4:\n case \"end\":\n return _context.stop();\n }\n }, _callee);\n }));\n return _handleAdRequest.apply(this, arguments);\n }\n function updateContextForAdRequest(_x2) {\n return _updateContextForAdRequest.apply(this, arguments);\n }\n /**\n * Prepare ad request url, request to banner api server.\n * @param {object} context current ad context\n * @returns {object} ad request url object\n */\n function _updateContextForAdRequest() {\n _updateContextForAdRequest = (0, _asyncToGenerator2[\"default\"])( /*#__PURE__*/_regenerator[\"default\"].mark(function _callee2(adId) {\n var context, vponTag, reqAdParameters, reqAdUrl, adRequestObj;\n return _regenerator[\"default\"].wrap(function _callee2$(_context2) {\n while (1) switch (_context2.prev = _context2.next) {\n case 0:\n context = adContext.getContext(adId);\n vponTag = context.vponTag, reqAdParameters = context.reqAdParameters;\n reqAdUrl = prepareAdReqUrl({\n vponTag: vponTag,\n reqAdParameters: reqAdParameters\n });\n _context2.next = 5;\n return collectDataForAdRequest(context);\n case 5:\n adRequestObj = _context2.sent;\n if (location && location.href) {\n adRequestObj.requestBody = _objectSpread(_objectSpread({}, adRequestObj.requestBody), {}, {\n referer: location.href\n });\n }\n adContext.setContext(adId, _objectSpread(_objectSpread({}, context), {}, {\n reqAdUrl: reqAdUrl,\n adRequestObj: adRequestObj\n }));\n return _context2.abrupt(\"return\", adContext.getContext(adId));\n case 9:\n case \"end\":\n return _context2.stop();\n }\n }, _callee2);\n }));\n return _updateContextForAdRequest.apply(this, arguments);\n }\n function prepareAdReqUrl(context) {\n var vponTag = context.vponTag,\n reqAdParameters = context.reqAdParameters;\n var getCookieByKey = vpadnCookieComponent.getCookieByKey;\n var ctidObj = globalContext.getContext(\"ctidObj\");\n var ctid = ctidObj.ctid,\n timestamp = ctidObj.timestamp;\n var reqAdUrl = handleAdReqUrl(reqAdParameters);\n if (vponTag.getAttribute(websdkParams.adIdentifier)) {\n reqAdUrl.searchParams.append(adv_id, vponTag.getAttribute(websdkParams.adIdentifier));\n }\n if (vponTag.getAttribute(websdkParams.adIsLat)) {\n reqAdUrl.searchParams.append(adv_id_lat, vponTag.getAttribute(websdkParams.adIsLat));\n }\n if (ctid) {\n reqAdUrl.searchParams.append(\"Ctid\", ctid);\n if (getCookieByKey(websdkParams.cookie.sid)) {\n reqAdUrl.searchParams.append(\"Vpadn-Sid\", getCookieByKey(websdkParams.cookie.sid));\n }\n }\n var stringfyGAMResult = vponTag.getAttribute(websdkParams.gamTargetingMap);\n if (stringfyGAMResult) {\n reqAdUrl.searchParams.append(websdkParams.contentData, stringfyGAMResult);\n }\n if (timestamp) {\n reqAdUrl.searchParams.append(\"Ctiddob\", timestamp);\n }\n var screenDensity = window.devicePixelRatio ? window.devicePixelRatio : 1;\n reqAdUrl.searchParams.append(\"u_sd\", screenDensity);\n reqAdUrl.searchParams.append(\"timestamp\", new Date().getMilliseconds());\n return reqAdUrl;\n }\n\n /**\n * Update global and ad context\n * @param {number} adId environment ID\n * @param {element} vponTag vpon tag node\n * @param {string} iframeNum ad iframe number\n */\n function settingContext(adId, vponTag, iframeNum) {\n var getCookieByKey = vpadnCookieComponent.getCookieByKey;\n if (!globalContext.getContext(\"ctidObj\")) {\n globalContext.setContext(\"ctidObj\", parseCtidToObj(getCookieByKey(websdkParams.cookie.ctid) || window.localStorage.getItem(websdkParams.cookie.ctid) || getCTID()));\n }\n var adType = checkAdType(vponTag);\n var currentAdContext = {\n vponTag: vponTag,\n adType: adType,\n iframeNum: iframeNum\n };\n var vponTagAttrs = vponTag.getAttributeNames().reduce(function (acc, name) {\n return _objectSpread(_objectSpread({}, acc), {}, (0, _defineProperty2[\"default\"])({}, name, vponTag.getAttribute(name)));\n }, {});\n currentAdContext.vponTagAttrs = vponTagAttrs;\n currentAdContext.reqAdParameters = getReqAdParameters(vponTag);\n adContext.setContext(adId, currentAdContext);\n }\n})(window, document);\n\n/***/ }),\n/* 17 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar _typeof = __webpack_require__(3)[\"default\"];\nfunction _regeneratorRuntime() {\n \"use strict\"; /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/facebook/regenerator/blob/main/LICENSE */\n module.exports = _regeneratorRuntime = function _regeneratorRuntime() {\n return e;\n }, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;\n var t,\n e = {},\n r = Object.prototype,\n n = r.hasOwnProperty,\n o = Object.defineProperty || function (t, e, r) {\n t[e] = r.value;\n },\n i = \"function\" == typeof Symbol ? Symbol : {},\n a = i.iterator || \"@@iterator\",\n c = i.asyncIterator || \"@@asyncIterator\",\n u = i.toStringTag || \"@@toStringTag\";\n function define(t, e, r) {\n return Object.defineProperty(t, e, {\n value: r,\n enumerable: !0,\n configurable: !0,\n writable: !0\n }), t[e];\n }\n try {\n define({}, \"\");\n } catch (t) {\n define = function define(t, e, r) {\n return t[e] = r;\n };\n }\n function wrap(t, e, r, n) {\n var i = e && e.prototype instanceof Generator ? e : Generator,\n a = Object.create(i.prototype),\n c = new Context(n || []);\n return o(a, \"_invoke\", {\n value: makeInvokeMethod(t, r, c)\n }), a;\n }\n function tryCatch(t, e, r) {\n try {\n return {\n type: \"normal\",\n arg: t.call(e, r)\n };\n } catch (t) {\n return {\n type: \"throw\",\n arg: t\n };\n }\n }\n e.wrap = wrap;\n var h = \"suspendedStart\",\n l = \"suspendedYield\",\n f = \"executing\",\n s = \"completed\",\n y = {};\n function Generator() {}\n function GeneratorFunction() {}\n function GeneratorFunctionPrototype() {}\n var p = {};\n define(p, a, function () {\n return this;\n });\n var d = Object.getPrototypeOf,\n v = d && d(d(values([])));\n v && v !== r && n.call(v, a) && (p = v);\n var g = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(p);\n function defineIteratorMethods(t) {\n [\"next\", \"throw\", \"return\"].forEach(function (e) {\n define(t, e, function (t) {\n return this._invoke(e, t);\n });\n });\n }\n function AsyncIterator(t, e) {\n function invoke(r, o, i, a) {\n var c = tryCatch(t[r], t, o);\n if (\"throw\" !== c.type) {\n var u = c.arg,\n h = u.value;\n return h && \"object\" == _typeof(h) && n.call(h, \"__await\") ? e.resolve(h.__await).then(function (t) {\n invoke(\"next\", t, i, a);\n }, function (t) {\n invoke(\"throw\", t, i, a);\n }) : e.resolve(h).then(function (t) {\n u.value = t, i(u);\n }, function (t) {\n return invoke(\"throw\", t, i, a);\n });\n }\n a(c.arg);\n }\n var r;\n o(this, \"_invoke\", {\n value: function value(t, n) {\n function callInvokeWithMethodAndArg() {\n return new e(function (e, r) {\n invoke(t, n, e, r);\n });\n }\n return r = r ? r.then(callInvokeWithMethodAndArg, callInvokeWithMethodAndArg) : callInvokeWithMethodAndArg();\n }\n });\n }\n function makeInvokeMethod(e, r, n) {\n var o = h;\n return function (i, a) {\n if (o === f) throw Error(\"Generator is already running\");\n if (o === s) {\n if (\"throw\" === i) throw a;\n return {\n value: t,\n done: !0\n };\n }\n for (n.method = i, n.arg = a;;) {\n var c = n.delegate;\n if (c) {\n var u = maybeInvokeDelegate(c, n);\n if (u) {\n if (u === y) continue;\n return u;\n }\n }\n if (\"next\" === n.method) n.sent = n._sent = n.arg;else if (\"throw\" === n.method) {\n if (o === h) throw o = s, n.arg;\n n.dispatchException(n.arg);\n } else \"return\" === n.method && n.abrupt(\"return\", n.arg);\n o = f;\n var p = tryCatch(e, r, n);\n if (\"normal\" === p.type) {\n if (o = n.done ? s : l, p.arg === y) continue;\n return {\n value: p.arg,\n done: n.done\n };\n }\n \"throw\" === p.type && (o = s, n.method = \"throw\", n.arg = p.arg);\n }\n };\n }\n function maybeInvokeDelegate(e, r) {\n var n = r.method,\n o = e.iterator[n];\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;\n var i = tryCatch(o, e.iterator, r.arg);\n if (\"throw\" === i.type) return r.method = \"throw\", r.arg = i.arg, r.delegate = null, y;\n var a = i.arg;\n 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);\n }\n function pushTryEntry(t) {\n var e = {\n tryLoc: t[0]\n };\n 1 in t && (e.catchLoc = t[1]), 2 in t && (e.finallyLoc = t[2], e.afterLoc = t[3]), this.tryEntries.push(e);\n }\n function resetTryEntry(t) {\n var e = t.completion || {};\n e.type = \"normal\", delete e.arg, t.completion = e;\n }\n function Context(t) {\n this.tryEntries = [{\n tryLoc: \"root\"\n }], t.forEach(pushTryEntry, this), this.reset(!0);\n }\n function values(e) {\n if (e || \"\" === e) {\n var r = e[a];\n if (r) return r.call(e);\n if (\"function\" == typeof e.next) return e;\n if (!isNaN(e.length)) {\n var o = -1,\n i = function next() {\n for (; ++o < e.length;) if (n.call(e, o)) return next.value = e[o], next.done = !1, next;\n return next.value = t, next.done = !0, next;\n };\n return i.next = i;\n }\n }\n throw new TypeError(_typeof(e) + \" is not iterable\");\n }\n return GeneratorFunction.prototype = GeneratorFunctionPrototype, o(g, \"constructor\", {\n value: GeneratorFunctionPrototype,\n configurable: !0\n }), o(GeneratorFunctionPrototype, \"constructor\", {\n value: GeneratorFunction,\n configurable: !0\n }), GeneratorFunction.displayName = define(GeneratorFunctionPrototype, u, \"GeneratorFunction\"), e.isGeneratorFunction = function (t) {\n var e = \"function\" == typeof t && t.constructor;\n return !!e && (e === GeneratorFunction || \"GeneratorFunction\" === (e.displayName || e.name));\n }, e.mark = function (t) {\n return Object.setPrototypeOf ? Object.setPrototypeOf(t, GeneratorFunctionPrototype) : (t.__proto__ = GeneratorFunctionPrototype, define(t, u, \"GeneratorFunction\")), t.prototype = Object.create(g), t;\n }, e.awrap = function (t) {\n return {\n __await: t\n };\n }, defineIteratorMethods(AsyncIterator.prototype), define(AsyncIterator.prototype, c, function () {\n return this;\n }), e.AsyncIterator = AsyncIterator, e.async = function (t, r, n, o, i) {\n void 0 === i && (i = Promise);\n var a = new AsyncIterator(wrap(t, r, n, o), i);\n return e.isGeneratorFunction(r) ? a : a.next().then(function (t) {\n return t.done ? t.value : a.next();\n });\n }, defineIteratorMethods(g), define(g, u, \"Generator\"), define(g, a, function () {\n return this;\n }), define(g, \"toString\", function () {\n return \"[object Generator]\";\n }), e.keys = function (t) {\n var e = Object(t),\n r = [];\n for (var n in e) r.push(n);\n return r.reverse(), function next() {\n for (; r.length;) {\n var t = r.pop();\n if (t in e) return next.value = t, next.done = !1, next;\n }\n return next.done = !0, next;\n };\n }, e.values = values, Context.prototype = {\n constructor: Context,\n reset: function reset(e) {\n 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);\n },\n stop: function stop() {\n this.done = !0;\n var t = this.tryEntries[0].completion;\n if (\"throw\" === t.type) throw t.arg;\n return this.rval;\n },\n dispatchException: function dispatchException(e) {\n if (this.done) throw e;\n var r = this;\n function handle(n, o) {\n return a.type = \"throw\", a.arg = e, r.next = n, o && (r.method = \"next\", r.arg = t), !!o;\n }\n for (var o = this.tryEntries.length - 1; o >= 0; --o) {\n var i = this.tryEntries[o],\n a = i.completion;\n if (\"root\" === i.tryLoc) return handle(\"end\");\n if (i.tryLoc <= this.prev) {\n var c = n.call(i, \"catchLoc\"),\n u = n.call(i, \"finallyLoc\");\n if (c && u) {\n if (this.prev < i.catchLoc) return handle(i.catchLoc, !0);\n if (this.prev < i.finallyLoc) return handle(i.finallyLoc);\n } else if (c) {\n if (this.prev < i.catchLoc) return handle(i.catchLoc, !0);\n } else {\n if (!u) throw Error(\"try statement without catch or finally\");\n if (this.prev < i.finallyLoc) return handle(i.finallyLoc);\n }\n }\n }\n },\n abrupt: function abrupt(t, e) {\n for (var r = this.tryEntries.length - 1; r >= 0; --r) {\n var o = this.tryEntries[r];\n if (o.tryLoc <= this.prev && n.call(o, \"finallyLoc\") && this.prev < o.finallyLoc) {\n var i = o;\n break;\n }\n }\n i && (\"break\" === t || \"continue\" === t) && i.tryLoc <= e && e <= i.finallyLoc && (i = null);\n var a = i ? i.completion : {};\n return a.type = t, a.arg = e, i ? (this.method = \"next\", this.next = i.finallyLoc, y) : this.complete(a);\n },\n complete: function complete(t, e) {\n if (\"throw\" === t.type) throw t.arg;\n 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;\n },\n finish: function finish(t) {\n for (var e = this.tryEntries.length - 1; e >= 0; --e) {\n var r = this.tryEntries[e];\n if (r.finallyLoc === t) return this.complete(r.completion, r.afterLoc), resetTryEntry(r), y;\n }\n },\n \"catch\": function _catch(t) {\n for (var e = this.tryEntries.length - 1; e >= 0; --e) {\n var r = this.tryEntries[e];\n if (r.tryLoc === t) {\n var n = r.completion;\n if (\"throw\" === n.type) {\n var o = n.arg;\n resetTryEntry(r);\n }\n return o;\n }\n }\n throw Error(\"illegal catch attempt\");\n },\n delegateYield: function delegateYield(e, r, n) {\n return this.delegate = {\n iterator: values(e),\n resultName: r,\n nextLoc: n\n }, \"next\" === this.method && (this.arg = t), y;\n }\n }, e;\n}\nmodule.exports = _regeneratorRuntime, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;\n\n/***/ }),\n/* 18 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar _typeof = __webpack_require__(3)[\"default\"];\nvar toPrimitive = __webpack_require__(19);\nfunction toPropertyKey(t) {\n var i = toPrimitive(t, \"string\");\n return \"symbol\" == _typeof(i) ? i : i + \"\";\n}\nmodule.exports = toPropertyKey, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;\n\n/***/ }),\n/* 19 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar _typeof = __webpack_require__(3)[\"default\"];\nfunction toPrimitive(t, r) {\n if (\"object\" != _typeof(t) || !t) return t;\n var e = t[Symbol.toPrimitive];\n if (void 0 !== e) {\n var i = e.call(t, r || \"default\");\n if (\"object\" != _typeof(i)) return i;\n throw new TypeError(\"@@toPrimitive must return a primitive value.\");\n }\n return (\"string\" === r ? String : Number)(t);\n}\nmodule.exports = toPrimitive, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;\n\n/***/ }),\n/* 20 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar arrayWithHoles = __webpack_require__(10);\nvar iterableToArray = __webpack_require__(11);\nvar unsupportedIterableToArray = __webpack_require__(9);\nvar nonIterableRest = __webpack_require__(13);\nfunction _toArray(arr) {\n return arrayWithHoles(arr) || iterableToArray(arr) || unsupportedIterableToArray(arr) || nonIterableRest();\n}\nmodule.exports = _toArray, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;\n\n/***/ }),\n/* 21 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar arrayLikeToArray = __webpack_require__(12);\nfunction _arrayWithoutHoles(arr) {\n if (Array.isArray(arr)) return arrayLikeToArray(arr);\n}\nmodule.exports = _arrayWithoutHoles, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;\n\n/***/ }),\n/* 22 */\n/***/ (function(module, exports) {\n\nfunction _nonIterableSpread() {\n throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}\nmodule.exports = _nonIterableSpread, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;\n\n/***/ }),\n/* 23 */\n/***/ (function(module, exports) {\n\nfunction _iterableToArrayLimit(r, l) {\n var t = null == r ? null : \"undefined\" != typeof Symbol && r[Symbol.iterator] || r[\"@@iterator\"];\n if (null != t) {\n var e,\n n,\n i,\n u,\n a = [],\n f = !0,\n o = !1;\n try {\n if (i = (t = t.call(r)).next, 0 === l) {\n if (Object(t) !== t) return;\n f = !1;\n } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0);\n } catch (r) {\n o = !0, n = r;\n } finally {\n try {\n if (!f && null != t[\"return\"] && (u = t[\"return\"](), Object(u) !== u)) return;\n } finally {\n if (o) throw n;\n }\n }\n return a;\n }\n}\nmodule.exports = _iterableToArrayLimit, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;\n\n/***/ }),\n/* 24 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _require = __webpack_require__(1),\n verifyCtid = _require.verifyCtid;\nvar _require2 = __webpack_require__(4),\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/* 25 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _interopRequireDefault = __webpack_require__(0);\nvar _toConsumableArray2 = _interopRequireDefault(__webpack_require__(6));\nvar _require = __webpack_require__(2),\n systemVar = _require.systemVar;\nvar _require2 = __webpack_require__(1),\n checkInput = _require2.checkInput,\n getReqAdParameters = _require2.getReqAdParameters,\n checkAdType = _require2.checkAdType,\n isInCrossDomain = _require2.isInCrossDomain;\nvar _require3 = __webpack_require__(4),\n generateUID = _require3.generateUID;\nvar _require4 = __webpack_require__(15),\n getAd = _require4.getAd,\n transformCloseBtnPositionViaOrient = _require4.transformCloseBtnPositionViaOrient,\n transformCloseBtnPositionViaScroll = _require4.transformCloseBtnPositionViaScroll;\n\n// ------------ initial ---------------\nvar isBanLessthanLimit = function isBanLessthanLimit(vponBanCounter) {\n if (vponBanCounter < systemVar.vponBannerTagCount) {\n return true;\n } else {\n console.info('ERROR: vpon banner tag display more than ' + systemVar.vponBannerTagCount + ' time(s)');\n return false;\n }\n};\nvar isIntLessthanLimit = function isIntLessthanLimit(vponIntCounter) {\n if (vponIntCounter < systemVar.vponIntTagCount) {\n return true;\n } else {\n console.info('ERROR: vpon interstitial tag display more than ' + systemVar.vponIntTagCount + ' time(s)');\n return false;\n }\n};\nvar findVponSDK = function findVponSDK(name) {\n var scripts = window.top.document.querySelectorAll('script');\n var scriptsArr = (0, _toConsumableArray2[\"default\"])(scripts);\n return scriptsArr.find(function (script) {\n return script.src.split('//')[1] === \"m.vpon.com/sdk/\".concat(name, \".js\");\n });\n};\nvar injectObserver = function injectObserver() {\n var isExist = findVponSDK('vpadn-obs');\n if (isExist === undefined) {\n var script = document.createElement('script');\n script.src = '//m.vpon.com/sdk/vpadn-obs.js';\n script.async = true;\n window.top.document.getElementsByTagName('head')[0].appendChild(script);\n }\n};\n\n/**\n * @Deprecated this method seems were no longer been used, should be removed after been tested\n */\nvar createAd = function createAd() {\n if (!isInCrossDomain()) {\n try {\n injectObserver();\n } catch (error) {\n console.log(error);\n }\n }\n var vponTags = document.getElementsByTagName(systemVar.vponTag);\n var vponTagCounter = 0;\n var vponBanCounter = 0;\n var vponIntCounter = 0;\n while (vponTagCounter < vponTags.length) {\n var vponTag = vponTags[vponTagCounter];\n var debugMode = vponTag.getAttribute(systemVar.debug);\n var adType = checkAdType(vponTag);\n if (adType === 'banner' && isBanLessthanLimit(vponBanCounter)) {\n var bannerAd = vpon_ad_create_multi_banner_iframe(vponTag);\n if (bannerAd > 0) {\n vponBanCounter += bannerAd;\n getAd(vponTag, '_1');\n }\n } else if (adType === 'mi' && isIntLessthanLimit(vponIntCounter)) {\n var intAd = vpon_ad_create_int_iframe(vponTag);\n if (intAd > 0) {\n vponIntCounter += intAd;\n getAd(vponTag, '_int_1');\n }\n } else if (adType === 'na') {\n var checkInputResult = checkInput(vponTag);\n if (checkInputResult.errMsg) {\n if (debugMode) {\n console.info('ERROR: vpon tag fill attribute error, message => ' + checkInputResult.errMsg);\n }\n } else {\n if (checkNoNaADInsideVtag(vponTag)) {\n getAd(vponTag);\n }\n }\n } else {\n console.info('ERROR: invalid vpon tag type');\n }\n vponTagCounter++;\n }\n};\nvar checkNoNaADInsideVtag = function checkNoNaADInsideVtag(vponTag) {\n if (vponTag.querySelectorAll('div').length > 0) {\n console.info('Warn: ad had exists inside vpontag, will not generate ad again.');\n return false;\n }\n if (vponTag.getAttribute('status') == null) {\n vponTag.setAttribute('status', '1');\n } else {\n return false;\n }\n return true;\n};\n\n/**\n * Todo: When ad response component refactoring in the\n * future, Move this function to ad response phase and remove\n * iframe2.\n * Create banner 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_multi_banner_iframe = function vpon_ad_create_multi_banner_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\n // check adhesion banner format\n if (checkInputResult.adhesionPosition) {\n if (checkInputResult.adhesionPosition === 'top' || checkInputResult.adhesionPosition === 'bottom') {\n var format = vponTag.getAttribute(systemVar.format);\n if (format !== '320x50_mb') {\n console.info('ERROR: Adhesion banner only support format 320x50_mb.');\n return 0;\n }\n } else {\n console.info('ERROR: Please check the attribute \"vpon_ad_adhesion\". We can verify it only with value \"top\" or \"bottom\".');\n return 0;\n }\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, checkInputResult.adhesionPosition should only be \"top\", \"bottom\", or undefined.\n initialBannerIframeHtmlTag(vponTag, guid, checkInputResult.adhesionPosition);\n return 1;\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};\nvar initialCloseButtonContainer = function initialCloseButtonContainer(vponTag, guid, adType, adhesionPosition) {\n var container = document.createElement('div');\n var customZIndex = vponTag.getAttribute('use_custom_z_index') || 100000;\n container.id = guid + '_contain';\n container.style.display = 'none';\n if (adType == 'banner') {\n var reqAdParameters = getReqAdParameters(vponTag);\n // var checkInputResult = checkInput(vponTag)\n // var iframeW = reqAdParameters.format.split('x')[0]\n var iframeH = reqAdParameters.format.split('x')[1].split('_')[0];\n // var adhesionPosition = checkInputResult.adhesionPosition\n\n adhesionPosition === 'top' ? container.style.top = '0px' : container.style.bottom = '0px';\n container.style.margin = '0px';\n container.style.padding = '0px';\n container.style.position = 'fixed';\n container.style.left = '0px';\n container.style.width = '100%';\n container.style.height = iframeH + 'px';\n container.style.zIndex = '9998';\n container.style.background = 'url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAQAAAAECAIAAAAmkwkpAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAACVJREFUeNpitLS0lJWVffz4MZBkDAsLY4ABJqAYkIKQKDIAAQYAVVMLXmMqHtMAAAAASUVORK5CYII=\")';\n } else {\n container.style.position = 'fixed';\n container.style.zIndex = customZIndex;\n container.style.width = '100%';\n container.style.height = '100%';\n container.style.left = '0px';\n container.style.top = '0px';\n }\n return container;\n};\n\n// initial close button\nvar initialBannerCloseButton = function initialBannerCloseButton(vponTag, guid) {\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 close_btn = document.createElement('a');\n\n // To get a better control of close button, add an unique id\n close_btn.id = guid + '_close';\n close_btn.onclick = function (id) {\n var container = document.getElementById(guid + '_contain');\n container.style.zIndex = '-1';\n container.style.display = 'none';\n };\n var close_btn_img = document.createElement('img');\n close_btn_img.setAttribute('aria-label', systemVar.ariaLabel.close_button);\n close_btn.href = 'javascript:void(0);';\n close_btn.style.zIndex = '9999';\n close_btn.style.position = 'fixed';\n close_btn_img.style.width = '30px';\n close_btn_img.src = systemVar.closeImgSrc;\n close_btn.appendChild(close_btn_img);\n return close_btn;\n};\nvar initialIntCloseButton = function initialIntCloseButton(vponTag, guid) {\n var useCustomCloseCallBack = vponTag.getAttribute(systemVar.useCustomCloseCallBack) || null;\n var close_btn = document.createElement('a');\n var close_btn_img = document.createElement('img');\n close_btn_img.setAttribute('aria-label', systemVar.ariaLabel.close_button);\n close_btn.id = guid + '_close';\n close_btn.onclick = function (id) {\n // document.getElementById(guid).remove()\n var element = document.getElementById(guid);\n /**\n * fix custom close button not worked due to wrong principal\n */\n if (element) {\n if (useCustomCloseCallBack || close_btn.style.opacity >= 1) {\n element.parentNode.remove();\n close_btn.style.zIndex = '-1';\n close_btn.style.display = 'none';\n var container = document.getElementById(guid + '_contain');\n if (container) {\n container.style.zIndex = '-1';\n container.style.width = '0';\n container.style.height = '0';\n }\n window.removeEventListener('orientationchange', transformCloseBtnPositionViaOrient);\n window.removeEventListener('scroll', transformCloseBtnPositionViaScroll);\n }\n }\n };\n close_btn.style.width = '70px';\n close_btn.style.height = '70px';\n close_btn.style.zIndex = '10001';\n close_btn.style.position = 'absolute'; //'fixed'\n close_btn.style.left = '5px';\n close_btn.style.top = '5px';\n close_btn_img.style.width = '45px';\n close_btn_img.src = 'data:image/png;base64,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';\n close_btn.appendChild(close_btn_img);\n /**\n * 因應讓 adTech 可以使用 customCloseButton,在素材端會透過 support.setExpandProperties \n * 來使用 postMessage 來通知 WebSDK,因會傳多數的 message 過來,故多做了判斷\n */\n try {\n window.addEventListener('message', function (e) {\n /**\n * bypass style setting to close button while pubs.useCustomCloseButton has been config.\n */\n\n if (e.data.type === 'expandProperties') {\n var useCustomClose = e.data.useCustomClose;\n systemVar.isUseCustomClose = useCustomClose === true ? true : false;\n close_btn.style.display = useCustomClose === true ? 'none' : 'block';\n }\n });\n } catch (error) {\n console.log(error);\n }\n if (useCustomCloseCallBack != null) {\n close_btn.style.display = 'none';\n }\n return close_btn;\n};\nvar initialBannerIframeHtmlTag = function initialBannerIframeHtmlTag(vponTag, guid, adhesionPosition) {\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 iframeId1 = guid + '_1';\n var iframeId2 = guid + '_2';\n var openTab = vponTag.getAttribute(systemVar.openTab);\n openTab = openTab ? openTab == 'true' ? true : false : true;\n var ifrm1 = document.createElement('IFRAME');\n ifrm1.style.width = iframeW + 'px';\n ifrm1.style.height = iframeH + 'px';\n ifrm1.style.maxWidth = '100%';\n ifrm1.setAttribute('id', iframeId1);\n ifrm1.setAttribute('scrolling', 'no');\n ifrm1.style.display = 'block';\n ifrm1.frameBorder = 0;\n if (adhesionPosition) {\n // Here adhesionPosition will only be 'top' or 'bottom'\n ifrm1.style.position = 'fixed';\n ifrm1.style.left = '50%';\n ifrm1.style.marginLeft = '-' + iframeW / 2 + 'px';\n var container1 = initialCloseButtonContainer(vponTag, iframeId1, 'banner', adhesionPosition);\n var closeBtn1 = initialBannerCloseButton(vponTag, iframeId1);\n container1.appendChild(closeBtn1);\n container1.appendChild(ifrm1);\n vponTag.appendChild(container1);\n } else {\n var bannerIframeWrap = initialBannerIframeWrap(iframeId1, iframeW, iframeH);\n bannerIframeWrap.appendChild(ifrm1);\n vponTag.appendChild(bannerIframeWrap);\n }\n var ifrm2 = document.createElement('IFRAME');\n ifrm2.style.width = iframeW + 'px';\n ifrm2.style.height = iframeH + 'px';\n ifrm2.setAttribute('id', iframeId2);\n ifrm2.setAttribute('scrolling', 'no');\n ifrm2.style.display = 'none';\n ifrm2.frameBorder = 0;\n if (adhesionPosition) {\n ifrm2.style.position = 'fixed';\n ifrm2.style.left = '50%';\n ifrm2.style.marginLeft = '-' + iframeW / 2 + 'px';\n var container2 = initialCloseButtonContainer(vponTag, iframeId2, 'banner', adhesionPosition);\n var closeBtn2 = initialBannerCloseButton(vponTag, iframeId2);\n container2.appendChild(closeBtn2);\n container2.appendChild(ifrm2);\n vponTag.appendChild(container2);\n } else {\n ifrm2.style.margin = '0px auto';\n vponTag.appendChild(ifrm2);\n }\n};\nvar initialBannerIframeWrap = function initialBannerIframeWrap(guid, iframeW, iframeH) {\n var container = document.createElement('div');\n container.id = guid + '_contain';\n container.style.position = 'relative';\n container.style.width = iframeW + 'px';\n container.style.height = iframeH + 'px';\n container.style.margin = 'auto';\n return container;\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// ------------- initial --------------\n\nmodule.exports = {\n isBanLessthanLimit: isBanLessthanLimit,\n isIntLessthanLimit: isIntLessthanLimit,\n createAd: createAd,\n vpon_ad_create_multi_banner_iframe: vpon_ad_create_multi_banner_iframe,\n vpon_ad_create_int_iframe: vpon_ad_create_int_iframe,\n initialCloseButtonContainer: initialCloseButtonContainer,\n initialBannerCloseButton: initialBannerCloseButton,\n initialIntCloseButton: initialIntCloseButton,\n initialBannerIframeHtmlTag: initialBannerIframeHtmlTag,\n initialIntIframeHtmlTag: initialIntIframeHtmlTag,\n checkNoNaADInsideVtag: checkNoNaADInsideVtag\n};\n\n/***/ }),\n/* 26 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _interopRequireDefault = __webpack_require__(0);\nvar _defineProperty2 = _interopRequireDefault(__webpack_require__(5));\nvar _typeof2 = _interopRequireDefault(__webpack_require__(3));\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) { (0, _defineProperty2[\"default\"])(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; }\nvar _require = __webpack_require__(2),\n websdkParams = _require.websdkParams;\n\n/**\n * Ad counter manager\n * @returns {function} closure function\n */\nfunction adCounterManager() {\n var counter = {\n banner: 0,\n mi: 0,\n na: 0\n };\n var adAmountLimit = websdkParams.adAmountLimit;\n return function (adType) {\n var num = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n counter[adType] += num;\n return {\n counter: counter[adType],\n isExceedLimit: counter[adType] > adAmountLimit[adType]\n };\n };\n}\n\n/**\n * Ad context controller\n * @returns {object} interfaces\n *\n */\nfunction adContextController() {\n var contextObj = {};\n return {\n getAllContext: function getAllContext() {\n return contextObj;\n },\n getContext: function getContext(adId) {\n if (!adId || isNaN(adId)) {\n return;\n }\n return contextObj[adId];\n },\n setContext: function setContext(adId, newContext) {\n if (!adId || isNaN(adId)) {\n return;\n }\n if (!newContext || (0, _typeof2[\"default\"])(newContext) !== 'object' || Array.isArray(newContext)) {\n return;\n }\n contextObj[adId] = newContext;\n }\n };\n}\n\n/**\n * Global context controller\n * @returns {object} interfaces\n */\nfunction globalContextController() {\n var contextObj = {};\n return {\n getContext: function getContext(properties) {\n if (!properties || !properties.length) {\n return contextObj;\n }\n if (typeof properties === \"string\") {\n return contextObj[properties];\n }\n var filteredContextObj = properties.reduce(function (accumulator, currentValue) {\n if (!contextObj[currentValue]) {\n return accumulator;\n }\n return _objectSpread(_objectSpread({}, accumulator), {}, {\n currentValue: contextObj[currentValue]\n });\n }, {});\n return filteredContextObj;\n },\n setContext: function setContext(key, value) {\n if (!key || typeof key === 'function' || (0, _typeof2[\"default\"])(key) === 'object') {\n return;\n }\n contextObj[key] = value;\n }\n };\n}\nmodule.exports = {\n adCounterManager: adCounterManager,\n globalContextController: globalContextController,\n adContextController: adContextController\n};\n\n/***/ })\n/******/ ]);\n\n\n// WEBPACK FOOTER //\n// vpadn-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 = 16);\n\n\n\n// WEBPACK FOOTER //\n// webpack/bootstrap df7f8e479bea62346b06","function _interopRequireDefault(obj) {\n return obj && obj.__esModule ? obj : {\n \"default\": obj\n };\n}\nmodule.exports = _interopRequireDefault, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@babel/runtime/helpers/interopRequireDefault.js\n// module id = 0\n// module chunks = 0","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","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,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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// WEBPACK FOOTER //\n// ./src/vpadn-sdk-parameters.partial.js","function _typeof(o) {\n \"@babel/helpers - typeof\";\n\n return (module.exports = _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) {\n return typeof o;\n } : function (o) {\n return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o;\n }, module.exports.__esModule = true, module.exports[\"default\"] = module.exports), _typeof(o);\n}\nmodule.exports = _typeof, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@babel/runtime/helpers/typeof.js\n// module id = 3\n// module chunks = 0","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","var toPropertyKey = require(\"./toPropertyKey.js\");\nfunction _defineProperty(obj, key, value) {\n key = toPropertyKey(key);\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n return obj;\n}\nmodule.exports = _defineProperty, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@babel/runtime/helpers/defineProperty.js\n// module id = 5\n// module chunks = 0","var arrayWithoutHoles = require(\"./arrayWithoutHoles.js\");\nvar iterableToArray = require(\"./iterableToArray.js\");\nvar unsupportedIterableToArray = require(\"./unsupportedIterableToArray.js\");\nvar nonIterableSpread = require(\"./nonIterableSpread.js\");\nfunction _toConsumableArray(arr) {\n return arrayWithoutHoles(arr) || iterableToArray(arr) || unsupportedIterableToArray(arr) || nonIterableSpread();\n}\nmodule.exports = _toConsumableArray, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@babel/runtime/helpers/toConsumableArray.js\n// module id = 6\n// module chunks = 0","// TODO(Babel 8): Remove this file.\n\nvar runtime = require(\"../helpers/regeneratorRuntime\")();\nmodule.exports = runtime;\n\n// Copied from https://github.com/facebook/regenerator/blob/main/packages/runtime/runtime.js#L736=\ntry {\n regeneratorRuntime = runtime;\n} catch (accidentalStrictMode) {\n if (typeof globalThis === \"object\") {\n globalThis.regeneratorRuntime = runtime;\n } else {\n Function(\"r\", \"regeneratorRuntime = r\")(runtime);\n }\n}\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@babel/runtime/regenerator/index.js\n// module id = 7\n// module chunks = 0","function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) {\n try {\n var info = gen[key](arg);\n var value = info.value;\n } catch (error) {\n reject(error);\n return;\n }\n if (info.done) {\n resolve(value);\n } else {\n Promise.resolve(value).then(_next, _throw);\n }\n}\nfunction _asyncToGenerator(fn) {\n return function () {\n var self = this,\n args = arguments;\n return new Promise(function (resolve, reject) {\n var gen = fn.apply(self, args);\n function _next(value) {\n asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"next\", value);\n }\n function _throw(err) {\n asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"throw\", err);\n }\n _next(undefined);\n });\n };\n}\nmodule.exports = _asyncToGenerator, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@babel/runtime/helpers/asyncToGenerator.js\n// module id = 8\n// module chunks = 0","var arrayLikeToArray = require(\"./arrayLikeToArray.js\");\nfunction _unsupportedIterableToArray(o, minLen) {\n if (!o) return;\n if (typeof o === \"string\") return arrayLikeToArray(o, minLen);\n var n = Object.prototype.toString.call(o).slice(8, -1);\n if (n === \"Object\" && o.constructor) n = o.constructor.name;\n if (n === \"Map\" || n === \"Set\") return Array.from(o);\n if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return arrayLikeToArray(o, minLen);\n}\nmodule.exports = _unsupportedIterableToArray, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@babel/runtime/helpers/unsupportedIterableToArray.js\n// module id = 9\n// module chunks = 0","function _arrayWithHoles(arr) {\n if (Array.isArray(arr)) return arr;\n}\nmodule.exports = _arrayWithHoles, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@babel/runtime/helpers/arrayWithHoles.js\n// module id = 10\n// module chunks = 0","function _iterableToArray(iter) {\n if (typeof Symbol !== \"undefined\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter);\n}\nmodule.exports = _iterableToArray, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@babel/runtime/helpers/iterableToArray.js\n// module id = 11\n// module chunks = 0","function _arrayLikeToArray(arr, len) {\n if (len == null || len > arr.length) len = arr.length;\n for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i];\n return arr2;\n}\nmodule.exports = _arrayLikeToArray, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@babel/runtime/helpers/arrayLikeToArray.js\n// module id = 12\n// module chunks = 0","function _nonIterableRest() {\n throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}\nmodule.exports = _nonIterableRest, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@babel/runtime/helpers/nonIterableRest.js\n// module id = 13\n// module chunks = 0","var arrayWithHoles = require(\"./arrayWithHoles.js\");\nvar iterableToArrayLimit = require(\"./iterableToArrayLimit.js\");\nvar unsupportedIterableToArray = require(\"./unsupportedIterableToArray.js\");\nvar nonIterableRest = require(\"./nonIterableRest.js\");\nfunction _slicedToArray(arr, i) {\n return arrayWithHoles(arr) || iterableToArrayLimit(arr, i) || unsupportedIterableToArray(arr, i) || nonIterableRest();\n}\nmodule.exports = _slicedToArray, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@babel/runtime/helpers/slicedToArray.js\n// module id = 14\n// module chunks = 0","let { systemVar, parseUriOptions, hwnd, nativeLayout, websdkParams, act_script } = require('./vpadn-sdk-parameters.partial')\nlet { getCookie, endsWith, parseParamsFromUrl, regexp_replace, parseCtidToObj, fade, fadeLock, fadeForFlrec, getParams, calculateViewRate } = require('./vpadn-sdk-features.partial')\nlet { coveredBannerCheck, isInCrossDomain, coveredNaCheck, arrangeReqAdUrl, getReqAdParameters, checkAdType, queryWebApiPermission, isUrl, isInGAM } = require('./vpadn-sdk-check.partial')\n// --------- process flow -------------\nconst getAd = async (vponTag, iframeNum) => {\n let ctidObj = {};\n\n if (getCookie(systemVar.cookieCTID)) {\n ctidObj = parseCtidToObj(getCookie(systemVar.cookieCTID))\n } else if (window.localStorage.getItem(systemVar.cookieCTID)) {\n ctidObj = parseCtidToObj(window.localStorage.getItem(systemVar.cookieCTID));\n }\n\n const { ctid, timestamp } = ctidObj\n var reqAdParameters = getReqAdParameters(vponTag)\n var reqURL = arrangeReqAdUrl(systemVar.reqAdUrl, reqAdParameters)\n var debugMode = vponTag.getAttribute(systemVar.debug) === 'true' || vponTag.getAttribute(systemVar.debug) === '1'\n var adType = checkAdType(vponTag)\n var screenDensity = window.devicePixelRatio ? window.devicePixelRatio : 1;\n\n var qs = ''\n if (getCookie(systemVar.cookieCTID) != 'undefined') {\n qs = `&Ctid=${ctid}`\n if (getCookie('Vpadn-Sid') != 'undefined') {\n qs += '&Vpadn-Sid=' + getCookie('Vpadn-Sid')\n }\n }\n if (vponTag.getAttribute(systemVar.ad_identifier) !== null) {\n qs += `&adv_id=${vponTag.getAttribute(systemVar.ad_identifier)}`\n }\n if (vponTag.getAttribute(systemVar.ad_is_lat) !== null) {\n qs += `&adv_id_lat=${vponTag.getAttribute(systemVar.ad_is_lat)}`\n }\n\n //Check if getTargetingMap attribute is not null.\n let stringfyGAMResult = encodeURIComponent(vponTag.getAttribute(systemVar.gamTargetingMap));\n if (!!stringfyGAMResult) {\n qs += `&${systemVar.contentData}=${stringfyGAMResult}`;\n }\n\n //20210105: test for attr of GAM\n if (timestamp !== 'undefined') {\n qs += `&Ctiddob=${timestamp}`\n //qs += `&Ctiddob=1635696000000000000`\n }\n\n if (debugMode) {\n console.log(' ---------------------------------------------------------------------------')\n console.log('getAd() Url -> ' + reqURL)\n }\n\n reqURL = reqURL + qs + '&u_sd=' + screenDensity + '×tamp=' + new Date().getMilliseconds();\n const adRequestObj = await collectDataForAdRequest({vponTag});\n if (location && location.href) {\n adRequestObj.requestBody = {...adRequestObj.requestBody, referer: location.href};\n }\n\n const icookBidArr = ['8a80854b806fa8710181182c55a34f1b', '8a80854b806fa87101808e0434c8602f'];\n\n if (icookBidArr.indexOf(reqAdParameters.bid) !== -1) {\n const groupId = getCookie('Vpadn-Sid') ? getCookie('Vpadn-Sid') : `${ctid}_${new Date().getTime()}`;\n debugForIcook(groupId);\n }\n\n sendAdRequest({\n adRequestObj,\n vponTag,\n iframeNum,\n reqAdUrl: reqURL,\n adType\n });\n}\n\n/**\n * Send ad request to banner api server\n * @param {object} context ad context\n */\nfunction sendAdRequest(context) {\n const { adRequestObj, vponTag, iframeNum, reqAdUrl, adType } = context;\n const { requestHeader, requestBody } = adRequestObj;\n const requestOptions = websdkParams.apiPayload.adRequest;\n let reqId = null;\n\n if (requestBody) {\n requestOptions.method = 'POST';\n requestOptions.body = JSON.stringify(requestBody)\n }\n\n if (requestHeader) {\n requestOptions.headers = requestHeader;\n }\n\n fetch(reqAdUrl, requestOptions).then(response => {\n reqId = response.headers.get('req_id');\n return response.json();\n }).catch(error => {\n console.log(error);\n }).then(response => {\n if (reqId) {\n response = {reqId, ...response};\n }\n if (adType === 'banner') {\n reqCallback(vponTag, iframeNum, response);\n }\n\n if (adType === 'mi') {\n reqCallbackInt(vponTag, iframeNum, response);\n }\n\n if (adType === 'na') {\n reqCallbackNa(vponTag, response);\n }\n });\n}\n\nasync function collectDataForAdRequest(context) {\n const { vponTag } = context;\n let requestBody = null;\n let requestHeader = null;\n\n if (navigator.userAgentData && typeof navigator.userAgentData.getHighEntropyValues === 'function') {\n try {\n let uaData = await navigator.userAgentData.getHighEntropyValues([\n 'architecture',\n 'bitness',\n 'model',\n 'platformVersion',\n 'uaFullVersion',\n 'fullVersionList'\n ]);\n for (let i in uaData) {\n if (typeof uaData[i] !== 'boolean' && !uaData[i].length) {\n delete uaData[i];\n }\n }\n const clientHintData = convertToHeaderFormat(uaData);\n requestHeader = {...clientHintData};\n } catch(error) {\n console.log(error);\n }\n }\n\n if ('browsingTopics' in document &&\n document.featurePolicy.allowsFeature('browsing-topics')) {\n try {\n const topicsData = await getTopics();\n\n if (topicsData.length) {\n const topicIds = [];\n let topicTaxonomyVer = \"0\";\n\n topicsData.forEach(item => {\n const { topic, taxonomyVersion } = item;\n\n if (topic) {\n topicIds.push(topic);\n }\n\n if (taxonomyVersion && parseInt(taxonomyVersion) > parseInt(topicTaxonomyVer)) {\n topicTaxonomyVer = taxonomyVersion;\n }\n });\n\n requestBody = {\n topicIds,\n taxonomyVersion: topicTaxonomyVer,\n ...requestBody\n };\n }\n } catch(error) {\n console.log(error);\n }\n }\n\n if (vponTag.getAttribute(systemVar.lat) && vponTag.getAttribute(systemVar.lon) && vponTag.getAttribute(systemVar.accurary)) {\n requestBody = {\n uLat: vponTag.getAttribute(systemVar.lat),\n uLon: vponTag.getAttribute(systemVar.lon),\n locAcc: vponTag.getAttribute(systemVar.accurary),\n ...requestBody\n };\n } else {\n if (navigator.geolocation && typeof navigator.geolocation.getCurrentPosition === 'function') {\n try {\n const queryPermissionResult = await queryWebApiPermission('geolocation');\n if (queryPermissionResult.state === 'granted') {\n const pos = await getGeolocation();\n requestBody = {\n uLat: pos.coords.latitude,\n uLon: pos.coords.longitude,\n locAcc: pos.coords.accuracy,\n ...requestBody\n };\n }\n } catch(error) {\n console.log(error);\n }\n }\n }\n\n return {\n requestHeader,\n requestBody\n }\n}\n\nfunction getGeolocation() {\n return new Promise((resolve, reject) => {\n const options = {\n enableHighAccuracy: true,\n timeout: 10000,\n maximumAge: 0,\n };\n\n function success(pos) {\n resolve(pos);\n }\n\n function error(err) {\n console.warn(`ERROR(${err.code}): ${err.message}`);\n reject(err);\n }\n\n navigator.geolocation.getCurrentPosition(success, error, options);\n });\n}\n\nasync function getTopics() {\n try {\n const topics = await document.browsingTopics();\n return topics;\n } catch(error) {\n return [];\n }\n}\n\nfunction convertToHeaderFormat(uaData) {\n // Define a function that will be used to serialize individual values into the correct format.\n let serialize = (v) => {\n return v.length > 0 ? JSON.stringify(v) : ``;\n }\n // Define a function that will be used to serialize an array of brand values into the correct format.\n let serializeBrandArray = (a) => {\n let result = ``;\n a.forEach((i) => {\n if (result.length > 0) {\n result += `, `;\n }\n result += `${serialize(i.brand)};v=${serialize(i.version)}`\n })\n return result;\n }\n\n const uaDataFormated = {};\n\n if (uaData.brands) {\n uaDataFormated[\"x-sec-ch-ua\"] = serializeBrandArray(uaData.brands);\n }\n\n if (uaData.fullVersionList) {\n uaDataFormated[\"x-sec-ch-ua-full-version-list\"] = serializeBrandArray(uaData.fullVersionList);\n }\n\n if (typeof uaData.mobile === 'boolean') {\n uaDataFormated[\"x-sec-ch-ua-mobile\"] = uaData.mobile ? `?1` : `?0`;\n }\n\n if (uaData.model) {\n uaDataFormated[\"x-sec-ch-ua-model\"] = serialize(uaData.model);\n }\n\n if (uaData.platform) {\n uaDataFormated[\"x-sec-ch-ua-platform\"] = serialize(uaData.platform);\n }\n\n if (uaData.platformVersion) {\n uaDataFormated[\"x-sec-ch-ua-platform-version\"] = serialize(uaData.platformVersion);\n }\n\n // Create a new object containing UA-CH values in the same format as the UA-CH HTTP headers.\n return uaDataFormated;\n}\n\n/**\n * find Vpon iframe wrapper in top window\n * @returns {Boolean} result\n */\nconst findTopWindowVponIframeWrapper = (selector) => {\n try {\n const topFrames = [...window.top.document.querySelectorAll('iframe')];\n if (topFrames.length === 0) {\n return null;\n }\n const topWindowVponIframeWrapper = topFrames.find((iframe, index) => {\n const result = findInnerIframeTarget([iframe], selector);\n return result;\n });\n return topWindowVponIframeWrapper;\n } catch(err) {\n console.warn(err);\n return false;\n }\n};\n\nconst findInnerIframeTarget = (iframes, selector) => {\n let finalResult = false;\n\n const result = iframes.some(iframe => {\n return iframe.classList.contains(selector) || (iframe.contentDocument && iframe.contentDocument.querySelector(selector)) ? true : false;\n });\n\n if (result) {\n finalResult = true;\n } else {\n iframes.forEach(iframe => {\n const innerIframes = iframe.contentDocument && iframe.contentDocument.querySelectorAll('iframe') ? [...iframe.contentDocument.querySelectorAll('iframe')] : [];\n if (innerIframes.length !== 0) {\n const result = innerIframes.some(iframe => {\n const result = findInnerIframeTarget([iframe], selector);\n return result;\n });\n if (result) {\n finalResult = true;\n }\n }\n });\n }\n\n return finalResult;\n}\n\nfunction injectScript(path) {\n return new Promise(function(resolve, reject) {\n const script = document.createElement('script');\n script.type = 'text/javascript';\n script.src = path;\n script.addEventListener('load', function() {\n resolve();\n });\n document.head.appendChild(script);\n });\n}\n\nconst displayMultiAd = (element, iframeSrc, vponTag, responseMessage) => {\n const urlSearch = new URL(iframeSrc).search;\n const urlSearchParams = new URLSearchParams(urlSearch);\n const clkid = urlSearchParams.get('subtype') === 'flrec' ? decodeURIComponent(urlSearchParams.get('clickUrl').split('d=')[1].split('&')[0]) : urlSearchParams.get('clkid');\n const isInTopframe = window.top === window;\n const topWindow = isInTopframe ? window : window.top;\n const isMultiAdHaveVideo = Boolean(element.body.querySelector(\"#iframe_xlrecv\") || element.body.querySelector(\"#iframe_1_3_isv\"));\n let iframeXLRECContent = isMultiAdHaveVideo ? element.body.querySelector(\"#iframe_xlrecv\").innerHTML : element.body.querySelector(\"#iframe_xlrec\").innerHTML;\n let iframe13ISContent = isMultiAdHaveVideo ? element.body.querySelector(\"#iframe_1_3_isv\").innerHTML : element.body.querySelector(\"#iframe_1_3_is\").innerHTML;\n const decoder = document.createElement('textarea');\n decoder.innerHTML = iframeXLRECContent;\n iframeXLRECContent = decoder.innerText;\n decoder.innerHTML = iframe13ISContent;\n iframe13ISContent = decoder.innerText;\n const iframe1 = vponTag.querySelectorAll('iframe')[0];\n const iframe1ClassName = `Vpon__flrec__${new Date().getTime()}`;\n iframe1.classList.add(iframe1ClassName);\n iframe1.style.opacity = 0;\n const iframe2Container = document.createElement('div');\n const iframe2 = document.createElement(\"iframe\");\n iframe2.style.opacity = 0;\n const iframe2Close = document.createElement('a');\n iframe2Close.id = 'iframe2__close';\n iframe2Close.classList.add('Vpon_floatBanner-close');\n iframe2Close.innerHTML = '';\n let VponVideoContainer = null;\n isMultiPartAd = true;\n if (isMultiAdHaveVideo) {\n VponVideoContainer = document.createElement(\"div\");\n VponVideoContainer.id = \"videoContainer\";\n VponVideoContainer.style.position = 'relative';\n VponVideoContainer.style.opacity = 0;\n }\n iframe2Container.id = \"Vpon_floatBanner\";\n iframe2Container.classList += \"Vpon_floatBanner\";\n iframe2Container.appendChild(iframe2);\n const style = document.createElement(\"style\");\n const head = window.top.document.head || window.top.document.querySelector(\"head\")[0];\n head.appendChild(style);\n style.type = \"text/css\";\n const css = `\n .Vpon_floatBanner {\n position: fixed;\n top: 0;\n left: 50%;\n z-index: 2147483647;\n width: 100%;\n max-width: 640px;\n height: 31.25vw;\n max-height: 200px;\n transform: translate(-50%, -100%);\n transition: all .4s ease;\n }\n .Vpon_floatBanner--animation {\n transform: translate(-50%, 0);\n }\n .Vpon_floatBanner iframe {\n width: 100%;\n height: 100%;\n border: 0;\n }\n .Vpon_floatBanner-close {\n position: absolute;\n top: 0;\n right: 0;\n z-index: 9999999;\n display: block;\n width: 30px;\n height: 30px;\n }\n .Vpon_floatBanner-close img {\n max-width: 100%;\n border: none;\n vertical-align: top;\n user-select: none;\n user-drag: none;\n -webkit-user-select: none;\n -webkit-user-drag: none;\n }\n `;\n const iframe1Css = `\n \n `;\n const iframe2Css = `\n \n `;\n\n style.appendChild(document.createTextNode(css));\n\n topWindow.document.body.appendChild(iframe2Container);\n const { reqId } = responseMessage;\n adChoicePanel(iframe1.parentNode, vponTag, {\n adType: 'banner',\n reqId\n }, function() {\n const iframe2Container = document.querySelector('#Vpon_floatBanner');\n if (iframe2Container) {\n iframe2Container.remove();\n topWindow.removeEventListener(\"scroll\", handleSubTypeIframeSwitch, false);\n }\n if (iframe1.contentWindow.video && typeof iframe1.contentWindow.video.destroy === 'function') {\n iframe1.contentWindow.video.destroy();\n }\n });\n VponLogoPanel(iframe1.parentNode, vponTag, 'banner');\n VponLogoPanel(iframe2Container, vponTag, 'banner');\n\n const replaceAssets = (content) => {\n return content.replace(/.\\/assets/g, `${new URL(iframeSrc).origin}${new URL(iframeSrc).pathname}assets`);\n }\n iframeXLRECContent = replaceAssets(iframeXLRECContent);\n iframe13ISContent = replaceAssets(iframe13ISContent);\n\n let isIframe1Ready = false;\n let isIframe2Ready = false;\n let video = null;\n let isInCut2 = null;\n\n window.addEventListener('message', function(e) {\n if (e.data.event === 'iframe1Ready') {\n isIframe1Ready = true;\n iframe1Init();\n }\n });\n\n topWindow.addEventListener('message', function(e) {\n if (e.data.event === 'iframe2Ready') {\n isIframe2Ready = true;\n iframe2Init();\n }\n });\n\n const iframe1Init = () => {\n initialVideo(function() {\n initialFlrecEnv();\n setClickEvent(iframe1.contentDocument.querySelector(\"#vponAdWrapper\"), 'cut1');\n\n topWindow.addEventListener(\"scroll\", handleSubTypeIframeSwitch, false);\n\n if (isMultiAdHaveVideo) {\n VponVideoContainer.style.opacity = 1;\n\n topWindow.document.addEventListener(\"visibilitychange\", function () {\n if (document.visibilityState === \"hidden\") {\n video.pause();\n } else {\n topWindow.dispatchEvent(new CustomEvent(\"scroll\"));\n }\n });\n }\n\n topWindow.dispatchEvent(new CustomEvent(\"scroll\"));\n iframe1.style.opacity = 1;\n\n checkMultiAdIsReady();\n });\n }\n\n const iframe2Init = () => {\n setClickEvent(iframe2.contentDocument.querySelector(\"#vponAdWrapper\"), 'cut2');\n iframe2Container.appendChild(iframe2Close);\n iframe2.style.opacity = 1;\n if (isMultiAdHaveVideo) {\n try {\n if (iframe2.contentWindow.video.destroy) {\n iframe2.contentWindow.video.destroy();\n }\n } catch (err) {\n\n }\n\n const videoContainer2 = iframe2.contentDocument.querySelector(\"#videoDivTag\");\n videoContainer2.innerHTML = '';\n }\n checkMultiAdIsReady();\n }\n\n const checkMultiAdIsReady = () => {\n if (isIframe1Ready && isIframe2Ready) {\n topWindow.dispatchEvent(new CustomEvent(\"scroll\"));\n }\n }\n\n const initialVideo = (callback) => {\n if (!isMultiAdHaveVideo) {\n callback();\n return;\n }\n\n try {\n if (iframe1.contentWindow.video.destroy) {\n iframe1.contentWindow.video.destroy();\n }\n } catch (err) {\n console.warn(err);\n }\n\n const videoContainer1 = iframe1.contentDocument.querySelector(\"#videoDivTag\");\n videoContainer1.innerHTML = '';\n topWindow.document.body.appendChild(VponVideoContainer);\n let videoConfig = iframe1.contentWindow.videoConfig;\n videoConfig.track = videoConfig.track || {};\n videoConfig.track.e = clkid;\n if (urlSearchParams.get('prog')) {\n videoConfig.track.progress = urlSearchParams.get('prog');\n }\n Object.keys(videoConfig).forEach((key) => {\n if (typeof videoConfig[key] === \"string\" && videoConfig[key].indexOf(\"./assets\") !== -1) {\n videoConfig[key] = replaceAssets(videoConfig[key]);\n }\n });\n\n let videoContainerSelector = topWindow.document.querySelector('#videoContainer');\n video = new VponVideo(videoContainerSelector, videoConfig);\n video.create();\n video.onCanBePlay(callback);\n };\n\n const initialFlrecEnv = () => {\n const VPADN_CREATIVE = window.VPADN_CREATIVE || {};\n const paramsString = new URL(iframeSrc).search;\n const searchParams = new URLSearchParams(paramsString);\n VPADN_CREATIVE.isDemo = searchParams.get(\"isDemo\");\n VPADN_CREATIVE.clickTag = searchParams.get(\"clickTag\");\n VPADN_CREATIVE.lnk = VPADN_CREATIVE.clickTag ? null : searchParams.get(\"lnk\");\n VPADN_CREATIVE.clkid_unencoded = VPADN_CREATIVE.isDemo || VPADN_CREATIVE.clickTag ? null : clkid;\n VPADN_CREATIVE.prog = VPADN_CREATIVE.isDemo || VPADN_CREATIVE.clickTag ? null : searchParams.get(\"prog\");\n\n // Serve inside Vpon platform\n if (VPADN_CREATIVE.lnk) {\n VPADN_CREATIVE.clickUrl = `${encodeURIComponent(VPADN_CREATIVE.lnk)}`;\n if (VPADN_CREATIVE.clkid_unencoded) {\n VPADN_CREATIVE.clickEndPoint = \"https://tw-api.vpadn.com/api/webviewAdClick/\";\n VPADN_CREATIVE.clickUrl = `${VPADN_CREATIVE.clickEndPoint}?d=${encodeURIComponent(VPADN_CREATIVE.clkid_unencoded)}&ls=${encodeURIComponent(VPADN_CREATIVE.lnk)}`;\n }\n } else {\n VPADN_CREATIVE.clickUrl = null;\n }\n\n VPADN_CREATIVE.handleClick = (e, url, beforeClick) => {\n if (!VPADN_CREATIVE.clickUrl) {\n return;\n }\n if (typeof beforeClick === \"function\") {\n beforeClick();\n }\n support.click(e);\n support.open(url);\n };\n console.log(VPADN_CREATIVE);\n window.VPADN_CREATIVE = VPADN_CREATIVE;\n }\n\n const setClickEvent = (target, state) => {\n target.addEventListener('click', function(event) {\n adCurrentState = state;\n const creativeRect = target.getBoundingClientRect();\n const clickPositionObj = {\n clickPositionX: (((event.clientX - creativeRect.x) / creativeRect.width) * 100).toFixed(2),\n clickPositionY: (((event.clientY - creativeRect.y) / creativeRect.height) * 100).toFixed(2),\n }\n handleOpenBrowser({clickPosition: clickPositionObj, landing: VPADN_CREATIVE.clickUrl}, false, 'banner');\n });\n }\n\n let isIframe2Exist = true;\n let vponTagOffsetTarget = iframe1;\n if (!isInTopframe) {\n const topWindowVponIframeWrapper = findTopWindowVponIframeWrapper(iframe1ClassName);\n if (topWindowVponIframeWrapper) {\n vponTagOffsetTarget = topWindowVponIframeWrapper;\n }\n }\n\n const iframe2TransitionEnd = () => {\n let videoContainer1 = iframe1.contentDocument.querySelector(\"#videoDivTag\");\n let videoCurrentTime = video.getCurrentTime();\n videoContainer1.appendChild(VponVideoContainer);\n video.playAtPosition(videoCurrentTime);\n }\n\n const handleSubTypeIframeSwitch = () => {\n const vponTagOffsetTop = vponTagOffsetTarget.getBoundingClientRect().top;\n let switchOffset = 0;\n if (isMultiAdHaveVideo) {\n if (!iframe1.contentDocument) {\n return;\n }\n switchOffset = iframe1.contentDocument.querySelector(\"#videoDivTag\").clientHeight / 2;\n if (isIframe2Exist ? topWindow.innerHeight - vponTagOffsetTop >= switchOffset : topWindow.innerHeight - vponTagOffsetTop >= switchOffset && vponTagOffsetTop >= -1 * switchOffset) {\n video.play();\n } else {\n video.pause();\n }\n }\n\n if (!isIframe2Exist || !isIframe2Ready) {\n return;\n }\n\n if (isMultiAdHaveVideo) {\n let videoContainer1 = iframe1.contentDocument.querySelector(\"#videoDivTag\");\n let videoContainer2 = iframe2.contentDocument.querySelector(\"#videoDivTag\");\n let videoCurrentTime = video.getCurrentTime();\n\n if (VponVideoContainer.style.display !== 'block') {\n VponVideoContainer.style.display = 'block';\n }\n\n if (vponTagOffsetTop > -1 * switchOffset || !isIframe2Exist) {\n if (isInCut2 === false) {\n return;\n } else {\n videoContainer1.innerHTML = \"\";\n video.changeStyle({\n mute: {\n position: \"rightBottom\",\n },\n countdown: {\n display: \"block\",\n },\n });\n videoContainer1.appendChild(VponVideoContainer);\n video.playAtPosition(videoCurrentTime);\n iframe2Close.style.opacity = 0;\n iframe2Close.style.transition = 'none';\n fadeForFlrec(iframe2Close, 'out', 0, handleCloseButtonClick);\n iframe2Container.classList.remove(\"Vpon_floatBanner--animation\");\n iframe2.removeEventListener('transitionend', iframe2TransitionEnd);\n iframe2.addEventListener('transitionend', iframe2TransitionEnd);\n iframe2Close.removeEventListener(\"click\", handleCloseButtonClick);\n isInCut2 = false;\n }\n } else {\n if (isInCut2) {\n return;\n } else {\n iframe2.removeEventListener('transitionend', iframe2TransitionEnd);\n videoContainer2.innerHTML = \"\";\n videoContainer2.appendChild(VponVideoContainer);\n video.playAtPosition(videoCurrentTime);\n video.changeStyle({\n mute: {\n position: \"leftBottom\",\n },\n countdown: {\n display: \"none\",\n },\n });\n iframe2Container.classList.add(\"Vpon_floatBanner--animation\");\n fadeForFlrec(iframe2Close, 'in', 3, function() {\n iframe2Close.removeEventListener(\"click\", handleCloseButtonClick);\n iframe2Close.addEventListener(\"click\", handleCloseButtonClick);\n });\n if (!isFlrecTrackingSended) {\n vpon_ad_send_impression(responseMessage, 100);\n vpon_ad_send_3rd_party_tracking(responseMessage, vponTag);\n isFlrecTrackingSended = true;\n }\n isInCut2 = true;\n }\n }\n } else {\n if (vponTagOffsetTop <= 0) {\n if (isInCut2) {\n return;\n } else {\n iframe2Container.classList.add(\"Vpon_floatBanner--animation\");\n fadeForFlrec(iframe2Close, 'in', 3, function() {\n iframe2Close.removeEventListener(\"click\", handleCloseButtonClick);\n iframe2Close.addEventListener(\"click\", handleCloseButtonClick);\n });\n if (!isFlrecTrackingSended) {\n vpon_ad_send_impression(responseMessage, 100);\n vpon_ad_send_3rd_party_tracking(responseMessage, vponTag);\n isFlrecTrackingSended = true;\n }\n isInCut2 = true;\n }\n } else {\n if (!isInCut2) {\n return;\n } else {\n iframe2Close.style.opacity = 0;\n iframe2Close.style.transition = 'none';\n fadeForFlrec(iframe2Close, 'out', 0, handleCloseButtonClick);\n iframe2Container.classList.remove(\"Vpon_floatBanner--animation\");\n\n iframe2Close.removeEventListener(\"click\", handleCloseButtonClick);\n isInCut2 = false;\n }\n }\n }\n };\n\n const handleCloseButtonClick = (e) => {\n if (iframe2Close.style.opacity !== \"1\") return;\n const videoContainer1 = isMultiAdHaveVideo ? iframe1.contentDocument.querySelector(\"#videoDivTag\") : null;\n const videoCurrentTime = isMultiAdHaveVideo ? video.getCurrentTime() : null;\n if (videoContainer1 && !videoContainer1.querySelector(\"video\")) {\n videoContainer1.innerHTML = \"\";\n videoContainer1.appendChild(VponVideoContainer);\n video.playAtPosition(videoCurrentTime);\n video.changeStyle({\n mute: {\n position: \"rightBottom\",\n },\n countdown: {\n display: \"block\",\n },\n });\n }\n isIframe2Exist = false;\n iframe2Container.remove();\n topWindow.removeEventListener(\"scroll\", handleSubTypeIframeSwitch, false);\n topWindow.dispatchEvent(new CustomEvent(\"scroll\"));\n };\n iframe1.contentWindow.document.open();\n iframe1.contentWindow.document.write(iframeXLRECContent.split('')[0] + iframe1Css + '' + iframeXLRECContent.split('')[1]);\n iframe1.contentWindow.document.close();\n iframe2.contentWindow.document.open();\n iframe2.contentWindow.document.write(iframe13ISContent.split('')[0] + iframe2Css + '' + iframe13ISContent.split('')[1]);\n iframe2.contentWindow.document.close();\n}\n\n\nconst ajax = (url, callback) => {\n var callbackfunc = 'vpon' + Math.random().toString(10).substring(2, 15)\n window[callbackfunc] = callback\n addScript(url + '&callbackfunc=' + callbackfunc)\n}\n\nconst addScript = (url) => {\n var script = document.createElement('script')\n script.src = url\n document.body.appendChild(script)\n}\n\nconst addScriptUnderVponTag = (url, vponTag) => {\n console.log('[web-sdk]addScriptUnderVponTag: poc to iAS-SDK viewability issues')\n let script = document.createElement('script');\n script.src = url;\n script.id = '3ptcn';\n vponTag.prepend(script);\n}\n\nconst handleMutationObserver = (node , options, vponTag, adType) => {\n var observer = new MutationObserver(function (mutations, observer) {\n mutations.forEach(function(mutation) {\n VponLogoPanel(node, vponTag, adType);\n observer.disconnect();\n });\n });\n observer.observe(node, options);\n}\n\nconst extrcatParamsFromVponTag = (vponTag)=>{\n let reqAdParameters = getReqAdParameters(vponTag)\n let debugMode = vponTag.getAttribute(systemVar.debug) === 'true' || vponTag.getAttribute(systemVar.debug) === '1'\n let adRequestCallBack = reqAdParameters.adRequestCallBack\n let openTab = vponTag.getAttribute(systemVar.openTab)\n openTab = openTab ? (openTab == 'true' ? true : false) : true\n return {reqAdParameters, debugMode, adRequestCallBack, openTab}\n}\n\nconst handleReqCallbackToPubs = (adRequestCallBack, statusCode, debugMode) => {\n if (adRequestCallBack != null) {\n try {\n var callbackCode = -1\n if (statusCode == 0) { // return code 0 when adn server return code 0, others return code -1.\n callbackCode = 0\n }\n new Function(adRequestCallBack + '(' + callbackCode + ')')()\n } catch (err) {\n if (debugMode) {\n console.log(err)\n }\n }\n }\n}\n\nconst printDebugToConsole = (jsonObj) => {\n for (let key in jsonObj) {\n if (jsonObj.hasOwnProperty(key)) {\n console.log(key + ' -> ' + jsonObj[key])\n }\n }\n console.log(' ---------------------------------------------------------------------------')\n}\n\nconst reqCallback = (vponTag, iframeNum, responseJsonObj) => {\n\n const {reqAdParameters, debugMode, adRequestCallBack, openTab} = extrcatParamsFromVponTag(vponTag)\n\n // var debugMode = iframeInfos[systemVar.reqAdFrameId].debugMode\n if (debugMode) {\n printDebugToConsole(responseJsonObj);\n }\n\n var statusCode = responseJsonObj['Vpadn-Status-Code']\n\n handleReqCallbackToPubs(adRequestCallBack, statusCode, debugMode);\n\n if (statusCode == 0) {\n var adURL = responseJsonObj['Location'];\n //adURL = adURL.replace(\"//m.vpon.com/\", \"//a2.vpon.com/img/test/mi/Hsiang/websdk-staging-test/\");\n var impURL = responseJsonObj['Vpadn-Imp']\n var clickURL = responseJsonObj['Vpadn-Clk']\n var vpadnSeq = responseJsonObj['Vpadn-Seq']\n var vpadnSid = responseJsonObj['Vpadn-Sid']\n var uid = responseJsonObj['Vpadn-Guid']\n var aid = responseJsonObj['Vpadn-Adid']\n var bid = reqAdParameters.bid\n var reqId = responseJsonObj['reqId']\n var adType = ''\n\n if (adURL.indexOf('t=ban_img') > 0) {\n adURL = adURL.replace('vpadn-tpl.html', 'vpadn-tpl-ban_w-cs.html')\n } else if (adURL.indexOf('t=ban_vid') > 0) {\n adURL = adURL.replace('vpadn-tpl.html', 'vpadn-tpl-ban-vid_w.html')\n }\n adType = 'banner'\n adURL = adURL + '&openTab=' + openTab + '&vpadnSeq=' + vpadnSeq + '&vpadnSid=' + vpadnSid + '&uid=' + uid + '&aid=' + aid + '&bid=' + bid + '&clickUrl=' + encodeURIComponent(replaceAPIMacro(clickURL))\n\n var main_domain = parseUri(window.location).host\n // set cookie\n //document.cookie = 'Vpadn-Guid=' + x['Vpadn-Guid'] + '; max-age=' + 63072000 + '; domain=' + main_domain + '; path=/'\n document.cookie = 'Vpadn-Sid=' + responseJsonObj['Vpadn-Sid'] + '; max-age=' + 1800 + '; domain=' + main_domain + '; path=/; SameSite=None; Secure'\n document.cookie = 'Vpadn-Seq=' + responseJsonObj['Vpadn-Seq'] + '; max-age=' + 1800 + '; domain=' + main_domain + '; path=/; SameSite=None; Secure'\n\n var reqAdFrameId = ''\n vponTag.querySelectorAll('iframe').forEach(function (iframe) {\n if (iframe.id && endsWith(iframe.id, iframeNum)) {\n reqAdFrameId = iframe.id\n }\n })\n var responseMessage = {\n adURL: adURL,\n impURL: impURL,\n thirdPartyTagString: getUrlParameterByName('3_p_t_c', adURL),\n multipleThirdPartyTrackings: getUrlParameterByName('3_p_t_c_n', adURL),\n thr_track_array: getUrlParameterByName('thr_track_array', adURL),\n reqId\n }\n\n let locationURL = responseJsonObj.Location;\n const locationUrlSearch = new URL(locationURL).search;\n const locationUrlSearchParams = new URLSearchParams(locationUrlSearch);\n\n if (locationUrlSearchParams.get('subtype') === 'ulrec' || locationUrlSearchParams.get('t') === 'ulrec') {\n handleUlrecAd({reqAdFrameId, vponTag, responseMessage, adType});\n return;\n }\n\n var options = {\n 'childList': true,\n 'attributes':true\n };\n handleMutationObserver(document.getElementById(reqAdFrameId).parentNode, options, vponTag, adType);\n\n if (locationUrlSearchParams.get('subtype') === 'flrec' || locationUrlSearchParams.get('t') === 'flrec') {\n const req = new XMLHttpRequest();\n req.open('GET', locationURL);\n req.send();\n req.onload = function(e) {\n Promise.all([\n injectScript('https://img-cs.vpadn.com/js/cs-vpon-video-sdk.min.js'),\n injectScript('https://m.vpon.com/sdk/vpon-support.js')\n ])\n .then(response => {\n const parser = new DOMParser();\n const element = parser.parseFromString(e.target.response, \"text/html\");\n displayMultiAd(element, adURL, vponTag, responseMessage);\n vpon_ad_loaded(reqAdFrameId, adType, vponTag, responseMessage);\n coverCheckTimer(reqAdFrameId, vponTag, responseMessage, 'flrec');\n }).catch(error => {\n console.warn(error);\n });\n }\n return;\n }\n\n displayAd(reqAdFrameId, vponTag, responseMessage, adType);\n }\n}\n\nconst handleUlrecAd = (config) => {\n const { reqAdFrameId, vponTag, responseMessage, adType } = config;\n const { adURL, reqId } = responseMessage;\n let adContainer = document.getElementById(`${reqAdFrameId}_contain`);\n let adIframe = document.getElementById(`${reqAdFrameId}`);\n let networkId = vponTag.getAttribute(systemVar.networkId);\n if (networkId === \"skm\") {\n if (vponTag.offsetWidth === 0) {\n const childElements = vponTag.parentElement.children;\n const maxWidth = Array.from(childElements).reduce(\n (max, child) => Math.max(max, child.offsetWidth), 0\n );\n adIframe.style.width = maxWidth > 0 ? `${maxWidth}px` : '100%';\n } else {\n adIframe.style.width = `${vponTag.offsetWidth}px`;\n }\n adIframe.style.removeProperty('height');\n adIframe.style.aspectRatio = '320/480';\n adIframe.style.margin = 'auto';\n adContainer.style.width = '100%';\n adContainer.style.margin = '0px';\n adContainer.style.removeProperty('height');\n adContainer.style.aspectRatio = '320/480';\n }\n\n if (isInGAM()) {\n const GAMContainer = [...window.parent.document.querySelectorAll('iframe[id^=\"google_ads_iframe\"]')].filter(iframe => iframe.contentDocument === document)[0];\n GAMContainer.insertAdjacentElement('afterend', adContainer);\n GAMContainer.style.display = 'none';\n }\n\n const VPADN_WEBSDK_ENV = VPADN_WEBSDK_ENV || {};\n const vponTagAttrs = vponTag.getAttributeNames().reduce((acc, name) => {\n return {...acc, [name]: vponTag.getAttribute(name)};\n }, {});\n VPADN_WEBSDK_ENV.vponTagAttrs = vponTagAttrs;\n const useCustomCloseCallBack = vponTag.getAttribute(systemVar.useCustomCloseCallBack) || null;\n\n const ulrecWindow = isInGAM() ? window.parent : window;\n ulrecWindow.addEventListener('message', function(e) {\n const { event, data } = e.data;\n\n if (event === 'getWebSDKEnv') {\n e.source.postMessage({\n event: 'setWebSDKEnv',\n data: VPADN_WEBSDK_ENV\n }, '*');\n }\n\n if (event === 'openBrowser') {\n handleOpenBrowser(data, useCustomCloseCallBack, adType);\n }\n });\n\n handleUlrecStructure(networkId === 'skm');\n adIframe.setAttribute('src', adURL);\n adIframe.onload = ulrecAdLoaded;\n\n function handleUlrecStructure(isFullWidth = false) {\n const ulrecOuterLayout = document.createElement(\"div\");\n Object.assign(ulrecOuterLayout.style, {\n position: \"absolute\",\n top: 0,\n left: 0,\n width: \"100%\",\n height: \"100%\",\n \"clip-path\": \"inset(0%)\",\n });\n const ulrecInnerLayout = document.createElement(\"div\");\n Object.assign(ulrecInnerLayout.style, {\n position: \"fixed\",\n top: 0,\n left: 0,\n width: \"100%\",\n height: \"100%\",\n display: \"flex\",\n \"align-items\": \"center\",\n \"justify-content\": \"center\",\n });\n const ulrecBox = document.createElement(\"div\");\n Object.assign(ulrecBox.style, {\n position: \"relative\",\n width: isFullWidth ? \"100%\" : \"auto\",\n });\n\n ulrecOuterLayout.appendChild(ulrecInnerLayout);\n ulrecInnerLayout.appendChild(ulrecBox);\n adContainer.appendChild(ulrecOuterLayout);\n ulrecBox.appendChild(adIframe);\n }\n\n function ulrecAdLoaded() {\n handleInternalBridge(this, {frameId: reqAdFrameId, vponTag, responseMessage, adType, subtype: 'ulrec'});\n handleImpressionSafeLock({frameId: reqAdFrameId, vponTag, responseMessage, adType, subtype: 'ulrec'});\n VponLogoPanel(adIframe.parentNode, vponTag, adType);\n adChoicePanel(adIframe.parentNode, vponTag, {\n adType,\n reqId\n });\n }\n}\n\nfunction ulrecImpressionObserver(config) {\n const { frameId, responseMessage, vponTag } = config;\n const adIframe = isInGAM() ? window.parent.document.getElementById(frameId) : document.getElementById(frameId);\n\n window.top.addEventListener('scroll', impressionScrollDetector);\n\n function impressionScrollDetector() {\n const { viewPercent } = calculateViewRate(adIframe);\n\n if (viewPercent < 0.9) {\n return;\n }\n\n adIframe && adIframe.contentWindow.postMessage({ isImpression: true, viewPercent }, '*');\n vpon_ad_send_impression(responseMessage, viewPercent);\n vpon_ad_send_3rd_party_tracking(responseMessage, vponTag);\n window.top.removeEventListener('scroll', impressionScrollDetector);\n }\n}\n\n\nconst debugForIcook = (groupId) => {\n if (navigator && typeof navigator.sendBeacon === 'function') {\n navigator.sendBeacon(`https://log.vpadn.com?ev=adRequest&id=${groupId}`);\n } else {\n const img = document.createElement('img');\n img.src = `https://log.vpadn.com?ev=adRequest&id=${groupId}`;\n img.width = 0;\n img.height = 0;\n document.body.appendChild(img);\n }\n debugForIcookTimer(groupId);\n}\n\nconst debugForIcookTimer = (groupId) => {\n const timer = setInterval(() => {\n try {\n const customCloseBtn = window.parent.document.querySelector('.interstitial-close-button');\n\n if (customCloseBtn) {\n customCloseBtn.addEventListener('click', function() {\n if (navigator && typeof navigator.sendBeacon === 'function') {\n navigator.sendBeacon(`https://log.vpadn.com?ev=customCloseBtnClick&id=${groupId}`);\n } else {\n const img = document.createElement('img');\n img.src = `https://log.vpadn.com?ev=customCloseBtnClick&id=${groupId}`;\n img.width = 0;\n img.height = 0;\n document.body.appendChild(img);\n }\n });\n clearInterval(timer);\n }\n } catch(err) {}\n }, 100);\n}\n\nconst reqCallbackInt = (vponTag, iframeNum, responseJsonObj) => {\n\n const {reqAdParameters, debugMode, adRequestCallBack, openTab} = extrcatParamsFromVponTag(vponTag)\n\n if (debugMode) {\n printDebugToConsole(responseJsonObj);\n }\n\n var statusCode = responseJsonObj['Vpadn-Status-Code']\n\n handleReqCallbackToPubs(adRequestCallBack, statusCode, debugMode);\n\n if (statusCode == 0) {\n var adURL = responseJsonObj['Location'];\n //adURL = adURL.replace(\"//m.vpon.com/\", \"//a2.vpon.com/img/test/mi/Hsiang/websdk-staging-test/\");\n var impURL = responseJsonObj['Vpadn-Imp']\n var clickURL = responseJsonObj['Vpadn-Clk']\n var vpadnSeq = responseJsonObj['Vpadn-Seq']\n var vpadnSid = responseJsonObj['Vpadn-Sid']\n var uid = responseJsonObj['Vpadn-Guid']\n var aid = responseJsonObj['Vpadn-Adid']\n var bid = reqAdParameters.bid\n var reqId = responseJsonObj['reqId']\n var adType = 'int'\n\n if (adURL.indexOf('t=int_fit') > 0) {\n adURL = adURL.replace('vpadn-tpl.html', 'vpadn-tpl-int_w-cs.html')\n adType = 'int_fit'\n } else if (adURL.indexOf('t=int_vid') > 0) {\n adURL = adURL.replace('vpadn-tpl.html', 'vpadn-tpl-int-vid_w-cs.html')\n adType = 'int_vid'\n } else if (adURL.indexOf('t=int_liquid') > 0) {\n adURL = adURL.replace('vpadn-tpl.html', 'vpadn-tpl-int-liquid_w.html')\n adURL += '&width=' + top.window.innerWidth + '&height=' + top.window.innerHeight\n adType = 'int_liquid'\n } else if (adURL.indexOf('t=int_30h') > 0) {\n adURL = adURL.replace('vpadn-tpl.html', 'vpadn-tpl-int-30h_w.html')\n adType = 'int_30h'\n }\n adURL = adURL + '&openTab=' + openTab + '&vpadnSeq=' + vpadnSeq + '&vpadnSid=' + vpadnSid + '&uid=' + uid + '&aid=' + aid + '&bid=' + bid + '&clickUrl=' + encodeURIComponent(replaceAPIMacro(clickURL))\n var main_domain = parseUri(window.location).host\n // set cookie\n //document.cookie = 'Vpadn-Guid=' + x['Vpadn-Guid'] + '; max-age=' + 63072000 + '; domain=' + main_domain + '; path=/'\n document.cookie = 'Vpadn-Sid=' + responseJsonObj['Vpadn-Sid'] + '; max-age=' + 1800 + '; domain=' + main_domain + '; path=/; SameSite=None; Secure'\n document.cookie = 'Vpadn-Seq=' + responseJsonObj['Vpadn-Seq'] + '; max-age=' + 1800 + '; domain=' + main_domain + '; path=/; SameSite=None; Secure'\n var reqAdFrameId = vponTag.querySelectorAll('iframe')[0].id\n var responseMessage = {\n adURL: adURL,\n impURL: impURL,\n thirdPartyTagString: getUrlParameterByName('3_p_t_c', adURL),\n multipleThirdPartyTrackings: getUrlParameterByName('3_p_t_c_n', adURL),\n thr_track_array: getUrlParameterByName('thr_track_array', adURL),\n reqId\n }\n var options = {\n 'childList': true,\n 'attributes':true\n };\n handleMutationObserver(document.getElementById(reqAdFrameId).parentNode, options, vponTag, adType);\n displayAd(reqAdFrameId, vponTag, responseMessage, adType)\n }\n}\n\nconst reqCallbackNa = (vponTag, responseJsonObj) => {\n\n const {reqAdParameters, debugMode, adRequestCallBack, openTab} = extrcatParamsFromVponTag(vponTag)\n\n if (debugMode) {\n printDebugToConsole(responseJsonObj);\n }\n\n var statusCode = responseJsonObj['Vpadn-Status-Code']\n\n handleReqCallbackToPubs(adRequestCallBack, statusCode, debugMode);\n\n if (statusCode == 0) {\n\n // Include vpadn-sdk-w-util-v1.js to fulfill some utilizations : vpsdk.click, vpsdk.openBrowser, and so on.\n addScript(\"https://m.vpadn.com/sdk/vpadn-sdk-w-util-v1.js\")\n // addScript(\"//a2.vpon.com/img/test/mi/Hsiang/sdk-test/vpadn-sdk-w-util-v1.js\");\n var adURL = responseJsonObj['Location']\n var nativeObj = parseParamsFromUrl(adURL)\n nativeObj.ad_label = nativeObj.ad_label ? nativeObj.ad_label : systemVar.nativeAdLabel\n nativeObj.impURL = responseJsonObj['Vpadn-Imp']\n nativeObj.clickURL = replaceAPIMacro(responseJsonObj['Vpadn-Clk'])\n nativeObj.clickURL = replaceAPIMacro(nativeObj.clickURL);\n if (undefined != nativeObj[\"3_p_t_c\"] && '' != nativeObj[\"3_p_t_c\"]) {\n nativeObj.thirdPartyTagString = nativeObj[\"3_p_t_c\"];\n }\n // In order to pass the parameters 'openTab' & 'clickAction' to vpadn-sdk-w-util-v1.js in web native ad, we just append these parameters in the landing page url currently.\n // In vpadn-sdk-w-util-v1.js, function openBrowser() will recover the landing page url after getting those parameters by deleting them all.\n nativeObj.lnk += `&vponOpenTab=${openTab}&vponClickAction=${nativeObj.a}`\n nativeObj.reqId = responseJsonObj['reqId']\n var main_domain = parseUri(window.location).host\n // Set cookie\n //document.cookie = 'Vpadn-Guid=' + x['Vpadn-Guid'] + '; max-age=' + 63072000 + '; domain=' + main_domain + '; path=/'\n document.cookie = 'Vpadn-Sid=' + responseJsonObj['Vpadn-Sid'] + '; max-age=' + 1800 + '; domain=' + main_domain + '; path=/; SameSite=None; Secure'\n document.cookie = 'Vpadn-Seq=' + responseJsonObj['Vpadn-Seq'] + '; max-age=' + 1800 + '; domain=' + main_domain + '; path=/; SameSite=None; Secure'\n\n displayNativeAd(vponTag, nativeObj)\n registerNaClickAction(vponTag, nativeObj)\n }\n}\n\nconst parseUri = (str) => {\n var o = parseUriOptions,\n m = o.parser[o.strictMode ? 'strict' : 'loose'].exec(str),\n uri = {},\n i = 14\n\n while (i--) uri[o.key[i]] = m[i] || ''\n\n uri[o.q.name] = {}\n uri[o.key[12]].replace(o.q.parser, function ($0, $1, $2) {\n if ($1) uri[o.q.name][$1] = $2\n })\n\n return uri\n};\n\nconst impCallback = () => { }\n\nlet isFlrecTrackingSended = false;\n\nconst coverCheckTimer = (() => {\n var timeId = {}\n // let milliseconds = 100\n // let test = {};\n return function (frame_id, vponTag, responseMessage, adType) {\n if (adType == 'banner' || adType == 'flrec') {\n var other_frame_id = ''\n if (endsWith(frame_id, '_1')) {\n other_frame_id = frame_id.substring(0, frame_id.length - 1) + '2'\n } else {\n other_frame_id = frame_id.substring(0, frame_id.length - 1) + '1'\n }\n\n if (timeId[other_frame_id] !== undefined) {\n clearTimeout(timeId[other_frame_id])\n timeId[other_frame_id] = undefined\n }\n\n timeId[frame_id] = setTimeout(function () {\n if (coveredBannerCheck(frame_id, vponTag)) {\n const options = {\n root: null,\n rootMargin: '0px',\n threshold: [0.9, 1]\n }\n const callback = entries => {\n const viewPercent = parseInt(entries[0].intersectionRatio * 100);\n if(viewPercent < 90) {\n return;\n }\n document.getElementById(frame_id) && document.getElementById(frame_id).contentWindow.postMessage({ isImpression: true, viewPercent }, '*')\n if (adType == 'flrec') {\n if (!isFlrecTrackingSended) {\n vpon_ad_send_impression(responseMessage, viewPercent)\n vpon_ad_send_3rd_party_tracking(responseMessage, vponTag)\n isFlrecTrackingSended = true;\n }\n } else {\n vpon_ad_send_impression(responseMessage, viewPercent)\n vpon_ad_send_3rd_party_tracking(responseMessage, vponTag)\n }\n iframe.unobserve(document.getElementById(frame_id));\n }\n const iframe = new IntersectionObserver(callback, options)\n iframe.observe(document.getElementById(frame_id))\n } else {\n coverCheckTimer(frame_id, vponTag, responseMessage, adType)\n }\n }, 100)\n\n } else if (adType.indexOf('int') >= 0) {\n const options = {\n root: null,\n rootMargin: '0px',\n threshold: [0.9, 1]\n }\n const callback = entries => {\n const viewPercent = parseInt(entries[0].intersectionRatio * 100)\n vpon_ad_send_impression(responseMessage, viewPercent)\n vpon_ad_send_3rd_party_tracking(responseMessage, vponTag)\n iframe.unobserve(document.getElementById(frame_id));\n }\n const iframe = new IntersectionObserver(callback, options)\n iframe.observe(document.getElementById(frame_id))\n } else if (adType == 'na') {\n var naDom = vponTag.querySelector('.vpon-native-ad')\n if (window.IntersectionObserver && naDom) {\n const callback = function (entries, observer) {\n // console.log(entries[0].intersectionRatio);\n // console.table(entries);\n if (entries[0].intersectionRatio <= 0.5) return;\n const viewPercent = parseInt(entries[0].intersectionRatio * 100)\n //console.log('%cimpression','color:red');\n vpon_ad_send_impression(responseMessage, viewPercent)\n vpon_ad_send_3rd_party_tracking(responseMessage, vponTag)\n observerVponNa.unobserve(naDom);\n };\n const options = {\n root: null,\n rootMargin: '0px',\n threshold: [0.25, 0.5, 0.75, 1]\n }\n var observerVponNa = new IntersectionObserver(callback, options);\n observerVponNa.observe(naDom);\n } else {\n setTimeout(function () {\n if ((coveredNaCheck(vponTag))) {\n //console.log('%cimpression','color:red');\n vpon_ad_send_impression(responseMessage)\n vpon_ad_send_3rd_party_tracking(responseMessage, vponTag)\n } else {\n coverCheckTimer(undefined, vponTag, responseMessage, adType)\n }\n }, 100)\n }\n } else {\n const options = {\n root: null,\n rootMargin: '0px',\n threshold: [0.9, 1]\n }\n const callback = entries => {\n const viewPercent = parseInt(entries[0].intersectionRatio * 100)\n vpon_ad_send_impression(responseMessage, viewPercent)\n vpon_ad_send_3rd_party_tracking(responseMessage, vponTag)\n iframe.unobserve(document.getElementById(frame_id));\n }\n const iframe = new IntersectionObserver(callback, options)\n iframe.observe(document.getElementById(frame_id))\n }\n }\n})()\n\nif (!isInCrossDomain()) {\n window.top.noticeRootInfo = (frameId, iframeElement, intersectionRatio) => {\n try {\n if (document.getElementById(frameId) === null) {\n iframeElement.contentWindow && iframeElement.contentWindow.document.getElementById(frameId) && iframeElement.contentWindow.document.getElementById(frameId).contentWindow.postMessage({ intersectionRatio }, '*')\n }\n document.getElementById(frameId) && document.getElementById(frameId).contentWindow.postMessage({ intersectionRatio }, '*')\n } catch (error) {\n console.log(error)\n }\n }\n}\n\nconst getAdSizeFromFormat = (vponTag, frameId) => {\n const [width, height] = vponTag.getAttribute(systemVar.format).split('x')\n const adSizeWithWidth = width\n const adSizeWithHeight = height.split('_')[0]\n const adContainerWidth = +(+document.getElementById(frameId).clientWidth / +adSizeWithWidth).toFixed(2)\n const adContainerHeight = +(+document.getElementById(frameId).clientHeight / +adSizeWithHeight).toFixed(2)\n return { adSizeWithWidth, adSizeWithHeight, adContainerWidth, adContainerHeight }\n}\n\nfunction handleOpenBrowser(data, isCustomClose, adType) {\n const { clickPosition, landing } = data;\n const { clickPositionX, clickPositionY, closeBtnX, closeBtnY } = clickPosition;\n const isInterstitial = adType.indexOf('int') !== -1;\n\n if (!isUrl(landing)) {\n return false;\n }\n\n const landingUrlObj = new URL(landing);\n const landingUrlQueryArr = [`clk_rel_x=${clickPositionX}`, `clk_rel_y=${clickPositionY}`];\n let landingUrl = '';\n\n if (closeBtnX && closeBtnY) {\n landingUrlQueryArr.push(`close_btn_x=${closeBtnX}`);\n landingUrlQueryArr.push(`close_btn_y=${closeBtnY}`);\n }\n\n if (isInterstitial && !isCustomClose && (!closeBtnX || !closeBtnY)) {\n const closeBtn = document.querySelector('a[id$=\"_int_1_close\"]');\n const creativeView = document.querySelector('div[id$=_contain]') || document.body;\n const creativeRect = creativeView.getBoundingClientRect();\n if (closeBtn) {\n const closeBtnRect = closeBtn.getBoundingClientRect();\n const closeBtnX = ((closeBtnRect.x - creativeRect.x) / creativeRect.width) * 100;\n const closeBtnY = ((closeBtnRect.y - creativeRect.y) / creativeRect.height) * 100;\n\n landingUrlQueryArr.push(`close_btn_x=${closeBtnX}`);\n landingUrlQueryArr.push(`close_btn_y=${closeBtnY}`);\n }\n }\n\n if (isMultiPartAd) {\n landingUrlQueryArr.push(`clk_part=${adCurrentState}`);\n }\n\n for (let pair of landingUrlObj.searchParams.entries()) {\n landingUrlQueryArr.push(`${pair[0]}=${encodeURIComponent(pair[1])}`);\n }\n\n landingUrl = `${landingUrlObj.origin}${landingUrlObj.pathname}?${landingUrlQueryArr.join('&')}`;\n window.open(landingUrl, \"_blank\");\n}\n\nconst impressionHandlerStatus = {};\n\nfunction handleImpressionSafeLock(config) {\n const { frameId, vponTag, responseMessage, adType, subtype } = config;\n setTimeout(() => {\n if (!impressionHandlerStatus[frameId]) {\n impressionHandlerStatus[frameId] = true;\n if (subtype !== 'ulrec') {\n coverCheckTimer(frameId, vponTag, responseMessage, adType);\n return;\n }\n ulrecImpressionObserver({frameId, responseMessage, vponTag});\n }\n }, 200);\n}\n\nfunction handleInternalBridge(iframe, config) {\n //port1: AD SDK\n //port2: Creative\n const { port1, port2 } = new MessageChannel();\n\n port1.onmessage = function (event) {\n const { event: eventName, source } = event.data;\n\n if (eventName === 'vpadnInternalBridgeConnected') {\n if (source === 'vpadnSupport') {\n iframe.contentWindow.postMessage({\n source: 'vpadnAdSdk',\n event: 'askCreativeEnv'\n }, \"*\");\n }\n }\n\n if (source === 'vpadnSupport') {\n receiveMessageBySupport(event, iframe, config);\n }\n }\n\n const { subtype } = config;\n const messageObj = {\n source: 'vpadnAdSdk',\n event: 'vpadnInternalBridgeConnect',\n subtype\n }\n iframe.contentWindow.postMessage(messageObj, \"*\", [port2]);\n}\n\nfunction receiveMessageBySupport(event, iframe, config) {\n const { event: eventName, exposedPercentage, env, data } = event.data;\n const { frameId, vponTag, responseMessage, adType, subtype } = config;\n\n switch(eventName) {\n case 'openBrowser':\n const useCustomCloseCallBack = vponTag.getAttribute(websdkParams.useCustomCloseCallBack) || null;\n handleOpenBrowser(data, useCustomCloseCallBack, adType);\n break;\n case 'askSubtype':\n iframe.contentWindow.postMessage({\n source: 'vpadnAdSdk',\n event: 'answerSubtype',\n subtype\n }, \"*\");\n break;\n case 'answerCreativeEnv':\n if (impressionHandlerStatus[frameId]) {\n return;\n }\n impressionHandlerStatus[frameId] = true;\n if (env === 'app') {\n iframe.contentWindow.postMessage({\n source: 'vpadnAdSdk',\n event: 'registMraidExposureChange'\n }, \"*\");\n return;\n }\n handleViewableDetection(iframe, config);\n if (subtype !== 'ulrec') {\n coverCheckTimer(frameId, vponTag, responseMessage, adType);\n return;\n }\n ulrecImpressionObserver({frameId, responseMessage, vponTag});\n break;\n case 'mraidExposureChange':\n if (exposedPercentage >= 90) {\n vpon_ad_send_impression(responseMessage, exposedPercentage);\n vpon_ad_send_3rd_party_tracking(responseMessage, vponTag);\n }\n break;\n }\n}\n\nfunction handleViewableDetection(adIframe, config) {\n const { frameId, subtype } = config;\n if (subtype !== 'ulrec') {\n const options = {\n root: null,\n rootMargin: '0px',\n threshold: [0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1]\n }\n const callback = entries => {\n const { intersectionRatio, intersectionRect, boundingClientRect } = entries[0];\n const { top, bottom, left, right } = intersectionRect;\n const intersectionPercent = parseInt(intersectionRatio * 100);\n adIframe.contentWindow.postMessage({\n source: 'vpadnAdSdk',\n event: 'boardcastViewPercent',\n viewableDetectionInfo: {\n iframePosition: {x: boundingClientRect.x, y: boundingClientRect.y},\n intersectionPercent,\n intersectionRect: {top, bottom, left, right}\n }\n }, '*');\n }\n const iframe = new IntersectionObserver(callback, options);\n iframe.observe(adIframe);\n return;\n }\n\n const adContainer = isInGAM() ? window.parent.document.getElementById(`${frameId}_contain`) : document.getElementById(`${frameId}_contain`);\n window.top.addEventListener('scroll', ulrecImpressionScrollDetector);\n window.top.dispatchEvent(new CustomEvent('scroll'));\n\n function ulrecImpressionScrollDetector() {\n const rootRect = adContainer.getBoundingClientRect();\n const targetRect = adIframe.getBoundingClientRect();\n const viewableDetectionInfo = calculateIntersectionRect(rootRect, targetRect);\n adIframe.contentWindow.postMessage({\n source: 'vpadnAdSdk',\n event: 'boardcastViewPercent',\n viewableDetectionInfo\n }, '*');\n }\n\n function calculateIntersectionRect(rootRect, targetRect) {\n if (rootRect.top >= targetRect.bottom || rootRect.bottom <= targetRect.top) {\n return {\n iframePosition: {x: targetRect.x, y: targetRect.y},\n intersectionPercent: 0,\n intersectionRect: {top:0, bottom:0, left:0, right:0}\n };\n }\n\n if (rootRect.top <= targetRect.top) {\n if (rootRect.bottom >= targetRect.bottom) {\n const { top, bottom, left, right } = targetRect;\n return {\n iframePosition: {x: targetRect.x, y: targetRect.y},\n intersectionPercent: 100,\n intersectionRect: {top, bottom, left, right}\n };\n }\n\n const { top, left, right, height } = targetRect;\n const { bottom } = rootRect;\n\n return {\n iframePosition: {x: targetRect.x, y: targetRect.y},\n intersectionPercent: ((bottom - top) * 100) / height,\n intersectionRect: {top, bottom, left, right}\n }\n }\n\n const { top } = rootRect;\n const { left, right, bottom, height } = targetRect;\n\n return {\n iframePosition: {x: targetRect.x, y: targetRect.y},\n intersectionPercent: ((bottom - top) * 100) / height,\n intersectionRect: {top, bottom, left, right}\n }\n }\n}\n\n/**\n *\n * @param {*} frameId if of frame used to fire ad request\n * @param {*} vponTag vpon tag\n * @param {*} responseMessage message from Vpon ADNW\n * @param {*} adType ad type\n */\nconst displayAd = (frameId, vponTag, responseMessage, adType) => {\n const VPADN_WEBSDK_ENV = VPADN_WEBSDK_ENV || {};\n const vponTagAttrs = vponTag.getAttributeNames().reduce((acc, name) => {\n return {...acc, [name]: vponTag.getAttribute(name)};\n }, {});\n VPADN_WEBSDK_ENV.vponTagAttrs = vponTagAttrs;\n var useCustomCloseCallBack = vponTag.getAttribute(systemVar.useCustomCloseCallBack) || null\n if (adType == 'int_liquid' || adType == 'int_30h') {\n initFrame(frameId, vponTag, adType);\n }\n if (adType === 'int_30h') {\n isMultiPartAd = true;\n }\n window.addEventListener('message', function(e) {\n const { event, data } = e.data;\n\n if (event === 'getWebSDKEnv') {\n e.source.postMessage({\n event: 'setWebSDKEnv',\n data: VPADN_WEBSDK_ENV\n }, '*');\n }\n\n if (event === 'openBrowser') {\n handleOpenBrowser(data, useCustomCloseCallBack, adType);\n }\n });\n document.getElementById(frameId).setAttribute('src', responseMessage.adURL)\n document.getElementById(frameId).onload = function () {\n handleInternalBridge(this, {frameId, vponTag, responseMessage, adType});\n handleImpressionSafeLock({frameId, vponTag, responseMessage, adType});\n const { reqId } = responseMessage;\n setTimeout(() => {\n adChoicePanel(this.parentNode, vponTag, {\n adType,\n reqId\n });\n VponLogoPanel(this.parentNode, vponTag, adType);\n }, 1);\n vpon_ad_loaded(frameId, adType, vponTag, responseMessage)\n\n if (adType == 'banner') {\n setRotateAd(frameId, vponTag, adType)\n }\n\n if (useCustomCloseCallBack != null) {\n setCustomClose(frameId, vponTag)\n }\n\n // 因應 RWD 的部份,暫時先只對 video banner 做 RWD\n if (responseMessage.adURL.indexOf('t=ban_vid') > 0) {\n document.getElementById(frameId).style.maxHeight = '100%'\n document.getElementById(frameId).style.maxWidth = '100%'\n const { adSizeWithWidth, adSizeWithHeight, adContainerWidth, adContainerHeight } = getAdSizeFromFormat(vponTag, frameId)\n if (adContainerWidth < adContainerHeight) {\n const newWidth = +adSizeWithWidth * adContainerWidth\n const newHeight = +adSizeWithHeight * adContainerWidth\n document.getElementById(frameId).style.width = `${newWidth}px`\n document.getElementById(frameId).style.height = `${newHeight}px`\n } else {\n const newWidth = +adSizeWithWidth * adContainerHeight\n const newHeight = +adSizeWithHeight * adContainerHeight\n document.getElementById(frameId).style.width = `${newWidth}px`\n document.getElementById(frameId).style.height = `${newHeight}px`\n }\n }\n }\n}\n\nconst LOGO_PATH = \"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\nconst adChoicePanel = (adContainer, vponTag, options, callback) => {\n const adChoiceLogoArea = adContainer.querySelector('#Vpon-ad-choice');\n\n if (adChoiceLogoArea) {\n adChoiceLogoArea.remove();\n }\n // Check if networkId exists and return if it's \"skm\"\n let networkId = vponTag.getAttribute(systemVar.networkId)\n if(networkId === \"skm\"){\n return;\n }\n handleAdChoice(adContainer, vponTag, options, callback);\n}\n\nconst handleAdChoice = (adContainer, vponTag, options, callback) => {\n const { adType } = options;\n const adChoiceArea = adChoiceAreaGenerator(adContainer, adType);\n adChoiceArea.addEventListener('click', function(event) {\n event.stopPropagation();\n handleAdChoiceClick(adContainer, vponTag, options, callback);\n const useCustomCloseCallBack = vponTag.getAttribute(systemVar.useCustomCloseCallBack) || null;\n if (!useCustomCloseCallBack && adType !== 'int_30h' && adType.indexOf('int') !== -1) {\n handleAdChoiceClose(adContainer, vponTag, adType);\n }\n });\n\n adContainer.appendChild(adChoiceArea);\n}\n\nconst handleAdChoiceClose = (adContainer, vponTag, adType) => {\n const closeBtn = document.createElement('a');\n const closeBtnImg = document.createElement('img');\n\n closeBtn.id = 'ad-choice-close';\n Object.assign(closeBtn.style, {\n width: '45px',\n height: '45px',\n position: 'absolute',\n left: '5px',\n top: '5px'\n });\n\n switch (adType) {\n case 'int_30h':\n closeBtn.style.zIndex = vponTag.getAttribute('use_custom_z_index_int_30h') || 100000;\n break;\n default:\n closeBtn.style.zIndex = vponTag.getAttribute('use_custom_z_index') || 100000;\n }\n\n closeBtnImg.style.width = '45px';\n closeBtnImg.src = 'data:image/png;base64,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';\n\n closeBtn.appendChild(closeBtnImg);\n adContainer.appendChild(closeBtn);\n\n closeBtn.addEventListener('click', function(event) {\n event.stopPropagation();\n adContainer.remove();\n });\n}\n\nconst adChoiceAreaGenerator = (adContainer, adType) => {\n const logo = document.createElement('img');\n const container = document.createElement('div');\n let containerWidth = 0;\n\n if (adContainer.clientWidth) {\n containerWidth = adContainer.clientWidth * 0.035 > 23 ? 23 : adContainer.clientWidth * 0.035;\n }\n\n if (window.innerWidth && !containerWidth) {\n containerWidth = window.innerWidth * 0.035 > 23 ? 23 : window.innerWidth * 0.035;\n }\n\n if (!containerWidth) {\n containerWidth = 23;\n }\n\n let screenDensity = 1;\n\n Object.assign(logo.style, {\n display: 'block',\n width: containerWidth * screenDensity + 'px',\n verticalAlign: 'bottom'\n });\n\n container.id = 'Vpon-ad-choice';\n Object.assign(container.style, {\n position: 'absolute',\n top: adType !== 'na' ? 'auto' : 0,\n bottom: adType !== 'na' ? 0 : 'auto',\n right: adType !== 'na' ? containerWidth * screenDensity + 'px' : 0,\n zIndex: 2\n });\n logo.src = systemVar.adChoiceImg;\n\n container.appendChild(logo);\n\n return container;\n}\n\nconst handleAdChoiceClick = (adContainer, vponTag, options, callback) => {\n const { adType } = options;\n const adChoiceFormArea = adChoiceFormGenerator(vponTag, options);\n const backArrow = adChoiceBackArrowGenerator(vponTag, adType);\n adContainer.appendChild(adChoiceFormArea);\n adContainer.appendChild(backArrow);\n\n const adIframe = adContainer.querySelector('iframe[id$=\"_1\"]');\n\n if (window.VponVideo) {\n window.postMessage({\n event: 'adChoiceActive'\n }, '*');\n }\n\n if (adIframe) {\n adIframe.contentWindow.postMessage({\n event: 'adChoiceActive'\n }, '*');\n }\n\n backArrow.addEventListener('click', function(event) {\n event.stopPropagation();\n adChoiceFormArea.remove();\n this.remove();\n const useCustomCloseCallBack = vponTag.getAttribute(systemVar.useCustomCloseCallBack) || null;\n if (!useCustomCloseCallBack && adType.indexOf('int') !== -1) {\n const closeBtn = document.querySelector('#ad-choice-close');\n if (closeBtn) {\n closeBtn.remove();\n }\n }\n\n if (window.VponVideo) {\n window.postMessage({\n event: 'adChoiceInactive'\n }, '*');\n }\n\n if (adIframe) {\n adIframe.contentWindow.postMessage({\n event: 'adChoiceInactive'\n }, '*');\n }\n });\n\n adChoiceFormArea.addEventListener('load', function() {\n const { port1, port2 } = new MessageChannel();\n\n port1.onmessage = function (event) {\n const {data} = event;\n\n if (data === 'clickPolicyBtn') {\n window.open('https://www.vpon.com/zh-hant/privacy-policy/');\n }\n\n if (data === 'adChoiceStep2') {\n backArrow.remove();\n const VponLogo = adChoiceFormArea.parentNode.querySelector('#Vpon-logoArea');\n\n if (VponLogo) {\n VponLogo.remove();\n }\n }\n\n if (data === 'done') {\n if (callback && typeof callback === 'function') {\n callback();\n }\n }\n }\n\n this.contentWindow.postMessage(null, \"*\", [port2]);\n });\n}\n\nconst adChoiceBackArrowGenerator = (vponTag, adType) => {\n const arrow = document.createElement('a');\n const img = document.createElement('img');\n\n img.src = systemVar.adChoiceArrowImg;\n arrow.id = 'Vpon-ad-choice-back';\n arrow.appendChild(img);\n\n img.style.maxWidth = '100%';\n\n Object.assign(arrow.style, {\n position: 'absolute',\n top: adType === 'int_30h' || (adType.indexOf('int') === -1 && adType !== '') ? '10px' : '60px',\n left: '10px',\n width: '20px'\n });\n\n switch (adType) {\n case 'int_30h':\n arrow.style.zIndex = vponTag.getAttribute('use_custom_z_index_int_30h') || 100000;\n break;\n default:\n arrow.style.zIndex = vponTag.getAttribute('use_custom_z_index') || 100000;\n }\n\n return arrow;\n}\n\nconst adChoiceFormGenerator = (vponTag, options) => {\n const { adType } = options;\n const container = document.createElement('iframe');\n if (options['reqId']) {\n container.src = `${systemVar.adChoiceUrl}?req_id=${options['reqId']}`;\n } else {\n container.src = systemVar.adChoiceUrl;\n }\n container.setAttribute('scrolling', 'no');\n container.setAttribute('frameborder', '0');\n container.id = 'Vpon-ad-choice-form';\n\n Object.assign(container.style, {\n position: 'absolute',\n top: 0,\n left: 0,\n width: '100%',\n height: '100%'\n });\n\n switch (adType) {\n case 'int_30h':\n container.style.zIndex = vponTag.getAttribute('use_custom_z_index_int_30h') || 100000;\n break;\n default:\n container.style.zIndex = vponTag.getAttribute('use_custom_z_index') || 100000;\n }\n\n return container;\n}\n\nfunction VponLogoPanel(iframe, vponTag, adType) {\n const logoContainer = iframe.querySelector('#Vpon-logoArea');\n\n if (logoContainer) {\n logoContainer.remove();\n }\n // Check if networkId exists and return if it's \"skm\"\n let networkId = vponTag.getAttribute(systemVar.networkId);\n if (networkId === \"skm\") {\n return; // Fixed the typo from 'retunr' to 'return'\n }\n\n drawLogo(iframe, vponTag, adType);\n}\n\nfunction drawLogo(iframe, vponTag, adType) {\n const logoContainer = logoContainerGenerator(iframe, vponTag, adType);\n const logoImage = logoImageGenerator();\n logoContainer.addEventListener('click', function() {\n if (this.parentNode.querySelector('#Vpon-ad-choice')) {\n this.parentNode.querySelector('#Vpon-ad-choice').dispatchEvent(new CustomEvent('click'));\n }\n });\n logoContainer.appendChild(logoImage);\n iframe.appendChild(logoContainer);\n}\n\nfunction logoContainerGenerator(iframe, vponTag, adType) {\n const logoContainer = document.createElement(\"div\");\n //20211221 by Max: CM反應logo過大,故將logo size縮小為原本的50%\n let logoContainerWidth = 0;\n\n if (iframe.clientWidth) {\n logoContainerWidth = iframe.clientWidth * 0.035 > 23 ? 23 : iframe.clientWidth * 0.035;\n }\n\n if (window.innerWidth && !logoContainerWidth) {\n logoContainerWidth = window.innerWidth * 0.035 > 23 ? 23 : window.innerWidth * 0.035;\n }\n\n if (!logoContainerWidth) {\n logoContainerWidth = 23;\n }\n\n let screenDensity = 1;\n\n logoContainer.setAttribute(\"id\", \"Vpon-logoArea\");\n logoContainer.style.position = \"absolute\";\n logoContainer.style.width = logoContainerWidth * screenDensity + \"px\";\n logoContainer.style.height = logoContainer.style.width;\n logoContainer.style.margin = \"0px\";\n logoContainer.style.padding = \"0px\";\n logoContainer.style.right = \"0%\";\n logoContainer.style.bottom = \"0%\";\n logoContainer.style.fontSize = \"0px\";\n logoContainer.style.display = window.disableVponLogo ? 'none' : 'block';\n switch (adType) {\n case 'int_30h':\n logoContainer.style.zIndex = vponTag.getAttribute('use_custom_z_index_int_30h') || 100000;\n break;\n case 'int_fit':\n logoContainer.style.zIndex = vponTag.getAttribute('use_custom_z_index') || 100000;\n break;\n default:\n logoContainer.style.zIndex = vponTag.getAttribute('use_custom_z_index') || 100000;\n }\n\n return logoContainer;\n}\n\nfunction logoImageGenerator() {\n const logo = document.createElement(\"img\");\n logo.setAttribute(\"id\", \"Vpon-logo\");\n logo.setAttribute(\"src\", LOGO_PATH);\n logo.style.position = \"absolute\";\n logo.style.width = \"100%\";\n logo.style.height = \"auto\";\n logo.style.right = \"0%\";\n logo.style.bottom = \"0%\";\n logo.style.display = \"block\";\n logo.style.setProperty('margin', '0px', 'important');\n\n return logo;\n}\n\nconst displayNativeAd = (vponTag, nativeObj) => {\n\n // Step 1: append native ad structure into vpon tag\n // Step 2: obstructive detection\n\n var layout = nativeLayout[vponTag.getAttribute(systemVar.nativeLayoutOption) || 0]['content'];\n var imgNum = nativeLayout[vponTag.getAttribute(systemVar.nativeLayoutOption) || 0]['imgNum'];\n\n for (var i in nativeObj) {\n layout = regexp_replace(layout, i, nativeObj[i]);\n }\n\n const isValidUrl = (url) => typeof url === 'string' && url.startsWith('http');\n const hasValidIcon = isValidUrl(nativeObj.icon_url);\n const hasValidCover = isValidUrl(nativeObj.cover_url);\n\n const hasVideoContent = hasValidCover && nativeObj.cover_url.endsWith(\"mp4\");\n\n vponTag.innerHTML = layout;\n var icon = vponTag.querySelector('.vpon-icon-image img');\n var adType = checkAdType(vponTag);\n if (!hasVideoContent) {\n imgNum = Math.max(1, imgNum - (!hasValidIcon || (!hasValidCover) ? 1 : 0));\n\n vponTag.style.display = 'none';\n\n var cover = vponTag.querySelector('.vpon-cover-image img');\n\n var multiOnloadForCoverCheck = (function () {\n var count = 0;\n return function () {\n count++;\n if (count >= imgNum) {\n vponTag.style.display = '';\n coverCheckTimer(undefined, vponTag, nativeObj, adType);\n }\n };\n })();\n\n if (icon && hasValidIcon) {\n icon.onload = multiOnloadForCoverCheck;\n icon.src = nativeObj.icon_url;\n } else if (icon) {\n icon.style.display = 'none';\n }\n\n if (cover && hasValidCover) {\n cover.onload = multiOnloadForCoverCheck;\n cover.src = nativeObj.cover_url;\n } else if (cover) {\n cover.style.display = 'none';\n }\n }else{\n // hasVideoContent\n // inject video-sdk\n injectScript('https://m.vpon.com/sdk/vpadn-video-sdk.js').then(() => {\n const videoContainer = vponTag.querySelector('.vpon-cover-image');\n videoContainer.firstChild.style.display = 'none';\n\n const video = new VponVideo(videoContainer, {\n src: nativeObj.cover_url,\n poster: 'https://dummyimage.com/667x375/000/000',\n autoplay: false,\n loop: true,\n countdownHidden: false,\n mutePosition: 'bottom',\n track:{\n e:nativeObj.e\n }\n });\n\n video.create();\n video.onCanBePlay(() => video.play());\n if (window.IntersectionObserver && video && videoContainer) {\n const observer = new IntersectionObserver(\n (entries) => {\n if (entries[0].intersectionRatio <= 0.5) {\n if (!video.isPaused()) video.pause();\n } else {\n if (video.isPaused()) video.play();\n }\n },\n {\n root: null,\n rootMargin: '0px',\n threshold: [0, 0.3, 0.45, 0.5, 0.55, 0.7, 1]\n }\n );\n\n observer.observe(videoContainer);\n }\n coverCheckTimer(undefined, vponTag, nativeObj, adType);\n })\n // if icon && hasValidIcon, load icon\n if (icon && hasValidIcon) {\n icon.src = nativeObj.icon_url;\n } else if (icon) {\n icon.style.display = 'none';\n }\n }\n\n const { reqId } = nativeObj;\n const adContainer = vponTag.querySelector('.vpon-native-ad');\n adChoicePanel(adContainer, vponTag, {\n adType: 'na',\n reqId\n });\n};\n\nconst registerNaClickAction = (vponTag, nativeObj) => {\n\n var key = vponTag.getAttribute(systemVar.licensekey)\n // parameter 'id' is for function vpsdk.click to identify whether this is the first time or not\n var id = `vponClick${key}${Math.random().toString(10).substring(2, 15)}`\n\n vponTag.addEventListener('click', openBrowser)\n vponTag.addEventListener('click', sendClick)\n\n function openBrowser() {\n //if lnk with macros(click position), replace with -1.\n var script = regexp_replace(act_script[nativeObj.a], \"lnk\", replaceAPIMacro(nativeObj.lnk))\n new Function(script)()\n }\n\n function sendClick() {\n /**\n * 210326: Rollback vpsdk.click parameters as production ver\n */\n vpsdk.click(undefined, undefined, { \"clickUrl\": nativeObj.clickURL, \"id\": id });\n // Remove click action to prevent sending clickUrl multiple times.\n vponTag.removeEventListener('click', sendClick)\n }\n}\n\nconst setRotateAd = (frameId, vponTag) => {\n\n var isRotate = vponTag.getAttribute(systemVar.isRotate) || 'false'\n var frameIdSuffix = frameId.substring(frameId.length - 2, frameId.length)\n\n frameIdSuffix = (frameIdSuffix == '_1') ? '_2' : '_1'\n\n if (isRotate !== 'false') {\n setTimeout(function () {\n getAd(vponTag, frameIdSuffix)\n }, systemVar.vpon_refresh_time)\n }\n}\n\n/**\n * to be depreacted\n */\nconst closeButtomTimer = (() => {\n var timeId = undefined\n return function (time) {\n clearTimeout(timeId)\n timeId = setTimeout(function () {\n var closeBtn = document.querySelector('a[id$=\"_int_1_close\"]')\n closeBtn.style.display = 'block'\n }, time)\n }\n})()\n\nlet isMultiPartAd = false;\nlet adCurrentState = 'cut1';\n\nconst vpon_ad_loaded = (frame_id, adType, vponTag, responseMessage) => {\n const { cd } = getParams(responseMessage.adURL)\n const value = cd === undefined ? 3 : cd\n var time = parseInt(value) > 0 ? parseInt(value) : 0\n var closeBtn = document.getElementById(frame_id + '_close')\n iframe_contain = document.getElementById(frame_id + '_contain')\n if (iframe_contain) {\n iframe_contain.style.display = 'block'\n }\n if (closeBtn) {\n fade(closeBtn, time)\n }\n switch (adType) {\n case 'banner':\n var iframe = document.getElementById(frame_id)\n if (iframe.style.display == 'none') {\n\n var other_frame_id = ''\n // switch iframe\n if (endsWith(frame_id, '_1')) {\n other_frame_id = frame_id.substring(0, frame_id.length - 1) + '2'\n } else {\n other_frame_id = frame_id.substring(0, frame_id.length - 1) + '1'\n }\n\n var other_iframe = document.getElementById(other_frame_id)\n other_iframe.style.display = 'none'\n var other_iframe_close_button = document.getElementById(other_frame_id + '_close')\n var other_iframe_contain = document.getElementById(other_frame_id + '_contain')\n if (other_iframe_close_button) {\n other_iframe_contain.style.display = 'none'\n other_iframe_contain.style.zIndex = '-1'\n }\n }\n\n iframe.style.display = 'block'\n var iframe_close_button = document.getElementById(frame_id + '_close')\n var iframe_contain = document.getElementById(frame_id + '_contain')\n if (iframe_close_button) {\n iframe_contain.style.display = 'block'\n iframe_contain.style.zIndex = '9998'\n }\n\n break\n case 'int_fit':\n iframe_contain = document.getElementById(frame_id + '_contain')\n if (iframe_contain) {\n iframe_contain.style.display = 'block'\n }\n\n fade(closeBtn, time)\n transformCloseBtnPosition()\n window.addEventListener('orientationchange', transformCloseBtnPositionViaOrient);\n window.addEventListener('scroll', transformCloseBtnPositionViaScroll)\n\n break\n\n case 'int_vid':\n iframe_contain = document.getElementById(frame_id + '_contain')\n if (iframe_contain) {\n iframe_contain.style.display = 'block'\n }\n var closeBtn = document.querySelector('a[id$=\"_int_1_close\"]')\n // closeBtn.style.display = 'none'\n\n fade(closeBtn, time)\n // transformCloseBtnPosition()\n // closeButtomTimer(systemVar.intCloseBtnEndureTime)\n\n transformCloseBtnPosition()\n window.addEventListener('orientationchange', transformCloseBtnPositionViaOrient);\n window.addEventListener('scroll', transformCloseBtnPositionViaScroll)\n break\n case 'int_30h':\n const use_custom_z_index_int_30h = vponTag.getAttribute(systemVar.use_custom_z_index_int_30h) || 9999998\n iframe_contain = document.getElementById(frame_id + '_contain')\n iframe_contain.style.display = 'block'\n //set zIndex\n iframe_contain.style.zIndex = use_custom_z_index_int_30h\n var closeBtn = document.getElementById(frame_id + '_close')\n closeBtn.style.cssText = '';\n /**\n * force to declare close button as display when adType is int_30h\n */\n // systemVar.isUseCustomClose ? closeBtn.style.display = 'none' : closeBtn.style.display = 'block'\n Object.assign(closeBtn.style, {\n position: 'absolute',\n right: 0,\n top: 0,\n width: '31.05px',\n height: '31.05px',\n zIndex: 9999999\n });\n closeBtn.style.display = systemVar.isUseCustomClose ? 'none' : 'block';\n closeBtn.innerHTML = ``\n closeBtn.querySelector('img').style.setProperty('padding', '0px', 'important');\n fade(closeBtn, time)\n /**\n * 因應讓 adTech 可以使用 customCloseButton,在素材端會透過 support.setExpandProperties\n * 來使用 postMessage 來通知 WebSDK,因會傳多數的 message 過來,故多做了判斷\n */\n try {\n window.addEventListener('message', e => {\n if (e.data.event === 'supportCollapse') {\n adCurrentState = 'cut1';\n const { reqId } = responseMessage;\n adChoicePanel(iframe_contain, vponTag, {\n adType,\n reqId\n });\n }\n\n if (e.data.event === 'supportExpand') {\n adCurrentState = 'cut2';\n }\n\n if (e.data.event == 'supportShowCloseBtn') {\n closeBtn.style.display = 'block';\n fade(closeBtn, time)\n\n\n }\n else if(e.data.event == 'supportHideCloseBtn'){\n closeBtn.style.display = 'none';\n\n }\n else if (e.data.event != 'initPostion' && e.data.event != 'supportCollapse'\n && e.data.event!='supportExpand' && e.data.event!='supportExpandComplete')\n {\n const { type, useCustomClose } = e.data\n if (type !== 'expandProperties' && useCustomClose === undefined) {\n closeBtn.style.display = 'block'\n } else if (useCustomClose) {\n closeBtn.style.display = 'none'\n } else {\n closeBtn.style.display = 'block'\n }\n }\n })\n } catch (error) {\n console.log(error);\n }\n\n ///fix display:none\n\n\n function condition(l, c, t) {\n if (t !== 60) {\n if (l.style.display !== \"block\") {\n l.style.display = \"block\";\n c.style.display = \"block\";\n }\n setTimeout(function () {\n condition(l, c, ++t);\n }, 100);\n }\n }\n function validdom(l, c, t) {\n condition(l, c, t);\n }\n validdom(iframe_contain, closeBtn, 0);\n break\n }\n}\n\nconst transformCloseBtnPosition = () => {\n var iframeInt = document.querySelector(\"[vpon_ad_format='mi']\").querySelector('iframe')\n var closeBtn = document.querySelector(\"[vpon_ad_format='mi']\").querySelector('a')\n var iframeIntTop = iframeInt.getBoundingClientRect().top\n\n if (iframeIntTop < 0) {\n closeBtn.style.top = (-iframeIntTop + 5) + 'px'\n } else {\n closeBtn.style.top = '5px'\n }\n}\n\nconst transformCloseBtnPositionViaOrient = () => {\n if (window.orientation !== 90 && window.orientation !== -90) {\n setTimeout(function () {\n transformCloseBtnPosition()\n }, 200)\n }\n}\n\nconst transformCloseBtnPositionViaScroll = () => {\n if (window.orientation !== 90 && window.orientation !== -90) {\n setTimeout(function () {\n transformCloseBtnPosition()\n }, 200)\n }\n}\n\nconst clickCallback = () => {\n if (systemVar.a == 0 || systemVar.a == 1 || systemVar.a == 3) {\n hwnd.location = systemVar.landing\n // window.open(systemVar.landing,\"_blank\");\n } else {\n window.location.href = systemVar.landing\n }\n}\n\nconst 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 + '=([^&#]*)'),\n results = regex.exec(url)\n return results === null ? '' : decodeURIComponent(results[1].replace(/\\+/g, ' '))\n}\n\nconst replaceAPIMacro = (url, value = -1) => url.replace(/\\[.*?\\]/g, value)\n\nconst vpon_ad_send_impression = (responseMessage, viewPercent) => {\n var impURL = responseMessage.impURL + '×tamp=' + new Date().getMilliseconds();\n //addScript(replaceAPIMacro(impURL, viewPercent));\n\n if (typeof (window.navigator.sendBeacon) != \"undefined\") {\n //20210407: Change Get to Post.\n navigator.sendBeacon(replaceAPIMacro(impURL, viewPercent));\n }\n else {\n addScript(replaceAPIMacro(impURL, viewPercent))\n }\n}\n\nconst handleThrTrackArray = (url, type) => {\n const trackingTag = document.createElement(type);\n trackingTag.src = url;\n if (type === 'img') {\n trackingTag.width = '0px';\n trackingTag.height = '0px';\n trackingTag.style = 'display:none';\n }\n document.body.appendChild(trackingTag);\n}\n\nconst vpon_ad_send_3rd_party_tracking = (responseMessage, vponTag) => {\n if (responseMessage.thr_track_array) {\n const thrTrackObj = JSON.parse(responseMessage.thr_track_array);\n Object.keys(thrTrackObj).forEach(key => {\n switch(key) {\n case 'urls':\n thrTrackObj[key].forEach(item => {\n handleThrTrackArray(item, 'img');\n });\n break;\n case 'jsUrls':\n thrTrackObj[key].forEach(item => {\n handleThrTrackArray(item, 'script');\n });\n break;\n }\n });\n return;\n }\n\n if (responseMessage.thirdPartyTagString) {\n var div = document.createElement('div')\n div.innerHTML = responseMessage.thirdPartyTagString\n document.body.appendChild(div)\n }\n\n if (responseMessage.multipleThirdPartyTrackings) {\n var trackingList = responseMessage.multipleThirdPartyTrackings.split(',');\n //Claar script tag under vpontag\n if (vponTag.querySelectorAll('script').length > 0) {\n console.log('[web-sdk] Clear script tag under specific vpon tag.');\n vponTag.querySelectorAll('script').forEach(element => element.remove());\n }\n for (var i = 0; i < trackingList.length; i++) {\n var trackingElement = trackingList[i].split(';')\n var trackingType = identifyTrackingType(trackingElement[0])\n var trackingUrl = decodeURIComponent(trackingElement[1])\n if (trackingType === 'img') {\n handleThrTrackArray(trackingUrl, 'img');\n } else if (trackingType === 'js') {\n handleThrTrackArray(trackingUrl, 'script');\n } else {\n console.log('Unknown Tracking Type')\n }\n }\n }\n}\n\nconst identifyTrackingType = (rawTrackingType) => {\n var trackingTypeNumber = rawTrackingType.split('=')[1]\n var trackingType = ''\n switch (trackingTypeNumber) {\n case '0':\n trackingType = 'img'\n break\n case '1':\n trackingType = 'js'\n break\n default:\n break\n }\n return trackingType\n}\n\nconst findElementFromOuterFrame = (elementId) => {\n return _findElementFromOuterFrame(window.parent, elementId);\n}\n\nconst _findElementFromOuterFrame = (window, elementId) => {\n try {\n const element = window.document.getElementById(elementId);\n\n if (element) {\n return element;\n }\n\n _findElementFromOuterFrame(window.parent, elementId);\n } catch(err) {\n return null;\n }\n}\n\nconst setCustomClose = (frameId, vponTag) => {\n var debugMode = vponTag.getAttribute(systemVar.debug) === 'true' || vponTag.getAttribute(systemVar.debug) === '1'\n var useCustomCloseCallBack = vponTag.getAttribute(systemVar.useCustomCloseCallBack) || null\n var useCustomCloseBtnId = vponTag.getAttribute(systemVar.useCustomCloseBtnId) || null\n var useCustomCloseBtn = document.getElementById(useCustomCloseBtnId)\n if (!useCustomCloseBtn && window !== window.top) {\n useCustomCloseBtn = findElementFromOuterFrame(useCustomCloseBtnId);\n }\n var closeBtnX = document.getElementById(frameId + '_close')\n var handleFunc = function (frameId) {\n var closeBtn = document.getElementById(frameId + '_close')\n\n closeBtn.click()\n try {\n window[useCustomCloseCallBack]();\n } catch (err) {\n if (debugMode) {\n console.log(err)\n }\n }\n }\n if (useCustomCloseBtn) {\n useCustomCloseBtn.addEventListener('click', handleFunc.bind(this, frameId));\n } else {\n if (debugMode) {\n console.info(\"ERROR: customClosebtnId data error or not exist.\");\n }\n }\n}\nlet initPositionStyle = null;\nconst initFrame = (frameId, vponTag, adType) => {\n var contentDom = vponTag.querySelectorAll('div')[0];\n var iframeDom = vponTag.querySelectorAll('iframe')[0];\n var closeBtn = document.getElementById(frameId + '_close')\n contentDom.style['display'] = 'none';\n closeBtn.style['display'] = 'none';\n\n window.addEventListener('message', function (e) {\n if (e.data.event == 'initPostion' || e.data.event == 'expand' || e.data.event == 'collapse') {\n let style = e.data.style;\n //Save initPosition style for supportCollapse.\n initPositionStyle = style;\n if (!style) { return }\n // Make css style empty but z-index should not be chaged by post message event;\n let oriZIndex = contentDom.style.zIndex;\n contentDom.style.cssText = '';\n // 1/3 沒補這個 1px 的話 view detection 會是 99\n contentDom.style.marginBottom = '1px'\n Object.keys(style).map(function (objectKey, index) {\n var value = style[objectKey];\n // z-index is not allowed setting by creative.\n contentDom.style[objectKey] = value;\n });\n //set back z-index\n contentDom.style['z-index'] = oriZIndex;\n } else if (e.data.event == 'close') {\n closeBtn.click();\n } else if (e.data.event === \"onscroll\") {\n window.addEventListener(\"scroll\", scrollEventPost(vponTag), false);\n }\n else if (e.data.event == 'supportCollapse') {\n if (!initPositionStyle) { return }\n let oriZIndex = contentDom.style.zIndex;\n let oriDisplay = contentDom.style.display;\n contentDom.style.cssText = '';\n contentDom.style.marginBottom = '1px'\n Object.keys(initPositionStyle).map(function (objectKey, index) {\n var value = initPositionStyle[objectKey];\n contentDom.style[objectKey] = value;\n });\n //set back z-index\n contentDom.style['z-index'] = oriZIndex;\n contentDom.style['display'] = oriDisplay;\n }\n }, false);\n}\n\nconst scrollEventPost = (vponTag) => {\n var scrollPos = 0;\n var diff = 0\n return function () {\n var iframeDom = vponTag.querySelectorAll('iframe')[0];\n var direction;\n var scrollTop = document.documentElement.scrollTop + document.body.scrollTop;\n var docHeight = document.documentElement.scrollHeight;\n var winHeight = document.documentElement.clientHeight;\n var scrollPercent = (scrollTop) / (docHeight - winHeight);\n var scrollPercentRounded = parseFloat((scrollPercent * 100).toFixed(2));\n var diff = scrollTop - scrollPos;\n direction = (scrollTop < scrollPos) ? \"up\" : \"down\";\n scrollPos = scrollTop;\n //console.log(scrollTop,diff,scrollPercent,scrollPercentRounded,direction,docHeight,winHeight);\n if (iframeDom) {\n iframeDom.contentWindow.postMessage({\n action: 'onscroll',\n scrollTop: scrollTop,\n diff: diff,\n scrollPercent: scrollPercentRounded,\n direction: direction\n }, '*');\n }\n }\n}\n// --------- process flow -------------\n\nmodule.exports = {\n getAd,\n ajax,\n addScript,\n addScriptUnderVponTag,\n reqCallback,\n reqCallbackInt,\n parseUri,\n impCallback,\n coverCheckTimer,\n displayAd,\n setRotateAd,\n closeButtomTimer,\n vpon_ad_loaded,\n transformCloseBtnPosition,\n transformCloseBtnPositionViaOrient,\n transformCloseBtnPositionViaScroll,\n clickCallback,\n getUrlParameterByName,\n vpon_ad_send_impression,\n vpon_ad_send_3rd_party_tracking,\n identifyTrackingType,\n setCustomClose,\n initFrame,\n scrollEventPost,\n fade,\n collectDataForAdRequest,\n sendAdRequest\n}\n\n\n// WEBPACK FOOTER //\n// ./src/vpadn-sdk-logic.partial.js","const {\n parseCtidToObj,\n getReqAdParameters,\n// initialThirdPartyVendor,\n adder,\n prepareContextForAdRequest,\n handleAdReqUrl\n} = require(\"./vpadn-sdk-features.partial\");\nconst {\n checkVponTagExisted,\n checkVponTagAttributes,\n checkAdType,\n} = require(\"./vpadn-sdk-check.partial\");\nconst {\n vpadnCookieComponent,\n getCTID\n} = require(\"./vpadn-sdk-features.partial\");\nconst { websdkParams } = require(\"./vpadn-sdk-parameters.partial\");\nconst { sendAdRequest, collectDataForAdRequest } = require(\"./vpadn-sdk-logic.partial\");\nconst {\n vpon_ad_create_multi_banner_iframe,\n vpon_ad_create_int_iframe,\n checkNoNaADInsideVtag,\n} = require(\"./vpadn-sdk-initial.partial\");\nconst {\n adCounterManager,\n adContextController,\n globalContextController,\n} = require(\"./vpadn-sdk-instance.partial\");\n\n(function (window, document) {\n if (!checkVponTagExisted()) {\n throw Error(\"[Vpon-WebSDK] Vpon tag not exist\");\n }\n\n /**\n * Initialize needs context and instance.\n */\n const adContext = adContextController();\n const globalContext = globalContextController();\n const adIdInstance = adder(0);\n const adCounter = adCounterManager();\n\n prepareContextForAdRequest();\n// initialThirdPartyVendor();\n\n /**\n * Ad request phase entry point.\n */\n const vponTags = document.querySelectorAll(\"vpon\");\n adRequestPhase(vponTags);\n\n function adRequestPhase(vponTags) {\n const [vponTag, ...remainVponTag] = vponTags;\n \n if (!vponTag) {\n return;\n }\n\n const isVponTagAttrValid = checkVponTagAttributes(vponTag);\n\n if (!isVponTagAttrValid) {\n adRequestPhase(remainVponTag);\n return;\n }\n\n const adType = checkAdType(vponTag);\n const { isExceedLimit } = adCounter(adType, 1);\n\n if (isExceedLimit) {\n adRequestPhase(remainVponTag);\n return;\n }\n\n if (adType === 'banner') {\n const result = vpon_ad_create_multi_banner_iframe(vponTag);\n if (result === 0) {\n adRequestPhase(remainVponTag);\n return;\n }\n }\n\n if (adType === 'mi') {\n const result = vpon_ad_create_int_iframe(vponTag);\n if (result === 0) {\n adRequestPhase(remainVponTag);\n return;\n }\n }\n\n if(adType === 'na'){\n const result = checkNoNaADInsideVtag(vponTag);\n if(!result){\n adRequestPhase(remainVponTag);\n return;\n }\n }\n\n const iframeNum = adType === 'banner' ? '_1' : adType === 'mi' ? '_int_1' : undefined;\n const adId = adIdInstance();\n \n settingContext(adId, vponTag, iframeNum);\n handleAdRequest(adId);\n adRequestPhase(remainVponTag);\n }\n\n /**\n * Todo: When ad response component refactoring in the\n * future, Move this message handler to internalBridge.\n */\n window.addEventListener(\n \"message\",\n function (ev) {\n const { event } = ev.data;\n\n if (event === \"supportClose\") {\n let container = document.querySelectorAll(\"[id*='_int_1_contain']\");\n\n if (!container.length) {\n console.warn(\"[Vpon-WebSDK] Not have interstitial contain.\");\n return;\n }\n\n container.forEach((element) => {\n element.style.zIndex = \"-1\";\n element.style.display = \"none\";\n\n element.querySelector(\"iframe\").contentWindow.postMessage(\n {\n event: \"destroy\",\n },\n \"*\"\n );\n });\n }\n\n if (event === \"supportExpand\") {\n console.log(\"[Vpon-WebSDK] supportExpand\");\n try {\n let containerDiv = document.querySelectorAll(\n \"div[id*=_int_1_contain]\"\n )[0];\n containerDiv.style.width = \"100%\";\n containerDiv.style.height = \"100%\";\n\n const adChoice = containerDiv.querySelector(\"#Vpon-ad-choice\");\n if (adChoice) {\n adChoice.remove();\n }\n } catch (error) {\n console.error(`[web-sdk] supportExpand Failed: ${error}`);\n }\n }\n\n if (event === \"supportDisableVponLogo\") {\n const logoContainer = document.querySelector(\"#Vpon-logoArea\");\n window.disableVponLogo = true;\n if (!logoContainer) {\n return;\n }\n\n logoContainer.style.display = \"none\";\n }\n },\n false\n );\n\n /**\n * Handle ad request.\n */\n async function handleAdRequest(adId) {\n const contextForAdReq = await updateContextForAdRequest(adId);\n sendAdRequest(contextForAdReq);\n }\n\n /**\n * Update context for ad request needs.\n */\n async function updateContextForAdRequest(adId) {\n const context = adContext.getContext(adId);\n const { vponTag, reqAdParameters } = context;\n const reqAdUrl = prepareAdReqUrl({ vponTag, reqAdParameters });\n const adRequestObj = await collectDataForAdRequest(context);\n if (location && location.href) {\n adRequestObj.requestBody = {\n ...adRequestObj.requestBody,\n referer: location.href,\n };\n }\n adContext.setContext(adId, { ...context, reqAdUrl, adRequestObj });\n return adContext.getContext(adId);\n }\n\n /**\n * Prepare ad request url, request to banner api server.\n * @param {object} context current ad context\n * @returns {object} ad request url object\n */\n function prepareAdReqUrl(context) {\n const { vponTag, reqAdParameters } = context;\n const { getCookieByKey } = vpadnCookieComponent;\n const ctidObj = globalContext.getContext(\"ctidObj\");\n const { ctid, timestamp } = ctidObj;\n let reqAdUrl = handleAdReqUrl(reqAdParameters);\n\n if (vponTag.getAttribute(websdkParams.adIdentifier)) {\n reqAdUrl.searchParams.append(\n adv_id,\n vponTag.getAttribute(websdkParams.adIdentifier)\n );\n }\n\n if (vponTag.getAttribute(websdkParams.adIsLat)) {\n reqAdUrl.searchParams.append(\n adv_id_lat,\n vponTag.getAttribute(websdkParams.adIsLat)\n );\n }\n\n if (ctid) {\n reqAdUrl.searchParams.append(\"Ctid\", ctid);\n if (getCookieByKey(websdkParams.cookie.sid)) {\n reqAdUrl.searchParams.append(\n \"Vpadn-Sid\",\n getCookieByKey(websdkParams.cookie.sid)\n );\n }\n }\n\n let stringfyGAMResult = vponTag.getAttribute(websdkParams.gamTargetingMap);\n if (stringfyGAMResult) {\n reqAdUrl.searchParams.append(websdkParams.contentData, stringfyGAMResult);\n }\n\n if (timestamp) {\n reqAdUrl.searchParams.append(\"Ctiddob\", timestamp);\n }\n\n const screenDensity = window.devicePixelRatio ? window.devicePixelRatio : 1;\n reqAdUrl.searchParams.append(\"u_sd\", screenDensity);\n reqAdUrl.searchParams.append(\"timestamp\", new Date().getMilliseconds());\n\n return reqAdUrl;\n }\n\n /**\n * Update global and ad context\n * @param {number} adId environment ID\n * @param {element} vponTag vpon tag node\n * @param {string} iframeNum ad iframe number\n */\n function settingContext(adId, vponTag, iframeNum) {\n const { getCookieByKey } = vpadnCookieComponent;\n\n if (!globalContext.getContext(\"ctidObj\")) {\n globalContext.setContext(\n \"ctidObj\",\n parseCtidToObj(getCookieByKey(websdkParams.cookie.ctid) || window.localStorage.getItem(websdkParams.cookie.ctid) || getCTID())\n );\n }\n\n const adType = checkAdType(vponTag);\n\n let currentAdContext = {\n vponTag,\n adType,\n iframeNum,\n };\n const vponTagAttrs = vponTag.getAttributeNames().reduce((acc, name) => {\n return { ...acc, [name]: vponTag.getAttribute(name) };\n }, {});\n\n currentAdContext.vponTagAttrs = vponTagAttrs;\n currentAdContext.reqAdParameters = getReqAdParameters(vponTag);\n adContext.setContext(adId, currentAdContext);\n }\n})(window, document);\n\n\n// WEBPACK FOOTER //\n// ./src/vpadn-sdk-main.js","var _typeof = require(\"./typeof.js\")[\"default\"];\nfunction _regeneratorRuntime() {\n \"use strict\"; /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/facebook/regenerator/blob/main/LICENSE */\n module.exports = _regeneratorRuntime = function _regeneratorRuntime() {\n return e;\n }, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;\n var t,\n e = {},\n r = Object.prototype,\n n = r.hasOwnProperty,\n o = Object.defineProperty || function (t, e, r) {\n t[e] = r.value;\n },\n i = \"function\" == typeof Symbol ? Symbol : {},\n a = i.iterator || \"@@iterator\",\n c = i.asyncIterator || \"@@asyncIterator\",\n u = i.toStringTag || \"@@toStringTag\";\n function define(t, e, r) {\n return Object.defineProperty(t, e, {\n value: r,\n enumerable: !0,\n configurable: !0,\n writable: !0\n }), t[e];\n }\n try {\n define({}, \"\");\n } catch (t) {\n define = function define(t, e, r) {\n return t[e] = r;\n };\n }\n function wrap(t, e, r, n) {\n var i = e && e.prototype instanceof Generator ? e : Generator,\n a = Object.create(i.prototype),\n c = new Context(n || []);\n return o(a, \"_invoke\", {\n value: makeInvokeMethod(t, r, c)\n }), a;\n }\n function tryCatch(t, e, r) {\n try {\n return {\n type: \"normal\",\n arg: t.call(e, r)\n };\n } catch (t) {\n return {\n type: \"throw\",\n arg: t\n };\n }\n }\n e.wrap = wrap;\n var h = \"suspendedStart\",\n l = \"suspendedYield\",\n f = \"executing\",\n s = \"completed\",\n y = {};\n function Generator() {}\n function GeneratorFunction() {}\n function GeneratorFunctionPrototype() {}\n var p = {};\n define(p, a, function () {\n return this;\n });\n var d = Object.getPrototypeOf,\n v = d && d(d(values([])));\n v && v !== r && n.call(v, a) && (p = v);\n var g = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(p);\n function defineIteratorMethods(t) {\n [\"next\", \"throw\", \"return\"].forEach(function (e) {\n define(t, e, function (t) {\n return this._invoke(e, t);\n });\n });\n }\n function AsyncIterator(t, e) {\n function invoke(r, o, i, a) {\n var c = tryCatch(t[r], t, o);\n if (\"throw\" !== c.type) {\n var u = c.arg,\n h = u.value;\n return h && \"object\" == _typeof(h) && n.call(h, \"__await\") ? e.resolve(h.__await).then(function (t) {\n invoke(\"next\", t, i, a);\n }, function (t) {\n invoke(\"throw\", t, i, a);\n }) : e.resolve(h).then(function (t) {\n u.value = t, i(u);\n }, function (t) {\n return invoke(\"throw\", t, i, a);\n });\n }\n a(c.arg);\n }\n var r;\n o(this, \"_invoke\", {\n value: function value(t, n) {\n function callInvokeWithMethodAndArg() {\n return new e(function (e, r) {\n invoke(t, n, e, r);\n });\n }\n return r = r ? r.then(callInvokeWithMethodAndArg, callInvokeWithMethodAndArg) : callInvokeWithMethodAndArg();\n }\n });\n }\n function makeInvokeMethod(e, r, n) {\n var o = h;\n return function (i, a) {\n if (o === f) throw Error(\"Generator is already running\");\n if (o === s) {\n if (\"throw\" === i) throw a;\n return {\n value: t,\n done: !0\n };\n }\n for (n.method = i, n.arg = a;;) {\n var c = n.delegate;\n if (c) {\n var u = maybeInvokeDelegate(c, n);\n if (u) {\n if (u === y) continue;\n return u;\n }\n }\n if (\"next\" === n.method) n.sent = n._sent = n.arg;else if (\"throw\" === n.method) {\n if (o === h) throw o = s, n.arg;\n n.dispatchException(n.arg);\n } else \"return\" === n.method && n.abrupt(\"return\", n.arg);\n o = f;\n var p = tryCatch(e, r, n);\n if (\"normal\" === p.type) {\n if (o = n.done ? s : l, p.arg === y) continue;\n return {\n value: p.arg,\n done: n.done\n };\n }\n \"throw\" === p.type && (o = s, n.method = \"throw\", n.arg = p.arg);\n }\n };\n }\n function maybeInvokeDelegate(e, r) {\n var n = r.method,\n o = e.iterator[n];\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;\n var i = tryCatch(o, e.iterator, r.arg);\n if (\"throw\" === i.type) return r.method = \"throw\", r.arg = i.arg, r.delegate = null, y;\n var a = i.arg;\n 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);\n }\n function pushTryEntry(t) {\n var e = {\n tryLoc: t[0]\n };\n 1 in t && (e.catchLoc = t[1]), 2 in t && (e.finallyLoc = t[2], e.afterLoc = t[3]), this.tryEntries.push(e);\n }\n function resetTryEntry(t) {\n var e = t.completion || {};\n e.type = \"normal\", delete e.arg, t.completion = e;\n }\n function Context(t) {\n this.tryEntries = [{\n tryLoc: \"root\"\n }], t.forEach(pushTryEntry, this), this.reset(!0);\n }\n function values(e) {\n if (e || \"\" === e) {\n var r = e[a];\n if (r) return r.call(e);\n if (\"function\" == typeof e.next) return e;\n if (!isNaN(e.length)) {\n var o = -1,\n i = function next() {\n for (; ++o < e.length;) if (n.call(e, o)) return next.value = e[o], next.done = !1, next;\n return next.value = t, next.done = !0, next;\n };\n return i.next = i;\n }\n }\n throw new TypeError(_typeof(e) + \" is not iterable\");\n }\n return GeneratorFunction.prototype = GeneratorFunctionPrototype, o(g, \"constructor\", {\n value: GeneratorFunctionPrototype,\n configurable: !0\n }), o(GeneratorFunctionPrototype, \"constructor\", {\n value: GeneratorFunction,\n configurable: !0\n }), GeneratorFunction.displayName = define(GeneratorFunctionPrototype, u, \"GeneratorFunction\"), e.isGeneratorFunction = function (t) {\n var e = \"function\" == typeof t && t.constructor;\n return !!e && (e === GeneratorFunction || \"GeneratorFunction\" === (e.displayName || e.name));\n }, e.mark = function (t) {\n return Object.setPrototypeOf ? Object.setPrototypeOf(t, GeneratorFunctionPrototype) : (t.__proto__ = GeneratorFunctionPrototype, define(t, u, \"GeneratorFunction\")), t.prototype = Object.create(g), t;\n }, e.awrap = function (t) {\n return {\n __await: t\n };\n }, defineIteratorMethods(AsyncIterator.prototype), define(AsyncIterator.prototype, c, function () {\n return this;\n }), e.AsyncIterator = AsyncIterator, e.async = function (t, r, n, o, i) {\n void 0 === i && (i = Promise);\n var a = new AsyncIterator(wrap(t, r, n, o), i);\n return e.isGeneratorFunction(r) ? a : a.next().then(function (t) {\n return t.done ? t.value : a.next();\n });\n }, defineIteratorMethods(g), define(g, u, \"Generator\"), define(g, a, function () {\n return this;\n }), define(g, \"toString\", function () {\n return \"[object Generator]\";\n }), e.keys = function (t) {\n var e = Object(t),\n r = [];\n for (var n in e) r.push(n);\n return r.reverse(), function next() {\n for (; r.length;) {\n var t = r.pop();\n if (t in e) return next.value = t, next.done = !1, next;\n }\n return next.done = !0, next;\n };\n }, e.values = values, Context.prototype = {\n constructor: Context,\n reset: function reset(e) {\n 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);\n },\n stop: function stop() {\n this.done = !0;\n var t = this.tryEntries[0].completion;\n if (\"throw\" === t.type) throw t.arg;\n return this.rval;\n },\n dispatchException: function dispatchException(e) {\n if (this.done) throw e;\n var r = this;\n function handle(n, o) {\n return a.type = \"throw\", a.arg = e, r.next = n, o && (r.method = \"next\", r.arg = t), !!o;\n }\n for (var o = this.tryEntries.length - 1; o >= 0; --o) {\n var i = this.tryEntries[o],\n a = i.completion;\n if (\"root\" === i.tryLoc) return handle(\"end\");\n if (i.tryLoc <= this.prev) {\n var c = n.call(i, \"catchLoc\"),\n u = n.call(i, \"finallyLoc\");\n if (c && u) {\n if (this.prev < i.catchLoc) return handle(i.catchLoc, !0);\n if (this.prev < i.finallyLoc) return handle(i.finallyLoc);\n } else if (c) {\n if (this.prev < i.catchLoc) return handle(i.catchLoc, !0);\n } else {\n if (!u) throw Error(\"try statement without catch or finally\");\n if (this.prev < i.finallyLoc) return handle(i.finallyLoc);\n }\n }\n }\n },\n abrupt: function abrupt(t, e) {\n for (var r = this.tryEntries.length - 1; r >= 0; --r) {\n var o = this.tryEntries[r];\n if (o.tryLoc <= this.prev && n.call(o, \"finallyLoc\") && this.prev < o.finallyLoc) {\n var i = o;\n break;\n }\n }\n i && (\"break\" === t || \"continue\" === t) && i.tryLoc <= e && e <= i.finallyLoc && (i = null);\n var a = i ? i.completion : {};\n return a.type = t, a.arg = e, i ? (this.method = \"next\", this.next = i.finallyLoc, y) : this.complete(a);\n },\n complete: function complete(t, e) {\n if (\"throw\" === t.type) throw t.arg;\n 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;\n },\n finish: function finish(t) {\n for (var e = this.tryEntries.length - 1; e >= 0; --e) {\n var r = this.tryEntries[e];\n if (r.finallyLoc === t) return this.complete(r.completion, r.afterLoc), resetTryEntry(r), y;\n }\n },\n \"catch\": function _catch(t) {\n for (var e = this.tryEntries.length - 1; e >= 0; --e) {\n var r = this.tryEntries[e];\n if (r.tryLoc === t) {\n var n = r.completion;\n if (\"throw\" === n.type) {\n var o = n.arg;\n resetTryEntry(r);\n }\n return o;\n }\n }\n throw Error(\"illegal catch attempt\");\n },\n delegateYield: function delegateYield(e, r, n) {\n return this.delegate = {\n iterator: values(e),\n resultName: r,\n nextLoc: n\n }, \"next\" === this.method && (this.arg = t), y;\n }\n }, e;\n}\nmodule.exports = _regeneratorRuntime, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@babel/runtime/helpers/regeneratorRuntime.js\n// module id = 17\n// module chunks = 0","var _typeof = require(\"./typeof.js\")[\"default\"];\nvar toPrimitive = require(\"./toPrimitive.js\");\nfunction toPropertyKey(t) {\n var i = toPrimitive(t, \"string\");\n return \"symbol\" == _typeof(i) ? i : i + \"\";\n}\nmodule.exports = toPropertyKey, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@babel/runtime/helpers/toPropertyKey.js\n// module id = 18\n// module chunks = 0","var _typeof = require(\"./typeof.js\")[\"default\"];\nfunction toPrimitive(t, r) {\n if (\"object\" != _typeof(t) || !t) return t;\n var e = t[Symbol.toPrimitive];\n if (void 0 !== e) {\n var i = e.call(t, r || \"default\");\n if (\"object\" != _typeof(i)) return i;\n throw new TypeError(\"@@toPrimitive must return a primitive value.\");\n }\n return (\"string\" === r ? String : Number)(t);\n}\nmodule.exports = toPrimitive, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@babel/runtime/helpers/toPrimitive.js\n// module id = 19\n// module chunks = 0","var arrayWithHoles = require(\"./arrayWithHoles.js\");\nvar iterableToArray = require(\"./iterableToArray.js\");\nvar unsupportedIterableToArray = require(\"./unsupportedIterableToArray.js\");\nvar nonIterableRest = require(\"./nonIterableRest.js\");\nfunction _toArray(arr) {\n return arrayWithHoles(arr) || iterableToArray(arr) || unsupportedIterableToArray(arr) || nonIterableRest();\n}\nmodule.exports = _toArray, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@babel/runtime/helpers/toArray.js\n// module id = 20\n// module chunks = 0","var arrayLikeToArray = require(\"./arrayLikeToArray.js\");\nfunction _arrayWithoutHoles(arr) {\n if (Array.isArray(arr)) return arrayLikeToArray(arr);\n}\nmodule.exports = _arrayWithoutHoles, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@babel/runtime/helpers/arrayWithoutHoles.js\n// module id = 21\n// module chunks = 0","function _nonIterableSpread() {\n throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}\nmodule.exports = _nonIterableSpread, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@babel/runtime/helpers/nonIterableSpread.js\n// module id = 22\n// module chunks = 0","function _iterableToArrayLimit(r, l) {\n var t = null == r ? null : \"undefined\" != typeof Symbol && r[Symbol.iterator] || r[\"@@iterator\"];\n if (null != t) {\n var e,\n n,\n i,\n u,\n a = [],\n f = !0,\n o = !1;\n try {\n if (i = (t = t.call(r)).next, 0 === l) {\n if (Object(t) !== t) return;\n f = !1;\n } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0);\n } catch (r) {\n o = !0, n = r;\n } finally {\n try {\n if (!f && null != t[\"return\"] && (u = t[\"return\"](), Object(u) !== u)) return;\n } finally {\n if (o) throw n;\n }\n }\n return a;\n }\n}\nmodule.exports = _iterableToArrayLimit, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@babel/runtime/helpers/iterableToArrayLimit.js\n// module id = 23\n// module chunks = 0","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","let { systemVar } = require('./vpadn-sdk-parameters.partial');\nlet {\n checkInput,\n getReqAdParameters,\n checkAdType,\n isInCrossDomain\n} = require('./vpadn-sdk-check.partial');\nlet { generateUID } = require('./vpadn-sdk-features.partial');\nlet {\n getAd,\n transformCloseBtnPositionViaOrient,\n transformCloseBtnPositionViaScroll\n} = require('./vpadn-sdk-logic.partial');\n\n// ------------ initial ---------------\nconst isBanLessthanLimit = vponBanCounter => {\n if (vponBanCounter < systemVar.vponBannerTagCount) {\n return true;\n } else {\n console.info(\n 'ERROR: vpon banner tag display more than ' +\n systemVar.vponBannerTagCount +\n ' time(s)'\n );\n return false;\n }\n};\n\nconst isIntLessthanLimit = vponIntCounter => {\n if (vponIntCounter < systemVar.vponIntTagCount) {\n return true;\n } else {\n console.info(\n 'ERROR: vpon interstitial tag display more than ' +\n systemVar.vponIntTagCount +\n ' time(s)'\n );\n return false;\n }\n};\n\nconst findVponSDK = name => {\n const scripts = window.top.document.querySelectorAll('script')\n const scriptsArr = [...scripts]\n return scriptsArr.find(script => script.src.split('//')[1] === `m.vpon.com/sdk/${name}.js`)\n}\n\nconst injectObserver = () => {\n const isExist = findVponSDK('vpadn-obs')\n\n if (isExist === undefined) {\n const script = document.createElement('script')\n script.src = '//m.vpon.com/sdk/vpadn-obs.js'\n script.async = true\n window.top.document.getElementsByTagName('head')[0].appendChild(script)\n }\n}\n\n/**\n * @Deprecated this method seems were no longer been used, should be removed after been tested\n */\nconst createAd = () => {\n if (!isInCrossDomain()) {\n try {\n injectObserver()\n } catch (error) {\n console.log(error)\n }\n }\n var vponTags = document.getElementsByTagName(systemVar.vponTag);\n var vponTagCounter = 0;\n var vponBanCounter = 0;\n var vponIntCounter = 0;\n while (vponTagCounter < vponTags.length) {\n var vponTag = vponTags[vponTagCounter];\n var debugMode = vponTag.getAttribute(systemVar.debug);\n var adType = checkAdType(vponTag);\n\n if (adType === 'banner' && isBanLessthanLimit(vponBanCounter)) {\n const bannerAd = vpon_ad_create_multi_banner_iframe(vponTag);\n if (bannerAd > 0) {\n vponBanCounter += bannerAd;\n getAd(vponTag, '_1');\n }\n } else if (adType === 'mi' && isIntLessthanLimit(vponIntCounter)) {\n const intAd = vpon_ad_create_int_iframe(vponTag);\n if (intAd > 0) {\n vponIntCounter += intAd;\n getAd(vponTag, '_int_1');\n }\n } else if (adType === 'na') {\n var checkInputResult = checkInput(vponTag);\n if (checkInputResult.errMsg) {\n if (debugMode) {\n console.info(\n 'ERROR: vpon tag fill attribute error, message => ' +\n checkInputResult.errMsg\n );\n }\n } else {\n if (checkNoNaADInsideVtag(vponTag)) {\n getAd(vponTag);\n }\n }\n } else {\n console.info('ERROR: invalid vpon tag type');\n }\n vponTagCounter++;\n }\n};\n\nconst checkNoNaADInsideVtag = vponTag => {\n if (vponTag.querySelectorAll('div').length > 0) {\n console.info(\n 'Warn: ad had exists inside vpontag, will not generate ad again.'\n );\n return false;\n }\n\n if (vponTag.getAttribute('status') == null) {\n vponTag.setAttribute('status', '1');\n } else {\n return false;\n }\n\n return true;\n};\n\n/**\n * Todo: When ad response component refactoring in the\n * future, Move this function to ad response phase and remove\n * iframe2.\n * Create banner 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_multi_banner_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 // check adhesion banner format\n if (checkInputResult.adhesionPosition) {\n if (\n checkInputResult.adhesionPosition === 'top' ||\n checkInputResult.adhesionPosition === 'bottom'\n ) {\n var format = vponTag.getAttribute(systemVar.format);\n if (format !== '320x50_mb') {\n console.info('ERROR: Adhesion banner only support format 320x50_mb.');\n return 0;\n }\n } else {\n console.info(\n 'ERROR: Please check the attribute \"vpon_ad_adhesion\". We can verify it only with value \"top\" or \"bottom\".'\n );\n return 0;\n }\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, checkInputResult.adhesionPosition should only be \"top\", \"bottom\", or undefined.\n initialBannerIframeHtmlTag(vponTag, guid, checkInputResult.adhesionPosition);\n\n return 1;\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\nconst initialCloseButtonContainer = (\n vponTag,\n guid,\n adType,\n adhesionPosition\n) => {\n var container = document.createElement('div');\n const customZIndex = vponTag.getAttribute('use_custom_z_index') || 100000\n container.id = guid + '_contain';\n container.style.display = 'none';\n if (adType == 'banner') {\n var reqAdParameters = getReqAdParameters(vponTag);\n // var checkInputResult = checkInput(vponTag)\n // var iframeW = reqAdParameters.format.split('x')[0]\n var iframeH = reqAdParameters.format.split('x')[1].split('_')[0];\n // var adhesionPosition = checkInputResult.adhesionPosition\n\n adhesionPosition === 'top'\n ? (container.style.top = '0px')\n : (container.style.bottom = '0px');\n container.style.margin = '0px';\n container.style.padding = '0px';\n container.style.position = 'fixed';\n container.style.left = '0px';\n container.style.width = '100%';\n container.style.height = iframeH + 'px';\n container.style.zIndex = '9998';\n container.style.background =\n 'url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAQAAAAECAIAAAAmkwkpAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAACVJREFUeNpitLS0lJWVffz4MZBkDAsLY4ABJqAYkIKQKDIAAQYAVVMLXmMqHtMAAAAASUVORK5CYII=\")';\n } else {\n container.style.position = 'fixed';\n container.style.zIndex = customZIndex;\n container.style.width = '100%';\n container.style.height = '100%';\n container.style.left = '0px';\n container.style.top = '0px';\n }\n return container;\n};\n\n// initial close button\nconst initialBannerCloseButton = (vponTag, guid) => {\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 close_btn = document.createElement('a');\n\n // To get a better control of close button, add an unique id\n close_btn.id = guid + '_close';\n close_btn.onclick = function (id) {\n var container = document.getElementById(guid + '_contain');\n container.style.zIndex = '-1';\n container.style.display = 'none';\n };\n\n var close_btn_img = document.createElement('img');\n close_btn_img.setAttribute('aria-label', systemVar.ariaLabel.close_button);\n close_btn.href = 'javascript:void(0);';\n close_btn.style.zIndex = '9999';\n close_btn.style.position = 'fixed';\n close_btn_img.style.width = '30px';\n close_btn_img.src = systemVar.closeImgSrc;\n close_btn.appendChild(close_btn_img);\n return close_btn;\n};\n\nconst initialIntCloseButton = (vponTag, guid) => {\n var useCustomCloseCallBack =\n vponTag.getAttribute(systemVar.useCustomCloseCallBack) || null;\n var close_btn = document.createElement('a');\n var close_btn_img = document.createElement('img');\n close_btn_img.setAttribute('aria-label', systemVar.ariaLabel.close_button);\n close_btn.id = guid + '_close';\n close_btn.onclick = function (id) {\n // document.getElementById(guid).remove()\n var element = document.getElementById(guid);\n /**\n * fix custom close button not worked due to wrong principal\n */\n if (element) {\n if (useCustomCloseCallBack || close_btn.style.opacity >= 1) {\n element.parentNode.remove();\n\n close_btn.style.zIndex = '-1';\n close_btn.style.display = 'none';\n var container = document.getElementById(guid + '_contain');\n if (container) {\n container.style.zIndex = '-1';\n container.style.width = '0';\n container.style.height = '0';\n }\n window.removeEventListener(\n 'orientationchange',\n transformCloseBtnPositionViaOrient\n );\n window.removeEventListener('scroll', transformCloseBtnPositionViaScroll);\n }\n }\n };\n close_btn.style.width = '70px';\n close_btn.style.height = '70px';\n close_btn.style.zIndex = '10001';\n close_btn.style.position = 'absolute'; //'fixed'\n close_btn.style.left = '5px';\n close_btn.style.top = '5px';\n close_btn_img.style.width = '45px';\n close_btn_img.src =\n 'data:image/png;base64,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';\n close_btn.appendChild(close_btn_img);\n /**\n * 因應讓 adTech 可以使用 customCloseButton,在素材端會透過 support.setExpandProperties \n * 來使用 postMessage 來通知 WebSDK,因會傳多數的 message 過來,故多做了判斷\n */\n try {\n window.addEventListener('message', e => {\n /**\n * bypass style setting to close button while pubs.useCustomCloseButton has been config.\n */\n\n if (e.data.type === 'expandProperties') {\n const { useCustomClose } = e.data\n systemVar.isUseCustomClose = useCustomClose === true ? true : false\n close_btn.style.display = useCustomClose === true ? 'none' : 'block'\n }\n })\n } catch (error) {\n console.log(error)\n }\n if (useCustomCloseCallBack != null) {\n close_btn.style.display = 'none';\n }\n return close_btn;\n};\n\nconst initialBannerIframeHtmlTag = (vponTag, guid, adhesionPosition) => {\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 iframeId1 = guid + '_1';\n var iframeId2 = guid + '_2';\n\n var openTab = vponTag.getAttribute(systemVar.openTab);\n openTab = openTab ? (openTab == 'true' ? true : false) : true;\n\n var ifrm1 = document.createElement('IFRAME');\n ifrm1.style.width = iframeW + 'px';\n ifrm1.style.height = iframeH + 'px';\n ifrm1.style.maxWidth = '100%';\n ifrm1.setAttribute('id', iframeId1);\n ifrm1.setAttribute('scrolling', 'no');\n ifrm1.style.display = 'block';\n ifrm1.frameBorder = 0;\n\n if (adhesionPosition) {\n // Here adhesionPosition will only be 'top' or 'bottom'\n ifrm1.style.position = 'fixed';\n ifrm1.style.left = '50%';\n ifrm1.style.marginLeft = '-' + iframeW / 2 + 'px';\n\n var container1 = initialCloseButtonContainer(\n vponTag,\n iframeId1,\n 'banner',\n adhesionPosition\n );\n var closeBtn1 = initialBannerCloseButton(vponTag, iframeId1);\n\n container1.appendChild(closeBtn1);\n container1.appendChild(ifrm1);\n vponTag.appendChild(container1);\n } else {\n var bannerIframeWrap = initialBannerIframeWrap(iframeId1, iframeW, iframeH);\n bannerIframeWrap.appendChild(ifrm1);\n vponTag.appendChild(bannerIframeWrap);\n }\n\n var ifrm2 = document.createElement('IFRAME');\n ifrm2.style.width = iframeW + 'px';\n ifrm2.style.height = iframeH + 'px';\n ifrm2.setAttribute('id', iframeId2);\n ifrm2.setAttribute('scrolling', 'no');\n ifrm2.style.display = 'none';\n ifrm2.frameBorder = 0;\n\n if (adhesionPosition) {\n ifrm2.style.position = 'fixed';\n ifrm2.style.left = '50%';\n ifrm2.style.marginLeft = '-' + iframeW / 2 + 'px';\n\n var container2 = initialCloseButtonContainer(\n vponTag,\n iframeId2,\n 'banner',\n adhesionPosition\n );\n var closeBtn2 = initialBannerCloseButton(vponTag, iframeId2);\n\n container2.appendChild(closeBtn2);\n container2.appendChild(ifrm2);\n vponTag.appendChild(container2);\n } else {\n ifrm2.style.margin = '0px auto';\n vponTag.appendChild(ifrm2);\n }\n};\n\nconst initialBannerIframeWrap = (guid, iframeW, iframeH) => {\n const container = document.createElement('div');\n container.id = guid + '_contain';\n container.style.position = 'relative';\n container.style.width = iframeW + 'px';\n container.style.height = iframeH + 'px';\n container.style.margin = 'auto';\n return container;\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// ------------- initial --------------\n\nmodule.exports = {\n isBanLessthanLimit,\n isIntLessthanLimit,\n createAd,\n vpon_ad_create_multi_banner_iframe,\n vpon_ad_create_int_iframe,\n initialCloseButtonContainer,\n initialBannerCloseButton,\n initialIntCloseButton,\n initialBannerIframeHtmlTag,\n initialIntIframeHtmlTag,\n checkNoNaADInsideVtag\n};\n\n\n\n// WEBPACK FOOTER //\n// ./src/vpadn-sdk-initial.partial.js","const { websdkParams } = require('./vpadn-sdk-parameters.partial');\n\n/**\n * Ad counter manager\n * @returns {function} closure function\n */\nfunction adCounterManager() {\n const counter = {\n banner: 0,\n mi: 0,\n na: 0,\n };\n\n const { adAmountLimit } = websdkParams;\n\n return (adType, num = 0) => {\n counter[adType] += num;\n return {\n counter: counter[adType],\n isExceedLimit: counter[adType] > adAmountLimit[adType],\n };\n };\n}\n\n/**\n * Ad context controller\n * @returns {object} interfaces\n *\n */\nfunction adContextController() {\n let contextObj = {};\n\n return {\n getAllContext: () => {\n return contextObj;\n },\n getContext: (adId) => {\n\t\t\tif (!adId || isNaN(adId)) {\n\t\t\t\treturn;\n\t\t\t}\n return contextObj[adId];\n },\n setContext: (adId, newContext) => {\n\t\t\tif (!adId || isNaN(adId)) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (!newContext || (typeof newContext !== 'object' || Array.isArray(newContext))) {\n\t\t\t\treturn;\n\t\t\t}\n\n contextObj[adId] = newContext;\n },\n };\n}\n\n/**\n * Global context controller\n * @returns {object} interfaces\n */\nfunction globalContextController() {\n let contextObj = {};\n\n return {\n getContext: (properties) => {\n if (!properties || !properties.length) {\n return contextObj;\n }\n\n if (typeof properties === \"string\") {\n return contextObj[properties];\n }\n\n const filteredContextObj = properties.reduce(\n (accumulator, currentValue) => {\n if (!contextObj[currentValue]) {\n return accumulator;\n }\n\n return { ...accumulator, currentValue: contextObj[currentValue] };\n },\n {}\n );\n\n return filteredContextObj;\n },\n setContext: (key, value) => {\n\t\t\tif (!key || typeof key === 'function' || typeof key === 'object') {\n\t\t\t\treturn;\n\t\t\t}\n\n contextObj[key] = value;\n },\n };\n}\n\nmodule.exports = {\n adCounterManager,\n globalContextController,\n adContextController,\n};\n\n\n\n// WEBPACK FOOTER //\n// ./src/vpadn-sdk-instance.partial.js"],"sourceRoot":""}