PageSourceSearch

https://langehair.com/cdn/shop/t/7303/assets/growthbook-runtime-sn…?v=103234930200155155801790292302

js langehair.com collected 2026-09-25 02:31:15 UTC 56,048 bytes, 2 lines download raw bytes

1!function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},t=(new e.Error).stack;t&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[t]="40e2b9fe-0b5d-44c8-9f90-dec0a79c691e",e._sentryDebugIdIdentifier="sentry-dbid-40e2b9fe-0b5d-44c8-9f90-dec0a79c691e")}catch(e){}}(),function(){"use strict";var e=/^[a-zA-Z:_][a-zA-Z0-9:_.-]*$/,t={revert:function(){}},r=new Map,n=new Set;function i(e){var t=r.get(e);return t||(t={element:e,attributes:{}},r.set(e,t)),t}function s(e,t,r,n,i){var s=r(e),o={isDirty:!1,originalValue:s,virtualValue:s,mutations:[],el:e,_positionTimeout:null,observer:new MutationObserver((function(){if("position"!==t||!o._positionTimeout){"position"===t&&(o._positionTimeout=setTimeout((function(){o._positionTimeout=null}),1e3));var n=r(e);"position"===t&&n.parentNode===o.virtualValue.parentNode&&n.insertBeforeNode===o.virtualValue.insertBeforeNode||n!==o.virtualValue&&(o.originalValue=n,i(o))}})),mutationRunner:i,setValue:n,getCurrentValue:r};return"position"===t&&e.parentNode?o.observer.observe(e.parentNode,{childList:!0,subtree:!0,attributes:!1,characterData:!1}):o.observer.observe(e,function(e){return"html"===e?{childList:!0,subtree:!0,attributes:!0,characterData:!0}:{childList:!1,subtree:!1,attributes:!0,attributeFilter:[e]}}(t)),o}function o(e,t){var r=t.getCurrentValue(t.el);t.virtualValue=e,e&&"string"!=typeof e?r&&e.parentNode===r.parentNode&&e.insertBeforeNode===r.insertBeforeNode||(t.isDirty=!0,S()):e!==r&&(t.isDirty=!0,S())}function a(e){var t=e.originalValue;e.mutations.forEach((function(e){return t=e.mutate(t)})),o(function(e){k||(k=document.createElement("div"));return k.innerHTML=e,k.innerHTML}(t),e)}function u(e){var t=new Set(e.originalValue.split(/\s+/).filter(Boolean));e.mutations.forEach((function(e){return e.mutate(t)})),o(Array.from(t).filter(Boolean).join(" "),e)}function c(e){var t=e.originalValue;e.mutations.forEach((function(e){return t=e.mutate(t)})),o(t,e)}function l(e){var t=e.originalValue;e.mutations.forEach((function(e){var r=function(e){var t=e.parentSelector,r=e.insertBeforeSelector,n=document.querySelector(t);if(!n)return null;var i=r?document.querySelector(r):null;return r&&!i?null:{parentNode:n,insertBeforeNode:i}}(e.mutate());t=r||t})),o(t,e)}var d=function(e){return e.innerHTML},h=function(e,t){return e.innerHTML=t};function f(e){var t=i(e);return t.html||(t.html=s(e,"html",d,h,a)),t.html}var p=function(e){return{parentNode:e.parentElement,insertBeforeNode:e.nextElementSibling}},g=function(e,t){t.insertBeforeNode&&!t.parentNode.contains(t.insertBeforeNode)||t.parentNode.insertBefore(e,t.insertBeforeNode)};function m(e){var t=i(e);return t.position||(t.position=s(e,"position",p,g,l)),t.position}var y=function(e,t){return t?e.className=t:e.removeAttribute("class")},v=function(e){return e.className};function b(e){var t=i(e);return t.classes||(t.classes=s(e,"class",v,y,u)),t.classes}var k,_;function w(e,t){var r,n=i(e);return n.attributes[t]||(n.attributes[t]=s(e,t,(r=t,function(e){var t;return null!=(t=e.getAttribute(r))?t:null}),function(e){return function(t,r){return null!==r?t.setAttribute(e,r):t.removeAttribute(e)}}(t),c)),n.attributes[t]}function E(e,t,n){if(n.isDirty){n.isDirty=!1;var i=n.virtualValue;n.mutations.length||function(e,t){var n,i,s=r.get(e);if(s)if("html"===t)null==(n=s.html)||null==(i=n.observer)||i.disconnect(),delete s.html;else if("class"===t){var o,a;null==(o=s.classes)||null==(a=o.observer)||a.disconnect(),delete s.classes}else if("position"===t){var u,c;null==(u=s.position)||null==(c=u.observer)||c.disconnect(),delete s.position}else{var l,d,h;null==(l=s.attributes)||null==(d=l[t])||null==(h=d.observer)||h.disconnect(),delete s.attributes[t]}}(e,t),n.setValue(e,i)}}function A(e,t){e.html&&E(t,"html",e.html),e.classes&&E(t,"class",e.classes),e.position&&E(t,"position",e.position),Object.keys(e.attributes).forEach((function(r){E(t,r,e.attributes[r])}))}function S(){r.forEach(A)}function x(e){if("position"!==e.kind||1!==e.elements.size){var t=new Set(e.elements);document.querySelectorAll(e.selector).forEach((function(r){t.has(r)||(e.elements.add(r),function(e,t){var r=null;"html"===e.kind?r=f(t):"class"===e.kind?r=b(t):"attribute"===e.kind?r=w(t,e.attribute):"position"===e.kind&&(r=m(t)),r&&(r.mutations.push(e),r.mutationRunner(r))}(e,r))}))}}
1function C(e){e.elements.forEach((function(t){return function(e,t){var r=null;if("html"===e.kind?r=f(t):"class"===e.kind?r=b(t):"attribute"===e.kind?r=w(t,e.attribute):"position"===e.kind&&(r=m(t)),r){var n=r.mutations.indexOf(e);-1!==n&&r.mutations.splice(n,1),r.mutationRunner(r)}}(e,t)})),e.elements.clear(),n["delete"](e)}function B(){n.forEach(x)}function O(e){return"undefined"==typeof document?t:(n.add(e),x(e),{revert:function(){C(e)}})}function D(e,t){return O({kind:"html",elements:new Set,mutate:t,selector:e})}function V(e,t){return O({kind:"position",elements:new Set,mutate:t,selector:e})}function T(e,t){return O({kind:"class",elements:new Set,mutate:t,selector:e})}function F(r,n,i){return e.test(n)?"class"===n||"className"===n?T(r,(function(e){var t=i(Array.from(e).join(" "));e.clear(),t&&t.split(/\s+/g).filter(Boolean).forEach((function(t){return e.add(t)}))})):O({kind:"attribute",attribute:n,elements:new Set,mutate:i,selector:r}):t}"undefined"!=typeof document&&(_||(_=new MutationObserver((function(){B()}))),B(),_.observe(document.documentElement,{childList:!0,subtree:!0,attributes:!1,characterData:!1}));var j={html:D,classes:T,attribute:F,position:V,declarative:function(e){var r=e.selector,n=e.action,i=e.value,s=e.attribute,o=e.parentSelector,a=e.insertBeforeSelector;if("html"===s){if("append"===n)return D(r,(function(e){return e+(null!=i?i:"")}));if("set"===n)return D(r,(function(){return null!=i?i:""}))}else if("class"===s){if("append"===n)return T(r,(function(e){i&&e.add(i)}));if("remove"===n)return T(r,(function(e){i&&e["delete"](i)}));if("set"===n)return T(r,(function(e){e.clear(),i&&e.add(i)}))}else if("position"===s){if("set"===n&&o)return V(r,(function(){return{insertBeforeSelector:a,parentSelector:o}}))}else{if("append"===n)return F(r,s,(function(e){return null!==e?e+(null!=i?i:""):null!=i?i:""}));if("set"===n)return F(r,s,(function(){return null!=i?i:""}));if("remove"===n)return F(r,s,(function(){return null}))}return t}};const P={fetch:globalThis.fetch?globalThis.fetch.bind(globalThis):void 0,SubtleCrypto:globalThis.crypto?globalThis.crypto.subtle:void 0,EventSource:globalThis.EventSource};function I(e){let t=2166136261;const r=e.length;for(let n=0;n<r;n++)t^=e.charCodeAt(n),t+=(t<<1)+(t<<4)+(t<<7)+(t<<8)+(t<<24);return t>>>0}function U(e,t,r){return 2===r?I(I(e+t)+"")%1e4/1e4:1===r?I(t+e)%1e3/1e3:null}function R(e){return e<=0?[]:new Array(e).fill(1/e)}function N(e,t){return e>=t[0]&&e<t[1]}function M(e){try{const t=e.replace(/([^\\])\//g,"$1\\/");return new RegExp(t)}catch(e){return void console.error(e)}}function L(e,t){if(!t.length)return!1;let r=!1,n=!1;for(let i=0;i<t.length;i++){const s=K(e,t[i].type,t[i].pattern);if(!1===t[i].include){if(s)return!1}else r=!0,s&&(n=!0)}return n||!r}function $(e,t){try{const r=new URL(t.replace(/^([^:/?]*)\./i,"https://$1.").replace(/\*/g,"_____"),"https://_____"),n=[[e.host,r.host,!1],[e.pathname,r.pathname,!0]];return r.hash&&n.push([e.hash,r.hash,!1]),r.searchParams.forEach(((t,r)=>{n.push([e.searchParams.get(r)||"",t,!1])})),!n.some((e=>!function(e,t,r){try{let n=t.replace(/[*.+?^${}()|[\]\\]/g,"\\$&").replace(/_____/g,".*");return r&&(n="\\/?"+n.replace(/(^\/|\/$)/g,"")+"\\/?"),new RegExp("^"+n+"$","i").test(e)}catch(e){return!1}}(e[0],e[1],e[2])))}catch(e){return!1}}function K(e,t,r){try{const n=new URL(e,"https://_");if("regex"===t){const e=M(r);return!!e&&(e.test(n.href)||e.test(n.href.substring(n.origin.length)))}return"simple"===t&&$(n,r)}catch(e){return!1}}const H=e=>Uint8Array.from(atob(e),(e=>e.charCodeAt(0)));async function G(e,t,r){if(t=t||"",!(r=r||globalThis.crypto&&globalThis.crypto.subtle||P.SubtleCrypto))throw new Error("No SubtleCrypto implementation found");try{const n=await r.importKey("raw",H(t),{name:"AES-CBC",length:128},!0,["encrypt","decrypt"]),[i,s]=e.split("."),o=await r.decrypt({
1name:"AES-CBC",iv:H(i)},n,H(s));return(new TextDecoder).decode(o)}catch(e){throw new Error("Failed to decrypt")}}function q(e){return"string"==typeof e?e:JSON.stringify(e)}function J(e){"number"==typeof e&&(e+=""),e&&"string"==typeof e||(e="0");const t=e.replace(/(^v|\+.*$)/g,"").split(/[-.]/);return 3===t.length&&t.push("~"),t.map((e=>e.match(/^[0-9]+$/)?e.padStart(5," "):e)).join("-")}function z(e){return"object"==typeof e&&null!==e}function W(e){return e.urlPatterns&&e.variations.some((e=>z(e)&&"urlRedirect"in e))?"redirect":e.variations.some((e=>z(e)&&(e.domMutations||"js"in e||"css"in e)))?"visual":"unknown"}async function Y(e,t){return new Promise((r=>{let n,i=!1;const s=e=>{i||(i=!0,n&&clearTimeout(n),r(e||null))};t&&(n=setTimeout((()=>s()),t)),e.then((e=>s(e))).catch((()=>s()))}))}function Z(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function Q(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?Z(Object(r),!0).forEach((function(t){X(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):Z(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function X(e,t,r){return(t=function(e){var t=function(e,t){if("object"!=typeof e||!e)return e;var r=e[Symbol.toPrimitive];if(void 0!==r){var n=r.call(e,t||"default");if("object"!=typeof n)return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==typeof t?t:t+""}(t))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}const ee={staleTTL:6e4,maxAge:144e5,cacheKey:"gbFeaturesCache",backgroundSync:!0,maxEntries:10,disableIdleStreams:!1,idleStreamInterval:2e4,disableCache:!1},te=P,re={fetchFeaturesCall:e=>{let{host:t,clientKey:r,headers:n}=e;return te.fetch("".concat(t,"/api/features/").concat(r),{headers:n})},fetchRemoteEvalCall:e=>{let{host:t,clientKey:r,payload:n,headers:i}=e;const s={method:"POST",headers:Q({"Content-Type":"application/json"},i),body:JSON.stringify(n)};return te.fetch("".concat(t,"/api/eval/").concat(r),s)},eventSourceCall:e=>{let{host:t,clientKey:r,headers:n}=e;return n?new te.EventSource("".concat(t,"/sub/").concat(r),{headers:n}):new te.EventSource("".concat(t,"/sub/").concat(r))},startIdleListener:()=>{let e;if(!("undefined"!=typeof window&&"undefined"!=typeof document))return;const t=()=>{"visible"===document.visibilityState?(window.clearTimeout(e),ae.forEach((e=>{e&&"idle"===e.state&&ke(e)}))):"hidden"===document.visibilityState&&(e=window.setTimeout(le,ee.idleStreamInterval))};return document.addEventListener("visibilitychange",t),()=>document.removeEventListener("visibilitychange",t)},stopIdleListener:()=>{}};try{globalThis.localStorage&&(te.localStorage=globalThis.localStorage)}catch(e){}const ne=new Map;let ie=!1;const se=new Map,oe=new Map,ae=new Map,ue=new Set;async function ce(e){let{instance:t,timeout:r,skipCache:n,allowStale:i,backgroundSync:s}=e;return s||(ee.backgroundSync=!1),async function(e){let{instance:t,allowStale:r,timeout:n,skipCache:i}=e;const s=he(t),o=fe(t),a=new Date,u=new Date(a.getTime()-ee.maxAge+ee.staleTTL);await async function(){if(ie)return;ie=!0;try{if(te.localStorage){const e=await te.localStorage.getItem(ee.cacheKey);if(!ee.disableCache&&e){const t=JSON.parse(e);t&&Array.isArray(t)&&t.forEach((e=>{let[t,r]=e;se.set(t,Q(Q({},r),{},{staleAt:new Date(r.staleAt)}))})),pe()}}}catch(e){}if(!ee.disableIdleStreams){const e=re.startIdleListener();e&&(re.stopIdleListener=e)}}();const c=ee.disableCache||i?void 0:se.get(o);if(c&&(r||c.staleAt>a)&&c.staleAt>u)return c.sse&&ue.add(s),c.staleAt<a?me(t):ye(t),{data:c.data,success:!0,source:"cache"};return await Y(me(t),n)||{data:null,success:!1,source:"timeout",error:new Error("Timeout")}}({instance:t,allowStale:i,timeout:r,skipCache:n})}function le(){ae.forEach((e=>{e&&(e.state="idle",be(e))}))}async function de(){try{if(!te.localStorage)return;await te.localStorage.setItem(ee.cacheKey,JSON.stringify(Array.from(se.entries())))}catch(e){}}function he(e){const[t,r]=e.getApiInfo();return"".concat(t,"||").concat(r)}function fe(e){const t=he(e);if(!("isRemoteEval"in e)||!e.isRemoteEval())return t;const r=e.getAttributes(),n=e.getCacheKeyAttributes()||Object.keys(e.getAttributes()),i={};
vendor: 2,813 bytes, line 1
1n.forEach((e=>{i[e]=r[e]}));const s=e.getForcedVariations(),o=e.getUrl();return"".concat(t,"||").concat(JSON.stringify({ca:i,fv:s,url:o}))}function pe(){const e=Array.from(se.entries()).map((e=>{let[t,r]=e;return{key:t,staleAt:r.staleAt.getTime()}})).sort(((e,t)=>e.staleAt-t.staleAt)),t=Math.min(Math.max(0,se.size-ee.maxEntries),se.size);for(let r=0;r<t;r++)se.delete(e[r].key)}function ge(e,t,r){const n=r.dateUpdated||"",i=new Date(Date.now()+ee.staleTTL),s=ee.disableCache?void 0:se.get(t);if(s&&n&&s.version===n)return s.staleAt=i,void de();ee.disableCache||(se.set(t,{data:r,version:n,staleAt:i,sse:ue.has(e)}),pe()),de();const o=ne.get(e);o&&o.forEach((e=>async function(e,t){await e.setPayload(t||e.getPayload())}(e,r)))}async function me(e){const{apiHost:t,apiRequestHeaders:r}=e.getApiHosts(),n=e.getClientKey(),i="isRemoteEval"in e&&e.isRemoteEval(),s=he(e),o=fe(e);let a=oe.get(o);if(!a){a=(i?re.fetchRemoteEvalCall({host:t,clientKey:n,payload:{attributes:e.getAttributes(),forcedVariations:e.getForcedVariations(),forcedFeatures:Array.from(e.getForcedFeatures().entries()),url:e.getUrl()},headers:r}):re.fetchFeaturesCall({host:t,clientKey:n,headers:r})).then((e=>{if(!e.ok)throw new Error("HTTP error: ".concat(e.status));return"enabled"===e.headers.get("x-sse-support")&&ue.add(s),e.json()})).then((t=>(ge(s,o,t),ye(e),oe.delete(o),{data:t,success:!0,source:"network"}))).catch((e=>(oe.delete(o),{data:null,source:"error",success:!1,error:e}))),oe.set(o,a)}return a}function ye(e){let t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];const r=he(e),n=fe(e),{streamingHost:i,streamingHostRequestHeaders:s}=e.getApiHosts(),o=e.getClientKey();if(t&&ue.add(r),ee.backgroundSync&&ue.has(r)&&te.EventSource){if(ae.has(r))return;const e={src:null,host:i,clientKey:o,headers:s,cb:t=>{try{if("features-updated"===t.type){const e=ne.get(r);e&&e.forEach((e=>{me(e)}))}else if("features"===t.type){const e=JSON.parse(t.data);ge(r,n,e)}e.errors=0}catch(t){ve(e)}},errors:0,state:"active"};ae.set(r,e),ke(e)}}function ve(e){if("idle"!==e.state&&(e.errors++,e.errors>3||e.src&&2===e.src.readyState)){const t=Math.pow(3,e.errors-3)*(1e3+1e3*Math.random());be(e),setTimeout((()=>{["idle","active"].includes(e.state)||ke(e)}),Math.min(t,3e5))}}function be(e){e.src&&(e.src.onopen=null,e.src.onerror=null,e.src.close(),e.src=null,"active"===e.state&&(e.state="disabled"))}function ke(e){e.src=re.eventSourceCall({host:e.host,clientKey:e.clientKey,headers:e.headers}),e.state="active",e.src.addEventListener("features",e.cb),e.src.addEventListener("features-updated",e.cb),e.src.onerror=()=>ve(e),e.src.onopen=()=>{e.errors=0}}function _e(e,t){be(e),ae.delete(t)}function we(){ue.clear(),ae.forEach(_e),ne.clear(),re.stopIdleListener()}function Ee(e,t){if(t.streaming){if(!e.getClientKey())throw new Error("Mu
1st specify clientKey to enable streaming");t.payload&&ye(e,!0),function(e){const t=he(e),r=ne.get(t)||new Set;r.add(e),ne.set(t,r)}(e)}}const Ae={};function Se(e,t,r){r=r||{};for(const[n,i]of Object.entries(t))switch(n){case"$or":if(!Fe(e,i,r))return!1;break;case"$nor":if(Fe(e,i,r))return!1;break;case"$and":if(!je(e,i,r))return!1;break;case"$not":if(Se(e,i,r))return!1;break;default:if(!Be(i,xe(e,n),r))return!1}return!0}function xe(e,t){const r=t.split(".");let n=e;for(let e=0;e<r.length;e++){if(!n||"object"!=typeof n||!(r[e]in n))return null;n=n[r[e]]}return n}function Ce(e){let t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];const r="".concat(e).concat(t?"/i":"");return Ae[r]||(Ae[r]=new RegExp(e.replace(/([^\\])\//g,"$1\\/"),t?"i":void 0)),Ae[r]}function Be(e,t,r){if("string"==typeof e)return arguments.length>3&&void 0!==arguments[3]&&arguments[3]?String(t).toLowerCase()===e.toLowerCase():t+""===e;if("number"==typeof e)return 1*t===e;if("boolean"==typeof e)return null!==t&&!!t===e;if(null===e)return null===t;if(Array.isArray(e)||!Oe(e))return JSON.stringify(t)===JSON.stringify(e);for(const n in e)if(!Te(n,t,e[n],r))return!1;return!0}function Oe(e){const t=Object.keys(e);return t.length>0&&t.filter((e=>"$"===e[0])).length===t.length}function De(e,t){if(arguments.length>2&&void 0!==arguments[2]&&arguments[2]){const r=e=>"string"==typeof e?e.toLowerCase():e;return Array.isArray(e)?e.some((e=>t.some((t=>r(e)===r(t))))):t.some((t=>r(e)===r(t)))}return Array.isArray(e)?e.some((e=>t.includes(e))):t.includes(e)}function Ve(e,t,r){let n=arguments.length>3&&void 0!==arguments[3]&&arguments[3];if(!Array.isArray(e))return!1;for(let i=0;i<t.length;i++){let s=!1;for(let o=0;o<e.length;o++)if(Be(t[i],e[o],r,n)){s=!0;break}if(!s)return!1}return!0}function Te(e,t,r,n){switch(e){case"$veq":return J(t)===J(r);case"$vne":return J(t)!==J(r);case"$vgt":return J(t)>J(r);case"$vgte":return J(t)>=J(r);case"$vlt":return J(t)<J(r);case"$vlte":return J(t)<=J(r);case"$eq":return t===r;case"$ne":return t!==r;case"$lt":return t<r;
vendor: 16,799 bytes, line 1
1case"$lte":return t<=r;case"$gt":return t>r;case"$gte":return t>=r;case"$exists":return r?null!=t:null==t;case"$in":return!!Array.isArray(r)&&De(t,r);case"$ini":return!!Array.isArray(r)&&De(t,r,!0);case"$inGroup":return De(t,n[r]||[]);case"$notInGroup":return!De(t,n[r]||[]);case"$nin":return!!Array.isArray(r)&&!De(t,r);case"$nini":return!!Array.isArray(r)&&!De(t,r,!0);case"$not":return!Be(r,t,n);case"$size":return!!Array.isArray(t)&&Be(r,t.length,n);case"$elemMatch":return function(e,t,r){if(!Array.isArray(e))return!1;const n=Oe(t)?e=>Be(t,e,r):e=>Se(e,t,r);for(let t=0;t<e.length;t++)if(e[t]&&n(e[t]))return!0;return!1}(t,r,n);case"$all":return!!Array.isArray(r)&&Ve(t,r,n);case"$alli":return!!Array.isArray(r)&&Ve(t,r,n,!0);case"$regex":try{return Ce(r).test(t)}catch(e){return!1}case"$regexi":try{return Ce(r,!0).test(t)}catch(e){return!1}case"$type":return function(e){if(null===e)return"null";if(Array.isArray(e))return"array";const t=typeof e;return["string","number","boolean","object","undefined"].includes(t)?t:"unknown"}(t)===r;default:return console.error("Unknown operator: "+e),!1}}function Fe(e,t,r){if(!t.length)return!0;for(let n=0;n<t.length;n++)if(Se(e,t[n],r))return!0;return!1}function je(e,t,r){for(let n=0;n<t.length;n++)if(!Se(e,t[n],r))return!1;return!0}function Pe(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function Ie(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?Pe(Object(r),!0).forEach((function(t){Ue(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):Pe(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function Ue(e,t,r){return(t=function(e){var t=function(e,t){if("object"!=typeof e||!e)return e;var r=e[Symbol.toPrimitive];if(void 0!==r){var n=r.call(e,t||"default");if("object"!=typeof n)return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==typeof t?t:t+""}(t))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}async function Re(e){try{await e()}catch(e){}}function Ne(e,t,r){if(e.user.trackedExperiments){const n=tt(t,r);if(e.user.trackedExperiments.has(n))return[];e.user.trackedExperiments.add(n)}e.user.enableDevMode&&e.user.devLogs&&e.user.devLogs.push({experiment:t,result:r,timestamp:Date.now().toString(),logType:"experiment"});const n=[];if(e.global.trackingCallback){const i=e.global.trackingCallback;n.push(Re((()=>i(t,r,He(e.user)))))}if(e.user.trackingCallback){const i=e.user.trackingCallback;n.push(Re((()=>i(t,r,He(e.user)))))}if(e.global.eventLogger){const i=e.global.eventLogger;n.push(Re((()=>i("Experiment Viewed",{experimentId:t.key,variationId:r.key,hashAttribute:r.hashAttribute,hashValue:r.hashValue},He(e.user)))))}return n}function Me(e,t){if(t.stack.evaluatedFeatures.has(e))return $e(t,e,null,"cyclicPrerequisite");t.stack.evaluatedFeatures.add(e),t.stack.id=e;const r=function(e){const t=new Map;return e.global.forcedFeatureValues&&e.global.forcedFeatureValues.forEach(((e,r)=>t.set(r,e))),e.user.forcedFeatureValues&&e.user.forcedFeatureValues.forEach(((e,r)=>t.set(r,e))),t}(t);if(r.has(e))return $e(t,e,r.get(e),"override");if(!t.global.features||!t.global.features[e])return $e(t,e,null,"unknownFeature");const n=t.global.features[e];if(n.rules){const r=new Set(t.stack.evaluatedFeatures);e:for(const s of n.rules){var i;if(s.parentConditions)for(const n of s.parentConditions){t.stack.evaluatedFeatures=new Set(r);const i=Me(n.id,t);if("cyclicPrerequisite"===i.source)return $e(t,e,null,"cyclicPrerequisite");if(!Se({value:i.value},n.condition||{})){if(n.gate)return $e(t,e,null,"prerequisite");continue e}}if(s.filters&&ze(s.filters,t))continue;if("force"in s){if(s.condition&&!Je(s.condition,t))continue;if(!We(t,s.seed||e,s.hashAttribute,t.user.saveStickyBucketAssignmentDoc&&!s.disableStickyBucketing?s.fallbackAttribute:void 0,s.range,s.coverage,s.hashVersion))continue;return s.tracks&&s.tracks.forEach((e=>{!Ne(t,e.experiment,e.result).length&&t.global.saveDeferredTrack&&t.global.saveDeferredTrack({experiment:e.experiment,result:e.result,user:He(t.user)})})),$e(t,e,s.force,"force",s.id)}const n=null!==(i=s.contextualVariations)&&void 0!==i?i:s.variations;if(!n)continue;const o={variations:n,key:s.key||e};"coverage"in s&&(o.coverage=s.coverage),s.weights&&(o.weights=s.weights),s.hashAttribute&&(o.hashAttribute=s.hashAttribute),s.fallbackAttribute&&(o.fallbackAttribute=s.fallbackAttribute),s.disableStickyBucketing&&(o.disableStickyBucketing=s.disableStickyBucketing),void 0!==s.bucketVersion&&(o.bucketVersion=s.bucketVersion),void 0!==s.minBucketVersion&&(o.minBucketVersion=s.minBucketVersion),s.namespace&&(o.namespace=s.namespace),s.meta&&(o.meta=s.meta),s.ranges&&(o.ranges=s.ranges),s.name&&(o.name=s.name),s.phase&&(o.phase=s.phase),s.seed&&(o.seed=s.seed),s.hashVersion&&(o.hashVersion=s.hashVersion),s.filters&&(o.filters=s.filters),s.condition&&(o.condition=s.condition),s.contextualBanditRef&&qe(o,s.contextualBanditRef,e,t);const{result:a}=Le(o,e,t);if(!o.contextualBandit||a.hashUsed&&a.inExperiment||delete o.contextualBandit,t.global.onExperimentEval&&t.global.onExperimentEval(o,a),a.inExperiment&&!a.passthrough)return $e(t,e,a.value,"experiment",s.id,o,a)}}return $e(t,e,void 0===n.defaultValue?null:n.defaultValue,"defaultValue")}function Le(e,t,r){const n=e.key,i=e.variations.length;if(i<2)return{result:Ye(r,e,-1,!1,t)};if(!1===r.global.enabled||!1===r.user.enabled)return{result:Ye(r,e,-1,!1,t)};if(e=function(e,t){const r=e.key,n=t.global.overrides;n&&n[r]&&"string"==typeof(e=Object.assign({},e,n[r])).url&&(e.url=M(e.url));return e}(e,r),e.contextualBandit&&e.weights&&(e.contextualBandit=Ie(Ie({},e.contextualBandit),{},{variationWeights:e.weights})),e.urlPatterns&&!L(r.user.url||"",e.urlPatterns))return{result:Ye(r,e,-1,!1,t)};const s=function(e,t,r){if(!t)return null;const n=t.split("?")[1];if(!n)return null;const i=n.replace(/#.*/,"").split("&").map((e=>e.split("=",2))).filter((t=>{let[r]=t;return r===e})).map((e=>{let[,t]=e;return parseInt(t)}));return i.length>0&&i[0]>=0&&i[0]<r?i[0]:null}(n,r.user.url||"",i);if(null!==s)return{result:Ye(r,e,s,!1,t)};const o=function(e){return e.global.forcedVariations&&e.user.forcedVariations?Ie(Ie({},e.global.forcedVariations),e.user.forcedVariations):e.global.forcedVariations?e.global.forcedVariations:e.user.forcedVariations?e.user.forcedVariations:{}}(r);if(n in o){return{result:Ye(r,e,o[n],!1,t)}}if("draft"===e.status||!1===e.active)return{result:Ye(r,e,-1,!1,t)};const{hashAttribute:a,hashValue:u}=Ze(r,e.hashAttribute,r.user.saveStickyBucketAssignmentDoc&&!e.disableStickyBucketing?e.fallbackAttribute:void 0);if(!u)return{result:Ye(r,e,-1,!1,t)};let c=-1,l=!1,d=!1;if(r.user.saveStickyBucketAssignmentDoc&&!e.disableStickyBucketing){const{variation:t,versionIsBlocked:n}=function(e){let{ctx:t,expKey:r,expBucketVersion:n,expHashAttribute:i,expFallbackAttribute:s,expMinBucketVersion:o,expMeta:a}=e;n=n||0,o=o||0,i=i||"id",a=a||[];const u=Qe(r,n),c=function(e,t,r){if(!e.user.stickyBucketAssignmentDocs)return{};const{hashAttribute:n,hashValue:i}=Ze(e,t),s=Xe(n,q(i)),{hashAttribute:o,hashValue:a}=Ze(e,r),u=a?Xe(o,q(a)):null,c={};u&&e.user.stickyBucketAssignmentDocs[u]&&Object.assign(c,e.user.stickyBucketAssignmentDocs[u].assignments||{});e.user.stickyBucketAssignmentDocs[s]&&Object.assign(c,e.user.stickyBucketAssignmentDocs[s].assignments||{});return c}(t,i,s);if(o>0)for(let e=0;e<o;e++){if(void 0!==c[Qe(r,e)])return{variation:-1,versionIsBlocked:!0}}const l=c[u];if(void 0===l)return{variation:-1};const d=a.findIndex((e=>e.key===l));return d<0?{variation:-1}:{variation:d}}({ctx:r,expKey:e.key,expBucketVersion:e.bucketVersion,expHashAttribute:e.hashAttribute,expFallbackAttribute:e.fallbackAttribute,expMinBucketVersion:e.minBucketVersion,expMeta:e.meta});l=t>=0,c=t,d=!!n}if(!l){if(e.filters){if(ze(e.filters,r))return{result:Ye(r,e,-1,!1,t)}}else if(e.namespace&&!function(e,t){const r=U("__"+t[0],e,1);return null!==r&&r>=t[1]&&r<t[2]}(u,e.namespace))return{result:Ye(r,e,-1,!1,t)};if(e.include&&!function(e){try{return e()}catch(e){return console.error(e),!1}}(e.include))return{result:Ye(r,e,-1,!1,t)};if(e.condition&&!Je(e.condition,r))return{result:Ye(r,e,-1,!1,t)};if(e.parentConditions){const n=new Set(r.stack.evaluatedFeatures);for(const i of e.parentConditions){r.stack.evaluatedFeatures=new Set(n);const s=Me(i.id,r);if("cyclicPrerequisite"===s.source)return{result:Ye(r,e,-1,!1,t)};if(!Se({value:s.value},i.condition||{}))return{result:Ye(r,e,-1,!1,t)}}}if(e.groups&&!function(e,t){const r=t.global.groups||{};for(let t=0;t<e.length;t++)if(r[e[t]])return!0;return!1}(e.groups,r))return{result:Ye(r,e,-1,!1,t)}}if(e.url&&!function(e,t){const r=t.user.url;if(!r)return!1;const n=r.replace(/^https?:\/\//,"").replace(/^[^/]*\//,"/");return!!e.test(r)||!!e.test(n)}(e.url,r))return{result:Ye(r,e,-1,!1,t)};const h=U(e.seed||n,u,e.hashVersion||1);if(null===h)return{result:Ye(r,e,-1,!1,t)};if(!l){const t=e.ranges||function(e,t,r){(t=void 0===t?1:t)<0?t=0:t>1&&(t=1);const n=R(e);(r=r||n).length!==e&&(r=n);const i=r.reduce(((e,t)=>t+e),0);(i<.99||i>1.01)&&(r=n);let s=0;return r.map((e=>{const r=s;return s+=e,[r,r+t*e]}))}(i,void 0===e.coverage?1:e.coverage,e.weights);c=function(e,t){for(let r=0;r<t.length;r++)if(N(e,t[r]))return r;return-1}(h,t)}if(d)return{result:Ye(r,e,-1,!1,t,void 0,!0)};if(c<0)return{result:Ye(r,e,-1,!1,t)};if("force"in e)return{result:Ye(r,e,void 0===e.force?-1:e.force,!1,t)};if(r.global.qaMode||r.user.qaMode)return{result:Ye(r,e,-1,!1,t)};if("stopped"===e.status)return{result:Ye(r,e,-1,!1,t)};const f=Ye(r,e,c,!0,t,h,l);if(r.user.saveStickyBucketAssignmentDoc&&!e.disableStickyBucketing){const{changed:t,key:n,doc:i}=function(e,t,r,n){const i=Xe(t,r),s=e.user.stickyBucketAssignmentDocs&&e.user.stickyBucketAssignmentDocs[i]&&e.user.stickyBucketAssignmentDocs[i].assignments||{},o=Ie(Ie({},s),n),a=JSON.stringify(s)!==JSON.stringify(o);return{key:i,doc:{attributeName:t,attributeValue:r,assignments:o},changed:a}}(r,a,q(u),{[Qe(e.key,e.bucketVersion)]:f.key});t&&(r.user.stickyBucketAssignmentDocs=r.user.stickyBucketAssignmentDocs||{},r.user.stickyBucketAssignmentDocs[n]=i,r.user.saveStickyBucketAssignmentDoc(i))}const p=Ne(r,e,f);0===p.length&&r.global.saveDeferredTrack&&r.global.saveDeferredTrack({experiment:e,result:f,user:He(r.user)});const g=p.length?1===p.length?p[0]:Promise.all(p).then((()=>{})):void 0;return"changeId"in e&&e.changeId&&r.global.recordChangeId&&r.global.recordChangeId(e.changeId),{result:f,trackingCall:g}}function $e(e,t,r,n,i,s,o){const a={value:r,on:!!r,off:!r,source:n,ruleId:i||""};return s&&(a.experiment=s),o&&(a.experimentResult=o),"override"!==n&&function(e,t,r){if(e.user.trackedFeatureUsage){var n;const i=JSON.stringify(r.value);if(e.user.trackedFeatureUsage[t]===i)return;e.user.trackedFeatureUsage[t]=i,e.user.enableDevMode&&e.user.devLogs&&e.user.devLogs.push({featureKey:t,result:r,timestamp:Date.now().toString(),logType:"feature"}),null!==(n=e.user.featureUsageSubs)&&void 0!==n&&n.size&&e.user.featureUsageSubs.forEach((e=>{try{e(t,r)}catch(e){console.error(e)}}))}if(e.global.onFeatureUsage){const n=e.global.onFeatureUsage;Re((()=>n(t,r,He(e.user))))}if(e.user.onFeatureUsage){const n=e.user.onFeatureUsage;Re((()=>n(t,r)))}if(e.global.eventLogger){const n=e.global.eventLogger;Re((()=>n("Feature Evaluated",{feature:t,source:r.source,value:r.value,ruleId:"defaultValue"===r.source?"$default":r.ruleId||"",variationId:r.experimentResult?r.experimentResult.key:""},He(e.user))))}}(e,t,a),a}function Ke(e){return Ie(Ie({},e.attributes),e.attributeOverrides)}function He(e){return{attributes:Ke(e),url:e.url}}const Ge=-1;function qe(e,t,r,n){var i,s;const o=null===(i=n.global.contextualBandits)||void 0===i?void 0:i[t];if(!o)return;let a=null;if(o.contexts&&o.contexts.length)try{a=function(e,t){for(const r of e.contexts||[])if(Je(r.condition||{},t))return{leafId:r.leafId,weights:r.weights};return null}(o,n)}catch(e){}if(a)return e.weights=a.weights,void(e.contextualBandit={leafId:a.leafId,variationWeights:a.weights,banditVersion:o.banditVersion});e.contextualBandit={leafId:Ge,variationWeights:null!==(s=e.weights)&&void 0!==s?s:R(e.variations.length),banditVersion:o.banditVersion}}function Je(e,t){return Se(Ke(t.user),e,t.global.savedGroups||{})}function ze(e,t){return e.some((e=>{const{hashValue:r}=Ze(t,e.attribute);if(!r)return!0;const n=U(e.seed,r,e.hashVersion||2);return null===n||!e.ranges.some((e=>N(n,e)))}))}function We(e,t,r,n,i,s,o){if(!i&&void 0===s)return!0;if(!i&&0===s)return!1;const{hashValue:a}=Ze(e,r,n);if(!a)return!1;const u=U(t,a,o||1);return null!==u&&(i?N(u,i):void 0===s||u<=s)}function Ye(e,t,r,n,i,s,o){let a=!0;(r<0||r>=t.variations.length)&&(r=0,a=!1);const{hashAttribute:u,hashValue:c}=Ze(e,t.hashAttribute,e.user.saveStickyBucketAssignmentDoc&&!t.disableStickyBucketing?t.fallbackAttribute:void 0),l=t.meta?t.meta[r]:{},d={key:l.key||""+r,featureId:i,inExperiment:a,hashUsed:n,variationId:r,value:t.variations[r],hashAttribute:u,hashValue:c,stickyBucketUsed:!!o};l.name&&(d.name=l.name),void 0!==s&&(d.bucket=s),l.passthrough&&(d.passthrough=l.passthrough);const h=t.contextualBandit;return h&&n&&a&&(d.leafId=h.leafId,d.variationWeights=h.variationWeights,void 0!==h.banditVersion&&(d.banditVersion=h.banditVersion)),d}function Ze(e,t,r){let n=t||"id",i="";const s=Ke(e.user);return s[n]&&(i=s[n]),!i&&r&&(s[r]&&(i=s[r]),i&&(n=r)),{hashAttribute:n,hashValue:i}}function Qe(e,t){return t=t||0,"".concat(e,"__").concat(t)}function Xe(e,t){return"".concat(e,"||").concat(t)}function et(e,t){const r={},n=function(e,t){const r=new Set,n=t&&t.features?t.features:e.global.features||{},i=t&&t.experiments?t.experiments:e.global.experiments||[];return Object.keys(n).forEach((e=>{const t=n[e];if(t.rules)for(const e of t.rules)(e.variations||e.contextualVariations)&&(r.add(e.hashAttribute||"id"),e.fallbackAttribute&&r.add(e.fallbackAttribute))})),i.map((e=>{r.add(e.hashAttribute||"id"),e.fallbackAttribute&&r.add(e.fallbackAttribute)})),Array.from(r)}(e,t);return n.forEach((t=>{const{hashValue:n}=Ze(e,t);r[t]=q(n)})),r}function tt(e,t){return t.hashAttribute+t.hashValue+e.key+t.variationId}const rt=["data"];function nt(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function it(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?nt(Object(r),!0).forEach((function(t){st(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):nt(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function st(e,t,r){return(t=function(e){var t=function(e,t){if("object"!=typeof e||!e)return e;var r=e[Symbol.toPrimitive];if(void 0!==r){var n=r.call(e,t||"default");if("object"!=typeof n)return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==typeof t?t:t+""}(t))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}const ot="undefined"!=typeof window&&"undefined"!=typeof document,at=function(){let e;try{e="1.7.0"}catch(t){e=""}return e}();class GrowthBook{constructor(e){if(e=e||{},this.version=at,this._options=this.context=e,this._renderer=e.renderer||null,this._trackedExperiments=new Set,this._completedChangeIds=new Set,this._trackedFeatures={},this.debug=!!e.debug,this._subscriptions=new Set,this._featureUsageSubs=new Set,this._customEventSubs=new Set,this.ready=!1,this._assigned=new Map,this._activeAutoExperiments=new Map,this._triggeredExpKeys=new Set,this._initialized=!1,this._redirectedUrl="",this._deferredTrackingCalls=new Map,this._autoExperimentsAllowed=!e.disableExperimentsOnLoad,this._destroyCallbacks=[],this.logs=[],this.log=this.log.bind(this),this._saveDeferredTrack=this._saveDeferredTrack.bind(this),this._onExperimentEval=this._onExperimentEval.bind(this),this._fireSubscriptions=this._fireSubscriptions.bind(this),this._recordChangedId=this._recordChangedId.bind(this),e.remoteEval){if(e.decryptionKey)throw new Error("Encryption is not available for remoteEval");if(!e.clientKey)throw new Error("Missing clientKey");let t=!1;try{t=!!new URL(e.apiHost||"").hostname.match(/growthbook\.io$/i)}catch(e){}if(t)throw new Error("Cannot use remoteEval on GrowthBook Cloud")}
vendor: 13,054 bytes, line 1
1else if(e.cacheKeyAttributes)throw new Error("cacheKeyAttributes are only used for remoteEval");if(e.stickyBucketService){const t=e.stickyBucketService;this._saveStickyBucketAssignmentDoc=e=>t.saveAssignments(e)}if(e.plugins)for(const t of e.plugins)t(this);if(e.features&&(this.ready=!0),ot&&e.enableDevMode&&(window._growthbook=this,document.dispatchEvent(new Event("gbloaded"))),e.experiments&&(this.ready=!0,this._updateAllAutoExperiments()),this._options.stickyBucketService&&this._options.stickyBucketAssignmentDocs)for(const e in this._options.stickyBucketAssignmentDocs){const t=this._options.stickyBucketAssignmentDocs[e];t&&this._options.stickyBucketService.saveAssignments(t).catch((()=>{}))}this.ready&&this.refreshStickyBuckets(this.getPayload())}async setPayload(e){this._payload=e;const t=await async function(e,t,r){if((e=Ie({},e)).encryptedFeatures){try{e.features=JSON.parse(await G(e.encryptedFeatures,t,r))}catch(e){console.error(e)}delete e.encryptedFeatures}if(e.encryptedExperiments){try{e.experiments=JSON.parse(await G(e.encryptedExperiments,t,r))}catch(e){console.error(e)}delete e.encryptedExperiments}if(e.encryptedSavedGroups){try{e.savedGroups=JSON.parse(await G(e.encryptedSavedGroups,t,r))}catch(e){console.error(e)}delete e.encryptedSavedGroups}if(e.encryptedContextualBandits){try{e.contextualBandits=JSON.parse(await G(e.encryptedContextualBandits,t,r))}catch(e){console.error(e)}delete e.encryptedContextualBandits}return e}(e,this._options.decryptionKey);this._decryptedPayload=t,await this.refreshStickyBuckets(t),t.features&&(this._options.features=t.features),t.savedGroups&&(this._options.savedGroups=t.savedGroups),t.contextualBandits&&(this._options.contextualBandits=t.contextualBandits),t.experiments&&(this._options.experiments=t.experiments,this._updateAllAutoExperiments()),this.ready=!0,this._render()}initSync(e){this._initialized=!0;const t=e.payload;if(t.encryptedExperiments||t.encryptedFeatures)throw new Error("initSync does not support encrypted payloads");return this._options.stickyBucketService&&!this._options.stickyBucketAssignmentDocs&&(this._options.stickyBucketAssignmentDocs=this.generateStickyBucketAssignmentDocsSync(this._options.stickyBucketService,t)),this._payload=t,this._decryptedPayload=t,t.features&&(this._options.features=t.features),t.savedGroups&&(this._options.savedGroups=t.savedGroups),t.contextualBandits&&(this._options.contextualBandits=t.contextualBandits),t.experiments&&(this._options.experiments=t.experiments,this._updateAllAutoExperiments()),this.ready=!0,Ee(this,e),this}async init(e){var t;if(this._initialized=!0,(e=e||{}).cacheSettings&&(t=e.cacheSettings,Object.assign(ee,t),ee.backgroundSync||we()),e.payload)return await this.setPayload(e.payload),Ee(this,e),{success:!0,source:"init"};{const t=await this._refresh(it(it({},e),{},{allowStale:!0})),{data:r}=t,n=function(e,t){if(null==e)return{};var r,n,i=function(e,t){if(null==e)return{};var r={};for(var n in e)if({}.hasOwnProperty.call(e,n)){if(-1!==t.indexOf(n))continue;r[n]=e[n]}return r}(e,t);if(Object.getOwnPropertySymbols){var s=Object.getOwnPropertySymbols(e);for(n=0;n<s.length;n++)r=s[n],-1===t.indexOf(r)&&{}.propertyIsEnumerable.call(e,r)&&(i[r]=e[r])}return i}(t,rt);return Ee(this,e),await this.setPayload(r||{}),n}}async loadFeatures(e){var t;e=e||{},await this.init({skipCache:e.skipCache,timeout:e.timeout,streaming:(null===(t=this._options.backgroundSync)||void 0===t||t)&&(e.autoRefresh||this._options.subscribeToChanges)})}async refreshFeatures(e){const t=await this._refresh(it(it({},e||{}),{},{allowStale:!1}));t.data&&await this.setPayload(t.data)}getApiInfo(){return[this.getApiHosts().apiHost,this.getClientKey()]}getApiHosts(){return function(e){const t=e.apiHost||"https://cdn.growthbook.io";return{apiHost:t.replace(/\/*$/,""),streamingHost:(e.streamingHost||t).replace(/\/*$/,""),apiRequestHeaders:e.apiHostRequestHeaders,streamingHostRequestHeaders:e.streamingHostRequestHeaders}}(this._options)}getClientKey(){return this._options.clientKey||""}getPayload(){return this._payload||{features:this.getFeatures(),experiments:this.getExperiments()}}getDecryptedPayload(){return this._decryptedPayload||this.getPayload()}isRemoteEval(){return this._options.remoteEval||!1}getCacheKeyAttributes(){return this._options.cacheKeyAttributes}async _refresh(e){var t;let{timeout:r,skipCache:n,allowStale:i,streaming:s}=e;if(!this._options.clientKey)throw new Error("Missing clientKey");return ce({instance:this,timeout:r,skipCache:n||this._options.disableCache,allowStale:i,backgroundSync:null===(t=null!=s?s:this._options.backgroundSync)||void 0===t||t})}_render(){if(this._renderer)try{this._renderer()}catch(e){console.error("Failed to render",e)}}setFeatures(e){this._options.features=e,this.ready=!0,this._render()}async setEncryptedFeatures(e,t,r){const n=await G(e,t||this._options.decryptionKey,r);this.setFeatures(JSON.parse(n))}setExperiments(e){this._options.experiments=e,this.ready=!0,this._updateAllAutoExperiments()}async setEncryptedExperiments(e,t,r){const n=await G(e,t||this._options.decryptionKey,r);this.setExperiments(JSON.parse(n))}async setAttributes(e){this._options.attributes=e,this._options.stickyBucketService&&await this.refreshStickyBuckets(),this._options.remoteEval?await this._refreshForRemoteEval():(this._render(),this._updateAllAutoExperiments())}async updateAttributes(e){return this.setAttributes(it(it({},this._options.attributes),e))}async setAttributeOverrides(e){this._options.attributeOverrides=e,this._options.stickyBucketService&&await this.refreshStickyBuckets(),this._options.remoteEval?await this._refreshForRemoteEval():(this._render(),this._updateAllAutoExperiments())}async setForcedVariations(e){this._options.forcedVariations=e||{},this._options.remoteEval?await this._refreshForRemoteEval():(this._render(),this._updateAllAutoExperiments())}setForcedFeatures(e){this._options.forcedFeatureValues=e,this._render()}async setURL(e){if(e!==this._options.url){if(this._options.url=e,this._redirectedUrl="",this._options.remoteEval)return await this._refreshForRemoteEval(),void this._updateAllAutoExperiments(!0);this._updateAllAutoExperiments(!0)}}getAttributes(){return it(it({},this._options.attributes),this._options.attributeOverrides)}getForcedVariations(){return this._options.forcedVariations||{}}getForcedFeatures(){return this._options.forcedFeatureValues||new Map}getStickyBucketAssignmentDocs(){return this._options.stickyBucketAssignmentDocs||{}}getUrl(){return this._options.url||""}getFeatures(){return this._options.features||{}}getExperiments(){return this._options.experiments||[]}getCompletedChangeIds(){return Array.from(this._completedChangeIds)}subscribe(e){return this._subscriptions.add(e),()=>{this._subscriptions.delete(e)}}_subscribeFeatureUsage(e){return this._featureUsageSubs.add(e),()=>this._featureUsageSubs.delete(e)}_subscribeCustomEvents(e){return this._customEventSubs.add(e),()=>this._customEventSubs.delete(e)}async _refreshForRemoteEval(){if(!this._options.remoteEval)return;if(!this._initialized)return;const e=await this._refresh({allowStale:!1});e.data&&await this.setPayload(e.data)}getAllResults(){return new Map(this._assigned)}onDestroy(e){this._destroyCallbacks.push(e)}isDestroyed(){return!!this._destroyed}destroy(e){var t;e=e||{},this._destroyed=!0,this._destroyCallbacks.forEach((e=>{try{e()}catch(e){console.error(e)}})),this._subscriptions.clear(),this._featureUsageSubs.clear(),this._customEventSubs.clear(),this._assigned.clear(),this._trackedExperiments.clear(),this._completedChangeIds.clear(),this._deferredTrackingCalls.clear(),this._trackedFeatures={},this._destroyCallbacks=[],this._payload=void 0,this._saveStickyBucketAssignmentDoc=void 0,t=this,ne.forEach((e=>e.delete(t))),e.destroyAllStreams&&we(),this.logs=[],ot&&window._growthbook===this&&delete window._growthbook,this._activeAutoExperiments.forEach((e=>{e.undo()})),this._activeAutoExperiments.clear(),this._triggeredExpKeys.clear()}setRenderer(e){this._renderer=e}forceVariation(e,t){this._options.forcedVariations=this._options.forcedVariations||{},this._options.forcedVariations[e]=t,this._options.remoteEval?this._refreshForRemoteEval():(this._updateAllAutoExperiments(),this._render())}run(e){const{result:t}=Le(e,null,this._getEvalContext());return this._onExperimentEval(e,t),t}triggerExperiment(e){if(this._triggeredExpKeys.add(e),!this._options.experiments)return null;return this._options.experiments.filter((t=>t.key===e)).map((e=>this._runAutoExperiment(e))).filter((e=>null!==e))}triggerAutoExperiments(){this._autoExperimentsAllowed=!0,this._updateAllAutoExperiments(!0)}_getEvalContext(){return{user:this._getUserContext(),global:this._getGlobalContext(),stack:{evaluatedFeatures:new Set}}}_getUserContext(){return{attributes:this._options.user?it(it({},this._options.user),this._options.attributes):this._options.attributes,enableDevMode:this._options.enableDevMode,blockedChangeIds:this._options.blockedChangeIds,stickyBucketAssignmentDocs:this._options.stickyBucketAssignmentDocs,url:this._getContextUrl(),forcedVariations:this._options.forcedVariations,forcedFeatureValues:this._options.forcedFeatureValues,attributeOverrides:this._options.attributeOverrides,saveStickyBucketAssignmentDoc:this._saveStickyBucketAssignmentDoc,trackingCallback:this._options.trackingCallback,onFeatureUsage:this._options.onFeatureUsage,devLogs:this.logs,featureUsageSubs:this._featureUsageSubs,trackedExperiments:this._trackedExperiments,trackedFeatureUsage:this._trackedFeatures}}_getGlobalContext(){return{features:this._options.features,experiments:this._options.experiments,log:this.log,enabled:this._options.enabled,qaMode:this._options.qaMode,savedGroups:this._options.savedGroups,contextualBandits:this._options.contextualBandits,groups:this._options.groups,overrides:this._options.overrides,onExperimentEval:this._onExperimentEval,recordChangeId:this._recordChangedId,saveDeferredTrack:this._saveDeferredTrack,eventLogger:this._options.eventLogger}}_runAutoExperiment(e,t){const r=this._activeAutoExperiments.get(e);if(e.manual&&!this._triggeredExpKeys.has(e.key)&&!r)return null;const n=this._isAutoExperimentBlockedByContext(e);let i,s;n?i=Ye(this._getEvalContext(),e,-1,!1,""):(({result:i,trackingCall:s}=Le(e,null,this._getEvalContext())),this._onExperimentEval(e,i));const o=JSON.stringify(i.value);if(!t&&i.inExperiment&&r&&r.valueHash===o)return i;if(r&&this._undoActiveAutoExperiment(e),i.inExperiment){const t=W(e);if("redirect"===t&&i.value.urlRedirect&&e.urlPatterns){const t=e.persistQueryString?function(e,t){let r,n;try{r=new URL(e),n=new URL(t)}catch(e){return console.error("Unable to merge query strings: ".concat(e)),t}return r.searchParams.forEach(((e,t)=>{n.searchParams.has(t)||n.searchParams.set(t,e)})),n.toString()}(this._getContextUrl(),i.value.urlRedirect):i.value.urlRedirect;if(L(t,e.urlPatterns))return this.log("Skipping redirect because original URL matches redirect URL",{id:e.key}),i;this._redirectedUrl=t;const{navigate:r,delay:n}=this._getNavigateFunction();var a;if(r)if(ot)Promise.all([...s?[Y(s,null!==(a=this._options.maxNavigateDelay)&&void 0!==a?a:1e3)]:[],new Promise((e=>{var t;return window.setTimeout(e,null!==(t=this._options.navigateDelay)&&void 0!==t?t:n)}))]).then((()=>{try{r(t)}catch(e){console.error(e)}}));else try{r(t)}catch(e){console.error(e)}}else if("visual"===t){const t=this._options.applyDomChangesCallback?this._options.applyDomChangesCallback(i.value):this._applyDOMChanges(i.value);t&&this._activeAutoExperiments.set(e,{undo:t,valueHash:o})}}return i}_undoActiveAutoExperiment(e){const t=this._activeAutoExperiments.get(e);t&&(t.undo(),this._activeAutoExperiments.delete(e))}_updateAllAutoExperiments(e){if(!this._autoExperimentsAllowed)return;const t=this._options.experiments||[],r=new Set(t);this._activeAutoExperiments.forEach(((e,t)=>{r.has(t)||(e.undo(),this._activeAutoExperiments.delete(t))}));for(const r of t){const t=this._runAutoExperiment(r,e);if(t&&t.inExperiment&&"redirect"===W(r))break}}_onExperimentEval(e,t){const r=this._assigned.get(e.key);this._assigned.set(e.key,{experiment:e,result:t}),this._subscriptions.size>0&&this._fireSubscriptions(e,t,r)}_fireSubscriptions(e,t,r){r&&r.result.inExperiment===t.inExperiment&&r.result.variationId===t.variationId||this._subscriptions.forEach((r=>{try{r(e,t)}catch(e){console.error(e)}}))}_recordChangedId(e){this._completedChangeIds.add(e)}isOn(e){return this.evalFeature(e).on}isOff(e){return this.evalFeature(e).off}getFeatureValue(e,t){const r=this.evalFeature(e).value;return null===r?t:r}feature(e){return this.evalFeature(e)}evalFeature(e){return Me(e,this._getEvalContext())}log(e,t){this.debug&&(this._options.log?this._options.log(e,t):console.log(e,t))}getDeferredTrackingCalls(){return Array.from(this._deferredTrackingCalls.values())}setDeferredTrackingCalls(e){this._deferredTrackingCalls=new Map(e.filter((e=>e&&e.experiment&&e.result)).map((e=>[tt(e.experiment,e.result),e])))}async fireDeferredTrackingCalls(){if(!this._options.trackingCallback)return;const e=[];
1this._deferredTrackingCalls.forEach((t=>{t&&t.experiment&&t.result?e.push(this._options.trackingCallback(t.experiment,t.result,t.user)):console.error("Invalid deferred tracking call",{call:t})})),this._deferredTrackingCalls.clear(),await Promise.all(e)}setTrackingCallback(e){this._options.trackingCallback=e,this.fireDeferredTrackingCalls()}setFeatureUsageCallback(e){this._options.onFeatureUsage=e}setEventLogger(e){this._options.eventLogger=e}async logEvent(e,t){if(this._destroyed)console.error("Cannot log event to destroyed GrowthBook instance");else if(this._options.enableDevMode&&this.logs.push({eventName:e,properties:t,timestamp:Date.now().toString(),logType:"event"}),this._customEventSubs.size&&this._customEventSubs.forEach((r=>{try{r(e,t||{})}catch(e){console.error(e)}})),this._options.eventLogger)try{await this._options.eventLogger(e,t||{},He(this._getUserContext()))}catch(e){console.error(e)}else console.error("No event logger configured")}_saveDeferredTrack(e){this._deferredTrackingCalls.set(tt(e.experiment,e.result),e)}_getContextUrl(){return this._options.url||(ot?window.location.href:"")}_isAutoExperimentBlockedByContext(e){const t=W(e);if("visual"===t){if(this._options.disableVisualExperiments)return!0;if(this._options.disableJsInjection&&e.variations.some((e=>e.js)))return!0}else{if("redirect"!==t)return!0;if(this._options.disableUrlRedirectExperiments)return!0;try{const t=new URL(this._getContextUrl());for(const r of e.variations){if(!r||!r.urlRedirect)continue;const e=new URL(r.urlRedirect);if(this._options.disableCrossOriginUrlRedirectExperiments){if(e.protocol!==t.protocol)return!0;if(e.host!==t.host)return!0}}}catch(t){return this.log("Error parsing current or redirect URL",{id:e.key,error:t}),!0}}return!(!e.changeId||!(this._options.blockedChangeIds||[]).includes(e.changeId))}getRedirectUrl(){return this._redirectedUrl}_getNavigateFunction(){return this._options.navigate?{navigate:this._options.navigate,delay:0}:ot?{navigate:e=>{window.location.replace(e)},delay:100}:{navigate:null,delay:0}}_applyDOMChanges(e){if(!ot)return;const t=[];if(e.css){const r=document.createElement("style");r.innerHTML=e.css,document.head.appendChild(r),t.push((()=>r.remove()))}if(e.js){const r=document.createElement("script");r.innerHTML=e.js,this._options.jsInjectionNonce&&(r.nonce=this._options.jsInjectionNonce),document.head.appendChild(r),t.push((()=>r.remove()))}return e.domMutations&&e.domMutations.forEach((e=>{t.push(j.declarative(e).revert)})),()=>{t.forEach((e=>e()))}}async refreshStickyBuckets(e){if(this._options.stickyBucketService){const t=this._getEvalContext(),r=await async function(e,t,r){const n=et(e,r);return t.getAllAssignments(n)}(t,this._options.stickyBucketService,e);this._options.stickyBucketAssignmentDocs=r}}generateStickyBucketAssignmentDocsSync(e,t){if(!("getAllAssignmentsSync"in e))return void console.error("generating StickyBucketAssignmentDocs docs requires StickyBucketServiceSync");const r=et(this._getEvalContext(),t);return e.getAllAssignmentsSync(r)}inDevMode(){return!!this._options.enableDevMode}}function ut(){try{var e;if("function"==typeof(null==(e=performance)?void 0:e.now))return performance.now()}catch(e){console.debug(e)}return Date.now()}function ct(e,t,r,n){try{var i;"function"==typeof(null==(i=performance)?void 0:i.measure)&&performance.measure(e,{start:t,end:r,detail:n})}catch(e){console.debug(e)}}function lt(e){try{return decodeURIComponent(e)}catch(t){return e}}function dt(e){return function(e){return document.cookie.split(";").map((e=>{var t;const r=e.indexOf("="),n=null==(t=e.slice(r+1))?void 0:t.trim();return{name:lt(e.slice(0,r).trim()),value:"string"==typeof n?lt(n):void 0}})).filter((t=>t.name===e)).map((e=>e.value))}(e).shift()}function ht(e){document.cookie=function(e){if(!e.name)throw new Error("Cookie name is required");const t=[];return t.push(`${encodeURIComponent(e.name)}=${encodeURIComponent(e.value||"")}`),"string"==typeof e.path&&t.push(`Path=${e.path}`),"string"==typeof e.domain&&t.push(`Domain=${e.domain}`),e.expires&&"function"==typeof e.expires.getTime&&t.push(`Expires=${e.expires.toUTCString()}`),"string"==typeof e.same_site&&t.push(`SameSite=${e.same_site}`),e.secure&&t.push("Secure"),t.join("; ")}(e)}function ft(e){try{return dt(e)}catch(t){console.debug("Failed to read cookie",e,t)}}function pt(){const e=function(){const e=new Uint8Array(16);try{crypto.getRandomValues(e)}catch(t){console.debug("Web crypto is unavailable for minting an anonymous id",t);for(let t=0;t<e.length;
1t++)e[t]=Math.floor(256*Math.random())}let t="";for(const r of e)t+=r.toString(16).padStart(2,"0");return t}(),t=new Date;t.setFullYear(t.getFullYear()+1);try{ht({expires:t,name:"ib_gb_id",path:"/",same_site:"Lax",secure:!0,value:e})}catch(e){return void console.debug("Failed to write a minted GrowthBook anonymous id",e)}return ft("ib_gb_id")}class StickyBucketService{constructor(e){e=e||{},this.prefix=e.prefix||""}async getAllAssignments(e){const t={};return(await Promise.all(Object.entries(e).map((e=>{let[t,r]=e;return this.getAssignments(t,r)})))).forEach((e=>{if(e){const r=Xe(e.attributeName,e.attributeValue);t[r]=e}})),t}getKey(e,t){return"".concat(this.prefix).concat(e,"||").concat(t)}}class StickyBucketServiceSync extends StickyBucketService{async getAssignments(e,t){return this.getAssignmentsSync(e,t)}async saveAssignments(e){this.saveAssignmentsSync(e)}getAllAssignmentsSync(e){const t={};return Object.entries(e).map((e=>{let[t,r]=e;return this.getAssignmentsSync(t,r)})).forEach((e=>{if(e){const r=Xe(e.attributeName,e.attributeValue);t[r]=e}})),t}}class CookieStickyBucketService extends StickyBucketServiceSync{constructor(){super({prefix:"ib_gb_sb_"})}getAssignmentsSync(e,t){const r=this.getKey(e,t);let n,i;try{n=dt(r)}catch(e){return console.debug(e),null}if(!n)return null;try{i=JSON.parse(n)}catch(e){return console.debug(e),null}return"object"==typeof(s=i)&&s&&"string"==typeof s.attributeName&&"string"==typeof s.attributeValue&&"object"==typeof s.assignments&&s.assignments?i:null;var s}saveAssignmentsSync(e){const t=this.getKey(e.attributeName,e.attributeValue),r=JSON.stringify(e),n=new Date;n.setDate(n.getDate()+180);try{ht({expires:n,name:t,path:"/",same_site:"Lax",secure:!0,value:r})}catch(e){console.debug(e)}}}function gt(e,t){var r;const n=new CustomEvent("experiment-exposed",{detail:{experiment_id:e.key,feature_id:null!=(r=t.featureId)?r:"",param_name:"variation",param_value:t.value,stable_id:t.hashValue}});dispatchEvent(n)}async function mt(){const e=Shopify.previewMode?"preview":"production",t=new GrowthBook({apiHost:growthbook_runtime.api_host,attributes:{id:growthbook_runtime.anonymous_id},clientKey:growthbook_runtime.key,debug:!1,enableDevMode:"preview"===e,trackingCallback:gt,stickyBucketService:new CookieStickyBucketService}),r=ut(),n=await t.init({streaming:!1});if(ct("growthbook-init",r,ut(),{source:null==n?void 0:n.source,view_mode:e}),!n)throw new Error("Failed to initialize GrowthBook");if(!n.success)throw n.error;return"preview"===e&&growthbook_runtime.preview_hold_ms>0?function(e){return new Promise((t=>{let r,n=0;const i=new Date,s=()=>{clearTimeout(o),clearTimeout(r),console.log(`[GrowthBook] preview override wait settled after ${(new Date).getTime()-i.getTime()}ms with ${n} renders`),e.setRenderer((()=>{console.debug("[GrowthBook] Variant overrides changed — refresh the page to apply them. "+((new Date).getTime()-i.getTime())+"ms since initial load")})),t(e)},o=setTimeout(s,growthbook_runtime.preview_hold_ms),a=200;e.setRenderer((()=>{n++,clearTimeout(r),r=setTimeout(s,a)}))}))}(t):t}function yt(e){ct("growthbook-schedule-delay",e,ut())}function vt(e,t){ct("growthbook-settle",t,ut(),{load_state:e,view_mode:Shopify.previewMode?"preview":"production"}),growthbook_runtime.load_state=e,dispatchEvent(new Event("growthbook-load-settled"))}!function(){if(!window.growthbook_runtime)return;const e=ut();!function(e){try{var t;"function"==typeof(null==(t=performance)?void 0:t.mark)&&performance.mark(e)}catch(e){console.debug(e)}}("growthbook-boot-start");const t=function(){const e=ft("_shopify_y");if(e)return e;return ft("ib_gb_id")||pt()}();if(!t)return console.log("GrowthBook anonymous id is unavailable"),void vt("failure_anonymous_id_missing",e);growthbook_runtime.anonymous_id=t,growthbook_runtime.client_loader=mt(),setTimeout(yt,0,ut()),growthbook_runtime.client_loader.then((()=>{vt("ready",e)})).catch((t=>{console.warn(t),vt("failure_init",e)}))}()}();
2//# sourceMappingURL=growthbook-runtime-snippet-2dad2bdd596e36c04dec6d3d4783b2e7.map.json

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.