playsout-web-sdk 1.0.0 → 1.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/index.global.js +15 -15
- package/index.iife.js +15 -15
- package/package.json +1 -1
- package/web-components/imageCache.d.ts.map +1 -1
- package/web-components/index.cjs +15 -15
- package/web-components/index.js +15 -15
package/index.global.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
"use strict";var Playsout=(()=>{var F=Object.defineProperty;var Re=Object.getOwnPropertyDescriptor;var Me=Object.getOwnPropertyNames;var _e=Object.prototype.hasOwnProperty;var ze=(o,t)=>{for(var e in t)F(o,e,{get:t[e],enumerable:!0})},Ge=(o,t,e,a)=>{if(t&&typeof t=="object"||typeof t=="function")for(let i of Me(t))!_e.call(o,i)&&i!==e&&F(o,i,{get:()=>t[i],enumerable:!(a=Re(t,i))||a.enumerable});return o};var De=o=>Ge(F({},"__esModule",{value:!0}),o);var At={};ze(At,{Login:()=>gt,PlaysoutSDKClass:()=>It,destroy:()=>dt,getCategories:()=>vt,getGames:()=>yt,getLocale:()=>bt,getToken:()=>mt,getUser:()=>pt,getUserInfo:()=>ht,init:()=>st,instance:()=>Tt,isInitialized:()=>xt,isLoggedIn:()=>St,logout:()=>ut,mount:()=>lt,off:()=>kt,on:()=>wt,setLocale:()=>ft,unmount:()=>ct});var x=class extends Error{constructor(e,a,i){super(a);this.code=e;this.details=i;this.name="SDKError"}toJSON(){return{name:this.name,code:this.code,message:this.message,details:this.details}}},Ne={NOT_INITIALIZED:"SDK not initialized. Please call PlaysoutSDK.init() first.",ALREADY_INITIALIZED:"SDK already initialized. Please do not call init() more than once.",NOT_LOGGED_IN:"User not logged in. Please log in first.",TOKEN_EXPIRED:"Login token has expired. Please log in again.",INVALID_TOKEN:"Invalid login token. Please log in again.",NETWORK_ERROR:"Network connection failed. Please check your network.",TIMEOUT:"Request timed out. Please try again later.",SERVER_ERROR:"Server is busy. Please try again later.",API_ERROR:"API request failed.",INVALID_PARAMS:"Invalid parameter(s).",MISSING_PARAMS:"Missing required parameter(s).",FEATURE_NOT_SUPPORTED:"This feature is not supported in the current environment.",UNKNOWN:"An unknown error occurred.",PAYMENT_FAILED:"Payment failed.",SHARE_FAILED:"Share failed."};function g(o,t){return new x(o,Ne[o],t)}var z="playsout_",G=class{constructor(t){this.storage=t}get(t){try{return this.storage.getItem(z+t)}catch{return null}}set(t,e){try{this.storage.setItem(z+t,e)}catch(a){console.warn("[PlaysoutSDK] Storage set failed:",a)}}remove(t){try{this.storage.removeItem(z+t)}catch{}}clear(){try{let t=[];for(let e=0;e<this.storage.length;e++){let a=this.storage.key(e);a&&a.startsWith(z)&&t.push(a)}t.forEach(e=>this.storage.removeItem(e))}catch{}}},q=class{constructor(){this.store=new Map}get(t){return this.store.get(t)??null}set(t,e){this.store.set(t,e)}remove(t){this.store.delete(t)}clear(){this.store.clear()}};function oe(o="localStorage"){return typeof window>"u"||o==="memory"?new q:o==="sessionStorage"?new G(sessionStorage):new G(localStorage)}var S=oe(),h={get:o=>S.get(o),set:(o,t)=>{S.set(o,t)},remove:o=>{S.remove(o)},clear:()=>{S.clear()},getJSON:o=>{let t=S.get(o);if(!t)return null;try{return JSON.parse(t)}catch{return null}},setJSON:(o,t)=>{S.set(o,JSON.stringify(t))},configure(o){S=oe(o)}},p={TOKEN_DATA:"token_data",USER:"user",LOCALE:"locale",CONFIG:"config"};var W=class{constructor(){this.events=new Map}on(t,e){return this.events.has(t)||this.events.set(t,new Set),this.events.get(t).add(e),()=>{this.off(t,e)}}once(t,e){let a=i=>{e(i),this.off(t,a)};return this.on(t,a)}off(t,e){this.events.get(t)?.delete(e),this.events.get(t)?.size===0&&this.events.delete(t)}emit(t,e){this.events.get(t)?.forEach(a=>{try{a(e)}catch(i){console.error(`[PlaysoutSDK] Event handler error for "${t}":`,i)}})}listenerCount(t){return this.events.get(t)?.size??0}clear(){this.events.clear()}},I=new W,y={on:(o,t)=>I.on(o,t),once:(o,t)=>I.once(o,t),off:(o,t)=>{I.off(o,t)},clear:()=>{I.clear()},emit:(o,t)=>{I.emit(o,t)}};var Oe="https://games.playsout.com/resources/icon/image";function s(o){if(!o||/^(data:|https?:|blob:)/i.test(o))return o;let t=o.replace(/^\.\//,"");return`${Oe}/${t}`}var Ue=o=>{if(!o)return o;try{let t=new URL(o);if(t.hostname==="games.playsout.com"){let e=t.pathname,a=e.endsWith("/"),i=/\.[a-z0-9]+$/i.test(e);!a&&!i&&(t.pathname=`${e}/`)}return t.toString()}catch{return o}},Be=o=>o.map(t=>{if(!t.externalUrl)return t;let e=Ue(t.externalUrl);return e===t.externalUrl?t:{...t,externalUrl:e}}),je=[{id:"BlockCrushFun",title:"Block Crush Fun",category:"Puzzle",image:s("./games/BlockCrushFun.png"),isNew:!0,isHot:!0,enable:!0,orientation:"portrait",externalUrl:"https://games.playsout.com/BlockCrushFun"},{id:"DogeSurvivors",title:"Doge Survivors",category:"Doge OS",image:s("./games/DogeSurvivors.jpg"),isNew:!0,enable:!0,orientation:"portrait",externalUrl:"https://games.playsout.com/Doge/DogeSurvivors/"},{id:"DogeMaze",title:"Doge Maze",category:"Doge OS",image:s("./games/DogeMaze.jpg"),isNew:!0,enable:!0,orientation:"portrait",externalUrl:"https://games.playsout.com/Doge/DogeMaze/"},{id:"DogeMart",title:"Doge Mart",category:"Doge OS",image:s("./games/DogeMart.jpg"),isNew:!0,enable:!0,orientation:"portrait",externalUrl:"https://games.playsout.com/Doge/DogeMart/"},{id:"KittyEscape",title:"Kitty Escape",category:"Puzzle",image:s("./games/KittyEscape.jpg"),isNew:!0,isHot:!0,enable:!0,orientation:"portrait",externalUrl:"https://games.playsout.com/KittyEscape/"},{id:"ProjectGarden",title:"Project: Garden",category:"Adventure",image:s("./games/SimulatedAdventures.jpg"),isNew:!0,isHot:!1,enable:!0,orientation:"portrait",externalUrl:"https://games.playsout.com/simulated/"},{id:"ProjectIDLE",title:"Project: IDLE",category:"Simulation",image:s("./games/ProjectIDLE.jpg"),isNew:!0,isHot:!0,enable:!0,orientation:"portrait",externalUrl:"https://games.playsout.com/idle/"},{id:"CulinaryStarWeb",title:"Culinary Star",category:"Casual",image:s("./games/CulinaryStar.webp"),description:"Cooking game",isNew:!1,isHot:!0,enable:!0,orientation:"portrait",externalUrl:"https://games.playsout.com/CulinaryStar/"},{id:"PickaxeQuest",title:"Pickaxe Quest",category:"Adventure",image:s("./games/PickaxeQuest.jpg"),description:"Mining and adventure game",isNew:!0,isHot:!1,enable:!0,orientation:"portrait",externalUrl:"https://games.playsout.com/PickaxeQuest/",apiGameId:73},{id:"MonsterSurvivors",title:"Monster Survivors",category:"Adventure",image:s("./games/MonsterSurvivors.jpg"),isNew:!1,isHot:!0,enable:!0,orientation:"portrait",externalUrl:"https://games.playsout.com/MonsterSurvivors/"},{id:"IdleTowerDefense",title:"Idle Tower Defense",category:"RPG",image:s("./games/IdleTowerDefense.jpg"),isNew:!0,isHot:!1,enable:!0,orientation:"portrait",externalUrl:"https://games.playsout.com/IdleTowerDefense/"},{id:"MushroomWarriors",title:"Mushroom Warriors",category:"RPG",image:s("./games/MushroomWarriors.jpg"),isNew:!0,isHot:!1,enable:!0,orientation:"portrait",externalUrl:"https://games.playsout.com/MushroomWarriors/"},{id:"FollowThePath",title:"Follow The Path",category:"Arcade",image:s("./games/FollowThePath.jpg"),isNew:!1,isHot:!0,enable:!0,orientation:"portrait",externalUrl:"https://games.playsout.com/FollowThePath/"},{id:"ColorRun",title:"Color Run",category:"Arcade",image:s("./games/ColorRun.jpg"),isNew:!1,isHot:!1,enable:!0,orientation:"portrait",externalUrl:"https://games.playsout.com/ColorRun/"},{id:"StupidArrow",title:"Stupid Arrow",category:"Arcade",image:s("./games/StupidArrow.jpg"),isNew:!1,isHot:!0,enable:!0,orientation:"portrait",externalUrl:"https://games.playsout.com/StupidArrow/"},{id:"ZigZag",title:"Zig Zag",category:"Arcade",image:s("./games/ZigZag.jpg"),isNew:!1,isHot:!0,enable:!0,orientation:"portrait",externalUrl:"https://games.playsout.com/ZigZag/"},{id:"SpikesEverywhere",title:"Spikes Everywhere",category:"Arcade",image:s("./games/SpikesEverywhere.jpg"),isNew:!0,isHot:!1,enable:!0,orientation:"portrait",externalUrl:"https://games.playsout.com/SpikesEverywhere/"},{id:"ArrowRacer",title:"Arrow Racer",category:"Arcade",image:s("./games/ArrowRacer.jpg"),isNew:!0,isHot:!1,enable:!0,orientation:"portrait",externalUrl:"https://games.playsout.com/ArrowRacer/"},{id:"CircleLeap",title:"Circle Leap",category:"Arcade",image:s("./games/CircleLeap.jpg"),isNew:!0,isHot:!1,enable:!0,orientation:"portrait",externalUrl:"https://games.playsout.com/CircleLeap/"},{id:"ColorMatcher",title:"Color Matcher",category:"Arcade",image:s("./games/ColorMatcher.jpg"),isNew:!1,isHot:!1,enable:!0,orientation:"portrait",externalUrl:"https://games.playsout.com/ColorMatcher/"},{id:"EndlessMaze",title:"Endless Maze",category:"Arcade",image:s("./games/EndlessMaze.jpg"),isNew:!0,isHot:!1,enable:!0,orientation:"portrait",externalUrl:"https://games.playsout.com/EndlessMaze/"},{id:"SpinningAround",title:"Spinning Around",category:"Arcade",image:s("./games/SpinningAround.jpg"),isNew:!0,isHot:!1,enable:!0,orientation:"portrait",externalUrl:"https://games.playsout.com/SpinningAround/"},{id:"BoomBallz",title:"Boom Ballz",category:"Arcade",image:s("./games/BoomBallz.jpg"),isNew:!1,isHot:!0,enable:!0,orientation:"portrait",externalUrl:"https://games.playsout.com/BoomBallz/"},{id:"CubeHead",title:"Cube Head",category:"Arcade",image:s("./games/CubeHead.jpg"),isNew:!1,isHot:!0,enable:!0,orientation:"portrait",externalUrl:"https://games.playsout.com/CubeHead/"},{id:"CapybaraLink",title:"Capybara Link",category:"Puzzle",image:s("./games/CapybaraLink.jpg"),isNew:!0,isHot:!1,enable:!0,orientation:"portrait",externalUrl:"https://games.playsout.com/CapybaraLink/"},{id:"Snake2048",title:"Snake 2048",category:"Puzzle",image:s("./games/Snake2048.jpg"),isNew:!0,isHot:!0,enable:!0,orientation:"portrait",externalUrl:"https://games.playsout.com/Snake2048/"},{id:"FishTankFury",title:"Fish Tank Fury",category:"Puzzle",image:s("./games/FishTankFury.jpg"),isNew:!0,isHot:!1,enable:!0,orientation:"portrait",externalUrl:"https://games.playsout.com/FishTankFury/"},{id:"ConnectBalls",title:"Connect Balls",category:"Arcade",image:s("./games/ConnectBalls.jpg"),isNew:!0,isHot:!1,enable:!0,orientation:"portrait",externalUrl:"https://games.playsout.com/ConnectBalls/"},{id:"CircularBreaker",title:"Circular Breaker",category:"Arcade",image:s("./games/CircularBreaker.jpg"),isNew:!0,isHot:!1,enable:!0,orientation:"portrait",externalUrl:"https://games.playsout.com/CircularBreaker/"},{id:"OneDoor",title:"One Door",category:"Arcade",image:s("./games/OneDoor.jpg"),isNew:!0,isHot:!1,enable:!0,orientation:"portrait",externalUrl:"https://games.playsout.com/OneDoor/"},{id:"CatchtheFruits",title:"Catch the Fruits",category:"Casual",image:s("./games/CatchtheFruits.jpg"),isNew:!0,isHot:!1,enable:!0,orientation:"portrait",externalUrl:"https://games.playsout.com/CatchtheFruits/"},{id:"Falling2048",title:"Falling 2048",category:"Casual",image:s("./games/Falling2048.jpg"),isNew:!0,isHot:!1,enable:!0,orientation:"portrait",externalUrl:"https://games.playsout.com/Falling2048/"}],ie=Be(je),w=()=>ie.filter(o=>o.enable),_t={Adventure:w().filter(o=>o.category==="Adventure"),Moba:w().filter(o=>o.category==="Moba")};var re=o=>ie.find(t=>t.id===o);var ne=()=>Array.from(new Set(w().map(o=>o.category)));var Z="https://api.playsout.com",Q=3e4,Ke=new Set([10010,10011,10012,10013]);function $e(o){let t=String(o?.platform||"").toLowerCase();if(t==="tiktok"){let e=o.authorizationCode;if(typeof e!="string"||!e.trim())throw g("MISSING_PARAMS","authorizationCode is required for TikTok login");return{platform:t,authorizationCode:e}}if(t==="grab"||t==="eros"){let e=o;if(typeof e.platformUserId!="string"||!e.platformUserId.trim())throw g("MISSING_PARAMS","platformUserId is required for Grab/Eros login");if(typeof e.platformToken!="string"||!e.platformToken.trim())throw g("MISSING_PARAMS","platformToken is required for Grab/Eros login");return{platform:t,platformUserId:e.platformUserId,platformToken:e.platformToken,username:typeof e.username=="string"?e.username:void 0,inviteCode:typeof e.inviteCode=="string"?e.inviteCode:void 0}}throw g("INVALID_PARAMS","Unsupported platform. Expected grab, eros, or tiktok")}var A=null,Y=null,E=null;function ce(o){Y=o}function de(o){E=o}async function se(o,t={},e,a=!1){let i=e?.apiBaseUrl||Z,r=o.startsWith("http")?o:`${i}${o}`,n=new AbortController,d=setTimeout(()=>n.abort(),Q);try{let m=h.getJSON(p.TOKEN_DATA),b={"Content-Type":"application/json",...t.headers};m?.accessToken&&!b.token&&(b.token=m.accessToken);let f=await fetch(r,{...t,signal:n.signal,headers:b});if(clearTimeout(d),!f.ok){if(f.status===401&&!a)return await le(o,t,e);throw g(f.status>=500?"SERVER_ERROR":"API_ERROR",`HTTP ${f.status}: ${f.statusText}`)}let u=await f.json();if(u.code!==void 0&&Ke.has(u.code)&&!a){if(o.includes("/platform/refreshToken"))throw g("TOKEN_EXPIRED",u.msg||"Token expired");return await le(o,t,e)}if(u.code!==0&&u.code!==1e4)throw g("API_ERROR",u.msg||"API request failed");return u.data}catch(m){throw clearTimeout(d),m instanceof x?m:m instanceof Error?m.name==="AbortError"?g("TIMEOUT"):g("NETWORK_ERROR",m.message):g("UNKNOWN")}}async function le(o,t,e){await ge(e);let a=e?.apiBaseUrl||Z,i=o.startsWith("http")?o:`${a}${o}`,r=new AbortController,n=setTimeout(()=>r.abort(),Q);try{let d=h.getJSON(p.TOKEN_DATA),m={"Content-Type":"application/json",...t.headers};d?.accessToken&&(m.token=d.accessToken);let b=await fetch(i,{...t,signal:r.signal,headers:m});if(clearTimeout(n),!b.ok)throw g(b.status>=500?"SERVER_ERROR":"API_ERROR",`HTTP ${b.status}: ${b.statusText}`);let f=await b.json();if(f.code!==0&&f.code!==1e4)throw g("API_ERROR",f.msg||"API request failed");return f.data}catch(d){throw clearTimeout(n),d instanceof x?d:d instanceof Error&&d.name==="AbortError"?g("TIMEOUT"):g("NETWORK_ERROR",d?.message||"Request failed")}}async function ge(o){return A||(A=(async()=>{let t=h.getJSON(p.TOKEN_DATA);if(!t?.refreshToken)throw g("NOT_LOGGED_IN","No refresh token available");let e=o?.apiBaseUrl||Z,a=new AbortController,i=setTimeout(()=>a.abort(),Q);try{let r=await fetch(`${e}/platform/refreshToken`,{method:"POST",signal:a.signal,headers:{"Content-Type":"application/json"},body:JSON.stringify({refreshToken:t.refreshToken})});if(clearTimeout(i),!r.ok)throw g("TOKEN_EXPIRED","Failed to refresh token");let n=await r.json();if(n.code!==0&&n.code!==1e4||!n.data)throw g("TOKEN_EXPIRED",n.msg||"Failed to refresh token");let d=n.data;if(h.setJSON(p.TOKEN_DATA,d),Y)try{Y(d)}catch{}return d}catch(r){if(clearTimeout(i),r instanceof x){if(E)try{E()}catch{}throw r}if(r instanceof Error&&r.name==="AbortError")throw g("TIMEOUT");if(E)try{E()}catch{}throw g("TOKEN_EXPIRED","Refresh token failed")}finally{A=null}})(),A)}var J=class{constructor(){this.config=null}configure(t){this.config=t}async refreshToken(){return await ge(this.config||void 0)}async getGames(t){let e=w();if(t?.category&&(e=e.filter(a=>a.category===t.category)),t?.search){let a=t.search.toLowerCase();e=e.filter(i=>i.title.toLowerCase().includes(a)||i.category.toLowerCase().includes(a)||i.description&&i.description.toLowerCase().includes(a))}if(t?.sortBy)switch(t.sortBy){case"newest":e=e.filter(a=>a.isNew).concat(e.filter(a=>!a.isNew));break;case"rating":e=e.filter(a=>a.isHot).concat(e.filter(a=>!a.isHot));break}if(t?.page&&t?.pageSize){let a=(t.page-1)*t.pageSize;e=e.slice(a,a+t.pageSize)}return e}async getCategories(){let t=w(),e=new Map;return t.forEach(a=>{let i=e.get(a.category)||0;e.set(a.category,i+1)}),Array.from(e.entries()).map(([a,i],r)=>({id:`category_${r}`,name:a,count:i}))}async getGameById(t){return re(t)}async getCategoryNames(){return ne()}async loginOnly(t){let e=$e(t);return await se("/platform/login",{method:"POST",body:JSON.stringify(e)},this.config??void 0)}async Login(t){let e=await this.loginOnly(t),a;try{a=await this.getUserInfo()}catch{}return{tokenData:e,user:a}}async getUserInfo(){return await se("/platform/user",{method:"GET"},this.config??void 0)}async getUser(){return h.getJSON(p.USER)}async validateToken(t){return!!t}},V=null;function D(){return V||(V=new J),V}var qe="https://api.playsout.com",ue="zh",C=class o{constructor(){this.config=null;this._isInitialized=!1;this._user=null;this._token=null;this._locale=ue;this._widget=null}static getInstance(){return o.instance||(o.instance=new o),o.instance}async init(t={}){if(this._isInitialized)throw g("ALREADY_INITIALIZED");this.config={apiBaseUrl:t.apiBaseUrl||qe,debug:t.debug||!1,storage:t.storage||"localStorage",locale:t.locale||ue,appId:t.appId||""},h.configure(this.config.storage),ce(i=>{this._token=i.accessToken}),de(()=>{this._user=null,this._token=null,h.remove(p.TOKEN_DATA),h.remove(p.USER),y.emit("authExpired"),this.config?.debug&&console.warn("[PlaysoutSDK] Auth expired, logged out")});let e=h.getJSON(p.TOKEN_DATA);this._user=h.getJSON(p.USER),this._locale=h.get(p.LOCALE)||this.config.locale;let a=Math.floor(Date.now()/1e3);if(e&&e.refreshExpiresAt>a&&(this._token=e.accessToken),this._isInitialized=!0,this.config.debug&&(console.log("[PlaysoutSDK] Initialized with config:",this.config),console.log("[PlaysoutSDK] Restored token:",this._token?this._token.substring(0,20)+"...":"(none)")),y.emit("initialized"),e){let i=Math.floor(Date.now()/1e3);if(e.expiresAt-i<=300)try{let r=D();r.configure(this.config),await r.refreshToken();let n=h.getJSON(p.TOKEN_DATA);n&&(this._token=n.accessToken),this.config.debug&&console.log("[PlaysoutSDK] Token proactively refreshed at init")}catch(r){this.config.debug&&console.warn("[PlaysoutSDK] Proactive refresh failed, will retry on next request:",r)}}}destroy(){this.config=null,this._isInitialized=!1,this._user=null,this._token=null,h.clear(),y.clear()}get isInitialized(){return this._isInitialized}get isLoggedIn(){return!!this._token}get user(){return this._user}get token(){return this._token}get locale(){return this._locale}get sdkConfig(){return this.config}async Login(t){this.ensureInitialized(),this.config?.debug&&console.log("[PlaysoutSDK] Login with params:",t);let e=D();e.configure(this.config);let a=await e.loginOnly(t);h.setJSON(p.TOKEN_DATA,a),this.config?.debug&&console.log("[PlaysoutSDK] Token saved, expires at:",new Date(a.expiresAt*1e3).toISOString());let i;try{i=await e.getUserInfo()}catch(r){this.config?.debug&&console.log("[PlaysoutSDK] getUserInfo failed, login still success:",r)}return this._token=a.accessToken,i&&(this._user={userId:String(i.id),username:i.username},h.setJSON(p.USER,this._user)),this.config?.debug&&console.log("[PlaysoutSDK] Login success, user:",i),y.emit("login",{user:this._user,token:this._token}),{tokenData:a,user:i}}async getUserInfo(){if(this.ensureInitialized(),!this._token)throw g("NOT_LOGGED_IN","Please login first");let t=D();t.configure(this.config);let e=await t.getUserInfo();return this.config?.debug&&console.log("[PlaysoutSDK] getUserInfo result:",e),e&&(this._user={userId:String(e.id),username:e.username},h.setJSON(p.USER,this._user)),e}logout(){this._user=null,this._token=null,h.remove(p.TOKEN_DATA),h.remove(p.USER),y.emit("logout")}getToken(){return this.ensureInitialized(),this._token}getUser(){return this.ensureInitialized(),this._user}setLocale(t){if(this.ensureInitialized(),!["zh","en","ja","ko","vi","th","id","ms"].includes(t))throw g("INVALID_PARAMS",`Unsupported locale: ${t}`);this._locale=t,h.set(p.LOCALE,t),this.config?.debug&&console.log("[PlaysoutSDK] Locale changed to:",t);let e=this._widget||document.querySelector("playsout-widget");e&&e.getAttribute("locale")!==t&&e.setAttribute("locale",t),y.emit("localeChange",t)}getLocale(){return this.ensureInitialized(),this._locale}async getGames(t){this.ensureInitialized();let e=w();if(t?.category&&(e=e.filter(a=>a.category===t.category)),t?.search){let a=t.search.toLowerCase();e=e.filter(i=>i.title.toLowerCase().includes(a)||i.category.toLowerCase().includes(a)||i.description&&i.description.toLowerCase().includes(a))}if(t?.sortBy)switch(t.sortBy){case"newest":e=e.filter(a=>a.isNew).concat(e.filter(a=>!a.isNew));break;case"rating":e=e.filter(a=>a.isHot).concat(e.filter(a=>!a.isHot));break}if(t?.page&&t?.pageSize){let a=(t.page-1)*t.pageSize;e=e.slice(a,a+t.pageSize)}return e}async getCategories(){this.ensureInitialized();let t=w(),e=new Map;return t.forEach(a=>{let i=e.get(a.category)||0;e.set(a.category,i+1)}),Array.from(e.entries()).map(([a,i],r)=>({id:`category_${r}`,name:a,count:i}))}async getGameById(t){return this.ensureInitialized(),w().find(e=>e.id===t)}mount(t,e){if(this.ensureInitialized(),typeof document>"u")throw g("FEATURE_NOT_SUPPORTED","mount requires DOM environment");let a=document.querySelector(t);if(!a)throw g("INVALID_PARAMS",`Container not found: ${t}`);let i=document.createElement("playsout-widget");this.config?.appId&&i.setAttribute("app-id",this.config.appId),i.setAttribute("locale",e?.locale||this._locale),i.setAttribute("theme",e?.theme||"dark"),e?.detailMode&&i.setAttribute("detail-mode",e.detailMode),this._widget=i,e?.onGameClick&&i.addEventListener("game-click",r=>{let n=r;e.onGameClick(n.detail)}),e?.onLoginRequired&&i.addEventListener("login-required",e.onLoginRequired),e?.onLocaleChange&&i.addEventListener("locale-change",r=>{let n=r;e.onLocaleChange(n.detail)}),a.appendChild(i),this.config?.debug&&console.log("[PlaysoutSDK] Widget mounted to:",t)}unmount(){let t=document.querySelector("playsout-widget");t&&t.remove(),this._widget=null}on(t,e){return this.ensureInitialized(),y.on(t,e)}off(t,e){this.ensureInitialized(),y.off(t,e)}ensureInitialized(){if(!this._isInitialized)throw g("NOT_INITIALIZED")}},l=C.getInstance();typeof window<"u"&&(window.__playsout_sdk_instance=l);var N=Object.freeze({init:l.init.bind(l),mount:l.mount.bind(l),unmount:l.unmount.bind(l),destroy:l.destroy.bind(l),Login:l.Login.bind(l),logout:l.logout.bind(l),getToken:l.getToken.bind(l),getUserInfo:l.getUserInfo.bind(l),getUser:l.getUser.bind(l),setLocale:l.setLocale.bind(l),getLocale:l.getLocale.bind(l),getGames:l.getGames.bind(l),getCategories:l.getCategories.bind(l),on:l.on.bind(l),off:l.off.bind(l),get isInitialized(){return l.isInitialized},get isLoggedIn(){return l.isLoggedIn},instance:l,PlaysoutSDKClass:C});var We="games.playsout.com";var X="__playsout_img_cache_v1",H=`${X}_blob_`,U=4*1024*1024-1024*1024;function c(...o){}var T=new Map,O=new Map,Ve=50,L=new Map,B=new Map,v=0;function ee(){try{let o=localStorage.getItem(X);if(!o)return c("loadCacheIndex: \u65E0\u7F13\u5B58\u7D22\u5F15"),v=0,new Map;let t=JSON.parse(o);c("loadCacheIndex: \u52A0\u8F7D\u4E86",t.length,"\u6761\u8BB0\u5F55"),v=0;for(let e of t){let a=`${H}${btoa(e.url).replace(/[\/+=]/g,"_")}`;localStorage.getItem(a)&&(v+=e.size)}return c("loadCacheIndex: \u5F53\u524D blob \u603B\u91CF",v,"bytes"),new Map(t.map(e=>[e.url,e]))}catch{return c("loadCacheIndex: \u89E3\u6790\u5931\u8D25"),v=0,new Map}}function j(o){try{let t=Array.from(o.values());t.length>200&&(t.sort((e,a)=>a.timestamp-e.timestamp),t.length=200),localStorage.setItem(X,JSON.stringify(t)),c("saveCacheIndex: \u4FDD\u5B58\u4E86",t.length,"\u6761\u8BB0\u5F55")}catch(t){c("saveCacheIndex: \u4FDD\u5B58\u5931\u8D25",t)}}function Ye(o,t){if(!(v+t<=U))try{let e=ee(),a=Array.from(e.values()).map(i=>({record:i,score:he(i.url)??1/0})).filter(i=>i.score>o).sort((i,r)=>r.score-i.score);for(let{record:i}of a){if(v+t<=U)break;let r=`${H}${btoa(i.url).replace(/[\/+=]/g,"_")}`;localStorage.removeItem(r),e.delete(i.url),v-=i.size,c("evictLowerPriorityEntries: \u91CA\u653E\u4F4E\u4F18\u5148\u7EA7\u7F13\u5B58",i.url,"\u8282\u7701",i.size,"bytes")}j(e)}catch(e){c("evictLowerPriorityEntries: \u5931\u8D25",e)}}function me(o,t){if(T.size>=Ve){let e=null,a=1/0;for(let[i,r]of T)r.lastAccess<a&&(a=r.lastAccess,e=i);if(e){let i=T.get(e);URL.revokeObjectURL(URL.createObjectURL(i.blob)),T.delete(e),c("addToMemoryCache: LRU\u6DD8\u6C70",e)}}T.set(o,{blob:t,lastAccess:Date.now()}),c("addToMemoryCache: \u6DFB\u52A0\u5230\u5185\u5B58\u7F13\u5B58",o,"\u5927\u5C0F:",t.size,"bytes")}async function Je(o){if(O.has(o)){c("cacheImage:",o,"\u8BE5\u8BF7\u6C42\u5DF2\u5728\u8FDB\u884C\u4E2D\uFF0C\u7B49\u5F85\u5B8C\u6210"),await O.get(o);return}c("cacheImage: \u5F00\u59CB\u4E0B\u8F7D",o);let t=(async()=>{try{let e=await fetch(o);if(!e.ok){c("cacheImage:",o,"\u54CD\u5E94\u5931\u8D25",e.status);return}let a=await e.blob(),i=e.headers.get("ETag")||"";c("cacheImage:",o,"\u4E0B\u8F7D\u6210\u529F\uFF0C\u5927\u5C0F:",a.size,"ETag:",i),me(o,a);let r=he(o);if(r!==void 0)if(Ye(r,a.size),v+a.size<=U)try{let n=ee();n.set(o,{url:o,timestamp:Date.now(),etag:i,size:a.size}),j(n);let d=JSON.stringify({type:a.type,data:Array.from(new Uint8Array(await a.arrayBuffer()))}),m=`${H}${btoa(o).replace(/[\/+=]/g,"_")}`;localStorage.setItem(m,d),v+=a.size,c("cacheImage:",o,"\u5DF2\u4FDD\u5B58\u5230localStorage\uFF08\u5360\u7528",a.size,"bytes\uFF0C\u9884\u7B97\u5269\u4F59",U-v,"\uFF09")}catch(n){n.name==="QuotaExceededError"?c("cacheImage: localStorage \u914D\u989D\u5DF2\u6EE1\uFF0C\u505C\u6B62\u5199\u5165"):c("cacheImage:",o,"localStorage\u4FDD\u5B58\u5931\u8D25",n)}else c("cacheImage:",o,"\u817E\u51FA\u7A7A\u95F4\u540E\u4ECD\u8D85\u8FC7\u9884\u7B97\uFF0C\u8DF3\u8FC7");else c("cacheImage:",o,"\u975E\u4F18\u5148\u7EA7URL\uFF0C\u4E0D\u5199\u5165localStorage")}catch(e){c("cacheImage:",o,"\u4E0B\u8F7D\u5931\u8D25",e)}finally{O.delete(o)}})();O.set(o,t)}function te(o){try{if(new URL(o).hostname===We)return c("isCacheableImage:",o,"\u662FCDN\u56FE\u7247"),!0}catch{}return o.startsWith("/games/")||o.startsWith("./games/")||o.startsWith("/home-")||o.startsWith("./home-")||o.startsWith("/logo")||o.startsWith("./logo")?(c("isCacheableImage:",o,"\u662F\u672C\u5730\u56FE\u7247"),!0):(c("isCacheableImage:",o,"\u4E0D\u662F\u53EF\u7F13\u5B58\u7684\u56FE\u7247"),!1)}function he(o){return B.has(o)?B.get(o):L.get(o)}function pe(o){let t=-1e3;for(let e of o)te(e)&&B.set(e,t++);c("setCriticalAssets: \u5171",B.size,"\u4E2A\u5173\u952E\u8D44\u6E90")}function fe(o,t=!1){t||L.clear();let e=0;if(t){for(let i of L.values())i>e&&(e=i);e+=1}let a=e;for(let i of o)te(i)&&L.set(i,a++);c("setPriorityCache: \u5F53\u524D\u5171",L.size,"\u4E2A\u4F18\u5148\u7F13\u5B58URL")}function be(o){if(c("resolveWithCache:",o),!te(o))return c("resolveWithCache:",o,"\u4E0D\u662FCDN\u56FE\u7247\uFF0C\u539F\u6837\u8FD4\u56DE"),o;if(T.has(o)){let e=T.get(o);e.lastAccess=Date.now();try{let a=URL.createObjectURL(e.blob);return c("resolveWithCache:",o,"\u547D\u4E2D\u5185\u5B58\u7F13\u5B58\uFF0C\u8FD4\u56DEblob URL"),a}catch{c("resolveWithCache:",o,"\u521B\u5EFAblob URL\u5931\u8D25")}}let t=ee();if(t.has(o)){let e=`${H}${btoa(o).replace(/[\/+=]/g,"_")}`,a=localStorage.getItem(e);if(a)try{let{type:i,data:r}=JSON.parse(a),n=new Blob([new Uint8Array(r)],{type:i});me(o,n);let d=URL.createObjectURL(n);return c("resolveWithCache:",o,"\u547D\u4E2DlocalStorage\u7F13\u5B58\uFF0C\u540C\u6B65\u8FD4\u56DEblob URL"),d}catch(i){c("resolveWithCache:",o,"localStorage blob\u89E3\u6790\u5931\u8D25\uFF0C\u6E05\u9664\u7F13\u5B58",i),t.delete(o),j(t),localStorage.removeItem(e)}else c("resolveWithCache:",o,"localStorage blob\u4E0D\u5B58\u5728\uFF0C\u6E05\u9664\u7D22\u5F15"),t.delete(o),j(t)}return c("resolveWithCache:",o,"\u5B8C\u5168\u6CA1\u6709\u7F13\u5B58\uFF0C\u540E\u53F0\u4E0B\u8F7D"),Je(o),o}var ye={app:{title:"Playsout Mini Games",description:"Play quick games without login."},home:{loggedIn:"Logged in",logIn:"Log in",games:"Games",bannerAlt:"Playsout Games",searchPlaceholder:"Search by title or category",noGames:"No games found"},profile:{title:"Profile",settings:"Settings",language:"Language",recentGames:"Recently Played Games",noGames:"No games played yet",guest:"Guest",languages:{en:"English",zh:"\u4E2D\u6587",ja:"\u65E5\u672C\u8A9E",ko:"\uD55C\uAD6D\uC5B4",th:"\u0E44\u0E17\u0E22",vi:"Ti\u1EBFng Vi\u1EC7t",id:"Bahasa Indonesia",ms:"Bahasa Melayu",es:"Espa\xF1ol"}},categories:{Adventure:"Adventure",Simulation:"Simulation",Casual:"Casual",Arcade:"Arcade",Moba:"Moba",Puzzle:"Puzzle"},auth:{loginSuccess:"Login successful!",loginTitle:"Playsout Login",welcome:"Welcome to the Playsout game platform",prompt:"Log in to start playing",mustLogin:"You must log in to play",authorizeHint:"Click the button below to authorize your login",authorizing:"Authorizing...",authorize:"Authorize login",terms:"By authorizing, you agree to our Terms of Service",signingIn:"Signing In",signMessage:"Please sign the message in your wallet"},game:{loading:"Loading",notFound:"Game not found",backHome:"Back to home",pageTitleSuffix:"Game Platform",header:{back:"Back",shareAria:"Share game",toggleMenuAria:"Toggle menu",fallbackTitle:"Game"}},menu:{favorite:"Favorite",favorited:"Favorited",profile:"Profile",login:"Login",refresh:"Refresh",loggedIn:"Logged in"},share:{title:"Share Game",closeLabel:"Close",retry:"Retry",loading:"Loading...",imageAlt:"Game share image",shareUrlLabel:"Share URL:",copied:"Copied",copy:"Copy",saveShare:"Save & Share",hint:"Image includes a QR code that links to this game",loadError:"Failed to load share image",downloadError:"Failed to download image"},checkin:{successTitle:"You got rewards!",successMessage:"Your rewards have been claimed.",failedTitle:"Check-in failed",canceledTitle:"Check-in canceled",errors:{userRejected:"You canceled the check-in operation",insufficientFunds:"Insufficient funds to pay gas",alreadyCheckedIn:"You already checked in today. Come back tomorrow!",network:"Network error. Please try again later"}},store:{title:"Gem Store",hot:"HOT",buy:"BUY",cancel:"Cancel",unit:"Gems",successTitle:"Payment Successful",successMessage:"You received {amount} gems!"},payment:{title:"Confirm Purchase",insufficientTitle:"Insufficient Balance",insufficientDesc:"Available: {gems} Gems",cancel:"Cancel",confirm:"Confirm",recharge:"Recharge",successTitle:"Payment Successful",successMessage:"{cost} <gem></gem> have been deducted."}};var ve={app:{title:"Playsout \u5C0F\u6E38\u620F",description:"\u65E0\u9700\u767B\u5F55\u5373\u53EF\u7545\u73A9\u5C0F\u6E38\u620F\u3002"},home:{loggedIn:"\u5DF2\u767B\u5F55",logIn:"\u767B\u5F55",games:"\u6E38\u620F",bannerAlt:"Playsout \u6E38\u620F",searchPlaceholder:"\u6309\u6807\u9898\u6216\u7C7B\u522B\u641C\u7D22",noGames:"\u672A\u627E\u5230\u6E38\u620F"},profile:{title:"\u4E2A\u4EBA\u4E2D\u5FC3",settings:"\u8BBE\u7F6E",language:"\u8BED\u8A00",recentGames:"\u6700\u8FD1\u73A9\u8FC7\u7684\u6E38\u620F",noGames:"\u8FD8\u6CA1\u6709\u73A9\u8FC7\u6E38\u620F",guest:"\u6E38\u5BA2",languages:{en:"English",zh:"\u4E2D\u6587",ja:"\u65E5\u672C\u8A9E",ko:"\uD55C\uAD6D\uC5B4",th:"\u0E44\u0E17\u0E22",vi:"Ti\u1EBFng Vi\u1EC7t",id:"Bahasa Indonesia",ms:"Bahasa Melayu",es:"Espa\xF1ol"}},categories:{Adventure:"\u5192\u9669",Simulation:"\u6A21\u62DF",Casual:"\u4F11\u95F2",Arcade:"\u8857\u673A",Moba:"MOBA",Puzzle:"\u76CA\u667A"},auth:{loginSuccess:"\u767B\u5F55\u6210\u529F!",loginTitle:"Playsout \u767B\u5F55",welcome:"\u6B22\u8FCE\u6765\u5230 Playsout \u6E38\u620F\u5E73\u53F0",prompt:"\u767B\u5F55\u5F00\u59CB\u6E38\u620F",mustLogin:"\u60A8\u5FC5\u987B\u767B\u5F55\u624D\u80FD\u73A9\u6E38\u620F",authorizeHint:"\u70B9\u51FB\u4E0B\u65B9\u6309\u94AE\u6388\u6743\u767B\u5F55",authorizing:"\u6388\u6743\u4E2D...",authorize:"\u6388\u6743\u767B\u5F55",terms:"\u6388\u6743\u5373\u8868\u793A\u60A8\u540C\u610F\u6211\u4EEC\u7684\u670D\u52A1\u6761\u6B3E",signingIn:"\u767B\u5F55\u4E2D",signMessage:"\u8BF7\u5728\u94B1\u5305\u4E2D\u7B7E\u540D"},game:{loading:"\u52A0\u8F7D\u4E2D",notFound:"\u627E\u4E0D\u5230\u6E38\u620F",backHome:"\u8FD4\u56DE\u9996\u9875",pageTitleSuffix:"\u6E38\u620F\u5E73\u53F0",header:{back:"\u8FD4\u56DE",shareAria:"\u5206\u4EAB\u6E38\u620F",toggleMenuAria:"\u5207\u6362\u83DC\u5355",fallbackTitle:"\u6E38\u620F"}},menu:{favorite:"\u6536\u85CF",favorited:"\u5DF2\u6536\u85CF",profile:"\u4E2A\u4EBA\u4E2D\u5FC3",login:"\u767B\u5F55",refresh:"\u5237\u65B0",loggedIn:"\u5DF2\u767B\u5F55"},share:{title:"\u5206\u4EAB\u6E38\u620F",closeLabel:"\u5173\u95ED",retry:"\u91CD\u8BD5",loading:"\u52A0\u8F7D\u4E2D...",imageAlt:"\u6E38\u620F\u5206\u4EAB\u56FE\u7247",shareUrlLabel:"\u5206\u4EAB\u94FE\u63A5:",copied:"\u5DF2\u590D\u5236",copy:"\u590D\u5236",saveShare:"\u4FDD\u5B58\u5E76\u5206\u4EAB",hint:"\u56FE\u7247\u5305\u542B\u6B64\u6E38\u620F\u7684\u4E8C\u7EF4\u7801",loadError:"\u52A0\u8F7D\u5206\u4EAB\u56FE\u7247\u5931\u8D25",downloadError:"\u4E0B\u8F7D\u56FE\u7247\u5931\u8D25"},checkin:{successTitle:"\u9886\u53D6\u6210\u529F!",successMessage:"\u60A8\u7684\u5956\u52B1\u5DF2\u9886\u53D6\u3002",failedTitle:"\u7B7E\u5230\u5931\u8D25",canceledTitle:"\u7B7E\u5230\u53D6\u6D88",errors:{userRejected:"\u60A8\u53D6\u6D88\u4E86\u7B7E\u5230\u64CD\u4F5C",insufficientFunds:"\u4F59\u989D\u4E0D\u8DB3\u4EE5\u652F\u4ED8 Gas \u8D39",alreadyCheckedIn:"\u4ECA\u5929\u5DF2\u7ECF\u7B7E\u5230\u8FC7\u4E86\u3002\u660E\u5929\u518D\u6765\u5427!",network:"\u7F51\u7EDC\u9519\u8BEF\uFF0C\u8BF7\u7A0D\u540E\u518D\u8BD5"}},store:{title:"\u5B9D\u77F3\u5546\u5E97",hot:"\u70ED\u95E8",buy:"\u8D2D\u4E70",cancel:"\u53D6\u6D88",unit:"\u5B9D\u77F3",successTitle:"\u652F\u4ED8\u6210\u529F",successMessage:"\u60A8\u83B7\u5F97\u4E86 {amount} \u5B9D\u77F3\uFF01"},payment:{title:"\u786E\u8BA4\u8D2D\u4E70",insufficientTitle:"\u4F59\u989D\u4E0D\u8DB3",insufficientDesc:"\u53EF\u7528\u4F59\u989D: {gems} \u5B9D\u77F3",cancel:"\u53D6\u6D88",confirm:"\u786E\u8BA4",recharge:"\u5145\u503C",successTitle:"\u652F\u4ED8\u6210\u529F",successMessage:"\u5DF2\u6263\u9664 {cost}<gem></gem>\u3002"}};var we={app:{title:"Playsout \u30DF\u30CB\u30B2\u30FC\u30E0",description:"\u30ED\u30B0\u30A4\u30F3\u306A\u3057\u3067\u30B2\u30FC\u30E0\u3092\u30D7\u30EC\u30A4\u3002"},home:{loggedIn:"\u30ED\u30B0\u30A4\u30F3\u6E08\u307F",logIn:"\u30ED\u30B0\u30A4\u30F3",games:"\u30B2\u30FC\u30E0",bannerAlt:"Playsout \u30B2\u30FC\u30E0",searchPlaceholder:"\u30BF\u30A4\u30C8\u30EB\u307E\u305F\u306F\u30AB\u30C6\u30B4\u30EA\u3067\u691C\u7D22",noGames:"\u30B2\u30FC\u30E0\u304C\u898B\u3064\u304B\u308A\u307E\u305B\u3093"},profile:{title:"\u30D7\u30ED\u30D5\u30A3\u30FC\u30EB",settings:"\u8A2D\u5B9A",language:"\u8A00\u8A9E",recentGames:"\u6700\u8FD1\u30D7\u30EC\u30A4\u3057\u305F\u30B2\u30FC\u30E0",noGames:"\u307E\u3060\u30D7\u30EC\u30A4\u3057\u305F\u30B2\u30FC\u30E0\u304C\u3042\u308A\u307E\u305B\u3093",guest:"\u30B2\u30B9\u30C8",languages:{en:"English",zh:"\u4E2D\u6587",ja:"\u65E5\u672C\u8A9E",ko:"\uD55C\uAD6D\uC5B4",th:"\u0E44\u0E17\u0E22",vi:"Ti\u1EBFng Vi\u1EC7t",id:"Bahasa Indonesia",ms:"Bahasa Melayu",es:"Espa\xF1ol"}},categories:{Adventure:"\u30A2\u30C9\u30D9\u30F3\u30C1\u30E3\u30FC",Simulation:"\u30B7\u30DF\u30E5\u30EC\u30FC\u30B7\u30E7\u30F3",Casual:"\u30AB\u30B8\u30E5\u30A2\u30EB",Arcade:"\u30A2\u30FC\u30B1\u30FC\u30C9",Moba:"MOBA",Puzzle:"\u30D1\u30BA\u30EB"},auth:{loginSuccess:"\u30ED\u30B0\u30A4\u30F3\u6210\u529F!",loginTitle:"Playsout \u30ED\u30B0\u30A4\u30F3",welcome:"Playsout \u30B2\u30FC\u30E0\u30D7\u30E9\u30C3\u30C8\u30D5\u30A9\u30FC\u30E0\u3078\u3088\u3046\u3053\u305D",prompt:"\u30ED\u30B0\u30A4\u30F3\u3057\u3066\u30D7\u30EC\u30A4\u3092\u958B\u59CB",mustLogin:"\u30D7\u30EC\u30A4\u3059\u308B\u306B\u306F\u30ED\u30B0\u30A4\u30F3\u304C\u5FC5\u8981\u3067\u3059",authorizeHint:"\u4E0B\u306E\u30DC\u30BF\u30F3\u3092\u30AF\u30EA\u30C3\u30AF\u3057\u3066\u30ED\u30B0\u30A4\u30F3\u3092\u627F\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044",authorizing:"\u627F\u8A8D\u4E2D...",authorize:"\u30ED\u30B0\u30A4\u30F3\u3092\u627F\u8A8D",terms:"\u627F\u8A8D\u3059\u308B\u3053\u3068\u3067\u3001\u5229\u7528\u898F\u7D04\u306B\u540C\u610F\u3057\u305F\u3053\u3068\u306B\u306A\u308A\u307E\u3059",signingIn:"\u30B5\u30A4\u30F3\u30A4\u30F3\u4E2D",signMessage:"\u30A6\u30A9\u30EC\u30C3\u30C8\u3067\u30E1\u30C3\u30BB\u30FC\u30B8\u306B\u7F72\u540D\u3057\u3066\u304F\u3060\u3055\u3044"},game:{loading:"\u8AAD\u307F\u8FBC\u307F\u4E2D",notFound:"\u30B2\u30FC\u30E0\u304C\u898B\u3064\u304B\u308A\u307E\u305B\u3093",backHome:"\u30DB\u30FC\u30E0\u306B\u623B\u308B",pageTitleSuffix:"\u30B2\u30FC\u30E0\u30D7\u30E9\u30C3\u30C8\u30D5\u30A9\u30FC\u30E0",header:{back:"\u623B\u308B",shareAria:"\u30B2\u30FC\u30E0\u3092\u5171\u6709",toggleMenuAria:"\u30E1\u30CB\u30E5\u30FC\u5207\u308A\u66FF\u3048",fallbackTitle:"\u30B2\u30FC\u30E0"}},menu:{favorite:"\u304A\u6C17\u306B\u5165\u308A",favorited:"\u304A\u6C17\u306B\u5165\u308A\u6E08\u307F",profile:"\u30D7\u30ED\u30D5\u30A3\u30FC\u30EB",login:"\u30ED\u30B0\u30A4\u30F3",refresh:"\u66F4\u65B0",loggedIn:"\u30ED\u30B0\u30A4\u30F3\u6E08\u307F"},share:{title:"\u30B2\u30FC\u30E0\u3092\u5171\u6709",closeLabel:"\u9589\u3058\u308B",retry:"\u518D\u8A66\u884C",loading:"\u8AAD\u307F\u8FBC\u307F\u4E2D...",imageAlt:"\u30B2\u30FC\u30E0\u5171\u6709\u753B\u50CF",shareUrlLabel:"\u5171\u6709URL:",copied:"\u30B3\u30D4\u30FC\u3057\u307E\u3057\u305F",copy:"\u30B3\u30D4\u30FC",saveShare:"\u4FDD\u5B58\u3057\u3066\u5171\u6709",hint:"\u753B\u50CF\u306B\u306F\u30B2\u30FC\u30E0\u3078\u306EQR\u30B3\u30FC\u30C9\u304C\u542B\u307E\u308C\u3066\u3044\u307E\u3059",loadError:"\u5171\u6709\u753B\u50CF\u306E\u8AAD\u307F\u8FBC\u307F\u306B\u5931\u6557\u3057\u307E\u3057\u305F",downloadError:"\u753B\u50CF\u306E\u30C0\u30A6\u30F3\u30ED\u30FC\u30C9\u306B\u5931\u6557\u3057\u307E\u3057\u305F"},checkin:{successTitle:"\u5831\u916C\u3092\u7372\u5F97\u3057\u307E\u3057\u305F!",successMessage:"\u5831\u916C\u304C\u8ACB\u6C42\u3055\u308C\u307E\u3057\u305F\u3002",failedTitle:"\u30C1\u30A7\u30C3\u30AF\u30A4\u30F3\u5931\u6557",canceledTitle:"\u30C1\u30A7\u30C3\u30AF\u30A4\u30F3\u30AD\u30E3\u30F3\u30BB\u30EB",errors:{userRejected:"\u30C1\u30A7\u30C3\u30AF\u30A4\u30F3\u64CD\u4F5C\u3092\u30AD\u30E3\u30F3\u30BB\u30EB\u3057\u307E\u3057\u305F",insufficientFunds:"\u30AC\u30B9\u4EE3\u3092\u652F\u6255\u3046\u6B8B\u9AD8\u304C\u4E0D\u8DB3\u3057\u3066\u3044\u307E\u3059",alreadyCheckedIn:"\u672C\u65E5\u306F\u65E2\u306B\u30C1\u30A7\u30C3\u30AF\u30A4\u30F3\u6E08\u307F\u3067\u3059\u3002\u660E\u65E5\u307E\u305F\u6765\u3066\u304F\u3060\u3055\u3044!",network:"\u30CD\u30C3\u30C8\u30EF\u30FC\u30AF\u30A8\u30E9\u30FC\u3002\u5F8C\u3067\u3082\u3046\u4E00\u5EA6\u304A\u8A66\u3057\u304F\u3060\u3055\u3044"}},store:{title:"\u30B8\u30A7\u30E0\u30B9\u30C8\u30A2",hot:"HOT",buy:"\u8CFC\u5165",cancel:"\u30AD\u30E3\u30F3\u30BB\u30EB",unit:"\u30B8\u30A7\u30E0",successTitle:"\u652F\u6255\u3044\u5B8C\u4E86",successMessage:"{amount}\u30B8\u30A7\u30E0\u3092\u53D7\u3051\u53D6\u308A\u307E\u3057\u305F\uFF01"},payment:{title:"\u8CFC\u5165\u78BA\u8A8D",insufficientTitle:"\u6B8B\u9AD8\u4E0D\u8DB3",insufficientDesc:"\u4FDD\u6709: {gems} \u30B8\u30A7\u30E0",cancel:"\u30AD\u30E3\u30F3\u30BB\u30EB",confirm:"\u78BA\u8A8D",recharge:"\u30C1\u30E3\u30FC\u30B8",successTitle:"\u652F\u6255\u3044\u5B8C\u4E86",successMessage:"{cost}<gem></gem>\u304C\u5DEE\u3057\u5F15\u304B\u308C\u307E\u3057\u305F\u3002"}};var ke={app:{title:"Playsout \uBBF8\uB2C8 \uAC8C\uC784",description:"\uB85C\uADF8\uC778 \uC5C6\uC774 \uAC8C\uC784\uC744 \uC990\uAE30\uC138\uC694."},home:{loggedIn:"\uB85C\uADF8\uC778\uB428",logIn:"\uB85C\uADF8\uC778",games:"\uAC8C\uC784",bannerAlt:"Playsout \uAC8C\uC784",searchPlaceholder:"\uC81C\uBAA9 \uB610\uB294 \uCE74\uD14C\uACE0\uB9AC\uB85C \uAC80\uC0C9",noGames:"\uAC8C\uC784\uC744 \uCC3E\uC744 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4"},profile:{title:"\uD504\uB85C\uD544",settings:"\uC124\uC815",language:"\uC5B8\uC5B4",recentGames:"\uCD5C\uADFC \uD50C\uB808\uC774\uD55C \uAC8C\uC784",noGames:"\uC544\uC9C1 \uD50C\uB808\uC774\uD55C \uAC8C\uC784\uC774 \uC5C6\uC2B5\uB2C8\uB2E4",guest:"\uC190\uB2D8",languages:{en:"English",zh:"\u4E2D\u6587",ja:"\u65E5\u672C\u8A9E",ko:"\uD55C\uAD6D\uC5B4",th:"\u0E44\u0E17\u0E22",vi:"Ti\u1EBFng Vi\u1EC7t",id:"Bahasa Indonesia",ms:"Bahasa Melayu",es:"Espa\xF1ol"}},categories:{Adventure:"\uC5B4\uB4DC\uBCA4\uCC98",Simulation:"\uC2DC\uBBAC\uB808\uC774\uC158",Casual:"\uCE90\uC8FC\uC5BC",Arcade:"\uC544\uCF00\uC774\uB4DC",Moba:"MOBA",Puzzle:"\uD37C\uC990"},auth:{loginSuccess:"\uB85C\uADF8\uC778 \uC131\uACF5!",loginTitle:"Playsout \uB85C\uADF8\uC778",welcome:"Playsout \uAC8C\uC784 \uD50C\uB7AB\uD3FC\uC5D0 \uC624\uC2E0 \uAC83\uC744 \uD658\uC601\uD569\uB2C8\uB2E4",prompt:"\uAC8C\uC784\uC744 \uC2DC\uC791\uD558\uB824\uBA74 \uB85C\uADF8\uC778\uD558\uC138\uC694",mustLogin:"\uAC8C\uC784\uC744 \uD558\uB824\uBA74 \uB85C\uADF8\uC778\uD574\uC57C \uD569\uB2C8\uB2E4",authorizeHint:"\uB85C\uADF8\uC778\uC744 \uC2B9\uC778\uD558\uB824\uBA74 \uC544\uB798 \uBC84\uD2BC\uC744 \uD074\uB9AD\uD558\uC138\uC694",authorizing:"\uC2B9\uC778 \uC911...",authorize:"\uB85C\uADF8\uC778 \uC2B9\uC778",terms:"\uC2B9\uC778\uD558\uBA74 \uC11C\uBE44\uC2A4 \uC57D\uAD00\uC5D0 \uB3D9\uC758\uD558\uAC8C \uB429\uB2C8\uB2E4",signingIn:"\uB85C\uADF8\uC778 \uC911",signMessage:"\uC9C0\uAC11\uC5D0\uC11C \uBA54\uC2DC\uC9C0\uC5D0 \uC11C\uBA85\uD574\uC8FC\uC138\uC694"},game:{loading:"\uB85C\uB529 \uC911",notFound:"\uAC8C\uC784\uC744 \uCC3E\uC744 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4",backHome:"\uD648\uC73C\uB85C \uB3CC\uC544\uAC00\uAE30",pageTitleSuffix:"\uAC8C\uC784 \uD50C\uB7AB\uD3FC",header:{back:"\uB4A4\uB85C",shareAria:"\uAC8C\uC784 \uACF5\uC720",toggleMenuAria:"\uBA54\uB274 \uC804\uD658",fallbackTitle:"\uAC8C\uC784"}},menu:{favorite:"\uC990\uACA8\uCC3E\uAE30",favorited:"\uC990\uACA8\uCC3E\uAE30\uB428",profile:"\uD504\uB85C\uD544",login:"\uB85C\uADF8\uC778",refresh:"\uC0C8\uB85C\uACE0\uCE68",loggedIn:"\uB85C\uADF8\uC778\uB428"},share:{title:"\uAC8C\uC784 \uACF5\uC720",closeLabel:"\uB2EB\uAE30",retry:"\uC7AC\uC2DC\uB3C4",loading:"\uB85C\uB529 \uC911...",imageAlt:"\uAC8C\uC784 \uACF5\uC720 \uC774\uBBF8\uC9C0",shareUrlLabel:"\uACF5\uC720 URL:",copied:"\uBCF5\uC0AC\uB428",copy:"\uBCF5\uC0AC",saveShare:"\uC800\uC7A5 \uBC0F \uACF5\uC720",hint:"\uC774\uBBF8\uC9C0\uC5D0 \uAC8C\uC784\uC73C\uB85C \uC5F0\uACB0\uB418\uB294 QR \uCF54\uB4DC\uAC00 \uD3EC\uD568\uB418\uC5B4 \uC788\uC2B5\uB2C8\uB2E4",loadError:"\uACF5\uC720 \uC774\uBBF8\uC9C0\uB97C \uBD88\uB7EC\uC624\uC9C0 \uBABB\uD588\uC2B5\uB2C8\uB2E4",downloadError:"\uC774\uBBF8\uC9C0\uB97C \uB2E4\uC6B4\uB85C\uB4DC\uD558\uC9C0 \uBABB\uD588\uC2B5\uB2C8\uB2E4"},checkin:{successTitle:"\uBCF4\uC0C1\uC744 \uBC1B\uC558\uC2B5\uB2C8\uB2E4!",successMessage:"\uBCF4\uC0C1\uC774 \uC9C0\uAE09\uB418\uC5C8\uC2B5\uB2C8\uB2E4.",failedTitle:"\uCD9C\uC11D \uC2E4\uD328",canceledTitle:"\uCD9C\uC11D \uCDE8\uC18C\uB428",errors:{userRejected:"\uCD9C\uC11D \uC791\uC5C5\uC744 \uCDE8\uC18C\uD588\uC2B5\uB2C8\uB2E4",insufficientFunds:"\uAC00\uC2A4\uBE44\uB97C \uC9C0\uBD88\uD560 \uC790\uAE08\uC774 \uBD80\uC871\uD569\uB2C8\uB2E4",alreadyCheckedIn:"\uC624\uB298 \uC774\uBBF8 \uCD9C\uC11D\uD588\uC2B5\uB2C8\uB2E4. \uB0B4\uC77C \uB2E4\uC2DC \uC624\uC138\uC694!",network:"\uB124\uD2B8\uC6CC\uD06C \uC624\uB958. \uB098\uC911\uC5D0 \uB2E4\uC2DC \uC2DC\uB3C4\uD574 \uC8FC\uC138\uC694"}},store:{title:"\uBCF4\uC11D \uC0C1\uC810",hot:"\uC778\uAE30",buy:"\uAD6C\uB9E4",cancel:"\uCDE8\uC18C",unit:"\uBCF4\uC11D",successTitle:"\uACB0\uC81C \uC131\uACF5",successMessage:"{amount}\uAC1C\uC758 \uBCF4\uC11D\uC744 \uBC1B\uC558\uC2B5\uB2C8\uB2E4!"},payment:{title:"\uAD6C\uB9E4 \uD655\uC778",insufficientTitle:"\uC794\uC561 \uBD80\uC871",insufficientDesc:"\uBCF4\uC720: {gems} \uBCF4\uC11D",cancel:"\uCDE8\uC18C",confirm:"\uD655\uC778",recharge:"\uCDA9\uC804",successTitle:"\uACB0\uC81C \uC131\uACF5",successMessage:"{cost}<gem></gem>\uC774 \uCC28\uAC10\uB418\uC5C8\uC2B5\uB2C8\uB2E4."}};var xe={app:{title:"Playsout \u0E21\u0E34\u0E19\u0E34\u0E40\u0E01\u0E21",description:"\u0E40\u0E25\u0E48\u0E19\u0E40\u0E01\u0E21\u0E14\u0E48\u0E27\u0E19\u0E42\u0E14\u0E22\u0E44\u0E21\u0E48\u0E15\u0E49\u0E2D\u0E07\u0E40\u0E02\u0E49\u0E32\u0E2A\u0E39\u0E48\u0E23\u0E30\u0E1A\u0E1A"},home:{loggedIn:"\u0E40\u0E02\u0E49\u0E32\u0E2A\u0E39\u0E48\u0E23\u0E30\u0E1A\u0E1A\u0E41\u0E25\u0E49\u0E27",logIn:"\u0E40\u0E02\u0E49\u0E32\u0E2A\u0E39\u0E48\u0E23\u0E30\u0E1A\u0E1A",games:"\u0E40\u0E01\u0E21",bannerAlt:"\u0E40\u0E01\u0E21 Playsout",searchPlaceholder:"\u0E04\u0E49\u0E19\u0E2B\u0E32\u0E15\u0E32\u0E21\u0E0A\u0E37\u0E48\u0E2D\u0E2B\u0E23\u0E37\u0E2D\u0E2B\u0E21\u0E27\u0E14\u0E2B\u0E21\u0E39\u0E48",noGames:"\u0E44\u0E21\u0E48\u0E1E\u0E1A\u0E40\u0E01\u0E21"},profile:{title:"\u0E42\u0E1B\u0E23\u0E44\u0E1F\u0E25\u0E4C",settings:"\u0E01\u0E32\u0E23\u0E15\u0E31\u0E49\u0E07\u0E04\u0E48\u0E32",language:"\u0E20\u0E32\u0E29\u0E32",recentGames:"\u0E40\u0E01\u0E21\u0E17\u0E35\u0E48\u0E40\u0E25\u0E48\u0E19\u0E25\u0E48\u0E32\u0E2A\u0E38\u0E14",noGames:"\u0E22\u0E31\u0E07\u0E44\u0E21\u0E48\u0E21\u0E35\u0E40\u0E01\u0E21\u0E17\u0E35\u0E48\u0E40\u0E25\u0E48\u0E19",guest:"\u0E1C\u0E39\u0E49\u0E40\u0E22\u0E35\u0E48\u0E22\u0E21\u0E0A\u0E21",languages:{en:"English",zh:"\u4E2D\u6587",ja:"\u65E5\u672C\u8A9E",ko:"\uD55C\uAD6D\uC5B4",th:"\u0E44\u0E17\u0E22",vi:"Ti\u1EBFng Vi\u1EC7t",id:"Bahasa Indonesia",ms:"Bahasa Melayu",es:"Espa\xF1ol"}},categories:{Adventure:"\u0E1C\u0E08\u0E0D\u0E20\u0E31\u0E22",Simulation:"\u0E08\u0E33\u0E25\u0E2D\u0E07\u0E2A\u0E16\u0E32\u0E19\u0E01\u0E32\u0E23\u0E13\u0E4C",Casual:"\u0E41\u0E04\u0E0A\u0E0A\u0E27\u0E25",Arcade:"\u0E2D\u0E32\u0E23\u0E4C\u0E40\u0E04\u0E14",Moba:"\u0E42\u0E21\u0E1A\u0E32",Puzzle:"\u0E1B\u0E23\u0E34\u0E28\u0E19\u0E32"},auth:{loginSuccess:"\u0E40\u0E02\u0E49\u0E32\u0E2A\u0E39\u0E48\u0E23\u0E30\u0E1A\u0E1A\u0E2A\u0E33\u0E40\u0E23\u0E47\u0E08!",loginTitle:"\u0E40\u0E02\u0E49\u0E32\u0E2A\u0E39\u0E48\u0E23\u0E30\u0E1A\u0E1A Playsout",welcome:"\u0E22\u0E34\u0E19\u0E14\u0E35\u0E15\u0E49\u0E2D\u0E19\u0E23\u0E31\u0E1A\u0E2A\u0E39\u0E48\u0E41\u0E1E\u0E25\u0E15\u0E1F\u0E2D\u0E23\u0E4C\u0E21\u0E40\u0E01\u0E21 Playsout",prompt:"\u0E40\u0E02\u0E49\u0E32\u0E2A\u0E39\u0E48\u0E23\u0E30\u0E1A\u0E1A\u0E40\u0E1E\u0E37\u0E48\u0E2D\u0E40\u0E23\u0E34\u0E48\u0E21\u0E40\u0E25\u0E48\u0E19",mustLogin:"\u0E04\u0E38\u0E13\u0E15\u0E49\u0E2D\u0E07\u0E40\u0E02\u0E49\u0E32\u0E2A\u0E39\u0E48\u0E23\u0E30\u0E1A\u0E1A\u0E40\u0E1E\u0E37\u0E48\u0E2D\u0E40\u0E25\u0E48\u0E19",authorizeHint:"\u0E04\u0E25\u0E34\u0E01\u0E1B\u0E38\u0E48\u0E21\u0E14\u0E49\u0E32\u0E19\u0E25\u0E48\u0E32\u0E07\u0E40\u0E1E\u0E37\u0E48\u0E2D\u0E2D\u0E19\u0E38\u0E0D\u0E32\u0E15\u0E01\u0E32\u0E23\u0E40\u0E02\u0E49\u0E32\u0E2A\u0E39\u0E48\u0E23\u0E30\u0E1A\u0E1A",authorizing:"\u0E01\u0E33\u0E25\u0E31\u0E07\u0E2D\u0E19\u0E38\u0E0D\u0E32\u0E15...",authorize:"\u0E2D\u0E19\u0E38\u0E0D\u0E32\u0E15\u0E01\u0E32\u0E23\u0E40\u0E02\u0E49\u0E32\u0E2A\u0E39\u0E48\u0E23\u0E30\u0E1A\u0E1A",terms:"\u0E01\u0E32\u0E23\u0E2D\u0E19\u0E38\u0E0D\u0E32\u0E15\u0E41\u0E2A\u0E14\u0E07\u0E27\u0E48\u0E32\u0E04\u0E38\u0E13\u0E22\u0E2D\u0E21\u0E23\u0E31\u0E1A\u0E02\u0E49\u0E2D\u0E01\u0E33\u0E2B\u0E19\u0E14\u0E43\u0E19\u0E01\u0E32\u0E23\u0E43\u0E2B\u0E49\u0E1A\u0E23\u0E34\u0E01\u0E32\u0E23\u0E02\u0E2D\u0E07\u0E40\u0E23\u0E32",signingIn:"\u0E01\u0E33\u0E25\u0E31\u0E07\u0E25\u0E07\u0E0A\u0E37\u0E48\u0E2D\u0E40\u0E02\u0E49\u0E32\u0E43\u0E0A\u0E49",signMessage:"\u0E01\u0E23\u0E38\u0E13\u0E32\u0E40\u0E0B\u0E47\u0E19\u0E0A\u0E37\u0E48\u0E2D\u0E02\u0E49\u0E2D\u0E04\u0E27\u0E32\u0E21\u0E43\u0E19\u0E01\u0E23\u0E30\u0E40\u0E1B\u0E4B\u0E32\u0E40\u0E07\u0E34\u0E19\u0E02\u0E2D\u0E07\u0E04\u0E38\u0E13"},game:{loading:"\u0E01\u0E33\u0E25\u0E31\u0E07\u0E42\u0E2B\u0E25\u0E14",notFound:"\u0E44\u0E21\u0E48\u0E1E\u0E1A\u0E40\u0E01\u0E21",backHome:"\u0E01\u0E25\u0E31\u0E1A\u0E2B\u0E19\u0E49\u0E32\u0E2B\u0E25\u0E31\u0E01",pageTitleSuffix:"\u0E41\u0E1E\u0E25\u0E15\u0E1F\u0E2D\u0E23\u0E4C\u0E21\u0E40\u0E01\u0E21",header:{back:"\u0E01\u0E25\u0E31\u0E1A",shareAria:"\u0E41\u0E0A\u0E23\u0E4C\u0E40\u0E01\u0E21",toggleMenuAria:"\u0E2A\u0E25\u0E31\u0E1A\u0E40\u0E21\u0E19\u0E39",fallbackTitle:"\u0E40\u0E01\u0E21"}},menu:{favorite:"\u0E23\u0E32\u0E22\u0E01\u0E32\u0E23\u0E42\u0E1B\u0E23\u0E14",favorited:"\u0E40\u0E1E\u0E34\u0E48\u0E21\u0E43\u0E19\u0E23\u0E32\u0E22\u0E01\u0E32\u0E23\u0E42\u0E1B\u0E23\u0E14\u0E41\u0E25\u0E49\u0E27",profile:"\u0E42\u0E1B\u0E23\u0E44\u0E1F\u0E25\u0E4C",login:"\u0E40\u0E02\u0E49\u0E32\u0E2A\u0E39\u0E48\u0E23\u0E30\u0E1A\u0E1A",refresh:"\u0E23\u0E35\u0E40\u0E1F\u0E23\u0E0A",loggedIn:"\u0E40\u0E02\u0E49\u0E32\u0E2A\u0E39\u0E48\u0E23\u0E30\u0E1A\u0E1A\u0E41\u0E25\u0E49\u0E27"},share:{title:"\u0E41\u0E0A\u0E23\u0E4C\u0E40\u0E01\u0E21",closeLabel:"\u0E1B\u0E34\u0E14",retry:"\u0E25\u0E2D\u0E07\u0E43\u0E2B\u0E21\u0E48",loading:"\u0E01\u0E33\u0E25\u0E31\u0E07\u0E42\u0E2B\u0E25\u0E14...",imageAlt:"\u0E23\u0E39\u0E1B\u0E20\u0E32\u0E1E\u0E41\u0E0A\u0E23\u0E4C\u0E40\u0E01\u0E21",shareUrlLabel:"\u0E41\u0E0A\u0E23\u0E4C URL:",copied:"\u0E04\u0E31\u0E14\u0E25\u0E2D\u0E01\u0E41\u0E25\u0E49\u0E27",copy:"\u0E04\u0E31\u0E14\u0E25\u0E2D\u0E01",saveShare:"\u0E1A\u0E31\u0E19\u0E17\u0E36\u0E01\u0E41\u0E25\u0E30\u0E41\u0E0A\u0E23\u0E4C",hint:"\u0E23\u0E39\u0E1B\u0E20\u0E32\u0E1E\u0E23\u0E27\u0E21\u0E23\u0E2B\u0E31\u0E2A QR \u0E17\u0E35\u0E48\u0E25\u0E34\u0E07\u0E01\u0E4C\u0E44\u0E1B\u0E22\u0E31\u0E07\u0E40\u0E01\u0E21\u0E19\u0E35\u0E49",loadError:"\u0E42\u0E2B\u0E25\u0E14\u0E23\u0E39\u0E1B\u0E20\u0E32\u0E1E\u0E41\u0E0A\u0E23\u0E4C\u0E44\u0E21\u0E48\u0E2A\u0E33\u0E40\u0E23\u0E47\u0E08",downloadError:"\u0E14\u0E32\u0E27\u0E19\u0E4C\u0E42\u0E2B\u0E25\u0E14\u0E23\u0E39\u0E1B\u0E20\u0E32\u0E1E\u0E44\u0E21\u0E48\u0E2A\u0E33\u0E40\u0E23\u0E47\u0E08"},checkin:{successTitle:"\u0E04\u0E38\u0E13\u0E44\u0E14\u0E49\u0E23\u0E31\u0E1A\u0E23\u0E32\u0E07\u0E27\u0E31\u0E25!",successMessage:"\u0E23\u0E31\u0E1A\u0E23\u0E32\u0E07\u0E27\u0E31\u0E25\u0E02\u0E2D\u0E07\u0E04\u0E38\u0E13\u0E41\u0E25\u0E49\u0E27",failedTitle:"\u0E40\u0E0A\u0E47\u0E04\u0E2D\u0E34\u0E19\u0E25\u0E49\u0E21\u0E40\u0E2B\u0E25\u0E27",canceledTitle:"\u0E22\u0E01\u0E40\u0E25\u0E34\u0E01\u0E40\u0E0A\u0E47\u0E04\u0E2D\u0E34\u0E19",errors:{userRejected:"\u0E04\u0E38\u0E13\u0E22\u0E01\u0E40\u0E25\u0E34\u0E01\u0E01\u0E32\u0E23\u0E40\u0E0A\u0E47\u0E04\u0E2D\u0E34\u0E19",insufficientFunds:"\u0E40\u0E07\u0E34\u0E19\u0E44\u0E21\u0E48\u0E1E\u0E2D\u0E08\u0E48\u0E32\u0E22\u0E04\u0E48\u0E32\u0E41\u0E01\u0E4A\u0E2A",alreadyCheckedIn:"\u0E04\u0E38\u0E13\u0E40\u0E0A\u0E47\u0E04\u0E2D\u0E34\u0E19\u0E27\u0E31\u0E19\u0E19\u0E35\u0E49\u0E44\u0E1B\u0E41\u0E25\u0E49\u0E27 \u0E01\u0E25\u0E31\u0E1A\u0E21\u0E32\u0E43\u0E2B\u0E21\u0E48\u0E1E\u0E23\u0E38\u0E48\u0E07\u0E19\u0E35\u0E49!",network:"\u0E02\u0E49\u0E2D\u0E1C\u0E34\u0E14\u0E1E\u0E25\u0E32\u0E14\u0E40\u0E04\u0E23\u0E37\u0E2D\u0E02\u0E48\u0E32\u0E22 \u0E42\u0E1B\u0E23\u0E14\u0E25\u0E2D\u0E07\u0E43\u0E2B\u0E21\u0E48\u0E20\u0E32\u0E22\u0E2B\u0E25\u0E31\u0E07"}},store:{title:"\u0E23\u0E49\u0E32\u0E19\u0E04\u0E49\u0E32\u0E2D\u0E31\u0E0D\u0E21\u0E13\u0E35",hot:"\u0E21\u0E32\u0E41\u0E23\u0E07",buy:"\u0E0B\u0E37\u0E49\u0E2D",cancel:"\u0E22\u0E01\u0E40\u0E25\u0E34\u0E01",unit:"\u0E2D\u0E31\u0E0D\u0E21\u0E13\u0E35",successTitle:"\u0E0A\u0E33\u0E23\u0E30\u0E40\u0E07\u0E34\u0E19\u0E2A\u0E33\u0E40\u0E23\u0E47\u0E08",successMessage:"\u0E04\u0E38\u0E13\u0E44\u0E14\u0E49\u0E23\u0E31\u0E1A {amount} \u0E2D\u0E31\u0E0D\u0E21\u0E13\u0E35!"},payment:{title:"\u0E22\u0E37\u0E19\u0E22\u0E31\u0E19\u0E01\u0E32\u0E23\u0E0B\u0E37\u0E49\u0E2D",insufficientTitle:"\u0E22\u0E2D\u0E14\u0E04\u0E07\u0E40\u0E2B\u0E25\u0E37\u0E2D\u0E44\u0E21\u0E48\u0E1E\u0E2D",insufficientDesc:"\u0E21\u0E35\u0E2D\u0E22\u0E39\u0E48: {gems} \u0E2D\u0E31\u0E0D\u0E21\u0E13\u0E35",cancel:"\u0E22\u0E01\u0E40\u0E25\u0E34\u0E01",confirm:"\u0E22\u0E37\u0E19\u0E22\u0E31\u0E19",recharge:"\u0E40\u0E15\u0E34\u0E21\u0E40\u0E07\u0E34\u0E19",successTitle:"\u0E0A\u0E33\u0E23\u0E30\u0E40\u0E07\u0E34\u0E19\u0E2A\u0E33\u0E40\u0E23\u0E47\u0E08",successMessage:"\u0E2B\u0E31\u0E01 {cost} <gem></gem> \u0E41\u0E25\u0E49\u0E27"}};var Se={app:{title:"Playsout Mini Games",description:"Ch\u01A1i game nhanh kh\xF4ng c\u1EA7n \u0111\u0103ng nh\u1EADp."},home:{loggedIn:"\u0110\xE3 \u0111\u0103ng nh\u1EADp",logIn:"\u0110\u0103ng nh\u1EADp",games:"Tr\xF2 ch\u01A1i",bannerAlt:"Tr\xF2 ch\u01A1i Playsout",searchPlaceholder:"T\xECm ki\u1EBFm theo ti\xEAu \u0111\u1EC1 ho\u1EB7c danh m\u1EE5c",noGames:"Kh\xF4ng t\xECm th\u1EA5y tr\xF2 ch\u01A1i"},profile:{title:"H\u1ED3 s\u01A1",settings:"C\xE0i \u0111\u1EB7t",language:"Ng\xF4n ng\u1EEF",recentGames:"Tr\xF2 ch\u01A1i \u0111\xE3 ch\u01A1i g\u1EA7n \u0111\xE2y",noGames:"Ch\u01B0a ch\u01A1i game n\xE0o",guest:"Kh\xE1ch",languages:{en:"English",zh:"\u4E2D\u6587",ja:"\u65E5\u672C\u8A9E",ko:"\uD55C\uAD6D\uC5B4",th:"\u0E44\u0E17\u0E22",vi:"Ti\u1EBFng Vi\u1EC7t",id:"Bahasa Indonesia",ms:"Bahasa Melayu",es:"Espa\xF1ol"}},categories:{Adventure:"Phi\xEAu l\u01B0u",Simulation:"M\xF4 ph\u1ECFng",Casual:"Ph\u1ED5 th\xF4ng",Arcade:"Arcade",Moba:"Moba",Puzzle:"Gi\u1EA3i \u0111\u1ED1"},auth:{loginSuccess:"\u0110\u0103ng nh\u1EADp th\xE0nh c\xF4ng!",loginTitle:"\u0110\u0103ng nh\u1EADp Playsout",welcome:"Ch\xE0o m\u1EEBng \u0111\u1EBFn v\u1EDBi n\u1EC1n t\u1EA3ng tr\xF2 ch\u01A1i Playsout",prompt:"\u0110\u0103ng nh\u1EADp \u0111\u1EC3 b\u1EAFt \u0111\u1EA7u ch\u01A1i",mustLogin:"B\u1EA1n ph\u1EA3i \u0111\u0103ng nh\u1EADp \u0111\u1EC3 ch\u01A1i",authorizeHint:"Nh\u1EA5p v\xE0o n\xFAt b\xEAn d\u01B0\u1EDBi \u0111\u1EC3 \u1EE7y quy\u1EC1n \u0111\u0103ng nh\u1EADp",authorizing:"\u0110ang \u1EE7y quy\u1EC1n...",authorize:"\u1EE6y quy\u1EC1n \u0111\u0103ng nh\u1EADp",terms:"B\u1EB1ng c\xE1ch \u1EE7y quy\u1EC1n, b\u1EA1n \u0111\u1ED3ng \xFD v\u1EDBi \u0110i\u1EC1u kho\u1EA3n d\u1ECBch v\u1EE5 c\u1EE7a ch\xFAng t\xF4i",signingIn:"\u0110ang \u0111\u0103ng nh\u1EADp",signMessage:"Vui l\xF2ng k\xFD tin nh\u1EAFn trong v\xED c\u1EE7a b\u1EA1n"},game:{loading:"\u0110ang t\u1EA3i",notFound:"Kh\xF4ng t\xECm th\u1EA5y tr\xF2 ch\u01A1i",backHome:"V\u1EC1 trang ch\u1EE7",pageTitleSuffix:"N\u1EC1n t\u1EA3ng tr\xF2 ch\u01A1i",header:{back:"Quay l\u1EA1i",shareAria:"Chia s\u1EBB tr\xF2 ch\u01A1i",toggleMenuAria:"Chuy\u1EC3n \u0111\u1ED5i menu",fallbackTitle:"Tr\xF2 ch\u01A1i"}},menu:{favorite:"Y\xEAu th\xEDch",favorited:"\u0110\xE3 y\xEAu th\xEDch",profile:"H\u1ED3 s\u01A1",login:"\u0110\u0103ng nh\u1EADp",refresh:"L\xE0m m\u1EDBi",loggedIn:"\u0110\xE3 \u0111\u0103ng nh\u1EADp"},share:{title:"Chia s\u1EBB tr\xF2 ch\u01A1i",closeLabel:"\u0110\xF3ng",retry:"Th\u1EED l\u1EA1i",loading:"\u0110ang t\u1EA3i...",imageAlt:"H\xECnh \u1EA3nh chia s\u1EBB tr\xF2 ch\u01A1i",shareUrlLabel:"URL chia s\u1EBB:",copied:"\u0110\xE3 sao ch\xE9p",copy:"Sao ch\xE9p",saveShare:"L\u01B0u & Chia s\u1EBB",hint:"H\xECnh \u1EA3nh bao g\u1ED3m m\xE3 QR li\xEAn k\u1EBFt \u0111\u1EBFn tr\xF2 ch\u01A1i n\xE0y",loadError:"Kh\xF4ng t\u1EA3i \u0111\u01B0\u1EE3c h\xECnh \u1EA3nh chia s\u1EBB",downloadError:"Kh\xF4ng t\u1EA3i xu\u1ED1ng \u0111\u01B0\u1EE3c h\xECnh \u1EA3nh"},checkin:{successTitle:"B\u1EA1n \u0111\xE3 nh\u1EADn ph\u1EA7n th\u01B0\u1EDFng!",successMessage:"Ph\u1EA7n th\u01B0\u1EDFng c\u1EE7a b\u1EA1n \u0111\xE3 \u0111\u01B0\u1EE3c nh\u1EADn.",failedTitle:"\u0110i\u1EC3m danh th\u1EA5t b\u1EA1i",canceledTitle:"\u0110i\u1EC3m danh \u0111\xE3 h\u1EE7y",errors:{userRejected:"B\u1EA1n \u0111\xE3 h\u1EE7y thao t\xE1c \u0111i\u1EC3m danh",insufficientFunds:"Kh\xF4ng \u0111\u1EE7 ti\u1EC1n \u0111\u1EC3 tr\u1EA3 ph\xED Gas",alreadyCheckedIn:"H\xF4m nay b\u1EA1n \u0111\xE3 \u0111i\u1EC3m danh r\u1ED3i. H\xE3y quay l\u1EA1i v\xE0o ng\xE0y mai!",network:"L\u1ED7i m\u1EA1ng. Vui l\xF2ng th\u1EED l\u1EA1i sau"}},store:{title:"C\u1EEDa h\xE0ng \u0110\xE1 qu\xFD",hot:"HOT",buy:"MUA",cancel:"H\u1EE7y",unit:"\u0110\xE1 qu\xFD",successTitle:"Thanh to\xE1n th\xE0nh c\xF4ng",successMessage:"B\u1EA1n \u0111\xE3 nh\u1EADn \u0111\u01B0\u1EE3c {amount} \u0111\xE1 qu\xFD!"},payment:{title:"X\xE1c nh\u1EADn mua",insufficientTitle:"S\u1ED1 d\u01B0 kh\xF4ng \u0111\u1EE7",insufficientDesc:"Hi\u1EC7n c\xF3: {gems} \u0110\xE1 qu\xFD",cancel:"H\u1EE7y",confirm:"X\xE1c nh\u1EADn",recharge:"N\u1EA1p ti\u1EC1n",successTitle:"Thanh to\xE1n th\xE0nh c\xF4ng",successMessage:"\u0110\xE3 tr\u1EEB {cost} <gem></gem>."}};var Te={app:{title:"Playsout Mini Games",description:"Mainkan game cepat tanpa login."},home:{loggedIn:"Sudah login",logIn:"Login",games:"Game",bannerAlt:"Game Playsout",searchPlaceholder:"Cari berdasarkan judul atau kategori",noGames:"Game tidak ditemukan"},profile:{title:"Profil",settings:"Pengaturan",language:"Bahasa",recentGames:"Game yang Baru Dimainkan",noGames:"Belum ada game yang dimainkan",guest:"Tamu",languages:{en:"English",zh:"\u4E2D\u6587",ja:"\u65E5\u672C\u8A9E",ko:"\uD55C\uAD6D\uC5B4",th:"\u0E44\u0E17\u0E22",vi:"Ti\u1EBFng Vi\u1EC7t",id:"Bahasa Indonesia",ms:"Bahasa Melayu",es:"Espa\xF1ol"}},categories:{Adventure:"Petualangan",Simulation:"Simulasi",Casual:"Kasual",Arcade:"Arcade",Moba:"Moba",Puzzle:"Teka-teki"},auth:{loginSuccess:"Login berhasil!",loginTitle:"Login Playsout",welcome:"Selamat datang di platform game Playsout",prompt:"Login untuk mulai bermain",mustLogin:"Anda harus login untuk bermain",authorizeHint:"Klik tombol di bawah untuk mengotorisasi login",authorizing:"Mengotorisasi...",authorize:"Otorisasi login",terms:"Dengan mengotorisasi, Anda menyetujui Ketentuan Layanan kami",signingIn:"Masuk...",signMessage:"Silakan tanda tangani pesan di dompet Anda"},game:{loading:"Memuat",notFound:"Game tidak ditemukan",backHome:"Kembali ke beranda",pageTitleSuffix:"Platform Game",header:{back:"Kembali",shareAria:"Bagikan game",toggleMenuAria:"Alihkan menu",fallbackTitle:"Game"}},menu:{favorite:"Favorit",favorited:"Difavoritkan",profile:"Profil",login:"Login",refresh:"Segarkan",loggedIn:"Sudah login"},share:{title:"Bagikan Game",closeLabel:"Tutup",retry:"Coba lagi",loading:"Memuat...",imageAlt:"Gambar berbagi game",shareUrlLabel:"URL Berbagi:",copied:"Disalin",copy:"Salin",saveShare:"Simpan & Bagikan",hint:"Gambar termasuk kode QR yang menautkan ke game ini",loadError:"Gagal memuat gambar berbagi",downloadError:"Gagal mengunduh gambar"},checkin:{successTitle:"Anda mendapat hadiah!",successMessage:"Hadiah Anda telah diklaim.",failedTitle:"Check-in gagal",canceledTitle:"Check-in dibatalkan",errors:{userRejected:"Anda membatalkan operasi check-in",insufficientFunds:"Dana tidak cukup untuk membayar biaya Gas",alreadyCheckedIn:"Anda sudah check-in hari ini. Kembali lagi besok!",network:"Kesalahan jaringan. Silakan coba lagi nanti"}},store:{title:"Toko Permata",hot:"HOT",buy:"BELI",cancel:"Batal",unit:"Permata",successTitle:"Pembayaran Berhasil",successMessage:"Anda menerima {amount} permata!"},payment:{title:"Konfirmasi Pembelian",insufficientTitle:"Saldo Tidak Cukup",insufficientDesc:"Tersedia: {gems} Permata",cancel:"Batal",confirm:"Konfirmasi",recharge:"Isi Ulang",successTitle:"Pembayaran Berhasil",successMessage:"{cost} <gem></gem> telah dikurangi."}};var Ie={app:{title:"Permainan Mini Playsout",description:"Main permainan pantas tanpa log masuk."},home:{loggedIn:"Log masuk",logIn:"Log masuk",games:"Permainan",bannerAlt:"Permainan Playsout",searchPlaceholder:"Cari mengikut tajuk atau kategori",noGames:"Tiada permainan dijumpai"},profile:{title:"Profil",settings:"Tetapan",language:"Bahasa",recentGames:"Permainan Baru Dimainkan",noGames:"Belum ada permainan dimainkan",guest:"Pelawat",languages:{en:"English",zh:"\u4E2D\u6587",ja:"\u65E5\u672C\u8A9E",ko:"\uD55C\uAD6D\uC5B4",th:"\u0E44\u0E17\u0E22",vi:"Ti\u1EBFng Vi\u1EC7t",id:"Bahasa Indonesia",ms:"Bahasa Melayu",es:"Espa\xF1ol"}},categories:{Adventure:"Pengembaraan",Simulation:"Simulasi",Casual:"Santai",Arcade:"Arked",Moba:"Moba",Puzzle:"Teka-teki"},auth:{loginSuccess:"Log masuk berjaya!",loginTitle:"Log masuk Playsout",welcome:"Selamat datang ke platform permainan Playsout",prompt:"Log masuk untuk mula bermain",mustLogin:"Anda mesti log masuk untuk bermain",authorizeHint:"Klik butang di bawah untuk membenarkan log masuk",authorizing:"Membenarkan...",authorize:"Benarkan log masuk",terms:"Dengan membenarkan, anda bersetuju dengan Syarat Perkhidmatan kami",signingIn:"Sedang log masuk",signMessage:"Sila tandatangan mesej dalam dompet anda"},game:{loading:"Memuatkan",notFound:"Permainan tidak dijumpai",backHome:"Kembali ke laman utama",pageTitleSuffix:"Platform Permainan",header:{back:"Kembali",shareAria:"Kongsi permainan",toggleMenuAria:"Togol menu",fallbackTitle:"Permainan"}},menu:{favorite:"Kegemaran",favorited:"Dikegemarankan",profile:"Profil",login:"Log masuk",refresh:"Muat semula",loggedIn:"Log masuk"},share:{title:"Kongsi Permainan",closeLabel:"Tutup",retry:"Cuba lagi",loading:"Memuatkan...",imageAlt:"Imej kongsi permainan",shareUrlLabel:"URL Kongsi:",copied:"Disalin",copy:"Salin",saveShare:"Simpan & Kongsi",hint:"Imej termasuk kod QR yang memaut ke permainan ini",loadError:"Gagal memuatkan imej kongsi",downloadError:"Gagal memuat turun imej"},checkin:{successTitle:"Anda mendapat ganjaran!",successMessage:"Ganjaran anda telah dituntut.",failedTitle:"Daftar masuk gagal",canceledTitle:"Daftar masuk dibatalkan",errors:{userRejected:"Anda membatalkan operasi daftar masuk",insufficientFunds:"Dana tidak mencukupi untuk membayar yuran Gas",alreadyCheckedIn:"Anda sudah daftar masuk hari ini. Kembali lagi esok!",network:"Ralat rangkaian. Sila cuba lagi kemudian"}},store:{title:"Kedai Permata",hot:"HOT",buy:"BELI",cancel:"Batal",unit:"Permata",successTitle:"Pembayaran Berjaya",successMessage:"Anda menerima {amount} permata!"},payment:{title:"Sahkan Pembelian",insufficientTitle:"Baki Tidak Mencukupi",insufficientDesc:"Tersedia: {gems} Permata",cancel:"Batal",confirm:"Sahkan",recharge:"Tambah Nilai",successTitle:"Pembayaran Berjaya",successMessage:"{cost} <gem></gem> telah ditolak."}};var P=o=>{if(typeof window>"u")return o;let t=s(o);return be(t)},rt="https://games.playsout.com/resources/icon/fonts",K=o=>{if(typeof window>"u")return o;let t=o.replace(/^\.\//,"");return`${rt}/${t}`},R={en:ye,zh:ve,ja:we,ko:ke,th:xe,vi:Se,id:Te,ms:Ie};function ae(o,t){let e=t.split("."),a=o;for(let i of e)if(a&&typeof a=="object"&&i in a)a=a[i];else return t;return typeof a=="string"?a:t}function Ae(o,t={}){return o.replace(/\{(\w+)\}/g,(e,a)=>String(t[a]??`{${a}}`))}var Ee=`
|
|
1
|
+
"use strict";var Playsout=(()=>{var q=Object.defineProperty;var Me=Object.getOwnPropertyDescriptor;var _e=Object.getOwnPropertyNames;var ze=Object.prototype.hasOwnProperty;var Ge=(o,t)=>{for(var e in t)q(o,e,{get:t[e],enumerable:!0})},De=(o,t,e,a)=>{if(t&&typeof t=="object"||typeof t=="function")for(let i of _e(t))!ze.call(o,i)&&i!==e&&q(o,i,{get:()=>t[i],enumerable:!(a=Me(t,i))||a.enumerable});return o};var Ne=o=>De(q({},"__esModule",{value:!0}),o);var Et={};Ge(Et,{Login:()=>ut,PlaysoutSDKClass:()=>At,destroy:()=>gt,getCategories:()=>wt,getGames:()=>vt,getLocale:()=>yt,getToken:()=>ht,getUser:()=>ft,getUserInfo:()=>pt,init:()=>lt,instance:()=>It,isInitialized:()=>St,isLoggedIn:()=>Tt,logout:()=>mt,mount:()=>ct,off:()=>xt,on:()=>kt,setLocale:()=>bt,unmount:()=>dt});var x=class extends Error{constructor(e,a,i){super(a);this.code=e;this.details=i;this.name="SDKError"}toJSON(){return{name:this.name,code:this.code,message:this.message,details:this.details}}},Oe={NOT_INITIALIZED:"SDK not initialized. Please call PlaysoutSDK.init() first.",ALREADY_INITIALIZED:"SDK already initialized. Please do not call init() more than once.",NOT_LOGGED_IN:"User not logged in. Please log in first.",TOKEN_EXPIRED:"Login token has expired. Please log in again.",INVALID_TOKEN:"Invalid login token. Please log in again.",NETWORK_ERROR:"Network connection failed. Please check your network.",TIMEOUT:"Request timed out. Please try again later.",SERVER_ERROR:"Server is busy. Please try again later.",API_ERROR:"API request failed.",INVALID_PARAMS:"Invalid parameter(s).",MISSING_PARAMS:"Missing required parameter(s).",FEATURE_NOT_SUPPORTED:"This feature is not supported in the current environment.",UNKNOWN:"An unknown error occurred.",PAYMENT_FAILED:"Payment failed.",SHARE_FAILED:"Share failed."};function g(o,t){return new x(o,Oe[o],t)}var z="playsout_",G=class{constructor(t){this.storage=t}get(t){try{return this.storage.getItem(z+t)}catch{return null}}set(t,e){try{this.storage.setItem(z+t,e)}catch(a){console.warn("[PlaysoutSDK] Storage set failed:",a)}}remove(t){try{this.storage.removeItem(z+t)}catch{}}clear(){try{let t=[];for(let e=0;e<this.storage.length;e++){let a=this.storage.key(e);a&&a.startsWith(z)&&t.push(a)}t.forEach(e=>this.storage.removeItem(e))}catch{}}},W=class{constructor(){this.store=new Map}get(t){return this.store.get(t)??null}set(t,e){this.store.set(t,e)}remove(t){this.store.delete(t)}clear(){this.store.clear()}};function ie(o="localStorage"){return typeof window>"u"||o==="memory"?new W:o==="sessionStorage"?new G(sessionStorage):new G(localStorage)}var S=ie(),h={get:o=>S.get(o),set:(o,t)=>{S.set(o,t)},remove:o=>{S.remove(o)},clear:()=>{S.clear()},getJSON:o=>{let t=S.get(o);if(!t)return null;try{return JSON.parse(t)}catch{return null}},setJSON:(o,t)=>{S.set(o,JSON.stringify(t))},configure(o){S=ie(o)}},p={TOKEN_DATA:"token_data",USER:"user",LOCALE:"locale",CONFIG:"config"};var V=class{constructor(){this.events=new Map}on(t,e){return this.events.has(t)||this.events.set(t,new Set),this.events.get(t).add(e),()=>{this.off(t,e)}}once(t,e){let a=i=>{e(i),this.off(t,a)};return this.on(t,a)}off(t,e){this.events.get(t)?.delete(e),this.events.get(t)?.size===0&&this.events.delete(t)}emit(t,e){this.events.get(t)?.forEach(a=>{try{a(e)}catch(i){console.error(`[PlaysoutSDK] Event handler error for "${t}":`,i)}})}listenerCount(t){return this.events.get(t)?.size??0}clear(){this.events.clear()}},I=new V,y={on:(o,t)=>I.on(o,t),once:(o,t)=>I.once(o,t),off:(o,t)=>{I.off(o,t)},clear:()=>{I.clear()},emit:(o,t)=>{I.emit(o,t)}};var Ue="https://games.playsout.com/resources/icon/image";function s(o){if(!o||/^(data:|https?:|blob:)/i.test(o))return o;let t=o.replace(/^\.\//,"");return`${Ue}/${t}`}var Be=o=>{if(!o)return o;try{let t=new URL(o);if(t.hostname==="games.playsout.com"){let e=t.pathname,a=e.endsWith("/"),i=/\.[a-z0-9]+$/i.test(e);!a&&!i&&(t.pathname=`${e}/`)}return t.toString()}catch{return o}},je=o=>o.map(t=>{if(!t.externalUrl)return t;let e=Be(t.externalUrl);return e===t.externalUrl?t:{...t,externalUrl:e}}),He=[{id:"BlockCrushFun",title:"Block Crush Fun",category:"Puzzle",image:s("./games/BlockCrushFun.png"),isNew:!0,isHot:!0,enable:!0,orientation:"portrait",externalUrl:"https://games.playsout.com/BlockCrushFun"},{id:"DogeSurvivors",title:"Doge Survivors",category:"Doge OS",image:s("./games/DogeSurvivors.jpg"),isNew:!0,enable:!0,orientation:"portrait",externalUrl:"https://games.playsout.com/Doge/DogeSurvivors/"},{id:"DogeMaze",title:"Doge Maze",category:"Doge OS",image:s("./games/DogeMaze.jpg"),isNew:!0,enable:!0,orientation:"portrait",externalUrl:"https://games.playsout.com/Doge/DogeMaze/"},{id:"DogeMart",title:"Doge Mart",category:"Doge OS",image:s("./games/DogeMart.jpg"),isNew:!0,enable:!0,orientation:"portrait",externalUrl:"https://games.playsout.com/Doge/DogeMart/"},{id:"KittyEscape",title:"Kitty Escape",category:"Puzzle",image:s("./games/KittyEscape.jpg"),isNew:!0,isHot:!0,enable:!0,orientation:"portrait",externalUrl:"https://games.playsout.com/KittyEscape/"},{id:"ProjectGarden",title:"Project: Garden",category:"Adventure",image:s("./games/SimulatedAdventures.jpg"),isNew:!0,isHot:!1,enable:!0,orientation:"portrait",externalUrl:"https://games.playsout.com/simulated/"},{id:"ProjectIDLE",title:"Project: IDLE",category:"Simulation",image:s("./games/ProjectIDLE.jpg"),isNew:!0,isHot:!0,enable:!0,orientation:"portrait",externalUrl:"https://games.playsout.com/idle/"},{id:"CulinaryStarWeb",title:"Culinary Star",category:"Casual",image:s("./games/CulinaryStar.webp"),description:"Cooking game",isNew:!1,isHot:!0,enable:!0,orientation:"portrait",externalUrl:"https://games.playsout.com/CulinaryStar/"},{id:"PickaxeQuest",title:"Pickaxe Quest",category:"Adventure",image:s("./games/PickaxeQuest.jpg"),description:"Mining and adventure game",isNew:!0,isHot:!1,enable:!0,orientation:"portrait",externalUrl:"https://games.playsout.com/PickaxeQuest/",apiGameId:73},{id:"MonsterSurvivors",title:"Monster Survivors",category:"Adventure",image:s("./games/MonsterSurvivors.jpg"),isNew:!1,isHot:!0,enable:!0,orientation:"portrait",externalUrl:"https://games.playsout.com/MonsterSurvivors/"},{id:"IdleTowerDefense",title:"Idle Tower Defense",category:"RPG",image:s("./games/IdleTowerDefense.jpg"),isNew:!0,isHot:!1,enable:!0,orientation:"portrait",externalUrl:"https://games.playsout.com/IdleTowerDefense/"},{id:"MushroomWarriors",title:"Mushroom Warriors",category:"RPG",image:s("./games/MushroomWarriors.jpg"),isNew:!0,isHot:!1,enable:!0,orientation:"portrait",externalUrl:"https://games.playsout.com/MushroomWarriors/"},{id:"FollowThePath",title:"Follow The Path",category:"Arcade",image:s("./games/FollowThePath.jpg"),isNew:!1,isHot:!0,enable:!0,orientation:"portrait",externalUrl:"https://games.playsout.com/FollowThePath/"},{id:"ColorRun",title:"Color Run",category:"Arcade",image:s("./games/ColorRun.jpg"),isNew:!1,isHot:!1,enable:!0,orientation:"portrait",externalUrl:"https://games.playsout.com/ColorRun/"},{id:"StupidArrow",title:"Stupid Arrow",category:"Arcade",image:s("./games/StupidArrow.jpg"),isNew:!1,isHot:!0,enable:!0,orientation:"portrait",externalUrl:"https://games.playsout.com/StupidArrow/"},{id:"ZigZag",title:"Zig Zag",category:"Arcade",image:s("./games/ZigZag.jpg"),isNew:!1,isHot:!0,enable:!0,orientation:"portrait",externalUrl:"https://games.playsout.com/ZigZag/"},{id:"SpikesEverywhere",title:"Spikes Everywhere",category:"Arcade",image:s("./games/SpikesEverywhere.jpg"),isNew:!0,isHot:!1,enable:!0,orientation:"portrait",externalUrl:"https://games.playsout.com/SpikesEverywhere/"},{id:"ArrowRacer",title:"Arrow Racer",category:"Arcade",image:s("./games/ArrowRacer.jpg"),isNew:!0,isHot:!1,enable:!0,orientation:"portrait",externalUrl:"https://games.playsout.com/ArrowRacer/"},{id:"CircleLeap",title:"Circle Leap",category:"Arcade",image:s("./games/CircleLeap.jpg"),isNew:!0,isHot:!1,enable:!0,orientation:"portrait",externalUrl:"https://games.playsout.com/CircleLeap/"},{id:"ColorMatcher",title:"Color Matcher",category:"Arcade",image:s("./games/ColorMatcher.jpg"),isNew:!1,isHot:!1,enable:!0,orientation:"portrait",externalUrl:"https://games.playsout.com/ColorMatcher/"},{id:"EndlessMaze",title:"Endless Maze",category:"Arcade",image:s("./games/EndlessMaze.jpg"),isNew:!0,isHot:!1,enable:!0,orientation:"portrait",externalUrl:"https://games.playsout.com/EndlessMaze/"},{id:"SpinningAround",title:"Spinning Around",category:"Arcade",image:s("./games/SpinningAround.jpg"),isNew:!0,isHot:!1,enable:!0,orientation:"portrait",externalUrl:"https://games.playsout.com/SpinningAround/"},{id:"BoomBallz",title:"Boom Ballz",category:"Arcade",image:s("./games/BoomBallz.jpg"),isNew:!1,isHot:!0,enable:!0,orientation:"portrait",externalUrl:"https://games.playsout.com/BoomBallz/"},{id:"CubeHead",title:"Cube Head",category:"Arcade",image:s("./games/CubeHead.jpg"),isNew:!1,isHot:!0,enable:!0,orientation:"portrait",externalUrl:"https://games.playsout.com/CubeHead/"},{id:"CapybaraLink",title:"Capybara Link",category:"Puzzle",image:s("./games/CapybaraLink.jpg"),isNew:!0,isHot:!1,enable:!0,orientation:"portrait",externalUrl:"https://games.playsout.com/CapybaraLink/"},{id:"Snake2048",title:"Snake 2048",category:"Puzzle",image:s("./games/Snake2048.jpg"),isNew:!0,isHot:!0,enable:!0,orientation:"portrait",externalUrl:"https://games.playsout.com/Snake2048/"},{id:"FishTankFury",title:"Fish Tank Fury",category:"Puzzle",image:s("./games/FishTankFury.jpg"),isNew:!0,isHot:!1,enable:!0,orientation:"portrait",externalUrl:"https://games.playsout.com/FishTankFury/"},{id:"ConnectBalls",title:"Connect Balls",category:"Arcade",image:s("./games/ConnectBalls.jpg"),isNew:!0,isHot:!1,enable:!0,orientation:"portrait",externalUrl:"https://games.playsout.com/ConnectBalls/"},{id:"CircularBreaker",title:"Circular Breaker",category:"Arcade",image:s("./games/CircularBreaker.jpg"),isNew:!0,isHot:!1,enable:!0,orientation:"portrait",externalUrl:"https://games.playsout.com/CircularBreaker/"},{id:"OneDoor",title:"One Door",category:"Arcade",image:s("./games/OneDoor.jpg"),isNew:!0,isHot:!1,enable:!0,orientation:"portrait",externalUrl:"https://games.playsout.com/OneDoor/"},{id:"CatchtheFruits",title:"Catch the Fruits",category:"Casual",image:s("./games/CatchtheFruits.jpg"),isNew:!0,isHot:!1,enable:!0,orientation:"portrait",externalUrl:"https://games.playsout.com/CatchtheFruits/"},{id:"Falling2048",title:"Falling 2048",category:"Casual",image:s("./games/Falling2048.jpg"),isNew:!0,isHot:!1,enable:!0,orientation:"portrait",externalUrl:"https://games.playsout.com/Falling2048/"}],re=je(He),w=()=>re.filter(o=>o.enable),zt={Adventure:w().filter(o=>o.category==="Adventure"),Moba:w().filter(o=>o.category==="Moba")};var ne=o=>re.find(t=>t.id===o);var se=()=>Array.from(new Set(w().map(o=>o.category)));var Q="https://api.playsout.com",X=3e4,$e=new Set([10010,10011,10012,10013]);function Fe(o){let t=String(o?.platform||"").toLowerCase();if(t==="tiktok"){let e=o.authorizationCode;if(typeof e!="string"||!e.trim())throw g("MISSING_PARAMS","authorizationCode is required for TikTok login");return{platform:t,authorizationCode:e}}if(t==="grab"||t==="eros"){let e=o;if(typeof e.platformUserId!="string"||!e.platformUserId.trim())throw g("MISSING_PARAMS","platformUserId is required for Grab/Eros login");if(typeof e.platformToken!="string"||!e.platformToken.trim())throw g("MISSING_PARAMS","platformToken is required for Grab/Eros login");return{platform:t,platformUserId:e.platformUserId,platformToken:e.platformToken,username:typeof e.username=="string"?e.username:void 0,inviteCode:typeof e.inviteCode=="string"?e.inviteCode:void 0}}throw g("INVALID_PARAMS","Unsupported platform. Expected grab, eros, or tiktok")}var A=null,J=null,E=null;function de(o){J=o}function ge(o){E=o}async function le(o,t={},e,a=!1){let i=e?.apiBaseUrl||Q,r=o.startsWith("http")?o:`${i}${o}`,n=new AbortController,d=setTimeout(()=>n.abort(),X);try{let m=h.getJSON(p.TOKEN_DATA),b={"Content-Type":"application/json",...t.headers};m?.accessToken&&!b.token&&(b.token=m.accessToken);let f=await fetch(r,{...t,signal:n.signal,headers:b});if(clearTimeout(d),!f.ok){if(f.status===401&&!a)return await ce(o,t,e);throw g(f.status>=500?"SERVER_ERROR":"API_ERROR",`HTTP ${f.status}: ${f.statusText}`)}let u=await f.json();if(u.code!==void 0&&$e.has(u.code)&&!a){if(o.includes("/platform/refreshToken"))throw g("TOKEN_EXPIRED",u.msg||"Token expired");return await ce(o,t,e)}if(u.code!==0&&u.code!==1e4)throw g("API_ERROR",u.msg||"API request failed");return u.data}catch(m){throw clearTimeout(d),m instanceof x?m:m instanceof Error?m.name==="AbortError"?g("TIMEOUT"):g("NETWORK_ERROR",m.message):g("UNKNOWN")}}async function ce(o,t,e){await ue(e);let a=e?.apiBaseUrl||Q,i=o.startsWith("http")?o:`${a}${o}`,r=new AbortController,n=setTimeout(()=>r.abort(),X);try{let d=h.getJSON(p.TOKEN_DATA),m={"Content-Type":"application/json",...t.headers};d?.accessToken&&(m.token=d.accessToken);let b=await fetch(i,{...t,signal:r.signal,headers:m});if(clearTimeout(n),!b.ok)throw g(b.status>=500?"SERVER_ERROR":"API_ERROR",`HTTP ${b.status}: ${b.statusText}`);let f=await b.json();if(f.code!==0&&f.code!==1e4)throw g("API_ERROR",f.msg||"API request failed");return f.data}catch(d){throw clearTimeout(n),d instanceof x?d:d instanceof Error&&d.name==="AbortError"?g("TIMEOUT"):g("NETWORK_ERROR",d?.message||"Request failed")}}async function ue(o){return A||(A=(async()=>{let t=h.getJSON(p.TOKEN_DATA);if(!t?.refreshToken)throw g("NOT_LOGGED_IN","No refresh token available");let e=o?.apiBaseUrl||Q,a=new AbortController,i=setTimeout(()=>a.abort(),X);try{let r=await fetch(`${e}/platform/refreshToken`,{method:"POST",signal:a.signal,headers:{"Content-Type":"application/json"},body:JSON.stringify({refreshToken:t.refreshToken})});if(clearTimeout(i),!r.ok)throw g("TOKEN_EXPIRED","Failed to refresh token");let n=await r.json();if(n.code!==0&&n.code!==1e4||!n.data)throw g("TOKEN_EXPIRED",n.msg||"Failed to refresh token");let d=n.data;if(h.setJSON(p.TOKEN_DATA,d),J)try{J(d)}catch{}return d}catch(r){if(clearTimeout(i),r instanceof x){if(E)try{E()}catch{}throw r}if(r instanceof Error&&r.name==="AbortError")throw g("TIMEOUT");if(E)try{E()}catch{}throw g("TOKEN_EXPIRED","Refresh token failed")}finally{A=null}})(),A)}var Z=class{constructor(){this.config=null}configure(t){this.config=t}async refreshToken(){return await ue(this.config||void 0)}async getGames(t){let e=w();if(t?.category&&(e=e.filter(a=>a.category===t.category)),t?.search){let a=t.search.toLowerCase();e=e.filter(i=>i.title.toLowerCase().includes(a)||i.category.toLowerCase().includes(a)||i.description&&i.description.toLowerCase().includes(a))}if(t?.sortBy)switch(t.sortBy){case"newest":e=e.filter(a=>a.isNew).concat(e.filter(a=>!a.isNew));break;case"rating":e=e.filter(a=>a.isHot).concat(e.filter(a=>!a.isHot));break}if(t?.page&&t?.pageSize){let a=(t.page-1)*t.pageSize;e=e.slice(a,a+t.pageSize)}return e}async getCategories(){let t=w(),e=new Map;return t.forEach(a=>{let i=e.get(a.category)||0;e.set(a.category,i+1)}),Array.from(e.entries()).map(([a,i],r)=>({id:`category_${r}`,name:a,count:i}))}async getGameById(t){return ne(t)}async getCategoryNames(){return se()}async loginOnly(t){let e=Fe(t);return await le("/platform/login",{method:"POST",body:JSON.stringify(e)},this.config??void 0)}async Login(t){let e=await this.loginOnly(t),a;try{a=await this.getUserInfo()}catch{}return{tokenData:e,user:a}}async getUserInfo(){return await le("/platform/user",{method:"GET"},this.config??void 0)}async getUser(){return h.getJSON(p.USER)}async validateToken(t){return!!t}},Y=null;function D(){return Y||(Y=new Z),Y}var We="https://api.playsout.com",me="zh",C=class o{constructor(){this.config=null;this._isInitialized=!1;this._user=null;this._token=null;this._locale=me;this._widget=null}static getInstance(){return o.instance||(o.instance=new o),o.instance}async init(t={}){if(this._isInitialized)throw g("ALREADY_INITIALIZED");this.config={apiBaseUrl:t.apiBaseUrl||We,debug:t.debug||!1,storage:t.storage||"localStorage",locale:t.locale||me,appId:t.appId||""},h.configure(this.config.storage),de(i=>{this._token=i.accessToken}),ge(()=>{this._user=null,this._token=null,h.remove(p.TOKEN_DATA),h.remove(p.USER),y.emit("authExpired"),this.config?.debug&&console.warn("[PlaysoutSDK] Auth expired, logged out")});let e=h.getJSON(p.TOKEN_DATA);this._user=h.getJSON(p.USER),this._locale=h.get(p.LOCALE)||this.config.locale;let a=Math.floor(Date.now()/1e3);if(e&&e.refreshExpiresAt>a&&(this._token=e.accessToken),this._isInitialized=!0,this.config.debug&&(console.log("[PlaysoutSDK] Initialized with config:",this.config),console.log("[PlaysoutSDK] Restored token:",this._token?this._token.substring(0,20)+"...":"(none)")),y.emit("initialized"),e){let i=Math.floor(Date.now()/1e3);if(e.expiresAt-i<=300)try{let r=D();r.configure(this.config),await r.refreshToken();let n=h.getJSON(p.TOKEN_DATA);n&&(this._token=n.accessToken),this.config.debug&&console.log("[PlaysoutSDK] Token proactively refreshed at init")}catch(r){this.config.debug&&console.warn("[PlaysoutSDK] Proactive refresh failed, will retry on next request:",r)}}}destroy(){this.config=null,this._isInitialized=!1,this._user=null,this._token=null,h.clear(),y.clear()}get isInitialized(){return this._isInitialized}get isLoggedIn(){return!!this._token}get user(){return this._user}get token(){return this._token}get locale(){return this._locale}get sdkConfig(){return this.config}async Login(t){this.ensureInitialized(),this.config?.debug&&console.log("[PlaysoutSDK] Login with params:",t);let e=D();e.configure(this.config);let a=await e.loginOnly(t);h.setJSON(p.TOKEN_DATA,a),this.config?.debug&&console.log("[PlaysoutSDK] Token saved, expires at:",new Date(a.expiresAt*1e3).toISOString());let i;try{i=await e.getUserInfo()}catch(r){this.config?.debug&&console.log("[PlaysoutSDK] getUserInfo failed, login still success:",r)}return this._token=a.accessToken,i&&(this._user={userId:String(i.id),username:i.username},h.setJSON(p.USER,this._user)),this.config?.debug&&console.log("[PlaysoutSDK] Login success, user:",i),y.emit("login",{user:this._user,token:this._token}),{tokenData:a,user:i}}async getUserInfo(){if(this.ensureInitialized(),!this._token)throw g("NOT_LOGGED_IN","Please login first");let t=D();t.configure(this.config);let e=await t.getUserInfo();return this.config?.debug&&console.log("[PlaysoutSDK] getUserInfo result:",e),e&&(this._user={userId:String(e.id),username:e.username},h.setJSON(p.USER,this._user)),e}logout(){this._user=null,this._token=null,h.remove(p.TOKEN_DATA),h.remove(p.USER),y.emit("logout")}getToken(){return this.ensureInitialized(),this._token}getUser(){return this.ensureInitialized(),this._user}setLocale(t){if(this.ensureInitialized(),!["zh","en","ja","ko","vi","th","id","ms"].includes(t))throw g("INVALID_PARAMS",`Unsupported locale: ${t}`);this._locale=t,h.set(p.LOCALE,t),this.config?.debug&&console.log("[PlaysoutSDK] Locale changed to:",t);let e=this._widget||document.querySelector("playsout-widget");e&&e.getAttribute("locale")!==t&&e.setAttribute("locale",t),y.emit("localeChange",t)}getLocale(){return this.ensureInitialized(),this._locale}async getGames(t){this.ensureInitialized();let e=w();if(t?.category&&(e=e.filter(a=>a.category===t.category)),t?.search){let a=t.search.toLowerCase();e=e.filter(i=>i.title.toLowerCase().includes(a)||i.category.toLowerCase().includes(a)||i.description&&i.description.toLowerCase().includes(a))}if(t?.sortBy)switch(t.sortBy){case"newest":e=e.filter(a=>a.isNew).concat(e.filter(a=>!a.isNew));break;case"rating":e=e.filter(a=>a.isHot).concat(e.filter(a=>!a.isHot));break}if(t?.page&&t?.pageSize){let a=(t.page-1)*t.pageSize;e=e.slice(a,a+t.pageSize)}return e}async getCategories(){this.ensureInitialized();let t=w(),e=new Map;return t.forEach(a=>{let i=e.get(a.category)||0;e.set(a.category,i+1)}),Array.from(e.entries()).map(([a,i],r)=>({id:`category_${r}`,name:a,count:i}))}async getGameById(t){return this.ensureInitialized(),w().find(e=>e.id===t)}mount(t,e){if(this.ensureInitialized(),typeof document>"u")throw g("FEATURE_NOT_SUPPORTED","mount requires DOM environment");let a=document.querySelector(t);if(!a)throw g("INVALID_PARAMS",`Container not found: ${t}`);let i=document.createElement("playsout-widget");this.config?.appId&&i.setAttribute("app-id",this.config.appId),i.setAttribute("locale",e?.locale||this._locale),i.setAttribute("theme",e?.theme||"dark"),e?.detailMode&&i.setAttribute("detail-mode",e.detailMode),this._widget=i,e?.onGameClick&&i.addEventListener("game-click",r=>{let n=r;e.onGameClick(n.detail)}),e?.onLoginRequired&&i.addEventListener("login-required",e.onLoginRequired),e?.onLocaleChange&&i.addEventListener("locale-change",r=>{let n=r;e.onLocaleChange(n.detail)}),a.appendChild(i),this.config?.debug&&console.log("[PlaysoutSDK] Widget mounted to:",t)}unmount(){let t=document.querySelector("playsout-widget");t&&t.remove(),this._widget=null}on(t,e){return this.ensureInitialized(),y.on(t,e)}off(t,e){this.ensureInitialized(),y.off(t,e)}ensureInitialized(){if(!this._isInitialized)throw g("NOT_INITIALIZED")}},l=C.getInstance();typeof window<"u"&&(window.__playsout_sdk_instance=l);var N=Object.freeze({init:l.init.bind(l),mount:l.mount.bind(l),unmount:l.unmount.bind(l),destroy:l.destroy.bind(l),Login:l.Login.bind(l),logout:l.logout.bind(l),getToken:l.getToken.bind(l),getUserInfo:l.getUserInfo.bind(l),getUser:l.getUser.bind(l),setLocale:l.setLocale.bind(l),getLocale:l.getLocale.bind(l),getGames:l.getGames.bind(l),getCategories:l.getCategories.bind(l),on:l.on.bind(l),off:l.off.bind(l),get isInitialized(){return l.isInitialized},get isLoggedIn(){return l.isLoggedIn},instance:l,PlaysoutSDKClass:C});var Ve="games.playsout.com";var ee="__playsout_img_cache_v1",H=`${ee}_blob_`,K=!1,U=4*1024*1024-1024*1024;function c(...o){}var T=new Map,O=new Map,Ye=50,L=new Map,B=new Map,v=0;function te(){try{let o=localStorage.getItem(ee);if(!o)return c("loadCacheIndex: \u65E0\u7F13\u5B58\u7D22\u5F15"),v=0,new Map;let t=JSON.parse(o);c("loadCacheIndex: \u52A0\u8F7D\u4E86",t.length,"\u6761\u8BB0\u5F55"),v=0;for(let e of t){let a=`${H}${btoa(e.url).replace(/[\/+=]/g,"_")}`;localStorage.getItem(a)&&(v+=e.size)}return c("loadCacheIndex: \u5F53\u524D blob \u603B\u91CF",v,"bytes"),new Map(t.map(e=>[e.url,e]))}catch{return c("loadCacheIndex: \u89E3\u6790\u5931\u8D25"),v=0,new Map}}function j(o){try{let t=Array.from(o.values());t.length>200&&(t.sort((e,a)=>a.timestamp-e.timestamp),t.length=200),localStorage.setItem(ee,JSON.stringify(t)),c("saveCacheIndex: \u4FDD\u5B58\u4E86",t.length,"\u6761\u8BB0\u5F55")}catch(t){c("saveCacheIndex: \u4FDD\u5B58\u5931\u8D25",t)}}function Je(o,t){if(!(v+t<=U))try{let e=te(),a=Array.from(e.values()).map(i=>({record:i,score:pe(i.url)??1/0})).filter(i=>i.score>o).sort((i,r)=>r.score-i.score);for(let{record:i}of a){if(v+t<=U)break;let r=`${H}${btoa(i.url).replace(/[\/+=]/g,"_")}`;localStorage.removeItem(r),e.delete(i.url),v-=i.size,c("evictLowerPriorityEntries: \u91CA\u653E\u4F4E\u4F18\u5148\u7EA7\u7F13\u5B58",i.url,"\u8282\u7701",i.size,"bytes")}j(e)}catch(e){c("evictLowerPriorityEntries: \u5931\u8D25",e)}}function he(o,t){if(T.size>=Ye){let e=null,a=1/0;for(let[i,r]of T)r.lastAccess<a&&(a=r.lastAccess,e=i);if(e){let i=T.get(e);URL.revokeObjectURL(URL.createObjectURL(i.blob)),T.delete(e),c("addToMemoryCache: LRU\u6DD8\u6C70",e)}}T.set(o,{blob:t,lastAccess:Date.now()}),c("addToMemoryCache: \u6DFB\u52A0\u5230\u5185\u5B58\u7F13\u5B58",o,"\u5927\u5C0F:",t.size,"bytes")}async function Ze(o){if(!K)return;if(O.has(o)){c("cacheImage:",o,"\u8BE5\u8BF7\u6C42\u5DF2\u5728\u8FDB\u884C\u4E2D\uFF0C\u7B49\u5F85\u5B8C\u6210"),await O.get(o);return}c("cacheImage: \u5F00\u59CB\u4E0B\u8F7D",o);let t=(async()=>{try{let e=await fetch(o);if(!e.ok){c("cacheImage:",o,"\u54CD\u5E94\u5931\u8D25",e.status);return}let a=await e.blob(),i=e.headers.get("ETag")||"";c("cacheImage:",o,"\u4E0B\u8F7D\u6210\u529F\uFF0C\u5927\u5C0F:",a.size,"ETag:",i),he(o,a);let r=pe(o);if(r!==void 0)if(Je(r,a.size),v+a.size<=U)try{let n=te();n.set(o,{url:o,timestamp:Date.now(),etag:i,size:a.size}),j(n);let d=JSON.stringify({type:a.type,data:Array.from(new Uint8Array(await a.arrayBuffer()))}),m=`${H}${btoa(o).replace(/[\/+=]/g,"_")}`;localStorage.setItem(m,d),v+=a.size,c("cacheImage:",o,"\u5DF2\u4FDD\u5B58\u5230localStorage\uFF08\u5360\u7528",a.size,"bytes\uFF0C\u9884\u7B97\u5269\u4F59",U-v,"\uFF09")}catch(n){n.name==="QuotaExceededError"?c("cacheImage: localStorage \u914D\u989D\u5DF2\u6EE1\uFF0C\u505C\u6B62\u5199\u5165"):c("cacheImage:",o,"localStorage\u4FDD\u5B58\u5931\u8D25",n)}else c("cacheImage:",o,"\u817E\u51FA\u7A7A\u95F4\u540E\u4ECD\u8D85\u8FC7\u9884\u7B97\uFF0C\u8DF3\u8FC7");else c("cacheImage:",o,"\u975E\u4F18\u5148\u7EA7URL\uFF0C\u4E0D\u5199\u5165localStorage")}catch(e){c("cacheImage:",o,"\u4E0B\u8F7D\u5931\u8D25",e)}finally{O.delete(o)}})();O.set(o,t)}function ae(o){try{if(new URL(o).hostname===Ve)return c("isCacheableImage:",o,"\u662FCDN\u56FE\u7247"),!0}catch{}return o.startsWith("/games/")||o.startsWith("./games/")||o.startsWith("/home-")||o.startsWith("./home-")||o.startsWith("/logo")||o.startsWith("./logo")?(c("isCacheableImage:",o,"\u662F\u672C\u5730\u56FE\u7247"),!0):(c("isCacheableImage:",o,"\u4E0D\u662F\u53EF\u7F13\u5B58\u7684\u56FE\u7247"),!1)}function pe(o){return B.has(o)?B.get(o):L.get(o)}function fe(o){if(!K)return;let t=-1e3;for(let e of o)ae(e)&&B.set(e,t++);c("setCriticalAssets: \u5171",B.size,"\u4E2A\u5173\u952E\u8D44\u6E90")}function be(o,t=!1){if(!K)return;t||L.clear();let e=0;if(t){for(let i of L.values())i>e&&(e=i);e+=1}let a=e;for(let i of o)ae(i)&&L.set(i,a++);c("setPriorityCache: \u5F53\u524D\u5171",L.size,"\u4E2A\u4F18\u5148\u7F13\u5B58URL")}function ye(o){if(!K)return o;if(c("resolveWithCache:",o),!ae(o))return c("resolveWithCache:",o,"\u4E0D\u662FCDN\u56FE\u7247\uFF0C\u539F\u6837\u8FD4\u56DE"),o;if(T.has(o)){let e=T.get(o);e.lastAccess=Date.now();try{let a=URL.createObjectURL(e.blob);return c("resolveWithCache:",o,"\u547D\u4E2D\u5185\u5B58\u7F13\u5B58\uFF0C\u8FD4\u56DEblob URL"),a}catch{c("resolveWithCache:",o,"\u521B\u5EFAblob URL\u5931\u8D25")}}let t=te();if(t.has(o)){let e=`${H}${btoa(o).replace(/[\/+=]/g,"_")}`,a=localStorage.getItem(e);if(a)try{let{type:i,data:r}=JSON.parse(a),n=new Blob([new Uint8Array(r)],{type:i});he(o,n);let d=URL.createObjectURL(n);return c("resolveWithCache:",o,"\u547D\u4E2DlocalStorage\u7F13\u5B58\uFF0C\u540C\u6B65\u8FD4\u56DEblob URL"),d}catch(i){c("resolveWithCache:",o,"localStorage blob\u89E3\u6790\u5931\u8D25\uFF0C\u6E05\u9664\u7F13\u5B58",i),t.delete(o),j(t),localStorage.removeItem(e)}else c("resolveWithCache:",o,"localStorage blob\u4E0D\u5B58\u5728\uFF0C\u6E05\u9664\u7D22\u5F15"),t.delete(o),j(t)}return c("resolveWithCache:",o,"\u5B8C\u5168\u6CA1\u6709\u7F13\u5B58\uFF0C\u540E\u53F0\u4E0B\u8F7D"),Ze(o),o}var ve={app:{title:"Playsout Mini Games",description:"Play quick games without login."},home:{loggedIn:"Logged in",logIn:"Log in",games:"Games",bannerAlt:"Playsout Games",searchPlaceholder:"Search by title or category",noGames:"No games found"},profile:{title:"Profile",settings:"Settings",language:"Language",recentGames:"Recently Played Games",noGames:"No games played yet",guest:"Guest",languages:{en:"English",zh:"\u4E2D\u6587",ja:"\u65E5\u672C\u8A9E",ko:"\uD55C\uAD6D\uC5B4",th:"\u0E44\u0E17\u0E22",vi:"Ti\u1EBFng Vi\u1EC7t",id:"Bahasa Indonesia",ms:"Bahasa Melayu",es:"Espa\xF1ol"}},categories:{Adventure:"Adventure",Simulation:"Simulation",Casual:"Casual",Arcade:"Arcade",Moba:"Moba",Puzzle:"Puzzle"},auth:{loginSuccess:"Login successful!",loginTitle:"Playsout Login",welcome:"Welcome to the Playsout game platform",prompt:"Log in to start playing",mustLogin:"You must log in to play",authorizeHint:"Click the button below to authorize your login",authorizing:"Authorizing...",authorize:"Authorize login",terms:"By authorizing, you agree to our Terms of Service",signingIn:"Signing In",signMessage:"Please sign the message in your wallet"},game:{loading:"Loading",notFound:"Game not found",backHome:"Back to home",pageTitleSuffix:"Game Platform",header:{back:"Back",shareAria:"Share game",toggleMenuAria:"Toggle menu",fallbackTitle:"Game"}},menu:{favorite:"Favorite",favorited:"Favorited",profile:"Profile",login:"Login",refresh:"Refresh",loggedIn:"Logged in"},share:{title:"Share Game",closeLabel:"Close",retry:"Retry",loading:"Loading...",imageAlt:"Game share image",shareUrlLabel:"Share URL:",copied:"Copied",copy:"Copy",saveShare:"Save & Share",hint:"Image includes a QR code that links to this game",loadError:"Failed to load share image",downloadError:"Failed to download image"},checkin:{successTitle:"You got rewards!",successMessage:"Your rewards have been claimed.",failedTitle:"Check-in failed",canceledTitle:"Check-in canceled",errors:{userRejected:"You canceled the check-in operation",insufficientFunds:"Insufficient funds to pay gas",alreadyCheckedIn:"You already checked in today. Come back tomorrow!",network:"Network error. Please try again later"}},store:{title:"Gem Store",hot:"HOT",buy:"BUY",cancel:"Cancel",unit:"Gems",successTitle:"Payment Successful",successMessage:"You received {amount} gems!"},payment:{title:"Confirm Purchase",insufficientTitle:"Insufficient Balance",insufficientDesc:"Available: {gems} Gems",cancel:"Cancel",confirm:"Confirm",recharge:"Recharge",successTitle:"Payment Successful",successMessage:"{cost} <gem></gem> have been deducted."}};var we={app:{title:"Playsout \u5C0F\u6E38\u620F",description:"\u65E0\u9700\u767B\u5F55\u5373\u53EF\u7545\u73A9\u5C0F\u6E38\u620F\u3002"},home:{loggedIn:"\u5DF2\u767B\u5F55",logIn:"\u767B\u5F55",games:"\u6E38\u620F",bannerAlt:"Playsout \u6E38\u620F",searchPlaceholder:"\u6309\u6807\u9898\u6216\u7C7B\u522B\u641C\u7D22",noGames:"\u672A\u627E\u5230\u6E38\u620F"},profile:{title:"\u4E2A\u4EBA\u4E2D\u5FC3",settings:"\u8BBE\u7F6E",language:"\u8BED\u8A00",recentGames:"\u6700\u8FD1\u73A9\u8FC7\u7684\u6E38\u620F",noGames:"\u8FD8\u6CA1\u6709\u73A9\u8FC7\u6E38\u620F",guest:"\u6E38\u5BA2",languages:{en:"English",zh:"\u4E2D\u6587",ja:"\u65E5\u672C\u8A9E",ko:"\uD55C\uAD6D\uC5B4",th:"\u0E44\u0E17\u0E22",vi:"Ti\u1EBFng Vi\u1EC7t",id:"Bahasa Indonesia",ms:"Bahasa Melayu",es:"Espa\xF1ol"}},categories:{Adventure:"\u5192\u9669",Simulation:"\u6A21\u62DF",Casual:"\u4F11\u95F2",Arcade:"\u8857\u673A",Moba:"MOBA",Puzzle:"\u76CA\u667A"},auth:{loginSuccess:"\u767B\u5F55\u6210\u529F!",loginTitle:"Playsout \u767B\u5F55",welcome:"\u6B22\u8FCE\u6765\u5230 Playsout \u6E38\u620F\u5E73\u53F0",prompt:"\u767B\u5F55\u5F00\u59CB\u6E38\u620F",mustLogin:"\u60A8\u5FC5\u987B\u767B\u5F55\u624D\u80FD\u73A9\u6E38\u620F",authorizeHint:"\u70B9\u51FB\u4E0B\u65B9\u6309\u94AE\u6388\u6743\u767B\u5F55",authorizing:"\u6388\u6743\u4E2D...",authorize:"\u6388\u6743\u767B\u5F55",terms:"\u6388\u6743\u5373\u8868\u793A\u60A8\u540C\u610F\u6211\u4EEC\u7684\u670D\u52A1\u6761\u6B3E",signingIn:"\u767B\u5F55\u4E2D",signMessage:"\u8BF7\u5728\u94B1\u5305\u4E2D\u7B7E\u540D"},game:{loading:"\u52A0\u8F7D\u4E2D",notFound:"\u627E\u4E0D\u5230\u6E38\u620F",backHome:"\u8FD4\u56DE\u9996\u9875",pageTitleSuffix:"\u6E38\u620F\u5E73\u53F0",header:{back:"\u8FD4\u56DE",shareAria:"\u5206\u4EAB\u6E38\u620F",toggleMenuAria:"\u5207\u6362\u83DC\u5355",fallbackTitle:"\u6E38\u620F"}},menu:{favorite:"\u6536\u85CF",favorited:"\u5DF2\u6536\u85CF",profile:"\u4E2A\u4EBA\u4E2D\u5FC3",login:"\u767B\u5F55",refresh:"\u5237\u65B0",loggedIn:"\u5DF2\u767B\u5F55"},share:{title:"\u5206\u4EAB\u6E38\u620F",closeLabel:"\u5173\u95ED",retry:"\u91CD\u8BD5",loading:"\u52A0\u8F7D\u4E2D...",imageAlt:"\u6E38\u620F\u5206\u4EAB\u56FE\u7247",shareUrlLabel:"\u5206\u4EAB\u94FE\u63A5:",copied:"\u5DF2\u590D\u5236",copy:"\u590D\u5236",saveShare:"\u4FDD\u5B58\u5E76\u5206\u4EAB",hint:"\u56FE\u7247\u5305\u542B\u6B64\u6E38\u620F\u7684\u4E8C\u7EF4\u7801",loadError:"\u52A0\u8F7D\u5206\u4EAB\u56FE\u7247\u5931\u8D25",downloadError:"\u4E0B\u8F7D\u56FE\u7247\u5931\u8D25"},checkin:{successTitle:"\u9886\u53D6\u6210\u529F!",successMessage:"\u60A8\u7684\u5956\u52B1\u5DF2\u9886\u53D6\u3002",failedTitle:"\u7B7E\u5230\u5931\u8D25",canceledTitle:"\u7B7E\u5230\u53D6\u6D88",errors:{userRejected:"\u60A8\u53D6\u6D88\u4E86\u7B7E\u5230\u64CD\u4F5C",insufficientFunds:"\u4F59\u989D\u4E0D\u8DB3\u4EE5\u652F\u4ED8 Gas \u8D39",alreadyCheckedIn:"\u4ECA\u5929\u5DF2\u7ECF\u7B7E\u5230\u8FC7\u4E86\u3002\u660E\u5929\u518D\u6765\u5427!",network:"\u7F51\u7EDC\u9519\u8BEF\uFF0C\u8BF7\u7A0D\u540E\u518D\u8BD5"}},store:{title:"\u5B9D\u77F3\u5546\u5E97",hot:"\u70ED\u95E8",buy:"\u8D2D\u4E70",cancel:"\u53D6\u6D88",unit:"\u5B9D\u77F3",successTitle:"\u652F\u4ED8\u6210\u529F",successMessage:"\u60A8\u83B7\u5F97\u4E86 {amount} \u5B9D\u77F3\uFF01"},payment:{title:"\u786E\u8BA4\u8D2D\u4E70",insufficientTitle:"\u4F59\u989D\u4E0D\u8DB3",insufficientDesc:"\u53EF\u7528\u4F59\u989D: {gems} \u5B9D\u77F3",cancel:"\u53D6\u6D88",confirm:"\u786E\u8BA4",recharge:"\u5145\u503C",successTitle:"\u652F\u4ED8\u6210\u529F",successMessage:"\u5DF2\u6263\u9664 {cost}<gem></gem>\u3002"}};var ke={app:{title:"Playsout \u30DF\u30CB\u30B2\u30FC\u30E0",description:"\u30ED\u30B0\u30A4\u30F3\u306A\u3057\u3067\u30B2\u30FC\u30E0\u3092\u30D7\u30EC\u30A4\u3002"},home:{loggedIn:"\u30ED\u30B0\u30A4\u30F3\u6E08\u307F",logIn:"\u30ED\u30B0\u30A4\u30F3",games:"\u30B2\u30FC\u30E0",bannerAlt:"Playsout \u30B2\u30FC\u30E0",searchPlaceholder:"\u30BF\u30A4\u30C8\u30EB\u307E\u305F\u306F\u30AB\u30C6\u30B4\u30EA\u3067\u691C\u7D22",noGames:"\u30B2\u30FC\u30E0\u304C\u898B\u3064\u304B\u308A\u307E\u305B\u3093"},profile:{title:"\u30D7\u30ED\u30D5\u30A3\u30FC\u30EB",settings:"\u8A2D\u5B9A",language:"\u8A00\u8A9E",recentGames:"\u6700\u8FD1\u30D7\u30EC\u30A4\u3057\u305F\u30B2\u30FC\u30E0",noGames:"\u307E\u3060\u30D7\u30EC\u30A4\u3057\u305F\u30B2\u30FC\u30E0\u304C\u3042\u308A\u307E\u305B\u3093",guest:"\u30B2\u30B9\u30C8",languages:{en:"English",zh:"\u4E2D\u6587",ja:"\u65E5\u672C\u8A9E",ko:"\uD55C\uAD6D\uC5B4",th:"\u0E44\u0E17\u0E22",vi:"Ti\u1EBFng Vi\u1EC7t",id:"Bahasa Indonesia",ms:"Bahasa Melayu",es:"Espa\xF1ol"}},categories:{Adventure:"\u30A2\u30C9\u30D9\u30F3\u30C1\u30E3\u30FC",Simulation:"\u30B7\u30DF\u30E5\u30EC\u30FC\u30B7\u30E7\u30F3",Casual:"\u30AB\u30B8\u30E5\u30A2\u30EB",Arcade:"\u30A2\u30FC\u30B1\u30FC\u30C9",Moba:"MOBA",Puzzle:"\u30D1\u30BA\u30EB"},auth:{loginSuccess:"\u30ED\u30B0\u30A4\u30F3\u6210\u529F!",loginTitle:"Playsout \u30ED\u30B0\u30A4\u30F3",welcome:"Playsout \u30B2\u30FC\u30E0\u30D7\u30E9\u30C3\u30C8\u30D5\u30A9\u30FC\u30E0\u3078\u3088\u3046\u3053\u305D",prompt:"\u30ED\u30B0\u30A4\u30F3\u3057\u3066\u30D7\u30EC\u30A4\u3092\u958B\u59CB",mustLogin:"\u30D7\u30EC\u30A4\u3059\u308B\u306B\u306F\u30ED\u30B0\u30A4\u30F3\u304C\u5FC5\u8981\u3067\u3059",authorizeHint:"\u4E0B\u306E\u30DC\u30BF\u30F3\u3092\u30AF\u30EA\u30C3\u30AF\u3057\u3066\u30ED\u30B0\u30A4\u30F3\u3092\u627F\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044",authorizing:"\u627F\u8A8D\u4E2D...",authorize:"\u30ED\u30B0\u30A4\u30F3\u3092\u627F\u8A8D",terms:"\u627F\u8A8D\u3059\u308B\u3053\u3068\u3067\u3001\u5229\u7528\u898F\u7D04\u306B\u540C\u610F\u3057\u305F\u3053\u3068\u306B\u306A\u308A\u307E\u3059",signingIn:"\u30B5\u30A4\u30F3\u30A4\u30F3\u4E2D",signMessage:"\u30A6\u30A9\u30EC\u30C3\u30C8\u3067\u30E1\u30C3\u30BB\u30FC\u30B8\u306B\u7F72\u540D\u3057\u3066\u304F\u3060\u3055\u3044"},game:{loading:"\u8AAD\u307F\u8FBC\u307F\u4E2D",notFound:"\u30B2\u30FC\u30E0\u304C\u898B\u3064\u304B\u308A\u307E\u305B\u3093",backHome:"\u30DB\u30FC\u30E0\u306B\u623B\u308B",pageTitleSuffix:"\u30B2\u30FC\u30E0\u30D7\u30E9\u30C3\u30C8\u30D5\u30A9\u30FC\u30E0",header:{back:"\u623B\u308B",shareAria:"\u30B2\u30FC\u30E0\u3092\u5171\u6709",toggleMenuAria:"\u30E1\u30CB\u30E5\u30FC\u5207\u308A\u66FF\u3048",fallbackTitle:"\u30B2\u30FC\u30E0"}},menu:{favorite:"\u304A\u6C17\u306B\u5165\u308A",favorited:"\u304A\u6C17\u306B\u5165\u308A\u6E08\u307F",profile:"\u30D7\u30ED\u30D5\u30A3\u30FC\u30EB",login:"\u30ED\u30B0\u30A4\u30F3",refresh:"\u66F4\u65B0",loggedIn:"\u30ED\u30B0\u30A4\u30F3\u6E08\u307F"},share:{title:"\u30B2\u30FC\u30E0\u3092\u5171\u6709",closeLabel:"\u9589\u3058\u308B",retry:"\u518D\u8A66\u884C",loading:"\u8AAD\u307F\u8FBC\u307F\u4E2D...",imageAlt:"\u30B2\u30FC\u30E0\u5171\u6709\u753B\u50CF",shareUrlLabel:"\u5171\u6709URL:",copied:"\u30B3\u30D4\u30FC\u3057\u307E\u3057\u305F",copy:"\u30B3\u30D4\u30FC",saveShare:"\u4FDD\u5B58\u3057\u3066\u5171\u6709",hint:"\u753B\u50CF\u306B\u306F\u30B2\u30FC\u30E0\u3078\u306EQR\u30B3\u30FC\u30C9\u304C\u542B\u307E\u308C\u3066\u3044\u307E\u3059",loadError:"\u5171\u6709\u753B\u50CF\u306E\u8AAD\u307F\u8FBC\u307F\u306B\u5931\u6557\u3057\u307E\u3057\u305F",downloadError:"\u753B\u50CF\u306E\u30C0\u30A6\u30F3\u30ED\u30FC\u30C9\u306B\u5931\u6557\u3057\u307E\u3057\u305F"},checkin:{successTitle:"\u5831\u916C\u3092\u7372\u5F97\u3057\u307E\u3057\u305F!",successMessage:"\u5831\u916C\u304C\u8ACB\u6C42\u3055\u308C\u307E\u3057\u305F\u3002",failedTitle:"\u30C1\u30A7\u30C3\u30AF\u30A4\u30F3\u5931\u6557",canceledTitle:"\u30C1\u30A7\u30C3\u30AF\u30A4\u30F3\u30AD\u30E3\u30F3\u30BB\u30EB",errors:{userRejected:"\u30C1\u30A7\u30C3\u30AF\u30A4\u30F3\u64CD\u4F5C\u3092\u30AD\u30E3\u30F3\u30BB\u30EB\u3057\u307E\u3057\u305F",insufficientFunds:"\u30AC\u30B9\u4EE3\u3092\u652F\u6255\u3046\u6B8B\u9AD8\u304C\u4E0D\u8DB3\u3057\u3066\u3044\u307E\u3059",alreadyCheckedIn:"\u672C\u65E5\u306F\u65E2\u306B\u30C1\u30A7\u30C3\u30AF\u30A4\u30F3\u6E08\u307F\u3067\u3059\u3002\u660E\u65E5\u307E\u305F\u6765\u3066\u304F\u3060\u3055\u3044!",network:"\u30CD\u30C3\u30C8\u30EF\u30FC\u30AF\u30A8\u30E9\u30FC\u3002\u5F8C\u3067\u3082\u3046\u4E00\u5EA6\u304A\u8A66\u3057\u304F\u3060\u3055\u3044"}},store:{title:"\u30B8\u30A7\u30E0\u30B9\u30C8\u30A2",hot:"HOT",buy:"\u8CFC\u5165",cancel:"\u30AD\u30E3\u30F3\u30BB\u30EB",unit:"\u30B8\u30A7\u30E0",successTitle:"\u652F\u6255\u3044\u5B8C\u4E86",successMessage:"{amount}\u30B8\u30A7\u30E0\u3092\u53D7\u3051\u53D6\u308A\u307E\u3057\u305F\uFF01"},payment:{title:"\u8CFC\u5165\u78BA\u8A8D",insufficientTitle:"\u6B8B\u9AD8\u4E0D\u8DB3",insufficientDesc:"\u4FDD\u6709: {gems} \u30B8\u30A7\u30E0",cancel:"\u30AD\u30E3\u30F3\u30BB\u30EB",confirm:"\u78BA\u8A8D",recharge:"\u30C1\u30E3\u30FC\u30B8",successTitle:"\u652F\u6255\u3044\u5B8C\u4E86",successMessage:"{cost}<gem></gem>\u304C\u5DEE\u3057\u5F15\u304B\u308C\u307E\u3057\u305F\u3002"}};var xe={app:{title:"Playsout \uBBF8\uB2C8 \uAC8C\uC784",description:"\uB85C\uADF8\uC778 \uC5C6\uC774 \uAC8C\uC784\uC744 \uC990\uAE30\uC138\uC694."},home:{loggedIn:"\uB85C\uADF8\uC778\uB428",logIn:"\uB85C\uADF8\uC778",games:"\uAC8C\uC784",bannerAlt:"Playsout \uAC8C\uC784",searchPlaceholder:"\uC81C\uBAA9 \uB610\uB294 \uCE74\uD14C\uACE0\uB9AC\uB85C \uAC80\uC0C9",noGames:"\uAC8C\uC784\uC744 \uCC3E\uC744 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4"},profile:{title:"\uD504\uB85C\uD544",settings:"\uC124\uC815",language:"\uC5B8\uC5B4",recentGames:"\uCD5C\uADFC \uD50C\uB808\uC774\uD55C \uAC8C\uC784",noGames:"\uC544\uC9C1 \uD50C\uB808\uC774\uD55C \uAC8C\uC784\uC774 \uC5C6\uC2B5\uB2C8\uB2E4",guest:"\uC190\uB2D8",languages:{en:"English",zh:"\u4E2D\u6587",ja:"\u65E5\u672C\u8A9E",ko:"\uD55C\uAD6D\uC5B4",th:"\u0E44\u0E17\u0E22",vi:"Ti\u1EBFng Vi\u1EC7t",id:"Bahasa Indonesia",ms:"Bahasa Melayu",es:"Espa\xF1ol"}},categories:{Adventure:"\uC5B4\uB4DC\uBCA4\uCC98",Simulation:"\uC2DC\uBBAC\uB808\uC774\uC158",Casual:"\uCE90\uC8FC\uC5BC",Arcade:"\uC544\uCF00\uC774\uB4DC",Moba:"MOBA",Puzzle:"\uD37C\uC990"},auth:{loginSuccess:"\uB85C\uADF8\uC778 \uC131\uACF5!",loginTitle:"Playsout \uB85C\uADF8\uC778",welcome:"Playsout \uAC8C\uC784 \uD50C\uB7AB\uD3FC\uC5D0 \uC624\uC2E0 \uAC83\uC744 \uD658\uC601\uD569\uB2C8\uB2E4",prompt:"\uAC8C\uC784\uC744 \uC2DC\uC791\uD558\uB824\uBA74 \uB85C\uADF8\uC778\uD558\uC138\uC694",mustLogin:"\uAC8C\uC784\uC744 \uD558\uB824\uBA74 \uB85C\uADF8\uC778\uD574\uC57C \uD569\uB2C8\uB2E4",authorizeHint:"\uB85C\uADF8\uC778\uC744 \uC2B9\uC778\uD558\uB824\uBA74 \uC544\uB798 \uBC84\uD2BC\uC744 \uD074\uB9AD\uD558\uC138\uC694",authorizing:"\uC2B9\uC778 \uC911...",authorize:"\uB85C\uADF8\uC778 \uC2B9\uC778",terms:"\uC2B9\uC778\uD558\uBA74 \uC11C\uBE44\uC2A4 \uC57D\uAD00\uC5D0 \uB3D9\uC758\uD558\uAC8C \uB429\uB2C8\uB2E4",signingIn:"\uB85C\uADF8\uC778 \uC911",signMessage:"\uC9C0\uAC11\uC5D0\uC11C \uBA54\uC2DC\uC9C0\uC5D0 \uC11C\uBA85\uD574\uC8FC\uC138\uC694"},game:{loading:"\uB85C\uB529 \uC911",notFound:"\uAC8C\uC784\uC744 \uCC3E\uC744 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4",backHome:"\uD648\uC73C\uB85C \uB3CC\uC544\uAC00\uAE30",pageTitleSuffix:"\uAC8C\uC784 \uD50C\uB7AB\uD3FC",header:{back:"\uB4A4\uB85C",shareAria:"\uAC8C\uC784 \uACF5\uC720",toggleMenuAria:"\uBA54\uB274 \uC804\uD658",fallbackTitle:"\uAC8C\uC784"}},menu:{favorite:"\uC990\uACA8\uCC3E\uAE30",favorited:"\uC990\uACA8\uCC3E\uAE30\uB428",profile:"\uD504\uB85C\uD544",login:"\uB85C\uADF8\uC778",refresh:"\uC0C8\uB85C\uACE0\uCE68",loggedIn:"\uB85C\uADF8\uC778\uB428"},share:{title:"\uAC8C\uC784 \uACF5\uC720",closeLabel:"\uB2EB\uAE30",retry:"\uC7AC\uC2DC\uB3C4",loading:"\uB85C\uB529 \uC911...",imageAlt:"\uAC8C\uC784 \uACF5\uC720 \uC774\uBBF8\uC9C0",shareUrlLabel:"\uACF5\uC720 URL:",copied:"\uBCF5\uC0AC\uB428",copy:"\uBCF5\uC0AC",saveShare:"\uC800\uC7A5 \uBC0F \uACF5\uC720",hint:"\uC774\uBBF8\uC9C0\uC5D0 \uAC8C\uC784\uC73C\uB85C \uC5F0\uACB0\uB418\uB294 QR \uCF54\uB4DC\uAC00 \uD3EC\uD568\uB418\uC5B4 \uC788\uC2B5\uB2C8\uB2E4",loadError:"\uACF5\uC720 \uC774\uBBF8\uC9C0\uB97C \uBD88\uB7EC\uC624\uC9C0 \uBABB\uD588\uC2B5\uB2C8\uB2E4",downloadError:"\uC774\uBBF8\uC9C0\uB97C \uB2E4\uC6B4\uB85C\uB4DC\uD558\uC9C0 \uBABB\uD588\uC2B5\uB2C8\uB2E4"},checkin:{successTitle:"\uBCF4\uC0C1\uC744 \uBC1B\uC558\uC2B5\uB2C8\uB2E4!",successMessage:"\uBCF4\uC0C1\uC774 \uC9C0\uAE09\uB418\uC5C8\uC2B5\uB2C8\uB2E4.",failedTitle:"\uCD9C\uC11D \uC2E4\uD328",canceledTitle:"\uCD9C\uC11D \uCDE8\uC18C\uB428",errors:{userRejected:"\uCD9C\uC11D \uC791\uC5C5\uC744 \uCDE8\uC18C\uD588\uC2B5\uB2C8\uB2E4",insufficientFunds:"\uAC00\uC2A4\uBE44\uB97C \uC9C0\uBD88\uD560 \uC790\uAE08\uC774 \uBD80\uC871\uD569\uB2C8\uB2E4",alreadyCheckedIn:"\uC624\uB298 \uC774\uBBF8 \uCD9C\uC11D\uD588\uC2B5\uB2C8\uB2E4. \uB0B4\uC77C \uB2E4\uC2DC \uC624\uC138\uC694!",network:"\uB124\uD2B8\uC6CC\uD06C \uC624\uB958. \uB098\uC911\uC5D0 \uB2E4\uC2DC \uC2DC\uB3C4\uD574 \uC8FC\uC138\uC694"}},store:{title:"\uBCF4\uC11D \uC0C1\uC810",hot:"\uC778\uAE30",buy:"\uAD6C\uB9E4",cancel:"\uCDE8\uC18C",unit:"\uBCF4\uC11D",successTitle:"\uACB0\uC81C \uC131\uACF5",successMessage:"{amount}\uAC1C\uC758 \uBCF4\uC11D\uC744 \uBC1B\uC558\uC2B5\uB2C8\uB2E4!"},payment:{title:"\uAD6C\uB9E4 \uD655\uC778",insufficientTitle:"\uC794\uC561 \uBD80\uC871",insufficientDesc:"\uBCF4\uC720: {gems} \uBCF4\uC11D",cancel:"\uCDE8\uC18C",confirm:"\uD655\uC778",recharge:"\uCDA9\uC804",successTitle:"\uACB0\uC81C \uC131\uACF5",successMessage:"{cost}<gem></gem>\uC774 \uCC28\uAC10\uB418\uC5C8\uC2B5\uB2C8\uB2E4."}};var Se={app:{title:"Playsout \u0E21\u0E34\u0E19\u0E34\u0E40\u0E01\u0E21",description:"\u0E40\u0E25\u0E48\u0E19\u0E40\u0E01\u0E21\u0E14\u0E48\u0E27\u0E19\u0E42\u0E14\u0E22\u0E44\u0E21\u0E48\u0E15\u0E49\u0E2D\u0E07\u0E40\u0E02\u0E49\u0E32\u0E2A\u0E39\u0E48\u0E23\u0E30\u0E1A\u0E1A"},home:{loggedIn:"\u0E40\u0E02\u0E49\u0E32\u0E2A\u0E39\u0E48\u0E23\u0E30\u0E1A\u0E1A\u0E41\u0E25\u0E49\u0E27",logIn:"\u0E40\u0E02\u0E49\u0E32\u0E2A\u0E39\u0E48\u0E23\u0E30\u0E1A\u0E1A",games:"\u0E40\u0E01\u0E21",bannerAlt:"\u0E40\u0E01\u0E21 Playsout",searchPlaceholder:"\u0E04\u0E49\u0E19\u0E2B\u0E32\u0E15\u0E32\u0E21\u0E0A\u0E37\u0E48\u0E2D\u0E2B\u0E23\u0E37\u0E2D\u0E2B\u0E21\u0E27\u0E14\u0E2B\u0E21\u0E39\u0E48",noGames:"\u0E44\u0E21\u0E48\u0E1E\u0E1A\u0E40\u0E01\u0E21"},profile:{title:"\u0E42\u0E1B\u0E23\u0E44\u0E1F\u0E25\u0E4C",settings:"\u0E01\u0E32\u0E23\u0E15\u0E31\u0E49\u0E07\u0E04\u0E48\u0E32",language:"\u0E20\u0E32\u0E29\u0E32",recentGames:"\u0E40\u0E01\u0E21\u0E17\u0E35\u0E48\u0E40\u0E25\u0E48\u0E19\u0E25\u0E48\u0E32\u0E2A\u0E38\u0E14",noGames:"\u0E22\u0E31\u0E07\u0E44\u0E21\u0E48\u0E21\u0E35\u0E40\u0E01\u0E21\u0E17\u0E35\u0E48\u0E40\u0E25\u0E48\u0E19",guest:"\u0E1C\u0E39\u0E49\u0E40\u0E22\u0E35\u0E48\u0E22\u0E21\u0E0A\u0E21",languages:{en:"English",zh:"\u4E2D\u6587",ja:"\u65E5\u672C\u8A9E",ko:"\uD55C\uAD6D\uC5B4",th:"\u0E44\u0E17\u0E22",vi:"Ti\u1EBFng Vi\u1EC7t",id:"Bahasa Indonesia",ms:"Bahasa Melayu",es:"Espa\xF1ol"}},categories:{Adventure:"\u0E1C\u0E08\u0E0D\u0E20\u0E31\u0E22",Simulation:"\u0E08\u0E33\u0E25\u0E2D\u0E07\u0E2A\u0E16\u0E32\u0E19\u0E01\u0E32\u0E23\u0E13\u0E4C",Casual:"\u0E41\u0E04\u0E0A\u0E0A\u0E27\u0E25",Arcade:"\u0E2D\u0E32\u0E23\u0E4C\u0E40\u0E04\u0E14",Moba:"\u0E42\u0E21\u0E1A\u0E32",Puzzle:"\u0E1B\u0E23\u0E34\u0E28\u0E19\u0E32"},auth:{loginSuccess:"\u0E40\u0E02\u0E49\u0E32\u0E2A\u0E39\u0E48\u0E23\u0E30\u0E1A\u0E1A\u0E2A\u0E33\u0E40\u0E23\u0E47\u0E08!",loginTitle:"\u0E40\u0E02\u0E49\u0E32\u0E2A\u0E39\u0E48\u0E23\u0E30\u0E1A\u0E1A Playsout",welcome:"\u0E22\u0E34\u0E19\u0E14\u0E35\u0E15\u0E49\u0E2D\u0E19\u0E23\u0E31\u0E1A\u0E2A\u0E39\u0E48\u0E41\u0E1E\u0E25\u0E15\u0E1F\u0E2D\u0E23\u0E4C\u0E21\u0E40\u0E01\u0E21 Playsout",prompt:"\u0E40\u0E02\u0E49\u0E32\u0E2A\u0E39\u0E48\u0E23\u0E30\u0E1A\u0E1A\u0E40\u0E1E\u0E37\u0E48\u0E2D\u0E40\u0E23\u0E34\u0E48\u0E21\u0E40\u0E25\u0E48\u0E19",mustLogin:"\u0E04\u0E38\u0E13\u0E15\u0E49\u0E2D\u0E07\u0E40\u0E02\u0E49\u0E32\u0E2A\u0E39\u0E48\u0E23\u0E30\u0E1A\u0E1A\u0E40\u0E1E\u0E37\u0E48\u0E2D\u0E40\u0E25\u0E48\u0E19",authorizeHint:"\u0E04\u0E25\u0E34\u0E01\u0E1B\u0E38\u0E48\u0E21\u0E14\u0E49\u0E32\u0E19\u0E25\u0E48\u0E32\u0E07\u0E40\u0E1E\u0E37\u0E48\u0E2D\u0E2D\u0E19\u0E38\u0E0D\u0E32\u0E15\u0E01\u0E32\u0E23\u0E40\u0E02\u0E49\u0E32\u0E2A\u0E39\u0E48\u0E23\u0E30\u0E1A\u0E1A",authorizing:"\u0E01\u0E33\u0E25\u0E31\u0E07\u0E2D\u0E19\u0E38\u0E0D\u0E32\u0E15...",authorize:"\u0E2D\u0E19\u0E38\u0E0D\u0E32\u0E15\u0E01\u0E32\u0E23\u0E40\u0E02\u0E49\u0E32\u0E2A\u0E39\u0E48\u0E23\u0E30\u0E1A\u0E1A",terms:"\u0E01\u0E32\u0E23\u0E2D\u0E19\u0E38\u0E0D\u0E32\u0E15\u0E41\u0E2A\u0E14\u0E07\u0E27\u0E48\u0E32\u0E04\u0E38\u0E13\u0E22\u0E2D\u0E21\u0E23\u0E31\u0E1A\u0E02\u0E49\u0E2D\u0E01\u0E33\u0E2B\u0E19\u0E14\u0E43\u0E19\u0E01\u0E32\u0E23\u0E43\u0E2B\u0E49\u0E1A\u0E23\u0E34\u0E01\u0E32\u0E23\u0E02\u0E2D\u0E07\u0E40\u0E23\u0E32",signingIn:"\u0E01\u0E33\u0E25\u0E31\u0E07\u0E25\u0E07\u0E0A\u0E37\u0E48\u0E2D\u0E40\u0E02\u0E49\u0E32\u0E43\u0E0A\u0E49",signMessage:"\u0E01\u0E23\u0E38\u0E13\u0E32\u0E40\u0E0B\u0E47\u0E19\u0E0A\u0E37\u0E48\u0E2D\u0E02\u0E49\u0E2D\u0E04\u0E27\u0E32\u0E21\u0E43\u0E19\u0E01\u0E23\u0E30\u0E40\u0E1B\u0E4B\u0E32\u0E40\u0E07\u0E34\u0E19\u0E02\u0E2D\u0E07\u0E04\u0E38\u0E13"},game:{loading:"\u0E01\u0E33\u0E25\u0E31\u0E07\u0E42\u0E2B\u0E25\u0E14",notFound:"\u0E44\u0E21\u0E48\u0E1E\u0E1A\u0E40\u0E01\u0E21",backHome:"\u0E01\u0E25\u0E31\u0E1A\u0E2B\u0E19\u0E49\u0E32\u0E2B\u0E25\u0E31\u0E01",pageTitleSuffix:"\u0E41\u0E1E\u0E25\u0E15\u0E1F\u0E2D\u0E23\u0E4C\u0E21\u0E40\u0E01\u0E21",header:{back:"\u0E01\u0E25\u0E31\u0E1A",shareAria:"\u0E41\u0E0A\u0E23\u0E4C\u0E40\u0E01\u0E21",toggleMenuAria:"\u0E2A\u0E25\u0E31\u0E1A\u0E40\u0E21\u0E19\u0E39",fallbackTitle:"\u0E40\u0E01\u0E21"}},menu:{favorite:"\u0E23\u0E32\u0E22\u0E01\u0E32\u0E23\u0E42\u0E1B\u0E23\u0E14",favorited:"\u0E40\u0E1E\u0E34\u0E48\u0E21\u0E43\u0E19\u0E23\u0E32\u0E22\u0E01\u0E32\u0E23\u0E42\u0E1B\u0E23\u0E14\u0E41\u0E25\u0E49\u0E27",profile:"\u0E42\u0E1B\u0E23\u0E44\u0E1F\u0E25\u0E4C",login:"\u0E40\u0E02\u0E49\u0E32\u0E2A\u0E39\u0E48\u0E23\u0E30\u0E1A\u0E1A",refresh:"\u0E23\u0E35\u0E40\u0E1F\u0E23\u0E0A",loggedIn:"\u0E40\u0E02\u0E49\u0E32\u0E2A\u0E39\u0E48\u0E23\u0E30\u0E1A\u0E1A\u0E41\u0E25\u0E49\u0E27"},share:{title:"\u0E41\u0E0A\u0E23\u0E4C\u0E40\u0E01\u0E21",closeLabel:"\u0E1B\u0E34\u0E14",retry:"\u0E25\u0E2D\u0E07\u0E43\u0E2B\u0E21\u0E48",loading:"\u0E01\u0E33\u0E25\u0E31\u0E07\u0E42\u0E2B\u0E25\u0E14...",imageAlt:"\u0E23\u0E39\u0E1B\u0E20\u0E32\u0E1E\u0E41\u0E0A\u0E23\u0E4C\u0E40\u0E01\u0E21",shareUrlLabel:"\u0E41\u0E0A\u0E23\u0E4C URL:",copied:"\u0E04\u0E31\u0E14\u0E25\u0E2D\u0E01\u0E41\u0E25\u0E49\u0E27",copy:"\u0E04\u0E31\u0E14\u0E25\u0E2D\u0E01",saveShare:"\u0E1A\u0E31\u0E19\u0E17\u0E36\u0E01\u0E41\u0E25\u0E30\u0E41\u0E0A\u0E23\u0E4C",hint:"\u0E23\u0E39\u0E1B\u0E20\u0E32\u0E1E\u0E23\u0E27\u0E21\u0E23\u0E2B\u0E31\u0E2A QR \u0E17\u0E35\u0E48\u0E25\u0E34\u0E07\u0E01\u0E4C\u0E44\u0E1B\u0E22\u0E31\u0E07\u0E40\u0E01\u0E21\u0E19\u0E35\u0E49",loadError:"\u0E42\u0E2B\u0E25\u0E14\u0E23\u0E39\u0E1B\u0E20\u0E32\u0E1E\u0E41\u0E0A\u0E23\u0E4C\u0E44\u0E21\u0E48\u0E2A\u0E33\u0E40\u0E23\u0E47\u0E08",downloadError:"\u0E14\u0E32\u0E27\u0E19\u0E4C\u0E42\u0E2B\u0E25\u0E14\u0E23\u0E39\u0E1B\u0E20\u0E32\u0E1E\u0E44\u0E21\u0E48\u0E2A\u0E33\u0E40\u0E23\u0E47\u0E08"},checkin:{successTitle:"\u0E04\u0E38\u0E13\u0E44\u0E14\u0E49\u0E23\u0E31\u0E1A\u0E23\u0E32\u0E07\u0E27\u0E31\u0E25!",successMessage:"\u0E23\u0E31\u0E1A\u0E23\u0E32\u0E07\u0E27\u0E31\u0E25\u0E02\u0E2D\u0E07\u0E04\u0E38\u0E13\u0E41\u0E25\u0E49\u0E27",failedTitle:"\u0E40\u0E0A\u0E47\u0E04\u0E2D\u0E34\u0E19\u0E25\u0E49\u0E21\u0E40\u0E2B\u0E25\u0E27",canceledTitle:"\u0E22\u0E01\u0E40\u0E25\u0E34\u0E01\u0E40\u0E0A\u0E47\u0E04\u0E2D\u0E34\u0E19",errors:{userRejected:"\u0E04\u0E38\u0E13\u0E22\u0E01\u0E40\u0E25\u0E34\u0E01\u0E01\u0E32\u0E23\u0E40\u0E0A\u0E47\u0E04\u0E2D\u0E34\u0E19",insufficientFunds:"\u0E40\u0E07\u0E34\u0E19\u0E44\u0E21\u0E48\u0E1E\u0E2D\u0E08\u0E48\u0E32\u0E22\u0E04\u0E48\u0E32\u0E41\u0E01\u0E4A\u0E2A",alreadyCheckedIn:"\u0E04\u0E38\u0E13\u0E40\u0E0A\u0E47\u0E04\u0E2D\u0E34\u0E19\u0E27\u0E31\u0E19\u0E19\u0E35\u0E49\u0E44\u0E1B\u0E41\u0E25\u0E49\u0E27 \u0E01\u0E25\u0E31\u0E1A\u0E21\u0E32\u0E43\u0E2B\u0E21\u0E48\u0E1E\u0E23\u0E38\u0E48\u0E07\u0E19\u0E35\u0E49!",network:"\u0E02\u0E49\u0E2D\u0E1C\u0E34\u0E14\u0E1E\u0E25\u0E32\u0E14\u0E40\u0E04\u0E23\u0E37\u0E2D\u0E02\u0E48\u0E32\u0E22 \u0E42\u0E1B\u0E23\u0E14\u0E25\u0E2D\u0E07\u0E43\u0E2B\u0E21\u0E48\u0E20\u0E32\u0E22\u0E2B\u0E25\u0E31\u0E07"}},store:{title:"\u0E23\u0E49\u0E32\u0E19\u0E04\u0E49\u0E32\u0E2D\u0E31\u0E0D\u0E21\u0E13\u0E35",hot:"\u0E21\u0E32\u0E41\u0E23\u0E07",buy:"\u0E0B\u0E37\u0E49\u0E2D",cancel:"\u0E22\u0E01\u0E40\u0E25\u0E34\u0E01",unit:"\u0E2D\u0E31\u0E0D\u0E21\u0E13\u0E35",successTitle:"\u0E0A\u0E33\u0E23\u0E30\u0E40\u0E07\u0E34\u0E19\u0E2A\u0E33\u0E40\u0E23\u0E47\u0E08",successMessage:"\u0E04\u0E38\u0E13\u0E44\u0E14\u0E49\u0E23\u0E31\u0E1A {amount} \u0E2D\u0E31\u0E0D\u0E21\u0E13\u0E35!"},payment:{title:"\u0E22\u0E37\u0E19\u0E22\u0E31\u0E19\u0E01\u0E32\u0E23\u0E0B\u0E37\u0E49\u0E2D",insufficientTitle:"\u0E22\u0E2D\u0E14\u0E04\u0E07\u0E40\u0E2B\u0E25\u0E37\u0E2D\u0E44\u0E21\u0E48\u0E1E\u0E2D",insufficientDesc:"\u0E21\u0E35\u0E2D\u0E22\u0E39\u0E48: {gems} \u0E2D\u0E31\u0E0D\u0E21\u0E13\u0E35",cancel:"\u0E22\u0E01\u0E40\u0E25\u0E34\u0E01",confirm:"\u0E22\u0E37\u0E19\u0E22\u0E31\u0E19",recharge:"\u0E40\u0E15\u0E34\u0E21\u0E40\u0E07\u0E34\u0E19",successTitle:"\u0E0A\u0E33\u0E23\u0E30\u0E40\u0E07\u0E34\u0E19\u0E2A\u0E33\u0E40\u0E23\u0E47\u0E08",successMessage:"\u0E2B\u0E31\u0E01 {cost} <gem></gem> \u0E41\u0E25\u0E49\u0E27"}};var Te={app:{title:"Playsout Mini Games",description:"Ch\u01A1i game nhanh kh\xF4ng c\u1EA7n \u0111\u0103ng nh\u1EADp."},home:{loggedIn:"\u0110\xE3 \u0111\u0103ng nh\u1EADp",logIn:"\u0110\u0103ng nh\u1EADp",games:"Tr\xF2 ch\u01A1i",bannerAlt:"Tr\xF2 ch\u01A1i Playsout",searchPlaceholder:"T\xECm ki\u1EBFm theo ti\xEAu \u0111\u1EC1 ho\u1EB7c danh m\u1EE5c",noGames:"Kh\xF4ng t\xECm th\u1EA5y tr\xF2 ch\u01A1i"},profile:{title:"H\u1ED3 s\u01A1",settings:"C\xE0i \u0111\u1EB7t",language:"Ng\xF4n ng\u1EEF",recentGames:"Tr\xF2 ch\u01A1i \u0111\xE3 ch\u01A1i g\u1EA7n \u0111\xE2y",noGames:"Ch\u01B0a ch\u01A1i game n\xE0o",guest:"Kh\xE1ch",languages:{en:"English",zh:"\u4E2D\u6587",ja:"\u65E5\u672C\u8A9E",ko:"\uD55C\uAD6D\uC5B4",th:"\u0E44\u0E17\u0E22",vi:"Ti\u1EBFng Vi\u1EC7t",id:"Bahasa Indonesia",ms:"Bahasa Melayu",es:"Espa\xF1ol"}},categories:{Adventure:"Phi\xEAu l\u01B0u",Simulation:"M\xF4 ph\u1ECFng",Casual:"Ph\u1ED5 th\xF4ng",Arcade:"Arcade",Moba:"Moba",Puzzle:"Gi\u1EA3i \u0111\u1ED1"},auth:{loginSuccess:"\u0110\u0103ng nh\u1EADp th\xE0nh c\xF4ng!",loginTitle:"\u0110\u0103ng nh\u1EADp Playsout",welcome:"Ch\xE0o m\u1EEBng \u0111\u1EBFn v\u1EDBi n\u1EC1n t\u1EA3ng tr\xF2 ch\u01A1i Playsout",prompt:"\u0110\u0103ng nh\u1EADp \u0111\u1EC3 b\u1EAFt \u0111\u1EA7u ch\u01A1i",mustLogin:"B\u1EA1n ph\u1EA3i \u0111\u0103ng nh\u1EADp \u0111\u1EC3 ch\u01A1i",authorizeHint:"Nh\u1EA5p v\xE0o n\xFAt b\xEAn d\u01B0\u1EDBi \u0111\u1EC3 \u1EE7y quy\u1EC1n \u0111\u0103ng nh\u1EADp",authorizing:"\u0110ang \u1EE7y quy\u1EC1n...",authorize:"\u1EE6y quy\u1EC1n \u0111\u0103ng nh\u1EADp",terms:"B\u1EB1ng c\xE1ch \u1EE7y quy\u1EC1n, b\u1EA1n \u0111\u1ED3ng \xFD v\u1EDBi \u0110i\u1EC1u kho\u1EA3n d\u1ECBch v\u1EE5 c\u1EE7a ch\xFAng t\xF4i",signingIn:"\u0110ang \u0111\u0103ng nh\u1EADp",signMessage:"Vui l\xF2ng k\xFD tin nh\u1EAFn trong v\xED c\u1EE7a b\u1EA1n"},game:{loading:"\u0110ang t\u1EA3i",notFound:"Kh\xF4ng t\xECm th\u1EA5y tr\xF2 ch\u01A1i",backHome:"V\u1EC1 trang ch\u1EE7",pageTitleSuffix:"N\u1EC1n t\u1EA3ng tr\xF2 ch\u01A1i",header:{back:"Quay l\u1EA1i",shareAria:"Chia s\u1EBB tr\xF2 ch\u01A1i",toggleMenuAria:"Chuy\u1EC3n \u0111\u1ED5i menu",fallbackTitle:"Tr\xF2 ch\u01A1i"}},menu:{favorite:"Y\xEAu th\xEDch",favorited:"\u0110\xE3 y\xEAu th\xEDch",profile:"H\u1ED3 s\u01A1",login:"\u0110\u0103ng nh\u1EADp",refresh:"L\xE0m m\u1EDBi",loggedIn:"\u0110\xE3 \u0111\u0103ng nh\u1EADp"},share:{title:"Chia s\u1EBB tr\xF2 ch\u01A1i",closeLabel:"\u0110\xF3ng",retry:"Th\u1EED l\u1EA1i",loading:"\u0110ang t\u1EA3i...",imageAlt:"H\xECnh \u1EA3nh chia s\u1EBB tr\xF2 ch\u01A1i",shareUrlLabel:"URL chia s\u1EBB:",copied:"\u0110\xE3 sao ch\xE9p",copy:"Sao ch\xE9p",saveShare:"L\u01B0u & Chia s\u1EBB",hint:"H\xECnh \u1EA3nh bao g\u1ED3m m\xE3 QR li\xEAn k\u1EBFt \u0111\u1EBFn tr\xF2 ch\u01A1i n\xE0y",loadError:"Kh\xF4ng t\u1EA3i \u0111\u01B0\u1EE3c h\xECnh \u1EA3nh chia s\u1EBB",downloadError:"Kh\xF4ng t\u1EA3i xu\u1ED1ng \u0111\u01B0\u1EE3c h\xECnh \u1EA3nh"},checkin:{successTitle:"B\u1EA1n \u0111\xE3 nh\u1EADn ph\u1EA7n th\u01B0\u1EDFng!",successMessage:"Ph\u1EA7n th\u01B0\u1EDFng c\u1EE7a b\u1EA1n \u0111\xE3 \u0111\u01B0\u1EE3c nh\u1EADn.",failedTitle:"\u0110i\u1EC3m danh th\u1EA5t b\u1EA1i",canceledTitle:"\u0110i\u1EC3m danh \u0111\xE3 h\u1EE7y",errors:{userRejected:"B\u1EA1n \u0111\xE3 h\u1EE7y thao t\xE1c \u0111i\u1EC3m danh",insufficientFunds:"Kh\xF4ng \u0111\u1EE7 ti\u1EC1n \u0111\u1EC3 tr\u1EA3 ph\xED Gas",alreadyCheckedIn:"H\xF4m nay b\u1EA1n \u0111\xE3 \u0111i\u1EC3m danh r\u1ED3i. H\xE3y quay l\u1EA1i v\xE0o ng\xE0y mai!",network:"L\u1ED7i m\u1EA1ng. Vui l\xF2ng th\u1EED l\u1EA1i sau"}},store:{title:"C\u1EEDa h\xE0ng \u0110\xE1 qu\xFD",hot:"HOT",buy:"MUA",cancel:"H\u1EE7y",unit:"\u0110\xE1 qu\xFD",successTitle:"Thanh to\xE1n th\xE0nh c\xF4ng",successMessage:"B\u1EA1n \u0111\xE3 nh\u1EADn \u0111\u01B0\u1EE3c {amount} \u0111\xE1 qu\xFD!"},payment:{title:"X\xE1c nh\u1EADn mua",insufficientTitle:"S\u1ED1 d\u01B0 kh\xF4ng \u0111\u1EE7",insufficientDesc:"Hi\u1EC7n c\xF3: {gems} \u0110\xE1 qu\xFD",cancel:"H\u1EE7y",confirm:"X\xE1c nh\u1EADn",recharge:"N\u1EA1p ti\u1EC1n",successTitle:"Thanh to\xE1n th\xE0nh c\xF4ng",successMessage:"\u0110\xE3 tr\u1EEB {cost} <gem></gem>."}};var Ie={app:{title:"Playsout Mini Games",description:"Mainkan game cepat tanpa login."},home:{loggedIn:"Sudah login",logIn:"Login",games:"Game",bannerAlt:"Game Playsout",searchPlaceholder:"Cari berdasarkan judul atau kategori",noGames:"Game tidak ditemukan"},profile:{title:"Profil",settings:"Pengaturan",language:"Bahasa",recentGames:"Game yang Baru Dimainkan",noGames:"Belum ada game yang dimainkan",guest:"Tamu",languages:{en:"English",zh:"\u4E2D\u6587",ja:"\u65E5\u672C\u8A9E",ko:"\uD55C\uAD6D\uC5B4",th:"\u0E44\u0E17\u0E22",vi:"Ti\u1EBFng Vi\u1EC7t",id:"Bahasa Indonesia",ms:"Bahasa Melayu",es:"Espa\xF1ol"}},categories:{Adventure:"Petualangan",Simulation:"Simulasi",Casual:"Kasual",Arcade:"Arcade",Moba:"Moba",Puzzle:"Teka-teki"},auth:{loginSuccess:"Login berhasil!",loginTitle:"Login Playsout",welcome:"Selamat datang di platform game Playsout",prompt:"Login untuk mulai bermain",mustLogin:"Anda harus login untuk bermain",authorizeHint:"Klik tombol di bawah untuk mengotorisasi login",authorizing:"Mengotorisasi...",authorize:"Otorisasi login",terms:"Dengan mengotorisasi, Anda menyetujui Ketentuan Layanan kami",signingIn:"Masuk...",signMessage:"Silakan tanda tangani pesan di dompet Anda"},game:{loading:"Memuat",notFound:"Game tidak ditemukan",backHome:"Kembali ke beranda",pageTitleSuffix:"Platform Game",header:{back:"Kembali",shareAria:"Bagikan game",toggleMenuAria:"Alihkan menu",fallbackTitle:"Game"}},menu:{favorite:"Favorit",favorited:"Difavoritkan",profile:"Profil",login:"Login",refresh:"Segarkan",loggedIn:"Sudah login"},share:{title:"Bagikan Game",closeLabel:"Tutup",retry:"Coba lagi",loading:"Memuat...",imageAlt:"Gambar berbagi game",shareUrlLabel:"URL Berbagi:",copied:"Disalin",copy:"Salin",saveShare:"Simpan & Bagikan",hint:"Gambar termasuk kode QR yang menautkan ke game ini",loadError:"Gagal memuat gambar berbagi",downloadError:"Gagal mengunduh gambar"},checkin:{successTitle:"Anda mendapat hadiah!",successMessage:"Hadiah Anda telah diklaim.",failedTitle:"Check-in gagal",canceledTitle:"Check-in dibatalkan",errors:{userRejected:"Anda membatalkan operasi check-in",insufficientFunds:"Dana tidak cukup untuk membayar biaya Gas",alreadyCheckedIn:"Anda sudah check-in hari ini. Kembali lagi besok!",network:"Kesalahan jaringan. Silakan coba lagi nanti"}},store:{title:"Toko Permata",hot:"HOT",buy:"BELI",cancel:"Batal",unit:"Permata",successTitle:"Pembayaran Berhasil",successMessage:"Anda menerima {amount} permata!"},payment:{title:"Konfirmasi Pembelian",insufficientTitle:"Saldo Tidak Cukup",insufficientDesc:"Tersedia: {gems} Permata",cancel:"Batal",confirm:"Konfirmasi",recharge:"Isi Ulang",successTitle:"Pembayaran Berhasil",successMessage:"{cost} <gem></gem> telah dikurangi."}};var Ae={app:{title:"Permainan Mini Playsout",description:"Main permainan pantas tanpa log masuk."},home:{loggedIn:"Log masuk",logIn:"Log masuk",games:"Permainan",bannerAlt:"Permainan Playsout",searchPlaceholder:"Cari mengikut tajuk atau kategori",noGames:"Tiada permainan dijumpai"},profile:{title:"Profil",settings:"Tetapan",language:"Bahasa",recentGames:"Permainan Baru Dimainkan",noGames:"Belum ada permainan dimainkan",guest:"Pelawat",languages:{en:"English",zh:"\u4E2D\u6587",ja:"\u65E5\u672C\u8A9E",ko:"\uD55C\uAD6D\uC5B4",th:"\u0E44\u0E17\u0E22",vi:"Ti\u1EBFng Vi\u1EC7t",id:"Bahasa Indonesia",ms:"Bahasa Melayu",es:"Espa\xF1ol"}},categories:{Adventure:"Pengembaraan",Simulation:"Simulasi",Casual:"Santai",Arcade:"Arked",Moba:"Moba",Puzzle:"Teka-teki"},auth:{loginSuccess:"Log masuk berjaya!",loginTitle:"Log masuk Playsout",welcome:"Selamat datang ke platform permainan Playsout",prompt:"Log masuk untuk mula bermain",mustLogin:"Anda mesti log masuk untuk bermain",authorizeHint:"Klik butang di bawah untuk membenarkan log masuk",authorizing:"Membenarkan...",authorize:"Benarkan log masuk",terms:"Dengan membenarkan, anda bersetuju dengan Syarat Perkhidmatan kami",signingIn:"Sedang log masuk",signMessage:"Sila tandatangan mesej dalam dompet anda"},game:{loading:"Memuatkan",notFound:"Permainan tidak dijumpai",backHome:"Kembali ke laman utama",pageTitleSuffix:"Platform Permainan",header:{back:"Kembali",shareAria:"Kongsi permainan",toggleMenuAria:"Togol menu",fallbackTitle:"Permainan"}},menu:{favorite:"Kegemaran",favorited:"Dikegemarankan",profile:"Profil",login:"Log masuk",refresh:"Muat semula",loggedIn:"Log masuk"},share:{title:"Kongsi Permainan",closeLabel:"Tutup",retry:"Cuba lagi",loading:"Memuatkan...",imageAlt:"Imej kongsi permainan",shareUrlLabel:"URL Kongsi:",copied:"Disalin",copy:"Salin",saveShare:"Simpan & Kongsi",hint:"Imej termasuk kod QR yang memaut ke permainan ini",loadError:"Gagal memuatkan imej kongsi",downloadError:"Gagal memuat turun imej"},checkin:{successTitle:"Anda mendapat ganjaran!",successMessage:"Ganjaran anda telah dituntut.",failedTitle:"Daftar masuk gagal",canceledTitle:"Daftar masuk dibatalkan",errors:{userRejected:"Anda membatalkan operasi daftar masuk",insufficientFunds:"Dana tidak mencukupi untuk membayar yuran Gas",alreadyCheckedIn:"Anda sudah daftar masuk hari ini. Kembali lagi esok!",network:"Ralat rangkaian. Sila cuba lagi kemudian"}},store:{title:"Kedai Permata",hot:"HOT",buy:"BELI",cancel:"Batal",unit:"Permata",successTitle:"Pembayaran Berjaya",successMessage:"Anda menerima {amount} permata!"},payment:{title:"Sahkan Pembelian",insufficientTitle:"Baki Tidak Mencukupi",insufficientDesc:"Tersedia: {gems} Permata",cancel:"Batal",confirm:"Sahkan",recharge:"Tambah Nilai",successTitle:"Pembayaran Berjaya",successMessage:"{cost} <gem></gem> telah ditolak."}};var P=o=>{if(typeof window>"u")return o;let t=s(o);return ye(t)},nt="https://games.playsout.com/resources/icon/fonts",$=o=>{if(typeof window>"u")return o;let t=o.replace(/^\.\//,"");return`${nt}/${t}`},R={en:ve,zh:we,ja:ke,ko:xe,th:Se,vi:Te,id:Ie,ms:Ae};function oe(o,t){let e=t.split("."),a=o;for(let i of e)if(a&&typeof a=="object"&&i in a)a=a[i];else return t;return typeof a=="string"?a:t}function Ee(o,t={}){return o.replace(/\{(\w+)\}/g,(e,a)=>String(t[a]??`{${a}}`))}var Ce=`
|
|
2
2
|
:root {
|
|
3
3
|
--playsout-primary: #6366f1;
|
|
4
4
|
--playsout-bg: #0f1419;
|
|
@@ -13,16 +13,16 @@
|
|
|
13
13
|
/* Adelle Sans \u5B57\u4F53 */
|
|
14
14
|
@font-face {
|
|
15
15
|
font-family: "Adelle Sans";
|
|
16
|
-
src: url('${
|
|
17
|
-
url('${
|
|
16
|
+
src: url('${$("./AdelleSans-Regular.woff2")}') format('woff2'),
|
|
17
|
+
url('${$("./AdelleSans-Regular.woff")}') format('woff');
|
|
18
18
|
font-style: normal;
|
|
19
19
|
font-display: swap;
|
|
20
20
|
font-weight: 300;
|
|
21
21
|
}
|
|
22
22
|
@font-face {
|
|
23
23
|
font-family: "Adelle Sans";
|
|
24
|
-
src: url('${
|
|
25
|
-
url('${
|
|
24
|
+
src: url('${$("./AdelleSans-Semibold.woff2")}') format('woff2'),
|
|
25
|
+
url('${$("./AdelleSans-Semibold.woff")}') format('woff');
|
|
26
26
|
font-style: normal;
|
|
27
27
|
font-display: swap;
|
|
28
28
|
font-weight: 600;
|
|
@@ -1153,7 +1153,7 @@
|
|
|
1153
1153
|
border: none;
|
|
1154
1154
|
display: block;
|
|
1155
1155
|
}
|
|
1156
|
-
`,
|
|
1156
|
+
`,Le=`
|
|
1157
1157
|
<svg xmlns="http://www.w3.org/2000/svg" style="display:none">
|
|
1158
1158
|
<symbol id="icon-adventure" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
|
|
1159
1159
|
<polyline points="14.5 17.5 3 6 3 3 6 3 17.5 14.5"/>
|
|
@@ -1201,7 +1201,7 @@
|
|
|
1201
1201
|
<path d="M1 21h22L12 2 1 21zm12-3h-2v-2h2v2zm0-4h-2v-4h2v4z"/>
|
|
1202
1202
|
</symbol>
|
|
1203
1203
|
</svg>
|
|
1204
|
-
`,
|
|
1204
|
+
`,st=o=>{switch(o){case"Adventure":return"#FF7D54";case"Simulation":return"#4ADE80";case"Casual":return"#60A5FA";case"Arcade":return"#A78BFA";case"Moba":return"#FACC15";case"Puzzle":return"#FB923C";case"Doge OS":return"#FBBF24";default:return"#22d3ee"}},Pe=[{id:"Doge OS",name:"Doge OS",iconType:"image",iconSrc:"https://games.playsout.com/resources/icon/image/doge32.png"},{id:"Adventure",name:"Adventure",iconType:"icon",iconKey:"adventure",color:"#FF7D54"},{id:"Simulation",name:"Simulation",iconType:"icon",iconKey:"simulation",color:"#4ADE80"},{id:"Casual",name:"Casual",iconType:"icon",iconKey:"casual",color:"#60A5FA"},{id:"Arcade",name:"Arcade",iconType:"icon",iconKey:"arcade",color:"#A78BFA"},{id:"Moba",name:"Moba",iconType:"icon",iconKey:"moba",color:"#FACC15"},{id:"Puzzle",name:"Puzzle",iconType:"icon",iconKey:"puzzle",color:"#FB923C"}],M=class extends HTMLElement{constructor(){super();this._appId="";this._locale="zh";this.games=[];this.filteredGames=[];this.selectedCategory=null;this.searchQuery="";this.bannerUrl="";this.userPoints=1e3;this.avatarUrl="";this.recentGames=[];this._detailMode="iframe";this.currentView="list";this.currentGame=null;this.gemPacks=[{amount:12,price:.99,hot:!1},{amount:60,price:4.99,hot:!0},{amount:180,price:14.99,hot:!1},{amount:360,price:29.99,hot:!1}];this.toastTimeout=null;this.shadow=this.attachShadow({mode:"open"})}static get observedAttributes(){return["app-id","locale","banner-url","user-points","avatar-url","recent-games","detail-mode"]}t(e,a){let i=R[this._locale]??R.en,r=oe(i,e);if(r!==e)return Ee(r,a??{});let n=oe(R.en,e);return Ee(n,a??{})}hasTranslation(e){let a=R[this._locale]??R.en;return oe(a,e)!==e}connectedCallback(){this.render(),this.loadGames()}attributeChangedCallback(e,a,i){if(a!==i){switch(e){case"app-id":this._appId=i||"";break;case"locale":this._locale=i||"zh";break;case"banner-url":this.bannerUrl=i||"";break;case"user-points":this.userPoints=parseInt(i||"1000",10);break;case"avatar-url":this.avatarUrl=i||"";break;case"recent-games":try{this.recentGames=i?JSON.parse(i):[]}catch{this.recentGames=[]}break;case"detail-mode":this._detailMode=i||"link";break}this.shadow.innerHTML&&(e==="locale"?(this.render(),this.loadGames()):this.updateUI())}}async loadGames(){this.showLoading();let e=window.__playsout_sdk_instance;if(!e||!e.isInitialized){let a=()=>{e&&e.isInitialized&&(y.off("initialized",a),this.loadGames())};e?y.on("initialized",a):this.pollForSDK();return}this.doLoadGames(e)}pollForSDK(){let e=setInterval(()=>{let a=window.__playsout_sdk_instance;a&&a.isInitialized&&(clearInterval(e),this.loadGames())},100);setTimeout(()=>{clearInterval(e),this.games.length||(this.showError(),console.warn("[PlaysoutWidget] SDK initialization timeout"))},1e4)}async doLoadGames(e){try{this.games=await e.getGames();let a=this.games.map(i=>{if(!i.image)return null;let r=window.__playsout_resolveAsset,n=typeof r=="function"?r(i.image):i.image;return typeof n!="string"?null:n.startsWith("http")?n:null}).filter(Boolean);a.length>0&&be(a,!0),this.filterGames()}catch(a){console.error("[PlaysoutWidget] Failed to load games:",a),this.showError()}}filterGames(){let e=[...this.games];if(this.selectedCategory&&(e=e.filter(a=>a.category===this.selectedCategory)),this.searchQuery){let a=this.searchQuery.toLowerCase();e=e.filter(i=>i.title.toLowerCase().includes(a)||i.category.toLowerCase().includes(a))}this.filteredGames=e,this.renderGames()}showLoading(){let e=this.shadow.querySelector(".widget-content");e&&(e.innerHTML=`
|
|
1205
1205
|
<div class="loading">
|
|
1206
1206
|
<div class="loading-spinner"></div>
|
|
1207
1207
|
</div>
|
|
@@ -1214,9 +1214,9 @@
|
|
|
1214
1214
|
</div>
|
|
1215
1215
|
<p>Failed to load games</p>
|
|
1216
1216
|
</div>
|
|
1217
|
-
`)}render(){console.log("[PlaysoutWidget] render called");let e=this.bannerUrl||s("./home-banner.webp");if(this.__criticalAssetsMarked!==!0){let a=s("./logowhite.png"),i=
|
|
1218
|
-
<style>${
|
|
1219
|
-
${
|
|
1217
|
+
`)}render(){console.log("[PlaysoutWidget] render called");let e=this.bannerUrl||s("./home-banner.webp");if(this.__criticalAssetsMarked!==!0){let a=s("./logowhite.png"),i=Pe.filter(r=>r.iconType==="image"&&r.iconSrc).map(r=>r.iconSrc);fe([a,e,...i]),this.__criticalAssetsMarked=!0}if(this.currentView==="detail"&&this.currentGame){this.renderGameDetail();return}this.shadow.innerHTML=`
|
|
1218
|
+
<style>${Ce}</style>
|
|
1219
|
+
${Le}
|
|
1220
1220
|
<div class="playsout-scroll-container">
|
|
1221
1221
|
<div class="mobile-container">
|
|
1222
1222
|
<div class="playsout-widget">
|
|
@@ -1279,7 +1279,7 @@
|
|
|
1279
1279
|
<!-- Categories -->
|
|
1280
1280
|
<div class="widget-categories">
|
|
1281
1281
|
<div class="categories-wrapper" id="categories">
|
|
1282
|
-
${
|
|
1282
|
+
${Pe.map(a=>{let i=this.selectedCategory===a.id,r=a.color||st(a.id),n=a.iconType==="image"&&a.iconSrc?`<img src="${P(a.iconSrc)}" alt="" style="width:1rem;height:1rem;object-fit:contain;" />`:`<svg width="1rem" height="1rem" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" color="${r}" style="color:${r}"><use href="#icon-${a.iconKey}"/></svg>`,d=this.hasTranslation(`categories.${a.id}`)?this.t(`categories.${a.id}`):a.name;return`
|
|
1283
1283
|
<button class="category-btn${i?" active":""}" data-category="${a.id}">
|
|
1284
1284
|
<span class="category-icon">${n}</span>
|
|
1285
1285
|
<span class="category-label">${d}</span>
|
|
@@ -1366,7 +1366,7 @@
|
|
|
1366
1366
|
</section>
|
|
1367
1367
|
</div>
|
|
1368
1368
|
</div>
|
|
1369
|
-
`,this.shadow.appendChild(e),e.querySelector("#profile-close-btn")?.addEventListener("click",()=>{this.hideProfileModal()}),e.addEventListener("click",u=>{u.target===e&&this.hideProfileModal()});let m=()=>{let u=window.__playsout_sdk_instance
|
|
1369
|
+
`,this.shadow.appendChild(e),e.querySelector("#profile-close-btn")?.addEventListener("click",()=>{this.hideProfileModal()}),e.addEventListener("click",u=>{u.target===e&&this.hideProfileModal()});let m=()=>{let u=window.__playsout_sdk_instance,F=(u?.getUser?u.getUser():null)?.username||this.t("profile.guest"),_=this.shadow.querySelector(".profile-username-text");_&&(_.textContent=F)},b=()=>{let u=this.shadow.querySelector(".profile-username-text");u&&(u.textContent=this.t("profile.guest")),this.hideProfileModal()},f=window.__playsout_sdk_instance;f?.on&&(f.on("login",m),f.on("logout",m),f.on("authExpired",b)),e.querySelectorAll(".profile-recent-game").forEach(u=>{u.addEventListener("click",()=>{let k=window.__playsout_sdk_instance,F=typeof k?.isInitialized=="function"?k.isInitialized():k?.isInitialized,_=typeof k?.isLoggedIn=="function"?k.isLoggedIn():k?.isLoggedIn;if(!F||!_){this.hideProfileModal(),this.showLoginPrompt();return}let Re=u.dataset.gameId;this.dispatchEvent(new CustomEvent("game-click",{bubbles:!0,composed:!0,detail:Re})),this.hideProfileModal()})}),e.querySelector("#profile-language-btn")?.addEventListener("click",()=>{this.showLanguageSelectModal()})}hideProfileModal(){this.shadow.querySelector("#profile-modal-overlay")?.remove(),this.shadow.querySelector("#language-modal-overlay")?.remove()}showLanguageSelectModal(){this.shadow.querySelector("#language-modal-overlay")?.remove();let e=document.createElement("div");e.className="language-modal-overlay",e.id="language-modal-overlay";let a=[{code:"en",label:"English"},{code:"zh",label:"\u4E2D\u6587"},{code:"ja",label:"\u65E5\u672C\u8A9E"},{code:"ko",label:"\uD55C\uAD6D\uC5B4"},{code:"th",label:"\u0E44\u0E17\u0E22"},{code:"vi",label:"Ti\u1EBFng Vi\u1EC7t"},{code:"id",label:"Bahasa Indonesia"},{code:"ms",label:"Bahasa Melayu"},{code:"es",label:"Espa\xF1ol"}];e.innerHTML=`
|
|
1370
1370
|
<div class="language-modal">
|
|
1371
1371
|
<div class="language-modal-header">
|
|
1372
1372
|
<h3 class="language-modal-title">${this.t("profile.language")}</h3>
|
|
@@ -1439,8 +1439,8 @@
|
|
|
1439
1439
|
</div>
|
|
1440
1440
|
</div>
|
|
1441
1441
|
`}renderGameDetail(){if(!this.currentGame)return;let e=this.currentGame,a=e.externalUrl||`/games/${e.id}`;this.shadow.innerHTML=`
|
|
1442
|
-
<style>${
|
|
1443
|
-
${
|
|
1442
|
+
<style>${Ce}</style>
|
|
1443
|
+
${Le}
|
|
1444
1444
|
<div class="playsout-scroll-container">
|
|
1445
1445
|
<div class="mobile-container">
|
|
1446
1446
|
<div class="playsout-widget">
|
|
@@ -1468,4 +1468,4 @@
|
|
|
1468
1468
|
</div>
|
|
1469
1469
|
</div>
|
|
1470
1470
|
</div>
|
|
1471
|
-
`,this.shadow.getElementById("detail-back-btn")?.addEventListener("click",()=>{this.currentView="list",this.currentGame=null,this.render(),this.loadGames()})}attachEventListeners(){this.shadow.getElementById("gems-btn")?.addEventListener("click",()=>{this.showStoreModal()}),this.shadow.getElementById("profile-btn")?.addEventListener("click",()=>{this.showProfileModal()});let e=this.shadow.getElementById("search-input");e?.addEventListener("input",i=>{let r=i.target;this.searchQuery=r.value,this.filterGames()}),this.shadow.getElementById("search-btn")?.addEventListener("click",()=>{e?.focus()});let a=this.shadow.getElementById("categories");a?.addEventListener("click",i=>{let n=i.target.closest(".category-btn");if(n){let d=n.getAttribute("data-category")||"";this.selectedCategory===d?(this.selectedCategory=null,a.querySelectorAll(".category-btn").forEach(m=>{m.classList.remove("active")})):(this.selectedCategory=d,a.querySelectorAll(".category-btn").forEach(m=>{m.classList.remove("active")}),n.classList.add("active")),this.filterGames()}})}};customElements.get("playsout-widget")||customElements.define("playsout-widget",M);typeof customElements<"u"&&(customElements.get("playsout-widget")||customElements.define("playsout-widget",M));var{init:
|
|
1471
|
+
`,this.shadow.getElementById("detail-back-btn")?.addEventListener("click",()=>{this.currentView="list",this.currentGame=null,this.render(),this.loadGames()})}attachEventListeners(){this.shadow.getElementById("gems-btn")?.addEventListener("click",()=>{this.showStoreModal()}),this.shadow.getElementById("profile-btn")?.addEventListener("click",()=>{this.showProfileModal()});let e=this.shadow.getElementById("search-input");e?.addEventListener("input",i=>{let r=i.target;this.searchQuery=r.value,this.filterGames()}),this.shadow.getElementById("search-btn")?.addEventListener("click",()=>{e?.focus()});let a=this.shadow.getElementById("categories");a?.addEventListener("click",i=>{let n=i.target.closest(".category-btn");if(n){let d=n.getAttribute("data-category")||"";this.selectedCategory===d?(this.selectedCategory=null,a.querySelectorAll(".category-btn").forEach(m=>{m.classList.remove("active")})):(this.selectedCategory=d,a.querySelectorAll(".category-btn").forEach(m=>{m.classList.remove("active")}),n.classList.add("active")),this.filterGames()}})}};customElements.get("playsout-widget")||customElements.define("playsout-widget",M);typeof customElements<"u"&&(customElements.get("playsout-widget")||customElements.define("playsout-widget",M));var{init:lt,mount:ct,unmount:dt,destroy:gt,Login:ut,logout:mt,getToken:ht,getUserInfo:pt,getUser:ft,setLocale:bt,getLocale:yt,getGames:vt,getCategories:wt,on:kt,off:xt,isInitialized:St,isLoggedIn:Tt,instance:It,PlaysoutSDKClass:At}=N;typeof window<"u"&&(window.Playsout=N,window.__playsout_sdk_instance=N.instance);return Ne(Et);})();
|