'Account is disabled and cannot log in', 'API_AUTH_TOKEN_SECRET is not configured' => 'API_AUTH_TOKEN_SECRET is not configured', 'AUTH_TOKEN_EXPIRED' => 'auth-token expired', 'AUTH_TOKEN_FORMAT_INVALID' => 'auth-token format invalid', 'AUTH_TOKEN_INVALID' => 'auth-token invalid', 'AUTH_TOKEN_INVALID_OR_EXPIRED' => 'auth-token invalid or expired', 'AUTH_TOKEN_REQUIRED' => 'Please provide auth-token', 'Account is disabled and cannot log in' => 'Account is disabled and cannot log in', 'App type must be plugin or app' => 'App type must be plugin or app', 'BALANCE_LESS_THAN_MIN' => 'Balance %s is less than %s, cannot continue', 'BATCH_DELETE_FORBIDDEN' => 'Batch delete is not allowed', 'BUY_TICKET_ERROR' => 'Invalid lottery ticket purchase', 'Balance %s is less than %s, cannot continue' => 'Balance %s is less than %s, cannot continue', 'Batch delete is not allowed' => 'Batch delete is not allowed', 'CONFIG_ID_NOT_FOUND_OR_TIER_EMPTY' => 'Config ID %s not found or tier is empty', 'Cannot open file or create file failed' => 'Cannot open file or create file failed', 'Cannot operate roles with higher level than current account' => 'Cannot operate roles with higher level than current account', 'Cannot set parent category as child of current' => 'Cannot set parent category as child of current', 'Cannot set parent department to a child of current department' => 'Cannot set parent department to a child of current department', 'Cannot set parent to self' => 'Cannot set parent to self', 'Chunk file not found, please upload again' => 'Chunk file not found, please upload again', 'Chunk upload must be called in HTTP request context' => 'Chunk upload must be called in HTTP request context', 'Coin change must be greater than 0' => 'Coin change must be greater than 0', 'Config data not found' => 'Config data not found', 'Config group not found' => 'Config group not found', 'Counts only support 0, 100, 500, 1000, 5000' => 'Counts only support 0, 100, 500, 1000, 5000', 'Current table does not support recycle bin' => 'Current table does not support recycle bin', 'DATA_NOT_FOUND' => 'Data not found', 'DIRECTION_INVALID' => 'direction must be 0 or 1', 'Data not found' => 'Data not found', 'Deduct amount cannot exceed current balance' => 'Deduct amount cannot exceed current balance', 'Delete data error, please check' => 'Delete data error, please check', 'Dict type not found' => 'Dict type not found', 'FAIL' => 'Fail', 'Failed to create image resource' => 'Failed to create image resource', 'Failed to generate token' => 'Failed to generate token', 'Failed to get file resource' => 'Failed to get file resource', 'Failed to get login credential, please check' => 'Failed to get login credential, please check', 'Failed to read database config' => 'Failed to read database config', 'Failed to save file' => 'Failed to save file', 'File format not supported for upload' => 'File format not supported for upload', 'File generation not allowed in non-debug mode' => 'File generation not allowed in non-debug mode', 'File not found' => 'File not found', 'File size exceeds limit' => 'File size exceeds limit', 'Free pool config not found' => 'Free pool config not found', 'Free tier probabilities (T1–T5) sum cannot exceed 100%' => 'Free tier probabilities (T1–T5) sum cannot exceed 100%', 'Free tier probability must be between 0 and 100%' => 'Free tier probability must be between 0 and 100%', 'Frontend directory not found, must be same level as backend' => 'Frontend directory not found, must be same level as backend', 'INSUFFICIENT_BALANCE' => 'Insufficient balance', 'INSUFFICIENT_TICKETS' => 'Insufficient lottery tickets', 'Import file error, please upload correct xlsx file' => 'Import file error, please upload correct xlsx file', 'Insufficient balance' => 'Insufficient balance', 'Insufficient balance to transfer' => 'Insufficient balance to transfer', 'Insufficient lottery tickets' => 'Insufficient lottery tickets', 'Invalid DiceReward id exists' => 'Invalid DiceReward id exists', 'Invalid config ID exists' => 'Invalid config ID exists', 'Invalid file format' => 'Invalid file format', 'Invalid file type, cannot generate file' => 'Invalid file type, cannot generate file', 'Invalid lottery ticket purchase' => 'Invalid lottery ticket purchase', 'Invalid or expired token' => 'Invalid or expired token', 'Invalid parameters' => 'Invalid parameters', 'Invalid params: player_id and type are required (3=add, 4=deduct)' => 'Invalid params: player_id and type are required (3=add, 4=deduct)', 'Invalid phone format, only +60 Malaysia numbers supported (e.g. +60123456789)' => 'Invalid phone format, only +60 Malaysia numbers supported (e.g. +60123456789)', 'Invalid secret' => 'Invalid secret', 'Invalid task type' => 'Invalid task type', 'LOTTERY_CONFIG_NOT_FOUND' => 'Lottery config not found', 'LOTTERY_POOL_CONFIG_DEFAULT_NOT_FOUND' => 'No name=default pool config found, please create one first', 'LOTTERY_POOL_CONFIG_NOT_FOUND_DEFAULT' => 'Lottery pool config not found (name=default required)', 'Logged out successfully' => 'Logged out successfully', 'Login credential verification failed' => 'Login credential verification failed', 'Lottery pool config not found (name=default required)' => 'Lottery pool config not found (name=default required)', 'MSG_022FA411' => 'App type must be plugin or app', 'MSG_04BF8179' => 'Data not found', 'MSG_06F06DA6' => 'Invalid or expired token', 'MSG_0A17D195' => 'Paid tier probability must be between 0 and 100%', 'MSG_0A9A3E28' => 'Batch delete is not allowed', 'MSG_0BCF9CBC' => 'Test count only supports 100, 500, 1000, 5000, 10000', 'MSG_0CBB8FF6' => 'Service timeout: ', 'MSG_0D49B785' => 'Old password is incorrect', 'MSG_0FE75E2C' => 'Chunk upload must be called in HTTP request context', 'MSG_146A3F0D' => 'Dict type not found', 'MSG_17740DB3' => 'Token format invalid', 'MSG_1798E4D4' => 'Template not found', 'MSG_19E651B8' => 'coin is required', 'MSG_1A499109' => 'File not found', 'MSG_1BB27051' => 'auth-token expired', 'MSG_1C1718A6' => 'Plugin already exists', 'MSG_2240AD6D' => 'auth-token invalid', 'MSG_2273437E' => 'Balance %s is less than %s, cannot continue', 'MSG_22C6787F' => 'Chunk file not found, please upload again', 'MSG_25BF8A8D' => 'Deduct amount cannot exceed current balance', 'MSG_2830AE01' => 'Service timeout: Unknown reason', 'MSG_2ED0C7A8' => 'Plugin base config is invalid', 'MSG_2EE75A5E' => 'System file generation error', 'MSG_2EFE74EE' => 'File generation not allowed in non-debug mode', 'MSG_2F100DB4' => 'Cannot operate roles with higher level than current account', 'MSG_334CE26A' => 'No permission to operate this data', 'MSG_35FB9BA0' => 'File format not supported for upload', 'MSG_381A19AE' => 'Upload mode not found', 'MSG_3A4A6DE6' => 'username is required', 'MSG_3A4FF81F' => 'No permission to operate department data', 'MSG_3C99F7F7' => 'Reward config is empty, please maintain dice_reward_config first', 'MSG_3DBFEA33' => 'Invalid file format', 'MSG_43C4D703' => 'This department has users, please delete or transfer them first', 'MSG_47FDBDD0' => 'Config group not found', 'MSG_4CA58C61' => 'Update data error, please check', 'MSG_4F1D271A' => 'Invalid DiceReward id exists', 'MSG_521593FB' => 'Please set app name first', 'MSG_557E5109' => 'Failed to get file resource', 'MSG_559AAE0E' => 'No permission to operate role data', 'MSG_560E6D91' => 'No path config available for this direction', 'MSG_5643EE10' => 'Failed to generate token', 'MSG_569EC863' => 'Current table does not support recycle bin', 'MSG_56B44907' => 'Target category not found', 'MSG_5CE17D6B' => 'auth-token invalid or expired', 'MSG_5FF3A2BE' => 'Failed to read database config', 'MSG_609A300B' => 'Insufficient balance', 'MSG_60B9FC38' => 'Failed to get login credential, please check', 'MSG_64A3C830' => 'User not found', 'MSG_67C66962' => 'No name=default pool config found, please create one first', 'MSG_6C16260B' => 'When free pool is not selected, please fill free custom tier probabilities (T1–T5)', 'MSG_6CA924A1' => 'Lottery pool config not found (name=default required)', 'MSG_6F00DFB2' => 'Success', 'MSG_7310FDB8' => 'Frontend directory not found, must be same level as backend', 'MSG_74E3CB84' => 'No available reward config', 'MSG_75C6A69F' => 'Please provide auth-token', 'MSG_7845F2E9' => 'Delete data error, please check', 'MSG_86272B49' => 'Fail', 'MSG_8865D363' => 'coin cannot be 0', 'MSG_8B6AA32A' => 'Cannot set parent category as child of current', 'MSG_8C2E3CE6' => 'Please login again (account logged in elsewhere)', 'MSG_8FDBA3F1' => 'This dict code already exists', 'MSG_91272513' => 'Invalid lottery ticket purchase', 'MSG_94EE6593' => 'Plugin install directory is already occupied', 'MSG_9501E2EF' => 'Insufficient balance to transfer', 'MSG_950B6072' => 'Config data not found', 'MSG_9A01DFBF' => 'Plugin base config is incomplete', 'MSG_9D195F25' => 'Account is disabled and cannot log in', 'MSG_9EE0801C' => 'Cannot open file or create file failed', 'MSG_9F6B51C8' => 'Invalid file type, cannot generate file', 'MSG_A049A679' => 'This category has sub-categories, please delete them first', 'MSG_A3165463' => 'Only super admin can perform this action', 'MSG_A4FB6212' => 'Failed to save file', 'MSG_A6A8EA8F' => 'Plugin directory not found', 'MSG_A72A7DC6' => 'This department has sub-departments, please delete them first', 'MSG_A778ABB9' => 'auth-token format invalid', 'MSG_ADA80442' => 'Please login again', 'MSG_AE73E6F3' => 'API_AUTH_TOKEN_SECRET is not configured', 'MSG_B387239D' => 'Paid tier probabilities (T1–T5) sum cannot exceed 100%', 'MSG_B5C2F2F6' => 'Counts only support 0, 100, 500, 1000, 5000', 'MSG_B5CD5C51' => 'Test record not found', 'MSG_B720629D' => 'username and password are required', 'MSG_BA173F12' => 'Sum of paid/free direction counts must be greater than 0', 'MSG_BAC2EFB0' => 'Parent department cannot be the same as current department', 'MSG_BB3C5A3F' => 'direction must be 0 or 1', 'MSG_BBD3198A' => 'Invalid params: player_id and type are required (3=add, 4=deduct)', 'MSG_BD8AD1D3' => 'Invalid phone format, only +60 Malaysia numbers supported (e.g. +60123456789)', 'MSG_BEB15D55' => 'Invalid parameters', 'MSG_C2E4B3DC' => 'Invalid task type', 'MSG_C2F02095' => 'Insufficient lottery tickets', 'MSG_C3CB20DC' => 'Free tier probability must be between 0 and 100%', 'MSG_C43809BC' => 'Operation failed: ', 'MSG_C548E557' => 'Missing parameters: agent_id, secret, time, signature are required', 'MSG_C5D5D5E1' => 'Cannot set parent department to a child of current department', 'MSG_C803EA6F' => 'Please register', 'MSG_C80C5EF5' => 'Failed to create image resource', 'MSG_C9BFC7E9' => 'Lottery config not found', 'MSG_CDEA9DD8' => 'Your login credential is invalid or expired, please login again', 'MSG_D15C0759' => 'Invalid secret', 'MSG_D1D1C0A0' => 'Template directory not found', 'MSG_D1E7769C' => 'Parent category cannot be the same as current', 'MSG_D224020F' => 'Free pool config not found', 'MSG_D75845B2' => 'Free tier probabilities (T1–T5) sum cannot exceed 100%', 'MSG_DB560C68' => 'Please run composer require phpmailer/phpmailer and restart', 'MSG_DEE31D19' => 'Timestamp expired or invalid, please sync time', 'MSG_DF93D5F9' => 'Token expired, please login again', 'MSG_E12FF883' => 'File size exceeds limit', 'MSG_E15B47C6' => 'Super admin cannot be deleted', 'MSG_E1BFE655' => 'Mail config not set', 'MSG_E5849544' => 'Wrong password', 'MSG_E66BC216' => 'This menu has sub-menus, please delete them first', 'MSG_E6E6288B' => 'System default group cannot be deleted', 'MSG_E84B2B0A' => 'Logged out successfully', 'MSG_E8C8EC80' => 'Invalid config ID exists', 'MSG_E96B26B9' => 'Coin change must be greater than 0', 'MSG_EEDAAC44' => 'Waiting for dependencies to be installed', 'MSG_F0F5F561' => 'Config ID %s not found or tier is empty', 'MSG_F12E5DBA' => 'Reward config must cover 26 cells (id 0-25 or 1-26), currently only %s, cannot generate full 5-30 points and clockwise/counterclockwise mapping', 'MSG_F2643E83' => 'Login credential verification failed', 'MSG_F58CB5C8' => 'This category has sub-categories, please delete them first', 'MSG_F5F9FF11' => 'Paid pool config not found', 'MSG_F7BBA776' => 'Unknown reason', 'MSG_F8EB5084' => 'Signature verification failed', 'MSG_FA5FF202' => 'Cannot set parent to self', 'MSG_FB4C0ADF' => 'Please select tables to generate', 'MSG_FBC50B18' => 'Player not found', 'MSG_FC1E3345' => 'Import file error, please upload correct xlsx file', 'MSG_FDADA275' => 'When paid pool is not selected, please fill paid custom tier probabilities (T1–T5)', 'MSG_FE1B67CA' => 'Please provide token', 'Mail config not set' => 'Mail config not set', 'Missing parameters: agent_id, secret, time, signature are required' => 'Missing parameters: agent_id, secret, time, signature are required', 'NO_AVAILABLE_REWARD_CONFIG' => 'No available reward config', 'No available reward config' => 'No available reward config', 'No name=default pool config found, please create one first' => 'No name=default pool config found, please create one first', 'No permission to operate department data' => 'No permission to operate department data', 'No permission to operate role data' => 'No permission to operate role data', 'No permission to operate this data' => 'No permission to operate this data', 'OLD_PASSWORD_WRONG' => 'Old password is incorrect', 'Old password is incorrect' => 'Old password is incorrect', 'Only super admin can perform this action' => 'Only super admin can perform this action', 'Operation failed: ' => 'Operation failed: ', 'PASSWORD_WRONG' => 'Wrong password', 'Paid pool config not found' => 'Paid pool config not found', 'Paid tier probabilities (T1–T5) sum cannot exceed 100%' => 'Paid tier probabilities (T1–T5) sum cannot exceed 100%', 'Paid tier probability must be between 0 and 100%' => 'Paid tier probability must be between 0 and 100%', 'Parent category cannot be the same as current' => 'Parent category cannot be the same as current', 'Parent department cannot be the same as current department' => 'Parent department cannot be the same as current department', 'Player not found' => 'Player not found', 'Please login again' => 'Please login again', 'Please login again (account logged in elsewhere)' => 'Please login again (account logged in elsewhere)', 'Please provide auth-token' => 'Please provide auth-token', 'Please provide token' => 'Please provide token', 'Please register' => 'Please register', 'Please run composer require phpmailer/phpmailer and restart' => 'Please run composer require phpmailer/phpmailer and restart', 'Please select tables to generate' => 'Please select tables to generate', 'Please set app name first' => 'Please set app name first', 'Plugin already exists' => 'Plugin already exists', 'Plugin base config is incomplete' => 'Plugin base config is incomplete', 'Plugin base config is invalid' => 'Plugin base config is invalid', 'Plugin directory not found' => 'Plugin directory not found', 'Plugin install directory is already occupied' => 'Plugin install directory is already occupied', 'Reward config is empty, please maintain dice_reward_config first' => 'Reward config is empty, please maintain dice_reward_config first', 'SUCCESS' => 'Success', 'SUPER_ADMIN_CANNOT_DELETE' => 'Super admin cannot be deleted', 'Service timeout: ' => 'Service timeout: ', 'Signature verification failed' => 'Signature verification failed', 'Sum of paid/free direction counts must be greater than 0' => 'Sum of paid/free direction counts must be greater than 0', 'Super admin cannot be deleted' => 'Super admin cannot be deleted', 'System default group cannot be deleted' => 'System default group cannot be deleted', 'System file generation error' => 'System file generation error', 'TOKEN_EXPIRED_RELOGIN' => 'Token expired, please login again', 'TOKEN_FORMAT_INVALID' => 'Token format invalid', 'TOKEN_INVALID' => 'Invalid or expired token', 'TOKEN_REQUIRED' => 'Please provide token', 'Target category not found' => 'Target category not found', 'Template directory not found' => 'Template directory not found', 'Template not found' => 'Template not found', 'Test count only supports 100, 500, 1000, 5000, 10000' => 'Test count only supports 100, 500, 1000, 5000, 10000', 'Test record not found' => 'Test record not found', 'This category has sub-categories, please delete them first' => 'This category has sub-categories, please delete them first', 'This department has sub-departments, please delete them first' => 'This department has sub-departments, please delete them first', 'This department has users, please delete or transfer them first' => 'This department has users, please delete or transfer them first', 'This dict code already exists' => 'This dict code already exists', 'This menu has sub-menus, please delete them first' => 'This menu has sub-menus, please delete them first', 'Timestamp expired or invalid, please sync time' => 'Timestamp expired or invalid, please sync time', 'Token expired, please login again' => 'Token expired, please login again', 'Token format invalid' => 'Token format invalid', 'USERNAME_PASSWORD_REQUIRED' => 'username and password are required', 'USERNAME_REQUIRED' => 'username is required', 'USER_NOT_FOUND' => 'User not found', 'Update data error, please check' => 'Update data error, please check', 'Upload mode not found' => 'Upload mode not found', 'User not found' => 'User not found', 'Waiting for dependencies to be installed' => 'Waiting for dependencies to be installed', 'When free pool is not selected, please fill free custom tier probabilities (T1–T5)' => 'When free pool is not selected, please fill free custom tier probabilities (T1–T5)', 'When paid pool is not selected, please fill paid custom tier probabilities (T1–T5)' => 'When paid pool is not selected, please fill paid custom tier probabilities (T1–T5)', 'Wrong password' => 'Wrong password', 'Your login credential is invalid or expired, please login again' => 'Your login credential is invalid or expired, please login again', 'add failed' => 'add failed', 'add success' => 'add success', 'admin already installed, to reinstall please delete env file and restart' => 'admin already installed, to reinstall please delete env file and restart', 'all test data cleared' => 'all test data cleared', 'auth-token expired' => 'auth-token expired', 'auth-token format invalid' => 'auth-token format invalid', 'auth-token invalid' => 'auth-token invalid', 'auth-token invalid or expired' => 'auth-token invalid or expired', 'captcha error' => 'captcha error', 'clean success' => 'clean success', 'clear cache success' => 'clear cache success', 'clear failed: ' => 'clear failed: ', 'coin cannot be 0' => 'coin cannot be 0', 'coin is required' => 'coin is required', 'connection refused, please check database ip/port and ensure database is running' => 'connection refused, please check database ip/port and ensure database is running', 'create reward mapping success' => 'create reward mapping success', 'database SQL file not found' => 'database SQL file not found', 'database already installed, please do not install again' => 'database already installed, please do not install again', 'database connection timeout, please check ip/port and firewall/security group rules' => 'database connection timeout, please check ip/port and firewall/security group rules', 'database username or password is incorrect' => 'database username or password is incorrect', 'delete failed' => 'delete failed', 'delete success' => 'delete success', 'direction must be 0 (clockwise) or 1 (counterclockwise)' => 'direction must be 0 (clockwise) or 1 (counterclockwise)', 'direction must be 0 or 1' => 'direction must be 0 or 1', 'download failed' => 'download failed', 'download success, please install in plugin list' => 'download success, please install in plugin list', 'execute success' => 'execute success', 'execution failed' => 'execution failed', 'file size cannot exceed 5M' => 'file size cannot exceed 5M', 'import success' => 'import success', 'import success, refreshed DiceReward, DiceRewardConfig(BIGWIN), and pool config' => 'import success, refreshed DiceReward, DiceRewardConfig(BIGWIN), and pool config', 'install success' => 'install success', 'invalid parameters, please check' => 'invalid parameters, please check', 'login expired or invalid, please login again' => 'login expired or invalid, please login again', 'missing parameter id' => 'missing parameter id', 'missing parameter status' => 'missing parameter status', 'missing player_id' => 'missing player_id', 'no permission to delete selected data' => 'no permission to delete selected data', 'no permission to operate this player' => 'no permission to operate this player', 'no permission to update this record' => 'no permission to update this record', 'no permission to view this record' => 'no permission to view this record', 'not found' => 'not found', 'not logged in' => 'not logged in', 'operation failed' => 'operation failed', 'operation success' => 'operation success', 'operation type must be 3 (add) or 4 (deduct)' => 'operation type must be 3 (add) or 4 (deduct)', 'optimize success' => 'optimize success', 'parameter items must be an array' => 'parameter items must be an array', 'please input email' => 'please input email', 'please login first' => 'please login first', 'please provide direction (0=clockwise, 1=counterclockwise)' => 'please provide direction (0=clockwise, 1=counterclockwise)', 'please provide record_id' => 'please provide record_id', 'please select cache to delete' => 'please select cache to delete', 'please select data to delete' => 'please select data to delete', 'please select player' => 'please select player', 'please specify test record' => 'please specify test record', 'record not found' => 'record not found', 'reload success' => 'reload success', 'reset success' => 'reset success', 'save success' => 'save success', 'send failed, please check logs' => 'send failed, please check logs', 'send success' => 'send success', 'super admin cannot reset password' => 'super admin cannot reset password', 'test data cleared' => 'test data cleared', 'too many requests, please try again later' => 'too many requests, please try again later', 'uninstall plugin success' => 'uninstall plugin success', 'update failed' => 'update failed', 'update success' => 'update success', 'upload failed, please upload zip file' => 'upload failed, please upload zip file', 'upload file validation failed' => 'upload file validation failed', 'uploaded file not found' => 'uploaded file not found', 'username is required' => 'username is required', 'version id is required' => 'version id is required', ];