This commit is contained in:
janisslsm committed 2026-11-01 12:12:55 +02:00
1 parent 1781d25a15
commit 732c0ad767
33051 files changed
+2591613 -3019689

No files matched your search

+276
View File
@@ -0,0 +1,276 @@
// Metro module 5849 (f5850).
import EntitlementRecord from "../../records/EntitlementRecord";
import LibraryApplicationStore from "../LibraryApplicationStore";
import SKUStore from "./SKUStore";
import { EntitlementSourceTypes, EntitlementTypes } from "../../Constants";
import { PREMIUM_SUBSCRIPTION_APPLICATION } from "../../modules/premium/PremiumConstants";
import { Store } from "../../_bundle/Module589";
import Module12 from "../../_bundle/Module12";
import { isUserEntitledToLibraryApplication } from "../../utils/LibraryApplicationUtils";
import { FractionalPremiumSKUsSets } from "../../_bundle/Module679";
import Dispatcher from "../../Dispatcher";
let c3658_9, c3658_10, c3658_11, c3658_12, c3658_13, c3658_14, c3658_15, c3658_16, c3658_17, c3658_18, addGiftEntitlement;
const addEntitlement = function addEntitlement(a0) {
c3658_9[a0.id] = EntitlementRecord.createFromServer(a0);
if (c3658_11[a0.sku_id] == null) {
c3658_11[a0.sku_id] = new Set();
}
if (c3658_12[a0.application_id] == null) {
c3658_12[a0.application_id] = new Set();
}
if (a0.subscription_id != null) {
if (c3658_18[a0.subscription_id] == null) {
c3658_18[a0.subscription_id] = new Set();
}
c3658_18[a0.subscription_id].add(a0.id);
}
c3658_12[a0.application_id].add(a0.id);
c3658_11[a0.sku_id].add(a0.id);
};
addGiftEntitlement = function addGiftEntitlement(a0) {
c3658_10[a0.id] = EntitlementRecord.createFromServer(a0);
};
const handlePurchaseSuccess = function handlePurchaseSuccess(a0) {
for (const entitlement of a0.entitlements) {
addEntitlement(entitlement);
}
};
const handleEntitlementUpdate = function handleEntitlementUpdate(a0) {
addEntitlement(a0.entitlement);
};
c3658_9 = {};
c3658_10 = {};
c3658_11 = {};
c3658_12 = {};
c3658_13 = false;
c3658_14 = false;
c3658_15 = false;
c3658_16 = new Set();
c3658_17 = new Set();
c3658_18 = {};
class EntitlementStore extends Store {
static displayName = "EntitlementStore";
initialize() {
this.syncWith([LibraryApplicationStore], () => true);
}
get(a0) {
return c3658_9[a0];
}
getGiftable() {
return Module12.values(c3658_10);
}
getForApplication(a0) {
const r2 = c3658_12[a0];
if (r2 == null) {
return null;
}
const set = new Set();
for (const item of r2) {
set.add(c3658_9[item]);
}
return set;
}
getForSku(a0) {
const r2 = c3658_11[a0];
if (r2 == null) {
return null;
}
const set = new Set();
for (const item of r2) {
set.add(c3658_9[item]);
}
return set;
}
get fetchingAllEntitlements() {
return c3658_13;
}
get fetchedAllEntitlements() {
return c3658_14;
}
get fetchedEndedEntitlements() {
return c3658_15;
}
get applicationIdsFetching() {
return c3658_16;
}
get applicationIdsFetched() {
return c3658_17;
}
isFetchingForApplication(a0) {
return this.fetchingAllEntitlements || a0 != null && this.applicationIdsFetching.has(a0);
}
isFetchedForApplication(a0) {
return this.fetchedAllEntitlements || a0 != null && this.applicationIdsFetched.has(a0);
}
getForSubscription(a0) {
const r2 = c3658_18[a0];
if (r2 == null) {
return null;
}
const set = new Set();
for (const item of r2) {
set.add(c3658_9[item]);
}
return set;
}
isEntitledToSku(a0, a1, a2, r8 = null) {
const r9 = c3658_11[a1];
if (r9 != null) {
for (const item of r9) {
const r30 = c3658_9[item];
if (r30 == null) {
continue;
}
if (!r30.isValid(a0, SKUStore, r8)) {
continue;
}
return true;
}
}
if (c3658_17.has(a2)) {
return false;
}
const r44 = r8 != null ? LibraryApplicationStore.getLibraryApplication(a2, r8) : LibraryApplicationStore.getActiveLibraryApplication(a2);
const r47 = r44 == null || r44.sku.id !== a1 || !isUserEntitledToLibraryApplication(r44);
return r47 ? null : !r47;
}
hasFetchedForApplicationIds(a0) {
return a0.every((item) => c3658_17.has(item));
}
getFractionalPremium(r2 = {}) {
let includeEnded = r2.includeEnded;
if (includeEnded === void 0) {
includeEnded = false;
}
let c15206_0 = includeEnded;
let excludeReverseTrial = r2.excludeReverseTrial;
if (excludeReverseTrial === void 0) {
excludeReverseTrial = false;
}
let c15206_1 = excludeReverseTrial;
const r12 = [];
let c15206_2 = r12;
let c15206_3 = new Date();
const forApplication = this.getForApplication(PREMIUM_SUBSCRIPTION_APPLICATION);
if (forApplication != null) {
forApplication.forEach((item) => {
let r7 = item.endsAt != null && item.endsAt < c15206_3;
const r12 = item.sourceType === EntitlementSourceTypes.REVERSE_TRIAL && c15206_1;
let r16 = item.type !== EntitlementTypes.FRACTIONAL_REDEMPTION;
if (!r16) {
if (r7) {
r7 = !c15206_0;
}
r16 = r7;
}
if (!r16) {
r16 = r12;
}
if (!r16) {
c15206_2.push(item);
}
});
}
return r12;
}
isFractionalPremiumActive(r2 = {}) {
let excludeReverseTrial = r2.excludeReverseTrial;
if (excludeReverseTrial === void 0) {
excludeReverseTrial = false;
}
return this.getFractionalPremium({
includeEnded: false,
excludeReverseTrial
}).length > 0;
}
getUnactivatedFractionalPremiumUnits() {
const r1 = [];
let c15207_0 = r1;
const forApplication = this.getForApplication(PREMIUM_SUBSCRIPTION_APPLICATION);
if (forApplication != null) {
forApplication.forEach((item) => {
if (FractionalPremiumSKUsSets.ACTIVE_FRACTIONAL_PREMIUM_SKUS.has(item.skuId) && !item.consumed) {
c15207_0.push(item);
}
});
}
return r1;
}
}
const entitlementStore = new EntitlementStore(Dispatcher, {
ENTITLEMENT_FETCH_APPLICATION_START: function handleEntitlementApplicationStart(a0) {
c3658_16.add(a0.applicationId);
},
ENTITLEMENT_FETCH_APPLICATION_SUCCESS: function handleEntitlementApplicationFetch({ applicationId, entitlements }) {
c3658_16.delete(applicationId);
c3658_17.add(applicationId);
for (const item of entitlements) {
if (item.consumed !== true) {
addEntitlement(item);
}
}
},
ENTITLEMENT_FETCH_APPLICATION_FAIL: function handleEntitlementApplicationFail() {},
ENTITLEMENTS_GIFTABLE_FETCH_SUCCESS: function handleEntitlementsGiftableFetchSuccess({ entitlements }) {
c3658_10 = {};
entitlements.forEach(addGiftEntitlement);
},
SKU_PURCHASE_SUCCESS: handlePurchaseSuccess,
VIRTUAL_CURRENCY_REDEEM_SUCCESS: handlePurchaseSuccess,
LIBRARY_FETCH_SUCCESS: function handleLibraryFetchSuccess(a0) {
for (const libraryApplication of a0.libraryApplications) {
const r27 = libraryApplication;
if (libraryApplication.entitlements != null) {
for (const entitlement of r27.entitlements) {
addEntitlement(entitlement);
}
}
}
},
ENTITLEMENT_CREATE: handleEntitlementUpdate,
ENTITLEMENT_UPDATE: handleEntitlementUpdate,
ENTITLEMENT_DELETE: function handleEntitlementDelete({ entitlement }) {
delete c3658_9[entitlement.id];
const r5 = c3658_12[entitlement.application_id];
if (r5 != null) {
r5.delete(entitlement.id);
}
const r15 = c3658_11[entitlement.sku_id];
if (r15 != null) {
r15.delete(entitlement.id);
}
if (entitlement.subscription_id != null) {
const r22 = c3658_18[entitlement.subscription_id];
if (r22 != null) {
r22.delete(entitlement.id);
}
}
},
LOGOUT: function handleLogout() {
c3658_9 = {};
c3658_11 = {};
c3658_12 = {};
c3658_13 = false;
c3658_14 = false;
c3658_15 = false;
c3658_16 = new Set();
c3658_17 = new Set();
},
ENTITLEMENTS_FETCH_FOR_USER_START: function handleUserEntitlementsStart() {
c3658_13 = true;
},
ENTITLEMENTS_FETCH_FOR_USER_SUCCESS: function handleUserEntitlementsSuccess({ entitlements, excludeEnded }) {
c3658_14 = true;
c3658_13 = false;
c3658_15 = !excludeEnded;
for (const item of entitlements) {
addEntitlement(item);
}
},
ENTITLEMENTS_FETCH_FOR_USER_FAIL: function handleUserEntitlementsFail() {
c3658_14 = false;
c3658_13 = false;
c3658_15 = false;
}
});
export default entitlementStore;
+175
View File
@@ -0,0 +1,175 @@
// Metro module 4234 (f4235).
import SKURecord from "../../modules/skus/SKURecord";
import LocaleStore from "../../modules/user_settings/LocaleStore";
import DetectableGameStore from "../DetectableGameStore";
import { Store } from "../../_bundle/Module589";
import Dispatcher from "../../Dispatcher";
let locale, c2449_4, c2449_5, c2449_6, c2449_7, c2449_8, c2449_9, skuFetchSuccess, handleStoreListing, handleUserSettingsStoreUpdate, $mk73888 = function() {
return (a0) => {
addSku(a0);
};
}, $mk73889 = function() {
return (a0) => {
addSku(a0);
};
};
const addSku = function addSku(sku) {
const r16 = c2449_7.get(sku.id);
const fromServer = SKURecord.createFromServer(sku);
if (r16 != null) {
if (fromServer.price == null && r16.price != null) {
fromServer.price = r16.price;
}
if (Object.keys(fromServer.prices).length === 0 && Object.keys(r16.prices).length > 0) {
fromServer.prices = r16.prices;
}
if (fromServer.orbsReward == null && r16.orbsReward != null) {
fromServer.orbsReward = r16.orbsReward;
}
if (fromServer.eligibleOffers.length === 0 && r16.eligibleOffers.length > 0) {
fromServer.eligibleOffers = r16.eligibleOffers;
}
}
c2449_7.set(sku.id, fromServer);
c2449_5.delete(sku.id);
c2449_6.delete(sku.id);
const bundled_sku_ids = sku.bundled_sku_ids;
if (bundled_sku_ids != null) {
bundled_sku_ids.forEach((bundled_sku_id) => {
c2449_4.set(bundled_sku_id, sku.id);
});
}
if (!c2449_8.has(sku.application_id)) {
c2449_8.set(sku.application_id, new Set());
}
c2449_8.get(sku.application_id).add(sku.id);
};
skuFetchSuccess = function skuFetchSuccess(item) {
addSku(item);
};
handleStoreListing = function handleStoreListing(storeListing) {
addSku(storeListing.sku);
if (storeListing.child_skus != null) {
storeListing.child_skus.forEach($mk73888());
}
if (storeListing.alternative_skus != null) {
storeListing.alternative_skus.forEach($mk73889());
}
};
const handleEntitlementsFetch = function handleEntitlementsFetch(a0) {
for (const entitlement of a0.entitlements) {
if (entitlement.sku != null) {
addSku(entitlement.sku);
}
}
};
handleUserSettingsStoreUpdate = function handleUserSettingsStoreUpdate() {
if (locale === LocaleStore.locale) {
return false;
}
locale = LocaleStore.locale;
c2449_4 = new Map();
c2449_5 = new Set();
c2449_6 = new Set();
c2449_7 = new Map();
c2449_8 = new Map();
c2449_9 = new Map();
};
c2449_4 = new Map();
c2449_5 = new Set();
c2449_6 = new Set();
c2449_7 = new Map();
c2449_8 = new Map();
c2449_9 = new Map();
class SKUStore extends Store {
static displayName = "SKUStore";
initialize() {
this.waitFor(LocaleStore, DetectableGameStore);
this.syncWith([LocaleStore], handleUserSettingsStoreUpdate);
locale = LocaleStore.locale;
}
get(a0) {
return c2449_7.get(a0);
}
getForApplication(a0) {
const r5 = c2449_8.get(a0);
return r5 == null ? [] : Array.from(r5).map((item) => c2449_7.get(item));
}
isFetching(a0) {
return c2449_5.has(a0);
}
getFetchingSkuIds() {
return [...c2449_5.keys()];
}
getSKUs() {
return Object.fromEntries(c2449_7);
}
getParentSKU(a0) {
const r5 = c2449_4.get(a0);
if (r5 != null) {
return this.get(r5);
}
}
didFetchingSkuFail(a0) {
return c2449_6.has(a0);
}
}
const sKUStore = new SKUStore(Dispatcher, {
STORE_LISTINGS_FETCH_START: function handleStoreListingsFetchStart(a0) {
c2449_5.add(a0.skuId);
},
STORE_LISTINGS_FETCH_FAIL: function handleStoreListingsFetchFail({ skuId }) {
c2449_5.delete(skuId);
c2449_6.add(skuId);
},
STORE_LISTINGS_FETCH_SUCCESS: function handleStoreListingsFetchSuccess(a0) {
for (const storeListing of a0.storeListings) {
handleStoreListing(storeListing);
}
},
STORE_LISTING_FETCH_SUCCESS: function handleStoreListingFetchSuccess({ storeListing }) {
addSku(storeListing.sku);
if (storeListing.child_skus != null) {
storeListing.child_skus.forEach($mk73888());
}
if (storeListing.alternative_skus != null) {
storeListing.alternative_skus.forEach($mk73889());
}
},
GIFT_CODE_RESOLVE_SUCCESS: function handleGiftCodeResolveSuccess({ giftCode }) {
if (giftCode.store_listing == null) {
return false;
}
addSku(giftCode.store_listing.sku);
},
SKU_FETCH_START: function handleSkuFetchStart(a0) {
c2449_5.add(a0.skuId);
},
SKU_FETCH_SUCCESS: function handleSkuFetchSuccess(a0) {
addSku(a0.sku);
},
SKU_FETCH_FAIL: function handleSkuFetchFail({ skuId }) {
c2449_5.delete(skuId);
c2449_6.add(skuId);
},
SKUS_FETCH_SUCCESS: function handleSkusFetchSuccess({ guildId, skus }) {
for (const item of skus) {
skuFetchSuccess(item);
}
if (guildId != null) {
c2449_9.set(guildId, new Set(skus.map((sku) => sku.id)));
}
},
ENTITLEMENTS_GIFTABLE_FETCH_SUCCESS: handleEntitlementsFetch,
APPLICATION_STORE_CLEAR_DATA: function handleClearData() {
c2449_4 = new Map();
c2449_5 = new Set();
c2449_6 = new Set();
c2449_7 = new Map();
c2449_8 = new Map();
c2449_9 = new Map();
},
APPLICATION_SUBSCRIPTIONS_FETCH_ENTITLEMENTS_SUCCESS: handleEntitlementsFetch,
ENTITLEMENTS_FETCH_FOR_USER_SUCCESS: handleEntitlementsFetch
});
export default sKUStore;
+153
View File
@@ -0,0 +1,153 @@
// Metro module 13555 (f13556).
import LocaleStore from "../../modules/user_settings/LocaleStore";
import StoreListingRecord from "../../records/StoreListingRecord";
import Module589 from "../../_bundle/Module589";
import { isNotNullish } from "../../utils/GlobalUtils";
import Dispatcher from "../../Dispatcher";
let locale, c9414_5, c9414_6, c9414_7, c9414_8, c9414_9, handleUserSettingsStoreUpdate;
const addRegularStoreListing = function addRegularStoreListing(storeListing) {
const id = storeListing.id;
const id2 = storeListing.sku.id;
const r9 = c9414_5[id];
const fromServer = StoreListingRecord.createFromServer(storeListing);
if (!(r9 != null && !r9.isSlimDirectoryVersion() && fromServer.isSlimDirectoryVersion())) {
if (storeListing.published === false) {
if (c9414_7[id2] == null) {
c9414_7[id2] = new Set();
}
c9414_7[id2].add(id);
} else {
c9414_8[id2] = id;
}
c9414_5[id] = fromServer;
c9414_9.delete(storeListing.sku.id);
}
};
handleUserSettingsStoreUpdate = function handleUserSettingsStoreUpdate() {
if (locale === LocaleStore.locale) {
return false;
}
c9414_5 = {};
c9414_8 = {};
c9414_7 = {};
c9414_6 = {};
c9414_9 = new Set();
locale = LocaleStore.locale;
};
c9414_5 = {};
c9414_6 = {};
c9414_7 = {};
c9414_8 = {};
c9414_9 = new Set();
class StoreListingStore extends Module589.Store {
static displayName = "StoreListingStore";
initialize() {
this.waitFor(LocaleStore);
this.syncWith([LocaleStore], handleUserSettingsStoreUpdate);
locale = LocaleStore.locale;
}
get(a0) {
return c9414_5[a0];
}
getForSKU(a0, a1) {
const r4 = c9414_8[a0];
return a1 != null ? c9414_6[`${a1}:${a0}`] : r4 != null ? c9414_5[r4] : null;
}
getUnpublishedForSKU(a0) {
const r4 = c9414_7[a0];
return r4 == null ? [] : Array.from(r4).map((item) => c9414_5[item]).filter(isNotNullish);
}
getForChannel(a0, a1) {
return c9414_6[`${a0}:${a1}`];
}
isFetchingForSKU(a0) {
return c9414_9.has(a0);
}
getStoreListing(a0) {
const { storeListingId, skuId, channelId } = a0;
if (a0.isTestMode && skuId != null) {
const unpublishedForSKU = this.getUnpublishedForSKU(skuId);
if (unpublishedForSKU != null && unpublishedForSKU.length > 0) {
return unpublishedForSKU[0];
}
}
if (storeListingId != null) {
return this.get(storeListingId);
}
if (channelId != null) {
if (skuId == null) {
throw new Error("getStoreListing with channel expects a skuId");
}
return this.getForChannel(channelId, skuId);
}
return skuId != null ? this.getForSKU(skuId) : null;
}
}
const storeListingStore = new StoreListingStore(Dispatcher, {
STORE_LISTINGS_FETCH_START: function handleStoreListingsFetchStart(a0) {
c9414_9.add(a0.skuId);
},
STORE_LISTINGS_FETCH_FAIL: function handleStoreListingsFetchFail(a0) {
c9414_9.delete(a0.skuId);
},
STORE_LISTINGS_FETCH_SUCCESS: function handleStoreListingsFetch(a0) {
for (const storeListing of a0.storeListings) {
addRegularStoreListing(storeListing);
}
},
STORE_LISTING_FETCH_SUCCESS: function handleStoreListingFetch({ storeListing, channelId }) {
if (channelId != null) {
const fromServer2 = StoreListingRecord.createFromServer(storeListing);
c9414_6[`${channelId}:${fromServer2.skuId}`] = fromServer2;
c9414_8[fromServer2.skuId] = fromServer2.id;
} else {
const id = storeListing.id;
const id2 = storeListing.sku.id;
const r10 = c9414_5[id];
const fromServer = StoreListingRecord.createFromServer(storeListing);
if (!(r10 != null && !r10.isSlimDirectoryVersion() && fromServer.isSlimDirectoryVersion())) {
if (storeListing.published === false) {
if (c9414_7[id2] == null) {
c9414_7[id2] = new Set();
}
c9414_7[id2].add(id);
} else {
c9414_8[id2] = id;
}
c9414_5[id] = fromServer;
c9414_9.delete(storeListing.sku.id);
}
}
},
USER_SETTINGS_PROTO_UPDATE: handleUserSettingsStoreUpdate,
APPLICATION_STORE_CLEAR_DATA: function handleClearData() {
c9414_5 = {};
c9414_8 = {};
c9414_7 = {};
c9414_6 = {};
c9414_9 = new Set();
},
GIFT_CODE_RESOLVE_SUCCESS: function handleGiftCodeResolveSuccess({ giftCode }) {
if (giftCode.store_listing == null) {
return false;
}
const store_listing = giftCode.store_listing;
const id = store_listing.id;
const id2 = store_listing.sku.id;
const r9 = c9414_5[id];
const fromServer = StoreListingRecord.createFromServer(store_listing);
if (!(r9 != null && !r9.isSlimDirectoryVersion() && fromServer.isSlimDirectoryVersion())) {
if (store_listing.published === false) {
if (c9414_7[id2] == null) {
c9414_7[id2] = new Set();
}
c9414_7[id2].add(id);
} else {
c9414_8[id2] = id;
}
c9414_5[id] = fromServer;
c9414_9.delete(store_listing.sku.id);
}
}
});
export default storeListingStore;
+108
View File
@@ -0,0 +1,108 @@
// Metro module 5690 (f5691).
import SelectivelySyncedUserSettingsStore from "../../modules/user_settings/SelectivelySyncedUserSettingsStore";
import UserSettingsProtoStore from "../../modules/user_settings/UserSettingsProtoStore";
import LibraryApplicationStore from "../LibraryApplicationStore";
import Module589 from "../../_bundle/Module589";
import { DeveloperMode } from "../../modules/user_settings/UserSettings";
import Dispatcher from "../../Dispatcher";
let applicationId, originURL, error2, c3524_8, c3524_9, c3524_10, c3524_11;
const reset = function reset() {
applicationId = null;
originURL = null;
c3524_10 = new Set();
c3524_9.applicationId = null;
c3524_9.originURL = null;
error2 = null;
};
c3524_8 = {
applicationId: null,
originURL: null
};
c3524_9 = c3524_8;
c3524_10 = new Set();
c3524_11 = false;
class TestModeStore extends Module589.PersistedStore {
static displayName = "TestModeStore";
static persistKey = "TestModeStore";
initialize(a0) {
const r2 = {
...a0 == null ? c3524_8 : a0
};
c3524_9 = r2;
applicationId = r2.applicationId;
originURL = c3524_9.originURL;
this.waitFor(LibraryApplicationStore, SelectivelySyncedUserSettingsStore, UserSettingsProtoStore);
this.syncWith([UserSettingsProtoStore, SelectivelySyncedUserSettingsStore], () => true);
LibraryApplicationStore.whenInitialized(() => {
c3524_11 = true;
});
}
getTestModeApplicationId() {
return applicationId;
}
inTestModeForApplication(a0) {
return applicationId === a0;
}
inTestModeForEmbeddedApplication(a0) {
return applicationId === a0 && originURL != null;
}
shouldDisplayTestMode(a0) {
return DeveloperMode.getSetting() && this.inTestModeForApplication(a0);
}
getState() {
return c3524_9;
}
get isTestMode() {
return applicationId != null;
}
get isFetchingAuthorization() {
return c3524_10.size > 0;
}
get testModeEmbeddedApplicationId() {
return originURL != null ? applicationId : null;
}
get testModeApplicationId() {
return applicationId;
}
get testModeOriginURL() {
return originURL;
}
get error() {
return error2;
}
whenInitialized(c15000_0) {
this.addConditionalChangeListener(() => {
if (c3524_11) {
setImmediate(c15000_0);
return false;
}
});
}
}
const testModeStore = new TestModeStore(Dispatcher, {
DEVELOPER_TEST_MODE_AUTHORIZATION_START: function handleDeveloperTestModeAuthorizationStart(a0) {
c3524_10.add(a0.applicationId);
error2 = null;
},
DEVELOPER_TEST_MODE_AUTHORIZATION_SUCCESS: function handleDeveloperTestModeAuthorizationSuccess({ applicationId: applicationId2, originURL: originURL2 }) {
applicationId = applicationId2;
originURL = originURL2;
c3524_10.delete(applicationId2);
error2 = null;
c3524_9.applicationId = applicationId2;
c3524_9.originURL = originURL2;
},
DEVELOPER_TEST_MODE_AUTHORIZATION_FAIL: function handleDeveloperTestModeAuthorizationFail({ applicationId: applicationId2, error: error3 }) {
c3524_10.delete(applicationId2);
error2 = error3;
},
OVERLAY_INITIALIZE: function handleOverlayInitialize(a0) {
applicationId = a0.testModeApplicationId;
},
DEVELOPER_TEST_MODE_RESET_ERROR: function resetError() {
error2 = null;
},
LOGOUT: reset,
DEVELOPER_TEST_MODE_RESET: reset
});
export default testModeStore;