From 6f5b85b6f7d2195362ae03480120f4cef5ec4dc1 Mon Sep 17 00:00:00 2001 From: diosmosis Date: Tue, 8 May 2018 03:20:36 -0700 Subject: Add minimal first party cookie opt out support to JS tracker (#12829) * Add minimal opt out support to JS tracker: methods to set cookie on hosted site that prevents tracking requests from going out. * Update piwik.js * Update piwik.js * Rework tracker opt-out to use consent feature. * Do not delete consent related cookies ever and add this.isUserOptedOut() method for building your own opt out form. * Fix tests. * Add prefix to consent/consent_removed cookie names. * fix up pr * one more quick fix for safety * fix tests. * Use getRememberedConsent() in hasRememberConsent() to protect against both cookie set case. * Re-minify JS. * fix copy paste * re-minify --- piwik.js | 72 ++++++++++++++++++++++++++++++++-------------------------------- 1 file changed, 36 insertions(+), 36 deletions(-) (limited to 'piwik.js') diff --git a/piwik.js b/piwik.js index 2b5ad0ae98..67f62fef09 100644 --- a/piwik.js +++ b/piwik.js @@ -38,40 +38,40 @@ if(!am){am="/"}}return am},findMediaUrlInNode:function(ao){if(!ao){return}var am if(am&&ap.offsetTop){am=(ap.offsetTop+ao.height)>0}var al=an.clientWidth;if(T.innerWidth&&al>T.innerWidth){al=T.innerWidth}var ak=an.clientHeight;if(T.innerHeight&&ak>T.innerHeight){ak=T.innerHeight}return((ao.bottom>0||am)&&ao.right>0&&ao.left=0){c4=c4.slice(0,c3)}c3=c4.lastIndexOf("/");if(c3!==c4.length-1){c4=c4.slice(0,c3+1)}return c4+c2}function cu(c4,c2){var c3;c4=String(c4).toLowerCase();c2=String(c2).toLowerCase();if(c4===c2){return true}if(c2.slice(0,1)==="."){if(c4===c2.slice(1)){return true}c3=c4.length-c2.length;if((c3>0)&&(c4.slice(c3)===c2)){return true}}return false}function ca(c2){var c3=document.createElement("a");if(c2.indexOf("//")!==0&&c2.indexOf("http")!==0){if(c2.indexOf("*")===0){c2=c2.substr(1) -}if(c2.indexOf(".")===0){c2=c2.substr(1)}c2="http://"+c2}c3.href=v.toAbsoluteUrl(c2);if(c3.pathname){return c3.pathname}return""}function aW(c3,c2){if(!af(c2,"/")){c2="/"+c2}if(!af(c3,"/")){c3="/"+c3}var c4=(c2==="/"||c2==="/*");if(c4){return true}if(c3===c2){return true}c2=String(c2).toLowerCase();c3=String(c3).toLowerCase();if(R(c2,"*")){c2=c2.slice(0,-1);c4=(!c2||c2==="/");if(c4){return true}if(c3===c2){return true}return c3.indexOf(c2)===0}if(!R(c3,"/")){c3+="/"}if(!R(c2,"/")){c2+="/"}return c3.indexOf(c2)===0}function an(c6,c8){var c3,c2,c4,c5,c7;for(c3=0;c30)&&(c5.slice(c4)===c2)){return true}}}return false}function cf(c2,c4){c2=c2.replace("send_image=0","send_image=1");var c3=new Image(1,1);c3.onload=function(){E=0; -if(typeof c4==="function"){c4()}};c3.src=ay+(ay.indexOf("?")<0?"?":"&")+c2}function aZ(c3){var c7="object"===typeof h&&"function"===typeof h.sendBeacon&&"function"===typeof Blob;if(!c7){return false}var c6={type:"application/x-www-form-urlencoded; charset=UTF-8"};var c5=false;try{var c2=new Blob([c3],c6);c5=h.sendBeacon(ay,c2)}catch(c4){return false}return c5}function cP(c3,c4,c2){if(!J(c2)||null===c2){c2=true}if(m&&aZ(c3)){return}setTimeout(function(){if(m&&aZ(c3)){return}var c7;try{var c6=T.XMLHttpRequest?new T.XMLHttpRequest():T.ActiveXObject?new ActiveXObject("Microsoft.XMLHTTP"):null;c6.open("POST",ay,true);c6.onreadystatechange=function(){if(this.readyState===4&&!(this.status>=200&&this.status<300)){var c8=m&&aZ(c3);if(!c8&&c2){cf(c3,c4)}}else{if(this.readyState===4&&(typeof c4==="function")){c4()}}};c6.setRequestHeader("Content-Type",cm);c6.send(c3)}catch(c5){c7=m&&aZ(c3);if(!c7&&c2){cf(c3,c4)}}},50)}function b5(c3){var c2=new Date();var c4=c2.getTime()+c3;if(!r||c4>r){r=c4}}function cd(c2){if(b1||!aY||cz){return -}b1=setTimeout(function c3(){b1=null;if(!a5){a5=(!G.hasFocus||G.hasFocus())}if(!a5){cd(aY);return}if(bG()){return}var c4=new Date(),c5=aY-(c4.getTime()-cK);c5=Math.min(aY,c5);cd(c5)},c2||aY)}function bz(){if(!b1){return}clearTimeout(b1);b1=null}function a3(){a5=true;if(bG()){return}cd()}function at(){bz()}function cZ(){if(aH||!aY){return}aH=true;aj(T,"focus",a3);aj(T,"blur",at);cd()}function cq(c6){var c3=new Date();var c2=c3.getTime();cK=c2;if(cp&&c22000){cP(c3,c4)}else{cf(c3,c4)}b5(c2)})}if(!aH){cZ()}else{cd()}}function b9(c2){if(cD){return false}return(c2&&c2.length)}function cY(c4,c2){if(!b9(c4)){return}if(cz){cx.push(c4);return}var c3='{"requests":["?'+c4.join('","?')+'"]}';cq(function(){cP(c3,null,false);b5(c2)})}function aM(c2){return bb+c2+"."+bV+"."+bf}function bU(){if(bc){return"0" -}if(!J(h.cookieEnabled)){var c2=aM("testcookie");cX(c2,"1");return ax(c2)==="1"?"1":"0"}return h.cookieEnabled?"1":"0"}function a9(){bf=bW((cJ||cH)+(bg||"/")).slice(0,4)}function bM(){var c3=aM("cvar"),c2=ax(c3);if(c2.length){c2=JSON_PIWIK.parse(c2);if(V(c2)){return c2}}return{}}function cr(){if(aJ===false){aJ=bM()}}function cE(){return bW((h.userAgent||"")+(h.platform||"")+JSON_PIWIK.stringify(cS)+(new Date()).getTime()+Math.random()).slice(0,16)}function au(){return bW((h.userAgent||"")+(h.platform||"")+JSON_PIWIK.stringify(cS)).slice(0,6)}function a7(){return Math.floor((new Date()).getTime()/1000)}function aD(){var c3=a7();var c4=au();var c2=String(c3)+c4;return c2}function cO(c4){c4=String(c4);var c7=au();var c5=c7.length;var c6=c4.substr(-1*c5,c5);var c3=parseInt(c4.substr(0,c4.length-c5),10);if(c3&&c6&&c6===c7){var c2=a7();if(aS<=0){return true}if(c2>=c3&&c2<=(c3+aS)){return true}}return false}function c0(c2){if(!cA){return""}var c6=f(c2,aq);if(!c6){return""}c6=String(c6);var c4=new RegExp("^[a-zA-Z0-9]+$"); -if(c6.length===32&&c4.test(c6)){var c3=c6.substr(16,32);if(cO(c3)){var c5=c6.substr(0,16);return c5}}return""}function cB(){if(!bD){bD=c0(bC)}var c4=new Date(),c2=Math.round(c4.getTime()/1000),c3=aM("id"),c7=ax(c3),c6,c5;if(c7){c6=c7.split(".");c6.unshift("0");if(bD.length){c6[1]=bD}return c6}if(bD.length){c5=bD}else{if("0"===bU()){c5=""}else{c5=cE()}}c6=["1",c5,c2,0,c2,"",""];return c6}function aQ(){var c9=cB(),c5=c9[0],c6=c9[1],c3=c9[2],c2=c9[3],c7=c9[4],c4=c9[5];if(!J(c9[6])){c9[6]=""}var c8=c9[6];return{newVisitor:c5,uuid:c6,createTs:c3,visitCount:c2,currentVisitTs:c7,lastVisitTs:c4,lastEcommerceOrderTs:c8}}function aB(){var c5=new Date(),c3=c5.getTime(),c6=aQ().createTs;var c2=parseInt(c6,10);var c4=(c2*1000)+cw-c3;return c4}function aF(c2){if(!bV){return}var c4=new Date(),c3=Math.round(c4.getTime()/1000);if(!J(c2)){c2=aQ()}var c5=c2.uuid+"."+c2.createTs+"."+c2.visitCount+"."+c3+"."+c2.lastVisitTs+"."+c2.lastEcommerceOrderTs;cX(aM("id"),c5,aB(),bg,cJ,bH)}function bB(){var c2=ax(aM("ref")); -if(c2.length){try{c2=JSON_PIWIK.parse(c2);if(V(c2)){return c2}}catch(c3){}}return["","",0,""]}function bN(c4,c3,c2){cX(c4,"",-86400,c3,c2)}function bn(c3){var c2="testvalue";cX("test",c2,10000,null,c3);if(ax("test")===c2){bN("test",null,c3);return true}return false}function az(){var c3=bc;bc=false;var c2,c4;for(c2=0;c2ds){di.visitCount++;di.lastVisitTs=di.currentVisitTs}if(!bm||!da.length){for(dp in cg){if(Object.prototype.hasOwnProperty.call(cg,dp)){da=f(dt,cg[dp]);if(da.length){break}}}for(dp in bv){if(Object.prototype.hasOwnProperty.call(bv,dp)){c2=f(dt,bv[dp]);if(c2.length){break}}}}dw=d(be);dd=dn.length?d(dn):"";if(dw.length&&!aO(dw)&&(!bm||!dd.length||aO(dd))){dn=be}if(dn.length||da.length){c9=dc;dm=[da,c2,c9,bR(dn.slice(0,c6))];cX(dj,JSON_PIWIK.stringify(dm),cQ,bg,cJ)}}c4+="&idsite="+bV+"&rec=1&r="+String(Math.random()).slice(2,8)+"&h="+c3.getHours()+"&m="+c3.getMinutes()+"&s="+c3.getSeconds()+"&url="+t(bR(dt))+(be.length?"&urlref="+t(bR(be)):"")+((bp&&bp.length)?"&uid="+t(bp):"")+"&_id="+di.uuid+"&_idts="+di.createTs+"&_idvc="+di.visitCount+"&_idn="+di.newVisitor+(da.length?"&_rcn="+t(da):"")+(c2.length?"&_rck="+t(c2):"")+"&_refts="+c9+"&_viewts="+di.lastVisitTs+(String(di.lastEcommerceOrderTs).length?"&_ects="+di.lastEcommerceOrderTs:"")+(String(dn).length?"&_ref="+t(bR(dn.slice(0,c6))):"")+(df?"&cs="+t(df):"")+"&send_image=0"; -for(dp in cS){if(Object.prototype.hasOwnProperty.call(cS,dp)){c4+="&"+dp+"="+cS[dp]}}var dv=[];if(dq){for(dp in dq){if(Object.prototype.hasOwnProperty.call(dq,dp)&&/^dimension\d+$/.test(dp)){var c8=dp.replace("dimension","");dv.push(parseInt(c8,10));dv.push(String(c8));c4+="&"+dp+"="+dq[dp];delete dq[dp]}}}if(dq&&B(dq)){dq=null}for(dp in bd){if(Object.prototype.hasOwnProperty.call(bd,dp)){var de=(-1===M(dv,dp));if(de){c4+="&dimension"+dp+"="+bd[dp]}}}if(dq){c4+="&data="+t(JSON_PIWIK.stringify(dq))}else{if(ak){c4+="&data="+t(JSON_PIWIK.stringify(ak))}}function db(dx,dy){var dz=JSON_PIWIK.stringify(dx);if(dz.length>2){return"&"+dy+"="+t(dz)}return""}var du=c1(bL);var dk=c1(cb);c4+=db(du,"cvar");c4+=db(dk,"e_cvar");if(aJ){c4+=db(aJ,"_cvar");for(dp in dl){if(Object.prototype.hasOwnProperty.call(dl,dp)){if(aJ[dp][0]===""||aJ[dp][1]===""){delete aJ[dp]}}}if(bF){cX(dg,JSON_PIWIK.stringify(aJ),ce,bg,cJ)}}if(aV){if(cc){c4+=">_ms="+cc}else{if(i&&i.timing&&i.timing.requestStart&&i.timing.responseEnd){c4+=">_ms="+(i.timing.responseEnd-i.timing.requestStart) -}}}if(aE){c4+="&pv_id="+aE}di.lastEcommerceOrderTs=J(c5)&&String(c5).length?c5:di.lastEcommerceOrderTs;aF(di);b2();c4+=Z(dr,{tracker:bx,request:c4});if(cL.length){c4+="&"+cL}if(A(b0)){c4=b0(c4)}return c4}bG=function a0(){var c2=new Date();if(cK+aY<=c2.getTime()){var c3=ci("ping=1",null,"ping");bu(c3,by);return true}return false};function bh(c5,c4,da,c6,c2,dd){var c8="idgoal=0",c9,c3=new Date(),db=[],dc,c7=String(c5).length;if(c7){c8+="&ec_id="+t(c5);c9=Math.round(c3.getTime()/1000)}c8+="&revenue="+c4;if(String(da).length){c8+="&ec_st="+da}if(String(c6).length){c8+="&ec_tx="+c6}if(String(c2).length){c8+="&ec_sh="+c2}if(String(dd).length){c8+="&ec_dt="+dd}if(cM){for(dc in cM){if(Object.prototype.hasOwnProperty.call(cM,dc)){if(!J(cM[dc][1])){cM[dc][1]=""}if(!J(cM[dc][2])){cM[dc][2]=""}if(!J(cM[dc][3])||String(cM[dc][3]).length===0){cM[dc][3]=0}if(!J(cM[dc][4])||String(cM[dc][4]).length===0){cM[dc][4]=1}db.push(cM[dc])}}c8+="&ec_items="+t(JSON_PIWIK.stringify(db))}c8=ci(c8,ak,"ecommerce",c9); -bu(c8,by);if(c7){cM={}}}function bO(c2,c6,c5,c4,c3,c7){if(String(c2).length&&J(c6)){bh(c2,c6,c5,c4,c3,c7)}}function bj(c2){if(J(c2)){bh("",c2,"","","","")}}function bP(c3,c5,c4){aE=a8();var c2=ci("action_name="+t(ah(c3||ba)),c5,"log");bu(c2,by,c4)}function aT(c4,c3){var c5,c2="(^| )(piwik[_-]"+c3;if(c4){for(c5=0;c50){c3+="&"}else{c3+="?"}var c4=bi();c3=F(c3,aq,c4);ab.setAnyAttribute(c2,"href",c3)}function av(c5){var c6=ab.getAttributeValueFromNode(c5,"href");if(!c6){return false}c6=String(c6);var c3=c6.indexOf("//")===0||c6.indexOf("http://")===0||c6.indexOf("https://")===0;if(!c3){return false}var c2=c5.pathname||ca(c5.href);var c4=(c5.hostname||d(c5.href)).toLowerCase();if(an(c4,c2)){if(!cu(cH,L(c4))){return true}return false}return false}function ct(c2){var c3=cW(c2);if(c3&&c3.type){c3.href=p(c3.href);cN(c3.href,c3.type,undefined,null,c2);return}if(cA){c2=ap(c2);if(av(c2)){b8(c2)}}}function cl(){return G.all&&!G.addEventListener}function cI(c2){var c4=c2.which;var c3=(typeof c2.button);if(!c4&&c3!=="undefined"){if(cl()){if(c2.button&1){c4=1}else{if(c2.button&2){c4=3}else{if(c2.button&4){c4=2}}}}else{if(c2.button===0||c2.button==="0"){c4=1}else{if(c2.button&1){c4=2}else{if(c2.button&2){c4=3}}}}}return c4}function bI(c2){switch(cI(c2)){case 1:return"left"; -case 2:return"middle";case 3:return"right"}}function aU(c2){return c2.target||c2.srcElement}function aw(c2){return function(c5){c5=c5||T.event;var c4=bI(c5);var c6=aU(c5);if(c5.type==="click"){var c3=false;if(c2&&c4==="middle"){c3=true}if(c6&&!c3){ct(c6)}}else{if(c5.type==="mousedown"){if(c4==="middle"&&c6){aK=c4;br=c6}else{aK=br=null}}else{if(c5.type==="mouseup"){if(c4===aK&&c6===br){ct(c6)}aK=br=null}else{if(c5.type==="contextmenu"){ct(c6)}}}}}}function am(c4,c3){var c2=typeof c3;if(c2==="undefined"){c3=true}aj(c4,"click",aw(c3),false);if(c3){aj(c4,"mouseup",aw(c3),false);aj(c4,"mousedown",aw(c3),false);aj(c4,"contextmenu",aw(c3),false)}}function bs(c4,c6){al=true;var c5,c3=aT(bq,"ignore"),c7=G.links,c2=null,c8=null;if(c7){for(c5=0;c50){c6=parseInt(c6,10);c9(c6)}})}function cs(){var c3,c5,c6={pdf:"application/pdf",qt:"video/quicktime",realp:"audio/x-pn-realaudio-plugin",wma:"application/x-mplayer2",dir:"application/x-director",fla:"application/x-shockwave-flash",java:"application/x-java-vm",gears:"application/x-googlegears",ag:"application/x-silverlight"};if(!((new RegExp("MSIE")).test(h.userAgent))){if(h.mimeTypes&&h.mimeTypes.length){for(c3 in c6){if(Object.prototype.hasOwnProperty.call(c6,c3)){c5=h.mimeTypes[c6[c3]];cS[c3]=(c5&&c5.enabledPlugin)?"1":"0"}}}if(!((new RegExp("Edge[ /](\\d+[\\.\\d]+)")).test(h.userAgent))&&typeof navigator.javaEnabled!=="unknown"&&J(h.javaEnabled)&&h.javaEnabled()){cS.java="1" -}if(A(T.GearsFactory)){cS.gears="1"}cS.cookie=bU()}var c4=parseInt(W.width,10);var c2=parseInt(W.height,10);cS.res=parseInt(c4,10)+"x"+parseInt(c2,10)}cs();a9();aF();this.getVisitorId=function(){return aQ().uuid};this.getVisitorInfo=function(){return cB()};this.getAttributionInfo=function(){return bB()};this.getAttributionCampaignName=function(){return bB()[0]};this.getAttributionCampaignKeyword=function(){return bB()[1]};this.getAttributionReferrerTimestamp=function(){return bB()[2]};this.getAttributionReferrerUrl=function(){return bB()[3]};this.setTrackerUrl=function(c2){ay=c2};this.getTrackerUrl=function(){return ay};this.getPiwikUrl=function(){return O(this.getTrackerUrl(),bw)};this.addTracker=function(c2,c4){if(!c4){throw new Error("A siteId must be given to add a new tracker")}if(!J(c2)||null===c2){c2=this.getTrackerUrl()}var c3=new Q(c2,c4);I.push(c3);return c3};this.getSiteId=function(){return bV};this.setSiteId=function(c2){bS(c2)};this.resetUserId=function(){bp=""};this.setUserId=function(c2){if(!J(c2)||!c2.length){return -}bp=c2};this.getUserId=function(){return bp};this.setCustomData=function(c2,c3){if(V(c2)){ak=c2}else{if(!ak){ak={}}ak[c2]=c3}};this.getCustomData=function(){return ak};this.setCustomRequestProcessing=function(c2){b0=c2};this.appendToTrackingUrl=function(c2){cL=c2};this.getRequest=function(c2){return ci(c2)};this.addPlugin=function(c2,c3){b[c2]=c3};this.setCustomDimension=function(c2,c3){c2=parseInt(c2,10);if(c2>0){if(!J(c3)){c3=""}if(!w(c3)){c3=String(c3)}bd[c2]=c3}};this.getCustomDimension=function(c2){c2=parseInt(c2,10);if(c2>0&&Object.prototype.hasOwnProperty.call(bd,c2)){return bd[c2]}};this.deleteCustomDimension=function(c2){c2=parseInt(c2,10);if(c2>0){delete bd[c2]}};this.setCustomVariable=function(c3,c2,c6,c4){var c5;if(!J(c4)){c4="visit"}if(!J(c2)){return}if(!J(c6)){c6=""}if(c3>0){c2=!w(c2)?String(c2):c2;c6=!w(c6)?String(c6):c6;c5=[c2.slice(0,bk),c6.slice(0,bk)];if(c4==="visit"||c4===2){cr();aJ[c3]=c5}else{if(c4==="page"||c4===3){bL[c3]=c5}else{if(c4==="event"){cb[c3]=c5}}}}};this.getCustomVariable=function(c3,c4){var c2; -if(!J(c4)){c4="visit"}if(c4==="page"||c4===3){c2=bL[c3]}else{if(c4==="event"){c2=cb[c3]}else{if(c4==="visit"||c4===2){cr();c2=aJ[c3]}}}if(!J(c2)||(c2&&c2[0]==="")){return false}return c2};this.deleteCustomVariable=function(c2,c3){if(this.getCustomVariable(c2,c3)){this.setCustomVariable(c2,"","",c3)}};this.deleteCustomVariables=function(c2){if(c2==="page"||c2===3){bL={}}else{if(c2==="event"){cb={}}else{if(c2==="visit"||c2===2){aJ={}}}}};this.storeCustomVariablesInCookie=function(){bF=true};this.setLinkTrackingTimer=function(c2){by=c2};this.getLinkTrackingTimer=function(){return by};this.setDownloadExtensions=function(c2){if(w(c2)){c2=c2.split("|")}cR=c2};this.addDownloadExtensions=function(c3){var c2;if(w(c3)){c3=c3.split("|")}for(c2=0;c21&&al!=="addTracker"){ag("The method "+al+' is registered more than once in "_paq" variable. Only the last call has an effect. Please have a look at the multiple Piwik trackers documentation: https://developer.piwik.org/guides/tracking-javascript-guide#multiple-piwik-trackers')}aq[al]++}}}}return ap}var C=["addTracker","disableCookies","setTrackerUrl","setAPIUrl","enableCrossDomainLinking","setCrossDomainLinkingTimeout","setSecureCookie","setCookiePath","setCookieDomain","setDomains","setUserId","setSiteId","enableLinkTracking","requireConsent","setConsentGiven"]; -function aa(ak,am){var al=new Q(ak,am);I.push(al);_paq=c(_paq,C);for(E=0;E<_paq.length;E++){if(_paq[E]){ac(_paq[E])}}_paq=new H();return al}aj(T,"beforeunload",ae,false);Date.prototype.getTimeAlias=Date.prototype.getTime;e={initialized:false,JSON:JSON_PIWIK,DOM:{addEventListener:function(an,am,al,ak){var ao=typeof ak;if(ao==="undefined"){ak=false}aj(an,am,al,ak)},onLoad:n,onReady:q,isNodeVisible:j,isOrWasNodeVisible:v.isNodeVisible},on:function(al,ak){if(!y[al]){y[al]=[]}y[al].push(ak)},off:function(am,al){if(!y[am]){return}var ak=0;for(ak;ak=0){c6=c6.slice(0,c5)}c5=c6.lastIndexOf("/");if(c5!==c6.length-1){c6=c6.slice(0,c5+1)}return c6+c4}function cw(c6,c4){var c5;c6=String(c6).toLowerCase();c4=String(c4).toLowerCase();if(c6===c4){return true}if(c4.slice(0,1)==="."){if(c6===c4.slice(1)){return true}c5=c6.length-c4.length;if((c5>0)&&(c6.slice(c5)===c4)){return true}}return false}function cc(c4){var c5=document.createElement("a"); +if(c4.indexOf("//")!==0&&c4.indexOf("http")!==0){if(c4.indexOf("*")===0){c4=c4.substr(1)}if(c4.indexOf(".")===0){c4=c4.substr(1)}c4="http://"+c4}c5.href=v.toAbsoluteUrl(c4);if(c5.pathname){return c5.pathname}return""}function aW(c5,c4){if(!af(c4,"/")){c4="/"+c4}if(!af(c5,"/")){c5="/"+c5}var c6=(c4==="/"||c4==="/*");if(c6){return true}if(c5===c4){return true}c4=String(c4).toLowerCase();c5=String(c5).toLowerCase();if(R(c4,"*")){c4=c4.slice(0,-1);c6=(!c4||c4==="/");if(c6){return true}if(c5===c4){return true}return c5.indexOf(c4)===0}if(!R(c5,"/")){c5+="/"}if(!R(c4,"/")){c4+="/"}return c5.indexOf(c4)===0}function an(c8,da){var c5,c4,c6,c7,c9;for(c5=0;c50)&&(c7.slice(c6)===c4)){return true}}}return false}function ch(c4,c6){c4=c4.replace("send_image=0","send_image=1"); +var c5=new Image(1,1);c5.onload=function(){E=0;if(typeof c6==="function"){c6()}};c5.src=ay+(ay.indexOf("?")<0?"?":"&")+c4}function aZ(c5){var c9="object"===typeof h&&"function"===typeof h.sendBeacon&&"function"===typeof Blob;if(!c9){return false}var c8={type:"application/x-www-form-urlencoded; charset=UTF-8"};var c7=false;try{var c4=new Blob([c5],c8);c7=h.sendBeacon(ay,c4)}catch(c6){return false}return c7}function cR(c5,c6,c4){if(!J(c4)||null===c4){c4=true}if(m&&aZ(c5)){return}setTimeout(function(){if(m&&aZ(c5)){return}var c9;try{var c8=T.XMLHttpRequest?new T.XMLHttpRequest():T.ActiveXObject?new ActiveXObject("Microsoft.XMLHTTP"):null;c8.open("POST",ay,true);c8.onreadystatechange=function(){if(this.readyState===4&&!(this.status>=200&&this.status<300)){var da=m&&aZ(c5);if(!da&&c4){ch(c5,c6)}}else{if(this.readyState===4&&(typeof c6==="function")){c6()}}};c8.setRequestHeader("Content-Type",co);c8.send(c5)}catch(c7){c9=m&&aZ(c5);if(!c9&&c4){ch(c5,c6)}}},50)}function b7(c5){var c4=new Date(); +var c6=c4.getTime()+c5;if(!r||c6>r){r=c6}}function cf(c4){if(b3||!aY||!bt){return}b3=setTimeout(function c5(){b3=null;if(!a5){a5=(!G.hasFocus||G.hasFocus())}if(!a5){cf(aY);return}if(bI()){return}var c6=new Date(),c7=aY-(c6.getTime()-cM);c7=Math.min(aY,c7);cf(c7)},c4||aY)}function bB(){if(!b3){return}clearTimeout(b3);b3=null}function a3(){a5=true;if(bI()){return}cf()}function at(){bB()}function c1(){if(aH||!aY){return}aH=true;aj(T,"focus",a3);aj(T,"blur",at);cf()}function cs(c8){var c5=new Date();var c4=c5.getTime();cM=c4;if(cr&&c42000){cR(c5,c6)}else{ch(c5,c6)}b7(c4)})}if(!aH){c1()}else{cf()}}function cb(c4){if(cF){return false}return(c4&&c4.length)}function c0(c6,c4){if(!cb(c6)){return}if(!bt){cz.push(c6);return}var c5='{"requests":["?'+c6.join('","?')+'"]}';cs(function(){cR(c5,null,false); +b7(c4)})}function aM(c4){return bc+c4+"."+bX+"."+bg}function bW(){if(bd){return"0"}if(!J(h.cookieEnabled)){var c4=aM("testcookie");cZ(c4,"1");return ax(c4)==="1"?"1":"0"}return h.cookieEnabled?"1":"0"}function ba(){bg=bY((cL||cJ)+(bh||"/")).slice(0,4)}function bO(){var c5=aM("cvar"),c4=ax(c5);if(c4.length){c4=JSON_PIWIK.parse(c4);if(V(c4)){return c4}}return{}}function ct(){if(aJ===false){aJ=bO()}}function cG(){return bY((h.userAgent||"")+(h.platform||"")+JSON_PIWIK.stringify(cU)+(new Date()).getTime()+Math.random()).slice(0,16)}function au(){return bY((h.userAgent||"")+(h.platform||"")+JSON_PIWIK.stringify(cU)).slice(0,6)}function a8(){return Math.floor((new Date()).getTime()/1000)}function aD(){var c5=a8();var c6=au();var c4=String(c5)+c6;return c4}function cQ(c6){c6=String(c6);var c9=au();var c7=c9.length;var c8=c6.substr(-1*c7,c7);var c5=parseInt(c6.substr(0,c6.length-c7),10);if(c5&&c8&&c8===c9){var c4=a8();if(aS<=0){return true}if(c4>=c5&&c4<=(c5+aS)){return true}}return false}function c2(c4){if(!cC){return"" +}var c8=f(c4,aq);if(!c8){return""}c8=String(c8);var c6=new RegExp("^[a-zA-Z0-9]+$");if(c8.length===32&&c6.test(c8)){var c5=c8.substr(16,32);if(cQ(c5)){var c7=c8.substr(0,16);return c7}}return""}function cD(){if(!bF){bF=c2(bE)}var c6=new Date(),c4=Math.round(c6.getTime()/1000),c5=aM("id"),c9=ax(c5),c8,c7;if(c9){c8=c9.split(".");c8.unshift("0");if(bF.length){c8[1]=bF}return c8}if(bF.length){c7=bF}else{if("0"===bW()){c7=""}else{c7=cG()}}c8=["1",c7,c4,0,c4,"",""];return c8}function aQ(){var db=cD(),c7=db[0],c8=db[1],c5=db[2],c4=db[3],c9=db[4],c6=db[5];if(!J(db[6])){db[6]=""}var da=db[6];return{newVisitor:c7,uuid:c8,createTs:c5,visitCount:c4,currentVisitTs:c9,lastVisitTs:c6,lastEcommerceOrderTs:da}}function aB(){var c7=new Date(),c5=c7.getTime(),c8=aQ().createTs;var c4=parseInt(c8,10);var c6=(c4*1000)+cy-c5;return c6}function aF(c4){if(!bX){return}var c6=new Date(),c5=Math.round(c6.getTime()/1000);if(!J(c4)){c4=aQ()}var c7=c4.uuid+"."+c4.createTs+"."+c4.visitCount+"."+c5+"."+c4.lastVisitTs+"."+c4.lastEcommerceOrderTs; +cZ(aM("id"),c7,aB(),bh,cL,bJ)}function bD(){var c4=ax(aM("ref"));if(c4.length){try{c4=JSON_PIWIK.parse(c4);if(V(c4)){return c4}}catch(c5){}}return["","",0,""]}function bP(c6,c5,c4){cZ(c6,"",-86400,c5,c4)}function bo(c5){var c4="testvalue";cZ("test",c4,10000,null,c5);if(ax("test")===c4){bP("test",null,c5);return true}return false}function az(){var c5=bd;bd=false;var c4,c6;for(c4=0;c4du){dk.visitCount++;dk.lastVisitTs=dk.currentVisitTs}if(!bn||!dc.length){for(dr in ci){if(Object.prototype.hasOwnProperty.call(ci,dr)){dc=f(dv,ci[dr]);if(dc.length){break}}}for(dr in bx){if(Object.prototype.hasOwnProperty.call(bx,dr)){c4=f(dv,bx[dr]);if(c4.length){break}}}}dy=d(bf);df=dq.length?d(dq):"";if(dy.length&&!aO(dy)&&(!bn||!df.length||aO(df))){dq=bf}if(dq.length||dc.length){db=de;dp=[dc,c4,db,bT(dq.slice(0,c8))];cZ(dl,JSON_PIWIK.stringify(dp),cS,bh,cL)}}c6+="&idsite="+bX+"&rec=1&r="+String(Math.random()).slice(2,8)+"&h="+c5.getHours()+"&m="+c5.getMinutes()+"&s="+c5.getSeconds()+"&url="+t(bT(dv))+(bf.length?"&urlref="+t(bT(bf)):"")+((bq&&bq.length)?"&uid="+t(bq):"")+"&_id="+dk.uuid+"&_idts="+dk.createTs+"&_idvc="+dk.visitCount+"&_idn="+dk.newVisitor+(dc.length?"&_rcn="+t(dc):"")+(c4.length?"&_rck="+t(c4):"")+"&_refts="+db+"&_viewts="+dk.lastVisitTs+(String(dk.lastEcommerceOrderTs).length?"&_ects="+dk.lastEcommerceOrderTs:"")+(String(dq).length?"&_ref="+t(bT(dq.slice(0,c8))):"")+(dh?"&cs="+t(dh):"")+"&send_image=0"; +for(dr in cU){if(Object.prototype.hasOwnProperty.call(cU,dr)){c6+="&"+dr+"="+cU[dr]}}var dx=[];if(ds){for(dr in ds){if(Object.prototype.hasOwnProperty.call(ds,dr)&&/^dimension\d+$/.test(dr)){var da=dr.replace("dimension","");dx.push(parseInt(da,10));dx.push(String(da));c6+="&"+dr+"="+ds[dr];delete ds[dr]}}}if(ds&&B(ds)){ds=null}for(dr in be){if(Object.prototype.hasOwnProperty.call(be,dr)){var dg=(-1===M(dx,dr));if(dg){c6+="&dimension"+dr+"="+be[dr]}}}if(ds){c6+="&data="+t(JSON_PIWIK.stringify(ds))}else{if(ak){c6+="&data="+t(JSON_PIWIK.stringify(ak))}}function dd(dz,dA){var dB=JSON_PIWIK.stringify(dz);if(dB.length>2){return"&"+dA+"="+t(dB)}return""}var dw=c3(bN);var dm=c3(cd);c6+=dd(dw,"cvar");c6+=dd(dm,"e_cvar");if(aJ){c6+=dd(aJ,"_cvar");for(dr in dn){if(Object.prototype.hasOwnProperty.call(dn,dr)){if(aJ[dr][0]===""||aJ[dr][1]===""){delete aJ[dr]}}}if(bH){cZ(di,JSON_PIWIK.stringify(aJ),cg,bh,cL)}}if(aV){if(ce){c6+=">_ms="+ce}else{if(i&&i.timing&&i.timing.requestStart&&i.timing.responseEnd){c6+=">_ms="+(i.timing.responseEnd-i.timing.requestStart) +}}}if(aE){c6+="&pv_id="+aE}dk.lastEcommerceOrderTs=J(c7)&&String(c7).length?c7:dk.lastEcommerceOrderTs;aF(dk);b4();c6+=Z(dt,{tracker:bz,request:c6});if(cN.length){c6+="&"+cN}if(A(b2)){c6=b2(c6)}return c6}bI=function a0(){var c4=new Date();if(cM+aY<=c4.getTime()){var c5=ck("ping=1",null,"ping");bw(c5,bA);return true}return false};function bi(c7,c6,dc,c8,c4,df){var da="idgoal=0",db,c5=new Date(),dd=[],de,c9=String(c7).length;if(c9){da+="&ec_id="+t(c7);db=Math.round(c5.getTime()/1000)}da+="&revenue="+c6;if(String(dc).length){da+="&ec_st="+dc}if(String(c8).length){da+="&ec_tx="+c8}if(String(c4).length){da+="&ec_sh="+c4}if(String(df).length){da+="&ec_dt="+df}if(cO){for(de in cO){if(Object.prototype.hasOwnProperty.call(cO,de)){if(!J(cO[de][1])){cO[de][1]=""}if(!J(cO[de][2])){cO[de][2]=""}if(!J(cO[de][3])||String(cO[de][3]).length===0){cO[de][3]=0}if(!J(cO[de][4])||String(cO[de][4]).length===0){cO[de][4]=1}dd.push(cO[de])}}da+="&ec_items="+t(JSON_PIWIK.stringify(dd))}da=ck(da,ak,"ecommerce",db); +bw(da,bA);if(c9){cO={}}}function bQ(c4,c8,c7,c6,c5,c9){if(String(c4).length&&J(c8)){bi(c4,c8,c7,c6,c5,c9)}}function bk(c4){if(J(c4)){bi("",c4,"","","","")}}function bR(c5,c7,c6){aE=a9();var c4=ck("action_name="+t(ah(c5||bb)),c7,"log");bw(c4,bA,c6)}function aT(c6,c5){var c7,c4="(^| )(piwik[_-]"+c5;if(c6){for(c7=0;c70){c5+="&"}else{c5+="?"}var c6=bj();c5=F(c5,aq,c6);ab.setAnyAttribute(c4,"href",c5)}function av(c7){var c8=ab.getAttributeValueFromNode(c7,"href");if(!c8){return false}c8=String(c8);var c5=c8.indexOf("//")===0||c8.indexOf("http://")===0||c8.indexOf("https://")===0;if(!c5){return false}var c4=c7.pathname||cc(c7.href);var c6=(c7.hostname||d(c7.href)).toLowerCase();if(an(c6,c4)){if(!cw(cJ,L(c6))){return true}return false}return false}function cv(c4){var c5=cY(c4);if(c5&&c5.type){c5.href=p(c5.href);cP(c5.href,c5.type,undefined,null,c4);return}if(cC){c4=ap(c4);if(av(c4)){ca(c4)}}}function cn(){return G.all&&!G.addEventListener}function cK(c4){var c6=c4.which;var c5=(typeof c4.button);if(!c6&&c5!=="undefined"){if(cn()){if(c4.button&1){c6=1}else{if(c4.button&2){c6=3}else{if(c4.button&4){c6=2}}}}else{if(c4.button===0||c4.button==="0"){c6=1}else{if(c4.button&1){c6=2}else{if(c4.button&2){c6=3}}}}}return c6}function bK(c4){switch(cK(c4)){case 1:return"left"; +case 2:return"middle";case 3:return"right"}}function aU(c4){return c4.target||c4.srcElement}function aw(c4){return function(c7){c7=c7||T.event;var c6=bK(c7);var c8=aU(c7);if(c7.type==="click"){var c5=false;if(c4&&c6==="middle"){c5=true}if(c8&&!c5){cv(c8)}}else{if(c7.type==="mousedown"){if(c6==="middle"&&c8){aK=c6;bs=c8}else{aK=bs=null}}else{if(c7.type==="mouseup"){if(c6===aK&&c8===bs){cv(c8)}aK=bs=null}else{if(c7.type==="contextmenu"){cv(c8)}}}}}}function am(c6,c5){var c4=typeof c5;if(c4==="undefined"){c5=true}aj(c6,"click",aw(c5),false);if(c5){aj(c6,"mouseup",aw(c5),false);aj(c6,"mousedown",aw(c5),false);aj(c6,"contextmenu",aw(c5),false)}}function bu(c6,c8){al=true;var c7,c5=aT(br,"ignore"),c9=G.links,c4=null,da=null;if(c9){for(c7=0;c70){c8=parseInt(c8,10);db(c8)}})}function cu(){var c5,c7,c8={pdf:"application/pdf",qt:"video/quicktime",realp:"audio/x-pn-realaudio-plugin",wma:"application/x-mplayer2",dir:"application/x-director",fla:"application/x-shockwave-flash",java:"application/x-java-vm",gears:"application/x-googlegears",ag:"application/x-silverlight"};if(!((new RegExp("MSIE")).test(h.userAgent))){if(h.mimeTypes&&h.mimeTypes.length){for(c5 in c8){if(Object.prototype.hasOwnProperty.call(c8,c5)){c7=h.mimeTypes[c8[c5]];cU[c5]=(c7&&c7.enabledPlugin)?"1":"0"}}}if(!((new RegExp("Edge[ /](\\d+[\\.\\d]+)")).test(h.userAgent))&&typeof navigator.javaEnabled!=="unknown"&&J(h.javaEnabled)&&h.javaEnabled()){cU.java="1" +}if(A(T.GearsFactory)){cU.gears="1"}cU.cookie=bW()}var c6=parseInt(W.width,10);var c4=parseInt(W.height,10);cU.res=parseInt(c6,10)+"x"+parseInt(c4,10)}cu();ba();aF();this.getVisitorId=function(){return aQ().uuid};this.getVisitorInfo=function(){return cD()};this.getAttributionInfo=function(){return bD()};this.getAttributionCampaignName=function(){return bD()[0]};this.getAttributionCampaignKeyword=function(){return bD()[1]};this.getAttributionReferrerTimestamp=function(){return bD()[2]};this.getAttributionReferrerUrl=function(){return bD()[3]};this.setTrackerUrl=function(c4){ay=c4};this.getTrackerUrl=function(){return ay};this.getPiwikUrl=function(){return O(this.getTrackerUrl(),by)};this.addTracker=function(c4,c6){if(!c6){throw new Error("A siteId must be given to add a new tracker")}if(!J(c4)||null===c4){c4=this.getTrackerUrl()}var c5=new Q(c4,c6);I.push(c5);return c5};this.getSiteId=function(){return bX};this.setSiteId=function(c4){bU(c4)};this.resetUserId=function(){bq=""};this.setUserId=function(c4){if(!J(c4)||!c4.length){return +}bq=c4};this.getUserId=function(){return bq};this.setCustomData=function(c4,c5){if(V(c4)){ak=c4}else{if(!ak){ak={}}ak[c4]=c5}};this.getCustomData=function(){return ak};this.setCustomRequestProcessing=function(c4){b2=c4};this.appendToTrackingUrl=function(c4){cN=c4};this.getRequest=function(c4){return ck(c4)};this.addPlugin=function(c4,c5){b[c4]=c5};this.setCustomDimension=function(c4,c5){c4=parseInt(c4,10);if(c4>0){if(!J(c5)){c5=""}if(!w(c5)){c5=String(c5)}be[c4]=c5}};this.getCustomDimension=function(c4){c4=parseInt(c4,10);if(c4>0&&Object.prototype.hasOwnProperty.call(be,c4)){return be[c4]}};this.deleteCustomDimension=function(c4){c4=parseInt(c4,10);if(c4>0){delete be[c4]}};this.setCustomVariable=function(c5,c4,c8,c6){var c7;if(!J(c6)){c6="visit"}if(!J(c4)){return}if(!J(c8)){c8=""}if(c5>0){c4=!w(c4)?String(c4):c4;c8=!w(c8)?String(c8):c8;c7=[c4.slice(0,bl),c8.slice(0,bl)];if(c6==="visit"||c6===2){ct();aJ[c5]=c7}else{if(c6==="page"||c6===3){bN[c5]=c7}else{if(c6==="event"){cd[c5]=c7}}}}};this.getCustomVariable=function(c5,c6){var c4; +if(!J(c6)){c6="visit"}if(c6==="page"||c6===3){c4=bN[c5]}else{if(c6==="event"){c4=cd[c5]}else{if(c6==="visit"||c6===2){ct();c4=aJ[c5]}}}if(!J(c4)||(c4&&c4[0]==="")){return false}return c4};this.deleteCustomVariable=function(c4,c5){if(this.getCustomVariable(c4,c5)){this.setCustomVariable(c4,"","",c5)}};this.deleteCustomVariables=function(c4){if(c4==="page"||c4===3){bN={}}else{if(c4==="event"){cd={}}else{if(c4==="visit"||c4===2){aJ={}}}}};this.storeCustomVariablesInCookie=function(){bH=true};this.setLinkTrackingTimer=function(c4){bA=c4};this.getLinkTrackingTimer=function(){return bA};this.setDownloadExtensions=function(c4){if(w(c4)){c4=c4.split("|")}cT=c4};this.addDownloadExtensions=function(c5){var c4;if(w(c5)){c5=c5.split("|")}for(c4=0;c41&&al!=="addTracker"){ag("The method "+al+' is registered more than once in "_paq" variable. Only the last call has an effect. Please have a look at the multiple Piwik trackers documentation: https://developer.piwik.org/guides/tracking-javascript-guide#multiple-piwik-trackers')}aq[al]++ +}}}}return ap}var C=["addTracker","disableCookies","setTrackerUrl","setAPIUrl","enableCrossDomainLinking","setCrossDomainLinkingTimeout","setSecureCookie","setCookiePath","setCookieDomain","setDomains","setUserId","setSiteId","enableLinkTracking","requireConsent","setConsentGiven"];function aa(ak,am){var al=new Q(ak,am);I.push(al);_paq=c(_paq,C);for(E=0;E<_paq.length;E++){if(_paq[E]){ac(_paq[E])}}_paq=new H();return al}aj(T,"beforeunload",ae,false);Date.prototype.getTimeAlias=Date.prototype.getTime;e={initialized:false,JSON:JSON_PIWIK,DOM:{addEventListener:function(an,am,al,ak){var ao=typeof ak;if(ao==="undefined"){ak=false}aj(an,am,al,ak)},onLoad:n,onReady:q,isNodeVisible:j,isOrWasNodeVisible:v.isNodeVisible},on:function(al,ak){if(!y[al]){y[al]=[]}y[al].push(ak)},off:function(am,al){if(!y[am]){return}var ak=0;for(ak;ak