diff --git a/data/browsers-bots.php b/data/browsers-bots.php index f1fc294..68fbe04 100644 --- a/data/browsers-bots.php +++ b/data/browsers-bots.php @@ -154,16 +154,20 @@ [ 'name' => 'Typhoeus', 'regexp' => '/Typhoeus/u' ], [ 'name' => 'Voilabot', 'regexp' => '/Voila[Bb]ot/u' ], [ 'name' => 'VocusBot', 'regexp' => '/VocusBot ([0-9.]*)/u' ], + [ 'name' => 'W3Bot', 'regexp' => '/W3Bot ([0-9.]*)/u' ], [ 'name' => 'W3C CSS Validator', 'regexp' => '/Jigsaw\/([0-9.]*)/u' ], - [ 'name' => 'W3C Link Checker', 'regexp' => '/W3C-checklink\/([0-9.]*)/u' ], [ 'name' => 'W3C Internationalization Checker', 'regexp' => '/W3C_I18n-Checker\/([0-9.]*)/u' ], + [ 'name' => 'W3C Line Mode', 'regexp' => '/W3CLineMode\/([0-9.]*)/u' ], + [ 'name' => 'W3C Link Checker', 'regexp' => '/W3C-checklink\/([0-9.]*)/u' ], + [ 'name' => 'W3C Markup Validator', 'regexp' => '/W3C_Validator\/([0-9.]*)/u' ], [ 'name' => 'W3C MobileOK Checker', 'regexp' => '/W3C-mobileOK\/DDC-([0-9.]*)/u' ], + [ 'name' => 'W3C Multipage Validator', 'regexp' => '/W3C_Multipage_Validator\/([0-9.]*)/u' ], + [ 'name' => 'W3C Robot', 'regexp' => '/W3CRobot\/([0-9.]*)/u' ], [ 'name' => 'W3C Unified Validator', 'regexp' => '/W3C_Unicorn\/([0-9.]*)/u' ], - [ 'name' => 'W3C Markup Validator', 'regexp' => '/W3C_Validator\/([0-9.]*)/u' ], [ 'name' => 'WebbCrawler', 'regexp' => '/WebbCrawler ([0-9.]*)/u' ], [ 'name' => 'WordPress', 'regexp' => '/WordPress\/([0-9.]*)/u' ], [ 'name' => 'WWW Mechanize', 'regexp' => '/WWW-Mechanize\/([0-9.]*)/u' ], - [ 'name' => 'YaCy Bot', 'regexp' => '/yacybot/u' ], + [ 'name' => 'YaCy Bot', 'regexp' => '/yacy(?:\/|\s|bot)/u' ], [ 'name' => 'Yandex Anti Virus', 'regexp' => '/YandexAntivirus\/([0-9.]*)/u' ], [ 'name' => 'Yandex Blogs', 'regexp' => '/YandexBlogs\/([0-9.]*)/u' ], [ 'name' => 'Yandex Bot', 'regexp' => '/YandexBot\/([0-9.]*)/u' ], @@ -175,10 +179,23 @@ [ 'name' => 'Yandex News', 'regexp' => '/YandexNews\/([0-9.]*)/u' ], [ 'name' => 'Yandex Newslinks', 'regexp' => '/YandexNewslinks(?:\/([0-9.]*))?/u' ], [ 'name' => 'Yahoo! Ad Monitoring', 'regexp' => '/Yahoo Ad monitoring/u' ], + [ 'name' => 'Yahoo! Blogs', 'regexp' => '/Yahoo-Blogs\/v([0-9.]*)/u' ], + [ 'name' => 'Yahoo! Feed Seeker', 'regexp' => '/YahooFeedSeeker\/([0-9.]*)/u' ], + [ 'name' => 'Yahoo! Feed Seeker', 'regexp' => '/YahooFeedSeeker Testing\/([0-9.]*)/u' ], + [ 'name' => 'Yahoo! Image', 'regexp' => '/Yahoo-MMCrawler\/([0-9.]*)/u' ], + [ 'name' => 'Yahoo! Video', 'regexp' => '/Yahoo-MMAudVid\/([0-9.]*)/u' ], + [ 'name' => 'Yahoo! Mindset', 'regexp' => '/Yahoo\! Mindset/u' ], + [ 'name' => 'Yahoo! Product Search', 'regexp' => '/YahooSeeker\/ProductSearch([0-9.]*)/u' ], [ 'name' => 'Yahoo! Slurp', 'regexp' => '/Yahoo\! Slurp\/([0-9.]*)/u' ], [ 'name' => 'Yahoo! Slurp', 'regexp' => '/Yahoo\! Slurp/u' ], + [ 'name' => 'Yahoo! Seeker', 'regexp' => '/YahooSeeker(?:\/([0-9.]*))?/u' ], + [ 'name' => 'Yahoo! Seeker', 'regexp' => '/YahooSeeker-Testing\/v([0-9.]*)/u' ], + [ 'name' => 'Yahoo! Seeker', 'regexp' => '/yahooseeker-jp-mobile/u' ], + [ 'name' => 'Yahoo! Site Checker', 'regexp' => '/Y\!J SiteChecker/u' ], [ 'name' => 'Yahoo! Pipes', 'regexp' => '/Yahoo Pipes ([0-9.]*)/u' ], - [ 'name' => 'Yahoo! Japan', 'regexp' => '/^Y\!J-/u' ], + [ 'name' => 'Yahoo! Video Search', 'regexp' => '/YahooVideoSearch/u' ], + [ 'name' => 'Yahoo! Japan', 'regexp' => '/Yahoo\! Japan/u' ], + [ 'name' => 'Yahoo! Japan', 'regexp' => '/(^|\(compatible; )Y\!J-/u' ], /* Generic bots */ [ 'name' => 'Apache Httpd', 'regexp' => '/Apache-HttpClient(?:\/([0-9.]*))?/u' ], diff --git a/data/browsers-chrome.php b/data/browsers-chrome.php index 4afce43..0376e17 100644 --- a/data/browsers-chrome.php +++ b/data/browsers-chrome.php @@ -54,6 +54,7 @@ '45.0.2454' => 'stable', '46.0.2490' => 'stable', '47.0.2526' => 'stable', + '48.0.2564' => 'stable', ]; Chrome::$MOBILE = [ diff --git a/data/manufacturer-names.php b/data/manufacturer-names.php index 8c880b0..2358a68 100644 --- a/data/manufacturer-names.php +++ b/data/manufacturer-names.php @@ -14,6 +14,7 @@ Manufacturers::$TELEVISION = [ 'BANGOLUFSEN' => 'Bang & Olufsen', 'CHANGHONG' => 'Changhong', + 'HYUNDAI' => 'Hyundai', 'inverto' => 'Inverto', 'LOEWE' => 'Loewe', 'MEDION' => 'Medion', diff --git a/data/models-android.php b/data/models-android.php index ba3c35a..a7d6b73 100644 --- a/data/models-android.php +++ b/data/models-android.php @@ -77,6 +77,7 @@ 'mt5399!' => [ 'Mediatek', 'MT5399 based device', DeviceType::DEVBOARD ], 'mt5861!' => [ 'Mediatek', 'MT5861 based device', DeviceType::DEVBOARD ], 'mt5880!' => [ 'Mediatek', 'MT5880 based device', DeviceType::DEVBOARD ], + 'mt5882!' => [ 'Mediatek', 'MT5882 based device', DeviceType::DEVBOARD ], 'mt5890!' => [ 'Mediatek', 'MT5890 based device', DeviceType::DEVBOARD ], 'mt6515!' => [ 'Mediatek', 'MT6515 based device', DeviceType::DEVBOARD ], 'MTK6515' => [ 'Mediatek', 'MT6515 based device', DeviceType::DEVBOARD ], @@ -103,6 +104,7 @@ 'MTK--8312' => [ 'Mediatek', 'MT8312 based device', DeviceType::DEVBOARD ], 'mt8377!' => [ 'Mediatek', 'MT8377 based device', DeviceType::DEVBOARD ], 'mt8389!' => [ 'Mediatek', 'MT8389 based device', DeviceType::DEVBOARD ], + 'mt8580!' => [ 'Mediatek', 'MT8580 based device', DeviceType::DEVBOARD ], 'mt8658!' => [ 'Mediatek', 'MT8658 based device', DeviceType::DEVBOARD ], 'MBX DVBT reference board (c03ref)' => [ 'MBX', 'DVBT reference board', DeviceType::DEVBOARD ], 'MBX Dongle board!' => [ 'MBX', 'Dongle board', DeviceType::DEVBOARD ], @@ -219,13 +221,13 @@ '(Google )?Nexus ?4!' => [ 'LG', 'Nexus 4' ], 'Mako' => [ 'LG', 'Nexus 4' ], 'LGE-lap mako' => [ 'LG', 'Nexus 4' ], + 'Nexus 5X' => [ 'LG', 'Nexus 5X' ], '(Google )?Nexus ?5!' => [ 'LG', 'Nexus 5' ], 'HammerHead' => [ 'LG', 'Nexus 5' ], 'LG-Nexus5' => [ 'LG', 'Nexus 5' ], - 'Nexus 5X' => [ 'LG', 'Nexus 5X' ], + 'Nexus 6P' => [ 'Huawei', 'Nexus 6P' ], 'shamu' => [ 'Motorola', 'Nexus 6' ], '(Google )?Nexus ?6!' => [ 'Motorola', 'Nexus 6' ], - 'Nexus 6P' => [ 'Huawei', 'Nexus 6P' ], '(Google )?Nexus ?7 2013!' => [ 'Asus', 'Nexus 7 (2013)', DeviceType::TABLET ], 'Flo' => [ 'Asus', 'Nexus 7 (2013)', DeviceType::TABLET ], 'Grouper' => [ 'Asus', 'Nexus 7', DeviceType::TABLET ], @@ -272,6 +274,7 @@ 'BRAVIA 2015' => [ 'Sony', 'Bravia Android TV (2015)', DeviceType::TELEVISION, Flag::ANDROIDTV], 'BRAVIA 4K 2015' => [ 'Sony', 'Bravia Android TV (2015)', DeviceType::TELEVISION, Flag::ANDROIDTV ], 'QM152E' => [ 'Philips', 'Android TV (2015)', DeviceType::TELEVISION, Flag::ANDROIDTV], + 'SHIELD Android TV' => [ 'Nvidia', 'SHIELD Android TV', DeviceType::TELEVISION, Flag::ANDROIDTV], /* Middleware and emulators */ 'BlueStacks!' => [ 'BlueStacks', 'App Player', DeviceType::DESKTOP ], @@ -348,6 +351,7 @@ 'OUYA( Console)?!' => [ 'OUYA', 'OUYA', [ DeviceType::GAMING, DeviceSubType::CONSOLE ] ], 'SHIELD' => [ 'Nvidia', 'SHIELD', [ DeviceType::GAMING, DeviceSubType::CONSOLE ] ], 'SHIELD Tablet' => [ 'Nvidia', 'SHIELD Tablet', [ DeviceType::GAMING, DeviceSubType::PORTABLE ] ], + 'SHIELD Tablet K1' => [ 'Nvidia', 'SHIELD Tablet', [ DeviceType::GAMING, DeviceSubType::PORTABLE ] ], /* Regular devices */ 'EL72B' => [ '3Q', 'Qoo! Q-Book EL72B', DeviceType::TABLET ], @@ -543,6 +547,7 @@ 'DA222HQL' => [ 'Acer', 'Touch and 3D Monitor DA222HQL', DeviceType::MONITOR ], 'DA222HQLA' => [ 'Acer', 'Touch and 3D Monitor DA222HQL', DeviceType::MONITOR ], 'DA223HQL' => [ 'Acer', 'All-in-One DA223HQL', DeviceType::MONITOR ], + 'DA226HQ' => [ 'Acer', 'All-in-One DA226HQ', DeviceType::MONITOR ], 'DA241HL' => [ 'Acer', 'All-in-One DA241HL', DeviceType::MONITOR ], 'DA245HQL' => [ 'Acer', 'Touch and 3D Monitor DA245HQL', DeviceType::MONITOR ], ], @@ -573,6 +578,7 @@ 'ADVAN S5I' => [ 'Advan', 'Vandroid S5-I', DeviceType::TABLET ], 'Advan S5K' => [ 'Advan', 'Vandroid S5-K', DeviceType::TABLET ], 'ADVAN S5M' => [ 'Advan', 'Vandroid S5-M', DeviceType::TABLET ], + 'ADVAN S6A' => [ 'Advan', 'Vandroid S6-A', DeviceType::TABLET ], 'T1-B' => [ 'Advan', 'Vandroid T1-B', DeviceType::TABLET ], 'T1-D' => [ 'Advan', 'Vandroid T1-D', DeviceType::TABLET ], 'T1-E' => [ 'Advan', 'Vandroid T1-E', DeviceType::TABLET ], @@ -592,6 +598,8 @@ 'Vega' => [ 'Advent', 'Vega', DeviceType::TABLET ], 'VegaBean!' => [ 'Advent', 'Vega', DeviceType::TABLET ], 'Advent Vega' => [ 'Advent', 'Vega', DeviceType::TABLET ], + 'AG Chrome Selfie' => [ 'AG Mobile', 'Chrome Selfie' ], + 'AG CHROME ULTRA' => [ 'AG Mobile', 'Chrome Ultra' ], 'AG Chrome Go Tab 7.0' => [ 'AG Mobile', 'Chrome Go-Tab 7.0', DeviceType::TABLET ], 'aigoPad' => [ 'aigo', 'aigoPad', DeviceType::TABLET ], 'aigoPadM60' => [ 'aigo', 'aigoPad M60', DeviceType::TABLET ], @@ -730,7 +738,7 @@ 'one ?touch 4008!' => [ 'Alcatel', 'One Touch Pixi 3 (3.5)' ], '4008[A]!' => [ 'Alcatel', 'One Touch Pixi 3 (3.5)' ], 'one ?touch 4009!' => [ 'Alcatel', 'One Touch Pixi 3 (3.5)' ], - '4009[ADEFMX]!' => [ 'Alcatel', 'One Touch Pixi 3 (3.5)' ], + '4009[ADEFMSX]!' => [ 'Alcatel', 'One Touch Pixi 3 (3.5)' ], 'one ?touch 4013!' => [ 'Alcatel', 'One Touch Pixi 3 (4)' ], '4013[ADEJKMX]!' => [ 'Alcatel', 'One Touch Pixi 3 (4)' ], 'one ?touch 4014!' => [ 'Alcatel', 'One Touch Pixi 3 (4)' ], @@ -740,6 +748,7 @@ '4015[D]!' => [ 'Alcatel', 'One Touch Pixi 2' ], '4016[ADX]!' => [ 'Alcatel', 'One Touch Pop C1' ], '4018[ADEMX]!' => [ 'Alcatel', 'One Touch Pop D1' ], + '4024[DX]!' => [ 'Alcatel', 'One Touch Pixi First' ], '4027[ADNX]!' => [ 'Alcatel', 'One Touch Pixi 3 (4.5)' ], '4028[AEJ]!' => [ 'Alcatel', 'One Touch Pixi 3 (4.5)' ], 'one ?touch 4030!' => [ 'Alcatel', 'One Touch S\'Pop' ], @@ -763,6 +772,8 @@ 'M POP' => [ 'Alcatel', 'One Touch M\'Pop' ], '5020[A]!' => [ 'Alcatel', 'One Touch M\'Pop' ], 'one ?touch 5021!' => [ 'Alcatel', 'One Touch Soleil' ], + '5022[D]!' => [ 'Alcatel', 'One Touch Pop Star' ], + '5025[D]!' => [ 'Alcatel', 'One Touch Pop 3' ], 'one ?touch 5035!' => [ 'Alcatel', 'One Touch X\'Pop' ], 'one ?touch 50(36|37)!' => [ 'Alcatel', 'One Touch Pop C5' ], 'one ?touch 50(38)!' => [ 'Alcatel', 'One Touch Pop D5' ], @@ -771,7 +782,7 @@ '5042[ADEFGTWXY]!' => [ 'Alcatel', 'One Touch Pop 2 (4.5)' ], 'one ?touch 5050!' => [ 'Alcatel', 'One Touch Pop S3' ], '5050[ASYX]!' => [ 'Alcatel', 'One Touch Pop S3' ], - '5054[OX]!' => [ 'Alcatel', 'One Touch Pixi 3 (5.5)' ], + '5054[OSX]!' => [ 'Alcatel', 'One Touch Pixi 3 (5.5)' ], '5054[NW]!' => [ 'Alcatel', 'One Touch Fierce XL' ], '5065[ADJWX]!' => [ 'Alcatel', 'One Touch Pixi 3 (5)' ], 'one ?touch 6010!' => [ 'Alcatel', 'One Touch Star' ], @@ -815,9 +826,10 @@ '7045[Y]!' => [ 'Alcatel', 'One Touch Pop S7' ], '7046[T]!' => [ 'Alcatel', 'One Touch Conquest' ], 'one ?touch 7047!' => [ 'Alcatel', 'One Touch Pop C9' ], - '7048[X]!' => [ 'Alcatel', 'One Touch Go Play' ], + '7048[AX]!' => [ 'Alcatel', 'One Touch Go Play' ], 'one ?touch 7050!' => [ 'Alcatel', 'One Touch Pop S9' ], '7050[Y]!' => [ 'Alcatel', 'One Touch Pop S9' ], + '7053[D]!' => [ 'Alcatel', 'X1' ], '7055[AW]!' => [ 'Alcatel', 'One Touch Hero 2C' ], '7051[X]!' => [ 'Alcatel', 'One Touch Pop 2 (5) Premium' ], 'one ?touch 8000!' => [ 'Alcatel', 'One Touch Scribe Easy' ], @@ -1064,88 +1076,99 @@ 'A101IT' => [ 'Archos', '101 Internet Tablet', DeviceType::TABLET ], 'Archos!!' => [ - 'ARCHOS 80G9' => [ 'Archos', '80 G9', DeviceType::TABLET ], // G9 + 'ARCHOS 80G9' => [ 'Archos', '80 G9', DeviceType::TABLET ], 'ARCHOS 101G9' => [ 'Archos', '101 G9', DeviceType::TABLET ], - 'ARCHOS 97XSLG10' => [ 'Archos', '97 XS', DeviceType::TABLET ], // G10 - 'ARCHOS 80XSK' => [ 'Archos', '80 XS', DeviceType::TABLET ], // G10 + 'ARCHOS 97XSLG10' => [ 'Archos', '97 XS', DeviceType::TABLET ], + 'ARCHOS 80XSK' => [ 'Archos', '80 XS', DeviceType::TABLET ], 'ARCHOS 101G10' => [ 'Archos', '101 XS', DeviceType::TABLET ], 'ARCHOS 101 XS 2' => [ 'Archos', '101 XS 2', DeviceType::TABLET ], 'Archos 101 XS 2 Moi' => [ 'Archos', '101 XS 2', DeviceType::TABLET ], - 'ARCHOS 80 Carbon' => [ 'Archos', '80 Carbon', DeviceType::TABLET ], // Elements - 'ARCHOS 97 CARBON' => [ 'Archos', '97 Carbon', DeviceType::TABLET ], // Elements - 'ARCHOS 70 Cobalt' => [ 'Archos', '70 Cobalt', DeviceType::TABLET ], // Elements - 'Archos 70c Cobalt' => [ 'Archos', '70c Cobalt', DeviceType::TABLET ], // Elements - 'ARCHOS 80 COBALT' => [ 'Archos', '80 Cobalt', DeviceType::TABLET ], // Elements - 'Archos 97 Cobalt' => [ 'Archos', '97 Cobalt', DeviceType::TABLET ], // Elements - 'Archos 101 Cobalt' => [ 'Archos', '101 Cobalt', DeviceType::TABLET ], // Elements - 'Archos 70 Copper' => [ 'Archos', '70 Copper', DeviceType::TABLET ], // Elements - 'Archos 90 Copper' => [ 'Archos', '90 Copper', DeviceType::TABLET ], // Elements - 'Archos 101 Copper' => [ 'Archos', '101 Copper', DeviceType::TABLET ], // Elements - 'Archos 101b Copper' => [ 'Archos', '101b Copper', DeviceType::TABLET ], // Elements - 'Archos 50 Diamond' => [ 'Archos', '50 Diamond' ], // Elements - 'Archos 45 Helium 4G' => [ 'Archos', '45 Helium' ], // Elements - 'Archos 50 Helium 4G' => [ 'Archos', '50 Helium' ], // Elements - 'Archos 50c Helium' => [ 'Archos', '50c Helium' ], // Elements - 'Archos 50 Helium Plus' => [ 'Archos', '50 Helium Plus' ], // Elements - 'Archos 55 Helium Plus' => [ 'Archos', '55 Helium Plus' ], // Elements - 'Archos 80 Helium 4G' => [ 'Archos', '80 Helium', DeviceType::TABLET ], // Elements - 'Archos 80b Helium' => [ 'Archos', '80b Helium', DeviceType::TABLET ], // Elements - 'Archos 101 Helium' => [ 'Archos', '101 Helium', DeviceType::TABLET ], // Elements - 'Archos 45 Neon' => [ 'Archos', '45 Neon' ], // Elements - 'Archos 50 Neon' => [ 'Archos', '50 Neon' ], // Elements - 'ARCHOS 50c Neon' => [ 'Archos', '50c Neon' ], // Elements - 'Archos 50b Neon' => [ 'Archos', '50b Neon' ], // Elements - 'Archos 70 Neon' => [ 'Archos', '70 Neon', DeviceType::TABLET ], // Elements - 'Archos 90b Neon' => [ 'Archos', '90b Neon', DeviceType::TABLET ], // Elements - 'Archos 97 Neon' => [ 'Archos', '97 Neon', DeviceType::TABLET ], // Elements - 'Archos 101 Neon' => [ 'Archos', '101 Neon', DeviceType::TABLET ], // Elements - 'Archos 101b Neon' => [ 'Archos', '101b Neon', DeviceType::TABLET ], // Elements - 'Archos 101c Neon' => [ 'Archos', '101c Neon', DeviceType::TABLET ], // Elements - 'Archos 101d Neon' => [ 'Archos', '101d Neon', DeviceType::TABLET ], // Elements - 'Archos 50 Oxygen' => [ 'Archos', '50 Oxygen' ], // Elements - 'Archos 50b Oxygen' => [ 'Archos', '50b Oxygen' ], // Elements - 'Archos 50c Oxygen' => [ 'Archos', '50c Oxygen' ], // Elements - 'Archos 50 Oxygen Plus' => [ 'Archos', '50 Oxygen Plus' ], // Elements - 'Archos 101 Oxygen' => [ 'Archos', '101 Oxygen' ], // Elements - 'Archos 45 Platinum' => [ 'Archos', '45 Platinum' ], // Elements - 'Archos 45c Platinum' => [ 'Archos', '45c Platinum' ], // Elements - 'Archos 50 Platinum' => [ 'Archos', '50 Platinum' ], // Elements - 'Archos 50b Platinum' => [ 'Archos', '50b Platinum' ], // Elements - 'Archos 52 Platinum' => [ 'Archos', '52 Platinum' ], // Elements - 'Archos 53 Platinum' => [ 'Archos', '53 Platinum' ], // Elements - 'Archos 5.3s Platinum' => [ 'Archos', '53s Platinum' ], // Elements - 'ARCHOS 79 Platinum' => [ 'Archos', '79 Platinum', DeviceType::TABLET ], // Elements - 'ARCHOS 80 Platinum' => [ 'Archos', '80 Platinum', DeviceType::TABLET ], // Elements - 'ARCHOS 80b PLATINUM' => [ 'Archos', '80b Platinum', DeviceType::TABLET ], // Elements - 'ARCHOS 97 Platinum' => [ 'Archos', '97 Platinum', DeviceType::TABLET ], // Elements - 'ARCHOS 97b PLATINUM' => [ 'Archos', '97b Platinum', DeviceType::TABLET ], // Elements - 'ARCHOS 101 PLATINUM' => [ 'Archos', '101 Platinum', DeviceType::TABLET ], // Elements - 'Archos 101b Platinium' => [ 'Archos', '101b Platinum', DeviceType::TABLET ], // Elements - 'Archos 101c Platinum' => [ 'Archos', '101c Platinum', DeviceType::TABLET ], // Elements - 'Archos 35 Titanium' => [ 'Archos', '35 Titanium' ], // Elements - 'Archos 35b Titanium' => [ 'Archos', '35b Titanium' ], // Elements - 'Archos 40 Titanium' => [ 'Archos', '40 Titanium' ], // Elements - 'Archos 40b Titanium Surround' => [ 'Archos', '40b Titanium' ], // Elements - 'Archos 40c Titanium' => [ 'Archos', '40c Titanium' ], // Elements - 'Archos 45 Titanium' => [ 'Archos', '45 Titanium' ], // Elements - 'Archos 50 Titanium' => [ 'Archos', '50 Titanium' ], // Elements - 'Archos 53 Titanium' => [ 'Archos', '53 Titanium' ], // Elements - 'Archos 59 Titanium' => [ 'Archos', '59 Titanium' ], // Elements - 'ARCHOS 70 Titanium' => [ 'Archos', '70 Titanium', DeviceType::TABLET ], // Elements - 'ARCHOS 70b TITANIUM' => [ 'Archos', '70b Titanium', DeviceType::TABLET ], // Elements - 'ARCHOS 80 TITANIUM' => [ 'Archos', '80 Titanium', DeviceType::TABLET ], // Elements - 'ARCHOS 97 TITANIUMHD' => [ 'Archos', '97 Titanium', DeviceType::TABLET ], // Elements - 'ARCHOS 97B TITANIUM' => [ 'Archos', '97b Titanium', DeviceType::TABLET ], // Elements - 'ARCHOS 101 Titanium' => [ 'Archos', '101 Titanium', DeviceType::TABLET ], // Elements - 'Archos 59 Xenon' => [ 'Archos', '59 Xenon' ], // Elements - 'Archos 64 Xenon' => [ 'Archos', '64 Xenon' ], // Elements - 'Archos 70 Xenon' => [ 'Archos', '70 Xenon', DeviceType::TABLET ], // Elements - 'Archos 70b Xenon' => [ 'Archos', '70b Xenon', DeviceType::TABLET ], // Elements - 'Archos 79 Xenon' => [ 'Archos', '79 Xenon', DeviceType::TABLET ], // Elements - 'Archos 80 Xenon' => [ 'Archos', '80 Xenon', DeviceType::TABLET ], // Elements - 'Archos 80b Xenon' => [ 'Archos', '80b Xenon', DeviceType::TABLET ], // Elements - 'ARCHOS 97 XENON' => [ 'Archos', '97 Xenon', DeviceType::TABLET ], // Elements - 'Archos 101 Xenon' => [ 'Archos', '101 Xenon', DeviceType::TABLET ], // Elements + 'ARCHOS 80 Carbon' => [ 'Archos', '80 Carbon', DeviceType::TABLET ], + 'ARCHOS 97 CARBON' => [ 'Archos', '97 Carbon', DeviceType::TABLET ], + 'ARCHOS 70 Cobalt' => [ 'Archos', '70 Cobalt', DeviceType::TABLET ], + 'Archos 70c Cobalt' => [ 'Archos', '70c Cobalt', DeviceType::TABLET ], + 'ARCHOS 80 COBALT' => [ 'Archos', '80 Cobalt', DeviceType::TABLET ], + 'Archos 97 Cobalt' => [ 'Archos', '97 Cobalt', DeviceType::TABLET ], + 'Archos 101 Cobalt' => [ 'Archos', '101 Cobalt', DeviceType::TABLET ], + 'Archos 70 Copper' => [ 'Archos', '70 Copper', DeviceType::TABLET ], + 'Archos 90 Copper' => [ 'Archos', '90 Copper', DeviceType::TABLET ], + 'Archos 101 Copper' => [ 'Archos', '101 Copper', DeviceType::TABLET ], + 'Archos 101b Copper' => [ 'Archos', '101b Copper', DeviceType::TABLET ], + 'Archos 50 Diamond' => [ 'Archos', '50 Diamond' ], + 'Archos Diamond S' => [ 'Archos', 'Diamond S' ], + 'Archos 45 Helium 4G' => [ 'Archos', '45 Helium' ], + 'ARCHOS 45b Helium' => [ 'Archos', '45b Helium' ], + 'Archos 50 Helium 4G' => [ 'Archos', '50 Helium' ], + 'Archos 50b Helium 4G' => [ 'Archos', '50b Helium' ], + 'Archos 50c Helium' => [ 'Archos', '50c Helium' ], + 'Archos 50d Helium' => [ 'Archos', '50d Helium' ], + 'Archos 50e Helium' => [ 'Archos', '50e Helium' ], + 'Archos 50 Helium Plus' => [ 'Archos', '50 Helium Plus' ], + 'Archos 55 Helium Plus' => [ 'Archos', '55 Helium Plus' ], + 'Archos 80 Helium 4G' => [ 'Archos', '80 Helium', DeviceType::TABLET ], + 'Archos 80b Helium' => [ 'Archos', '80b Helium', DeviceType::TABLET ], + 'Archos 101 Helium' => [ 'Archos', '101 Helium', DeviceType::TABLET ], + 'ARCHOS 101 Magnus' => [ 'Archos', '101 Magnus', DeviceType::TABLET ], + 'Archos 45 Neon' => [ 'Archos', '45 Neon' ], + 'Archos 50 Neon' => [ 'Archos', '50 Neon' ], + 'ARCHOS 50c Neon' => [ 'Archos', '50c Neon' ], + 'Archos 50b Neon' => [ 'Archos', '50b Neon' ], + 'Archos 70 Neon' => [ 'Archos', '70 Neon', DeviceType::TABLET ], + 'Archos 90b Neon' => [ 'Archos', '90b Neon', DeviceType::TABLET ], + 'Archos 97 Neon' => [ 'Archos', '97 Neon', DeviceType::TABLET ], + 'Archos 101 Neon' => [ 'Archos', '101 Neon', DeviceType::TABLET ], + 'Archos 101b Neon' => [ 'Archos', '101b Neon', DeviceType::TABLET ], + 'Archos 101c Neon' => [ 'Archos', '101c Neon', DeviceType::TABLET ], + 'Archos 101d Neon' => [ 'Archos', '101d Neon', DeviceType::TABLET ], + 'Archos 50 Oxygen' => [ 'Archos', '50 Oxygen' ], + 'Archos 50b Oxygen' => [ 'Archos', '50b Oxygen' ], + 'Archos 50c Oxygen' => [ 'Archos', '50c Oxygen' ], + 'Archos 50 Oxygen Plus' => [ 'Archos', '50 Oxygen Plus' ], + 'Archos 101 Oxygen' => [ 'Archos', '101 Oxygen' ], + 'Archos 45 Platinum' => [ 'Archos', '45 Platinum' ], + 'Archos 45c Platinum' => [ 'Archos', '45c Platinum' ], + 'Archos 50 Platinum' => [ 'Archos', '50 Platinum' ], + 'Archos 50b Platinum' => [ 'Archos', '50b Platinum' ], + 'Archos 50c Platinum' => [ 'Archos', '50c Platinum' ], + 'Archos 52 Platinum' => [ 'Archos', '52 Platinum' ], + 'Archos 53 Platinum' => [ 'Archos', '53 Platinum' ], + 'Archos 5.3s Platinum' => [ 'Archos', '53s Platinum' ], + 'Archos 70 Platinum' => [ 'Archos', '70 Platinum', DeviceType::TABLET ], + 'Archos 70 Platinum v3' => [ 'Archos', '70 Platinum', DeviceType::TABLET ], + 'ARCHOS 79 Platinum' => [ 'Archos', '79 Platinum', DeviceType::TABLET ], + 'ARCHOS 80 Platinum' => [ 'Archos', '80 Platinum', DeviceType::TABLET ], + 'ARCHOS 80b PLATINUM' => [ 'Archos', '80b Platinum', DeviceType::TABLET ], + 'ARCHOS 97 Platinum' => [ 'Archos', '97 Platinum', DeviceType::TABLET ], + 'ARCHOS 97b PLATINUM' => [ 'Archos', '97b Platinum', DeviceType::TABLET ], + 'ARCHOS 101 PLATINUM' => [ 'Archos', '101 Platinum', DeviceType::TABLET ], + 'Archos 101b Platinium' => [ 'Archos', '101b Platinum', DeviceType::TABLET ], + 'Archos 101c Platinum' => [ 'Archos', '101c Platinum', DeviceType::TABLET ], + 'Archos 35 Titanium' => [ 'Archos', '35 Titanium' ], + 'Archos 35b Titanium' => [ 'Archos', '35b Titanium' ], + 'Archos 40 Titanium' => [ 'Archos', '40 Titanium' ], + 'Archos 40b Titanium Surround' => [ 'Archos', '40b Titanium' ], + 'Archos 40c Titanium' => [ 'Archos', '40c Titanium' ], + 'ARCHOS 40C TIv2' => [ 'Archos', '40c Titanium' ], + 'ARCHOS 40d Titanium' => [ 'Archos', '40d Titanium' ], + 'Archos 45 Titanium' => [ 'Archos', '45 Titanium' ], + 'Archos 50 Titanium' => [ 'Archos', '50 Titanium' ], + 'Archos 53 Titanium' => [ 'Archos', '53 Titanium' ], + 'Archos 59 Titanium' => [ 'Archos', '59 Titanium' ], + 'ARCHOS 70 Titanium' => [ 'Archos', '70 Titanium', DeviceType::TABLET ], + 'ARCHOS 70b TITANIUM' => [ 'Archos', '70b Titanium', DeviceType::TABLET ], + 'ARCHOS 80 TITANIUM' => [ 'Archos', '80 Titanium', DeviceType::TABLET ], + 'ARCHOS 97 TITANIUMHD' => [ 'Archos', '97 Titanium', DeviceType::TABLET ], + 'ARCHOS 97B TITANIUM' => [ 'Archos', '97b Titanium', DeviceType::TABLET ], + 'ARCHOS 101 Titanium' => [ 'Archos', '101 Titanium', DeviceType::TABLET ], + 'Archos 59 Xenon' => [ 'Archos', '59 Xenon' ], + 'Archos 64 Xenon' => [ 'Archos', '64 Xenon' ], + 'Archos 70 Xenon' => [ 'Archos', '70 Xenon', DeviceType::TABLET ], + 'Archos 70b Xenon' => [ 'Archos', '70b Xenon', DeviceType::TABLET ], + 'Archos 79 Xenon' => [ 'Archos', '79 Xenon', DeviceType::TABLET ], + 'Archos 80 Xenon' => [ 'Archos', '80 Xenon', DeviceType::TABLET ], + 'Archos 80b Xenon' => [ 'Archos', '80b Xenon', DeviceType::TABLET ], + 'ARCHOS 97 XENON' => [ 'Archos', '97 Xenon', DeviceType::TABLET ], + 'Archos 101 Xenon' => [ 'Archos', '101 Xenon', DeviceType::TABLET ], 'ARCHOS 80 CHILDPAD' => [ 'Archos', '80 Childpad', DeviceType::TABLET ], 'ARCHOS 101 CHILDPAD' => [ 'Archos', '101 Childpad', DeviceType::TABLET ], 'Archos Chefpad' => [ 'Archos', 'ChefPad', DeviceType::TABLET ], @@ -1176,6 +1199,7 @@ 'ASK SP551+HD' => [ 'ASK', 'SP551+ HD' ], 'ASK SP554 HD' => [ 'ASK', 'SP554 HD' ], 'ASK SP581 HD' => [ 'ASK', 'SP581 HD' ], + 'ASK SP583 HD' => [ 'ASK', 'SP583 HD' ], 'ASK SP584 FHD' => [ 'ASK', 'SP584 FHD' ], 'ASK SP628 HD' => [ 'ASK', 'SP628 HD' ], ], @@ -1243,7 +1267,7 @@ 'K00U' => [ 'Asus', 'MemoPad HD 7', DeviceType::TABLET ], 'K00L' => [ 'Asus', 'MemoPad 8', DeviceType::TABLET ], 'K011' => [ 'Asus', 'MemoPad 8', DeviceType::TABLET ], - 'K015' => [ 'Asus', 'MemoPad 8 AST21', DeviceType::TABLET ], + 'K015' => [ 'Asus', 'MemoPad 8 AST21', DeviceType::TABLET, 'carrier' => 'au' ], 'K00F' => [ 'Asus', 'MemoPad 10', DeviceType::TABLET ], 'K012' => [ 'Asus', 'Fonepad 7', DeviceType::TABLET ], 'K019' => [ 'Asus', 'Fonepad 7', DeviceType::TABLET ], @@ -1461,13 +1485,19 @@ '(BB )?Z10$!' => [ 'BlackBerry', 'Z10' ], '(BB )?Z30$!' => [ 'BlackBerry', 'Z30' ], 'BLACKBERRY P\'9982' => [ 'BlackBerry', 'Porsche Design P\'9982' ], + 'STV100-1' => [ 'BlackBerry', 'PRIV' ], + 'STV100-2' => [ 'BlackBerry', 'PRIV' ], 'Endeavour!!' => [ 'Endeavour 785' => [ 'Blaupunkt', 'Endeavour 785', DeviceType::TABLET ], 'Endeavour 800NG' => [ 'Blaupunkt', 'Endeavour 800 NG', DeviceType::TABLET ], 'Endeavour 1000WS' => [ 'Blaupunkt', 'Endeavour 1000 WS', DeviceType::TABLET ], 'Endeavour 1000QC' => [ 'Blaupunkt', 'Endeavour 1000 QC', DeviceType::TABLET ], + 'Endeavour 1001' => [ 'Blaupunkt', 'Endeavour 1001', DeviceType::TABLET ], + 'Endeavour 1001 DVB-T' => [ 'Blaupunkt', 'Endeavour 1001 DVB-T', DeviceType::TABLET ], 'Endeavour 1010' => [ 'Blaupunkt', 'Endeavour 1010', DeviceType::TABLET ], + 'Endeavour 1013' => [ 'Blaupunkt', 'Endeavour 1013', DeviceType::TABLET ], + 'Endeavour 1100' => [ 'Blaupunkt', 'Endeavour 1100', DeviceType::TABLET ], ], '(BLU|DASH|LIFE|NEO|STUDIO|VIVO)!!' => [ @@ -1498,6 +1528,7 @@ 'BLU DASH MUSIC 4.5' => [ 'BLU', 'Dash Music 4.5' ], 'BLU DASH MUSIC II' => [ 'BLU', 'Dash Music II' ], 'DASH C MUSIC' => [ 'BLU', 'Dash C Music' ], + 'BLU DASH M' => [ 'BLU', 'Dash M' ], 'BLU ENERGY X PLUS' => [ 'BLU', 'Energy X Plus' ], 'BLU LIFE 8' => [ 'BLU', 'Life 8' ], 'BLU LIFE 8 XL' => [ 'BLU', 'Life 8 XL' ], @@ -1521,6 +1552,8 @@ 'BLU Quattro 4.5' => [ 'BLU', 'Quattro 4.5' ], 'BLU Quattro 4.5 HD' => [ 'BLU', 'Quattro 4.5 HD' ], 'BLU Quattro 5.7HD' => [ 'BLU', 'Quattro 5.7 HD' ], + 'BLU SPORT 4.5' => [ 'BLU', 'Sport 4.5' ], + 'BLU STAR4.0' => [ 'BLU', 'Star 4.0' ], 'BLU STUDIO 5.0' => [ 'BLU', 'Studio 5.0' ], 'BLU STUDIO 5.0 C' => [ 'BLU', 'Studio 5.0c' ], 'BLU STUDIO 5.0 Ce' => [ 'BLU', 'Studio 5.0ce' ], @@ -1545,15 +1578,21 @@ 'BLU STUDIO 7.0' => [ 'BLU', 'Studio 7.0' ], 'STUDIO 7.0 LTE' => [ 'BLU', 'Studio 7.0 LTE' ], 'BLU STUDIO 7.0 LTE' => [ 'BLU', 'Studio 7.0 LTE' ], + 'BLU STUDIO 7.0 II' => [ 'BLU', 'Studio 7.0 II' ], 'STUDIO C' => [ 'BLU', 'Studio C' ], 'BLU STUDIO C' => [ 'BLU', 'Studio C' ], 'BLU STUDIO C MINI' => [ 'BLU', 'Studio C Mini' ], + 'BLU STUDIO C 5+5' => [ 'BLU', 'Studio C 5+5' ], + 'BLU STUDIO C 5+5 LTE' => [ 'BLU', 'Studio C 5+5' ], + 'BLU STUDIO C SUPER CAMERA' => [ 'BLU', 'Studio C Super Camera' ], 'BLU STUDIO G' => [ 'BLU', 'Studio G' ], 'BLU STUDIO X' => [ 'BLU', 'Studio X' ], 'STUDIO X PLUS' => [ 'BLU', 'Studio X Plus' ], 'STUDIO XL' => [ 'BLU', 'Studio XL' ], 'STUDIO ENERGY' => [ 'BLU', 'Studio Energy' ], + 'STUDIO ENERGY 2' => [ 'BLU', 'Studio Energy 2' ], 'Studio Mini LTE' => [ 'BLU', 'Studio Mini LTE' ], + 'STUDIO SELFIE' => [ 'BLU', 'Studio Selfie' ], 'BLU STUDIO SELFIE LTE' => [ 'BLU', 'Studio Selfie LTE' ], 'BLU Tank4.5' => [ 'BLU', 'Tank 4.5' ], 'BLU Tigo' => [ 'BLU', 'Tigo' ], @@ -1564,6 +1603,7 @@ 'VIVO 4.8 HD' => [ 'BLU', 'Vivo 4.8 HD' ], 'VIVO IV' => [ 'BLU', 'Vivo IV' ], 'VIVO AIR' => [ 'BLU', 'Vivo Air' ], + 'BLU VIVO AIR LTE' => [ 'BLU', 'Vivo Air' ], 'BLU VIVO SELFIE' => [ 'BLU', 'Vivo Selfie' ], ], @@ -1672,15 +1712,18 @@ 'BqAquaris5' => [ 'bq', 'Aquaris 5' ], 'bq Aquaris 5 HD' => [ 'bq', 'Aquaris 5 HD' ], 'bq Aquaris 5.7' => [ 'bq', 'Aquaris 5.7' ], + 'Aquaris A4.5' => [ 'bq', 'Aquaris A4.5' ], 'Aquaris E4' => [ 'bq', 'Aquaris E4' ], 'Aquaris E4.5' => [ 'bq', 'Aquaris E4.5' ], 'Aquaris E5' => [ 'bq', 'Aquaris E5' ], 'Aquaris E5 HD' => [ 'bq', 'Aquaris E5 HD' ], 'Aquaris E5 FHD' => [ 'bq', 'Aquaris E5 FHD' ], 'Aquaris E6' => [ 'bq', 'Aquaris E6' ], - 'Aquaris E10' => [ 'bq', 'Aquaris E10' ], + 'Aquaris E10' => [ 'bq', 'Aquaris E10', DeviceType::TABLET ], 'Aquaris M4.5' => [ 'bq', 'Aquaris M4.5' ], 'Aquaris M5' => [ 'bq', 'Aquaris M5' ], + 'Aquaris M5.5' => [ 'bq', 'Aquaris M5.5' ], + 'Aquaris M10' => [ 'bq', 'Aquaris M10', DeviceType::TABLET ], 'Aquaris X5' => [ 'bq', 'Aquaris X5' ], 'bq Curie' => [ 'bq', 'Curie', DeviceType::TABLET ], 'bq Curie 2' => [ 'bq', 'Curie 2', DeviceType::TABLET ], @@ -1697,6 +1740,7 @@ 'bq Edison 2 Quad Core' => [ 'bq', 'Edison 2', DeviceType::TABLET ], 'bq Edison 2 Quad Core 3G' => [ 'bq', 'Edison 2', DeviceType::TABLET ], 'Edison 3' => [ 'bq', 'Edison 3', DeviceType::TABLET ], + 'Edison 3 mini' => [ 'bq', 'Edison 3 mini', DeviceType::TABLET ], 'bq Livingstone 2' => [ 'bq', 'Livingstone 2', DeviceType::TABLET ], 'Maxwell' => [ 'bq', 'Maxwell', DeviceType::TABLET ], 'Maxwell Lite' => [ 'bq', 'Maxwell Lite', DeviceType::TABLET ], @@ -1748,13 +1792,14 @@ 'CAPTIVA PAD 10' => [ 'Captiva', 'Pad 10.1', DeviceType::TABLET ], 'CAPTIVA PAD 10.1' => [ 'Captiva', 'Pad 10.1', DeviceType::TABLET ], 'CAPTIVA PAD 10.1 Quad FHD' => [ 'Captiva', 'Pad 10.1 Quad FHD', DeviceType::TABLET ], + 'CAPTIVA PAD 10.1 Quad FHD 3G' => [ 'Captiva', 'Pad 10.1 Quad FHD', DeviceType::TABLET ], ], 'Carpad T5' => [ 'Carpad', 'T5' ], 'Carpad T61 2g' => [ 'Carpad', 'T61' ], - 'CAL21' => [ 'Casio', 'GzOne Type-L' ], + 'CAL21' => [ 'Casio', 'GzOne Type-L CAL21', 'carrier' => 'au' ], 'CA201SP' => [ 'Casio', 'GzOne CA201' ], - 'IS11CA' => [ 'Casio', 'GzOne IS11CA' ], + 'IS11CA' => [ 'Casio', 'GzOne Commando IS11CA', 'carrier' => 'au' ], 'C771' => [ 'Casio', 'GzOne Commando' ], 'C811 4G' => [ 'Casio', 'GzOne Commando 811' ], 'VX-100' => [ 'Casio', 'VX-100 EPOS Terminal', DeviceType::POS ], @@ -1763,6 +1808,7 @@ 'Casper VIA A3216' => [ 'Casper', 'VIA A3216' ], 'Casper VIA A6108' => [ 'Casper', 'VIA A6108' ], 'Casper VIA V4' => [ 'Casper', 'VIA V4' ], + 'Casper VIA V5' => [ 'Casper', 'VIA V5' ], 'Casper VIA V8' => [ 'Casper', 'VIA V8' ], ], @@ -1774,8 +1820,11 @@ 'Cat Tablet Android 4.0.4' => [ 'CAT', 'NOVA', DeviceType::TABLET ], 'CatNova8' => [ 'CAT', 'NOVA8', DeviceType::TABLET ], 'Cat Tablet PHOENIX 8.1J0' => [ 'CAT', 'PHOENIX', DeviceType::TABLET ], + 'Cat Tablet Galactica 9,7CA' => [ 'CAT', 'GALACTICA', DeviceType::TABLET ], 'Cat Tablet Galactica X 9.7CA' => [ 'CAT', 'GALACTICA X', DeviceType::TABLET ], + 'Cat Tablet PEGASUS T 8J0' => [ 'CAT', 'PEGASUS', DeviceType::TABLET ], 'Cat StarGate' => [ 'CAT', 'STARGATE', DeviceType::TABLET ], + 'Cat Tablet CSG 7J0' => [ 'CAT', 'STARGATE', DeviceType::TABLET ], 'Cat Tablet StarGate 2' => [ 'CAT', 'STARGATE 2', DeviceType::TABLET ], ], @@ -1845,6 +1894,7 @@ 'ChanghongC100' => [ 'ChangHong', 'C100' ], 'ChanghongC600' => [ 'ChangHong', 'C600' ], 'ChanghongC770' => [ 'ChangHong', 'C770' ], + 'ChanghongC800' => [ 'ChangHong', 'C800' ], 'Changhong H5018' => [ 'ChangHong', 'H5018' ], 'ChangHongV5t' => [ 'ChangHong', 'V5t' ], 'ChangHong ?V7!' => [ 'ChangHong', 'V7' ], @@ -1937,6 +1987,7 @@ 'Cloudfone Excite 354g' => [ 'Cloudfone', 'Excite 354g' ], 'Cloudfone Excite 402d' => [ 'Cloudfone', 'Excite 402d' ], 'Excite 402d' => [ 'Cloudfone', 'Excite 402d' ], + 'Cloudfone Excite 452q' => [ 'Cloudfone', 'Excite 452q' ], 'Excite 501o' => [ 'Cloudfone', 'Excite 501o' ], 'Cloudfone Excite 502q' => [ 'Cloudfone', 'Excite 502q' ], 'Cloudfone GEO 400q+' => [ 'Cloudfone', 'Geo 400q' ], @@ -2062,12 +2113,15 @@ 'Colorfly CT972Q·Vanilla' => [ 'Colorfly', 'CT972 Q·Vanilla', DeviceType::TABLET ], 'CT972 Q.Vanilla 2' => [ 'Colorfly', 'CT972 Q·Vanilla 2', DeviceType::TABLET ], 'CT974 Ivory 3' => [ 'Colorfly', 'CT974 Ivory 3', DeviceType::TABLET ], + 'Colorfly E708' => [ 'Colorfly', 'E708', DeviceType::TABLET ], 'Colorfly E708 Q1' => [ 'Colorfly', 'E708 Q1', DeviceType::TABLET ], 'Colorfly E708 Q1s' => [ 'Colorfly', 'E708 Q1s', DeviceType::TABLET ], 'Colorfly E708 Q2' => [ 'Colorfly', 'E708 Q2', DeviceType::TABLET ], + 'Colorfly G708' => [ 'Colorfly', 'G708', DeviceType::TABLET ], 'Colorfly S782 Q1' => [ 'Colorfly', 'S782 Q1', DeviceType::TABLET ], 'Colorfly U781 Q1' => [ 'Colorfly', 'U781 Q1', DeviceType::TABLET ], 'K11' => [ 'Colors', 'K11' ], + 'Colors K22' => [ 'Colors', 'K22' ], 'Colors X27' => [ 'Colors', 'Xfactor Wave X27' ], 'Colors X45' => [ 'Colors', 'X45' ], 'Colors X115' => [ 'Colors', 'Xfactor Quad II X115' ], @@ -2080,6 +2134,7 @@ 'ConCorde SmartPhone6500' => [ 'ConCorde', 'SmartPhone 6500' ], 'ConCorde tab 9.7IPS PLUS' => [ 'ConCorde', 'tab 9.7IPS Plus', DeviceType::TABLET ], 'ConCorde tab NOVUM' => [ 'ConCorde', 'tab NOVUM', DeviceType::TABLET ], + 'Concorde Tab Omega 3G' => [ 'ConCorde', 'tab OMEGA', DeviceType::TABLET ], 'ConCorde tab PLAY' => [ 'ConCorde', 'tab PLAY', DeviceType::TABLET ], 'ConCorde tab Speed' => [ 'ConCorde', 'tab SPEED', DeviceType::TABLET ], 'ConCorde Tab T10' => [ 'ConCorde', 'tab T10', DeviceType::TABLET ], @@ -2092,6 +2147,7 @@ 'Coolgen E71' => [ 'Coolgen', 'E71' ], 'Coolgen E72 Note 3G' => [ 'Coolgen', 'E72' ], 'Coolgen E72 Note8' => [ 'Coolgen', 'E72' ], + 'Coolpad A8-531' => [ 'Coolpad', 'A8-531' ], 'Coolpad D510' => [ 'Coolpad', 'D510' ], 'D530' => [ 'Coolpad', 'D530' ], 'Coolpad D530' => [ 'Coolpad', 'D530' ], @@ -2100,9 +2156,14 @@ 'Coolpad D539' => [ 'Coolpad', 'D539' ], 'E239' => [ 'Coolpad', 'E239' ], 'Coolpad E239' => [ 'Coolpad', 'E239' ], + 'Coolpad E501!' => [ 'Coolpad', 'E501' ], + 'Coolpad E560' => [ 'Coolpad', 'E560' ], + 'Coolpad F101' => [ 'Coolpad', 'F101' ], + 'Coolpad F103' => [ 'Coolpad', 'F103' ], 'Coolpad N930' => [ 'Coolpad', 'N930' ], 'N930' => [ 'Coolpad', 'N930' ], 'Coolpad N950' => [ 'Coolpad', 'N950' ], + 'Coolpad R106' => [ 'Coolpad', 'R106' ], 'Coolpad S6-NT' => [ 'Coolpad', 'S6-NT' ], 'Coolpad T1' => [ 'Coolpad', 'T1' ], 'Coolpad T2-C01' => [ 'Coolpad', 'T2' ], @@ -2118,12 +2179,15 @@ 'Coolpad Y76!' => [ 'Coolpad', 'Y76' ], 'Coolpad Y80!' => [ 'Coolpad', 'Y80' ], 'Coolpad Y82!' => [ 'Coolpad', 'Y82' ], - 'CP3700A' => [ 'Coolpad', '3700' ], + 'Coolpad 3300A' => [ 'Coolpad', '3300A' ], + 'Coolpad 3320A' => [ 'Coolpad', '3320A' ], + 'CP3700A' => [ 'Coolpad', '3700A' ], 'Coolpad 5010' => [ 'Coolpad', '5010' ], 'Coolpad 5108' => [ 'Coolpad', '5108' ], 'Coolpad 5109' => [ 'Coolpad', '5109' ], 'Coolpad 5110' => [ 'Coolpad', '5110' ], 'Coolpad 5200' => [ 'Coolpad', '5200' ], + 'Coolpad 5200S' => [ 'Coolpad', '5200S' ], 'Coolpad 5210!' => [ 'Coolpad', '5210' ], 'Coolpad 5211' => [ 'Coolpad', '5211' ], 'Coolpad 5213' => [ 'Coolpad', '5213' ], @@ -2155,6 +2219,7 @@ 'Coolpad 5872' => [ 'Coolpad', '5872' ], 'Coolpad 5876' => [ 'Coolpad', '5876' ], 'Coolpad 5879' => [ 'Coolpad', '5879' ], + 'Coolpad 5879T' => [ 'Coolpad', '5879T' ], 'Coolpad 5880' => [ 'Coolpad', '5880' ], 'Coolpad 5890' => [ 'Coolpad', '5890' ], 'Coolpad 5891!' => [ 'Coolpad', '5891' ], @@ -2162,7 +2227,7 @@ 'Coolpad 5910' => [ 'Coolpad', '5910' ], 'Coolpad 5930' => [ 'Coolpad', '5930' ], 'Coolpad 5950' => [ 'Coolpad', '5950' ], - 'Coolpad 5950T' => [ 'Coolpad', '5950' ], + 'Coolpad 5950T' => [ 'Coolpad', '5950T' ], 'Coolpad 5951' => [ 'Coolpad', '5951' ], 'Coolpad 5952' => [ 'Coolpad', '5952' ], 'Coolpad 5956' => [ 'Coolpad', '5956' ], @@ -2171,6 +2236,8 @@ 'Coolpad 7019!' => [ 'Coolpad', '7019' ], 'Coolpad 7020' => [ 'Coolpad', '7020' ], 'Coolpad 7060!' => [ 'Coolpad', '7060' ], + 'Coolpad 7061' => [ 'Coolpad', '7061' ], + 'Coolpad 7105' => [ 'Coolpad', '7105' ], 'Coolpad 7230!' => [ 'Coolpad', '7230' ], 'Coolpad 7231' => [ 'Coolpad', '7231' ], 'Coolpad 7232' => [ 'Coolpad', '7232' ], @@ -2189,29 +2256,31 @@ 'Coolpad 7290' => [ 'Coolpad', '7290' ], 'Coolpad 7295!' => [ 'Coolpad', '7295' ], 'Coolpad 7296' => [ 'Coolpad', '7296' ], - 'Coolpad 7296S' => [ 'Coolpad', '7296' ], - 'Coolpad 7298A' => [ 'Coolpad', '7298' ], - 'Coolpad 7298D' => [ 'Coolpad', '7298' ], + 'Coolpad 7296S' => [ 'Coolpad', '7296S' ], + 'Coolpad 7298A' => [ 'Coolpad', '7298A' ], + 'Coolpad 7298D' => [ 'Coolpad', '7298D' ], 'Coolpad 7320' => [ 'Coolpad', '7320' ], - 'Coolpad 7560U' => [ 'Coolpad', '7560' ], - 'Coolpad 7620L' => [ 'Coolpad', '7620' ], + 'Coolpad 7560U' => [ 'Coolpad', '7560U' ], + 'Coolpad 7620L!' => [ 'Coolpad', '7620L' ], 'Coolpad 7728' => [ 'Coolpad', '7728' ], 'Coolpad 8010' => [ 'Coolpad', '8010' ], 'Coolpad 8012' => [ 'Coolpad', '8012' ], 'Coolpad 8013' => [ 'Coolpad', '8013' ], - 'Coolpad 8017' => [ 'Coolpad', '8017' ], + 'Coolpad 8017!' => [ 'Coolpad', '8017' ], 'Coolpad 8020!' => [ 'Coolpad', '8020' ], 'Coolpad 8021' => [ 'Coolpad', '8021' ], '8022' => [ 'Coolpad', '8022' ], 'Coolpad 8022' => [ 'Coolpad', '8022' ], 'Coolpad 8026' => [ 'Coolpad', '8026' ], 'Coolpad 8028' => [ 'Coolpad', '8028' ], + 'Coolpad 8029' => [ 'Coolpad', '8029' ], 'Coolpad 8050' => [ 'Coolpad', '8050' ], 'Coolpad 8056' => [ 'Coolpad', '8056' ], 'Coolpad -8056' => [ 'Coolpad', '8056' ], 'Coolpad 8060' => [ 'Coolpad', '8060' ], 'Coolpad 8070' => [ 'Coolpad', '8070' ], - 'Coolpad 8070D' => [ 'Coolpad', '8070' ], + 'Coolpad 8070D' => [ 'Coolpad', '8070D' ], + 'Coolpad 8071' => [ 'Coolpad', '8071' ], 'Coolpad 8076' => [ 'Coolpad', '8076' ], 'Coolpad -8076!' => [ 'Coolpad', '8076' ], 'Coolpad 8076D' => [ 'Coolpad', '8076' ], @@ -2219,27 +2288,32 @@ 'Coolpad 8085' => [ 'Coolpad', '8085' ], 'Coolpad 8085Q' => [ 'Coolpad', '8085' ], 'Coolpad 8089' => [ 'Coolpad', '8089' ], + 'Coolpad 8105' => [ 'Coolpad', '8105' ], 'Coolpad 8122' => [ 'Coolpad', '8122' ], 'Coolpad 8150S' => [ 'Coolpad', '8150' ], 'Coolpad -?8190!' => [ 'Coolpad', '8190' ], '8190Q' => [ 'Coolpad', '8190' ], - 'Coolpad 8198T' => [ 'Coolpad', '8198' ], - 'Coolpad 8295M' => [ 'Coolpad', '8295' ], + 'Coolpad 8198T' => [ 'Coolpad', '8198T' ], + 'Coolpad 8295M' => [ 'Coolpad', '8295M' ], 'Coolpad 8295!' => [ 'Coolpad', '8295' ], 'Coolpad 8297!' => [ 'Coolpad', 'Dashen F1' ], 'Coolpad F1 8297W' => [ 'Coolpad', 'Dashen F1' ], 'Coolpad 8670' => [ 'Coolpad', 'Note 8670' ], 'Coolpad 8675!' => [ 'Coolpad', 'Dashen F2' ], 'Coolpad 8676!' => [ 'Coolpad', 'Note 3 8676' ], - 'Coolpad 8690' => [ 'Coolpad', 'Dashen X7' ], + 'Coolpad 8690!' => [ 'Coolpad', 'Dashen X7' ], 'Coolpad 8702' => [ 'Coolpad', '8702' ], + 'Coolpad 8702D' => [ 'Coolpad', '8702D' ], 'Coolpad 8705' => [ 'Coolpad', '8705' ], + 'Coolpad 8707' => [ 'Coolpad', '8707' ], + 'Coolpad 8713' => [ 'Coolpad', '8713' ], '8720' => [ 'Coolpad', '8720' ], '8720L' => [ 'Coolpad', '8720' ], - 'Coolpad 8720L' => [ 'Coolpad', '8720' ], - 'Coolpad 8720Q' => [ 'Coolpad', '8720' ], + 'Coolpad 8720L' => [ 'Coolpad', '8720L' ], + 'Coolpad 8720Q' => [ 'Coolpad', '8720Q' ], 'Coolpad 8729' => [ 'Coolpad', '8729' ], - 'Coolpad 8730L' => [ 'Coolpad', '8730' ], + 'Coolpad 8730L' => [ 'Coolpad', '8730L' ], + 'Coolpad 8732' => [ 'Coolpad', '8732' ], 'Coolpad 8735' => [ 'Coolpad', '8735' ], 'Coolpad 8736' => [ 'Coolpad', '8736' ], 'Coolpad 8750' => [ 'Coolpad', 'Xuan Ying SII 8750' ], @@ -2268,6 +2342,7 @@ 'Coolpad Flo' => [ 'Coolpad', 'Flo' ], 'COWON D3' => [ 'Cowon', 'D3 Plenue', DeviceType::MEDIA ], 'COWON Z2' => [ 'Cowon', 'Z2 Plenue', DeviceType::MEDIA ], + 'COZCO C1 Plus' => [ 'Cozco', 'C1 Plus' ], 'CLP281X' => [ 'Craig', 'CLP281x', DeviceType::TABLET ], 'CMP741d' => [ 'Craig', 'CMP741d', DeviceType::TABLET ], 'CMP741E' => [ 'Craig', 'CMP741e', DeviceType::TABLET ], @@ -2487,6 +2562,7 @@ 'EvoPAD!!' => [ 'EvoPAD A7000' => [ 'Dark', 'EvoPad A7000', DeviceType::TABLET ], + 'EvoPad-R1020' => [ 'Dark', 'EvoPad R1020', DeviceType::TABLET ], 'EVOPad R8000' => [ 'Dark', 'EvoPad R8000', DeviceType::TABLET ], 'EVOPad R8020' => [ 'Dark', 'EvoPad R8020', DeviceType::TABLET ], 'EVOPad R9720' => [ 'Dark', 'EvoPad R9720', DeviceType::TABLET ], @@ -2501,9 +2577,9 @@ 'Dell Grappa' => [ 'Dell', 'Grappa' ], 'Dell M01M' => [ 'Dell', 'Mini 5', DeviceType::TABLET ], 'Dell Streak' => [ 'Dell', 'Streak', DeviceType::TABLET ], - '001DL' => [ 'Dell', 'Streak', DeviceType::TABLET ], - '101DL' => [ 'Dell', 'Streak Pro', DeviceType::TABLET ], - 'GS01' => [ 'Dell', 'Streak Pro', DeviceType::TABLET ], + '001DL' => [ 'Dell', 'STREAK 001DL', DeviceType::TABLET, 'carrier' => 'Softbank' ], + '101DL' => [ 'Dell', 'STREAK PRO 101DL', DeviceType::TABLET, 'carrier' => 'Softbank' ], + 'GS01' => [ 'Dell', 'STREAK PRO GS01', DeviceType::TABLET, 'carrier' => 'EMOBILE' ], 'Dell Streak Pro' => [ 'Dell', 'Streak Pro', DeviceType::TABLET ], 'streak7' => [ 'Dell', 'Streak 7', DeviceType::TABLET ], 'Dell Streak 7' => [ 'Dell', 'Streak 7', DeviceType::TABLET ], @@ -2596,15 +2672,21 @@ 'DIT9720' => [ 'Difrnce', 'DIT9720', DeviceType::TABLET ], 'DIT101201' => [ 'Difrnce', 'DIT101201', DeviceType::TABLET ], 'DIT102201' => [ 'Difrnce', 'DIT102201', DeviceType::TABLET ], + 'DIT102202' => [ 'Difrnce', 'DIT102202', DeviceType::TABLET ], 'DIT701101' => [ 'Difrnce', 'DIT701101', DeviceType::TABLET ], 'DIT702101' => [ 'Difrnce', 'DIT702101', DeviceType::TABLET ], 'DIT902101' => [ 'Difrnce', 'DIT902101', DeviceType::TABLET ], + 'DIT902102' => [ 'Difrnce', 'DIT902102', DeviceType::TABLET ], + 'DIT902103' => [ 'Difrnce', 'DIT902103', DeviceType::TABLET ], ], + 'DIGICEL DL800' => [ 'Digicel', 'DL800' ], + '(Digma )?iD[jmnsx][DQ]?[0-9]*!!' => [ 'Digma iDj7!' => [ 'Digma', 'iDj7', DeviceType::TABLET ], 'iDj7n' => [ 'Digma', 'iDj7n', DeviceType::TABLET ], 'Digma iDm7' => [ 'Digma', 'iDm7', DeviceType::TABLET ], + 'Digma iDn7' => [ 'Digma', 'iDn7', DeviceType::TABLET ], 'ids7' => [ 'Digma', 'iDs7', DeviceType::TABLET ], 'ids10' => [ 'Digma', 'iDs10', DeviceType::TABLET ], 'DIGMA iDs10!' => [ 'Digma', 'iDs10', DeviceType::TABLET ], @@ -2630,23 +2712,16 @@ 'DishTV Smartvu A2020' => [ 'DishTV', 'SmartVU-mini', DeviceType::TELEVISION ], 'DM0[0-9]{2,2}(K|SH)!!' => [ - 'DM009SH' => [ 'Disney Mobile', 'DM009SH' ], - 'DM010SH' => [ 'Disney Mobile', 'DM010SH' ], - 'DM011SH' => [ 'Disney Mobile', 'DM011SH' ], - 'DM012SH' => [ 'Disney Mobile', 'DM012SH' ], - 'DM013SH' => [ 'Disney Mobile', 'DM013SH' ], - 'DM014SH' => [ 'Disney Mobile', 'DM014SH' ], - 'DM015K' => [ 'Disney Mobile', 'DM015K' ], - 'DM016SH' => [ 'Disney Mobile', 'DM016SH' ], - ], - - 'F-03F' => [ 'Disney Mobile', 'F-03F' ], - 'F-07E' => [ 'Disney Mobile', 'F-07E' ], - 'F-08D' => [ 'Disney Mobile', 'F-08D' ], - 'N-03E' => [ 'Disney Mobile', 'N-03E' ], - 'P-05D' => [ 'Disney Mobile', 'P-05D' ], - 'SH-02G' => [ 'Disney Mobile', 'SH-02G' ], - 'SH-05F' => [ 'Disney Mobile', 'SH-05F' ], + 'DM009SH' => [ 'Sharp', 'DM009SH', 'carrier' => 'Disney Mobile' ], + 'DM010SH' => [ 'Sharp', 'DM010SH', 'carrier' => 'Disney Mobile' ], + 'DM011SH' => [ 'Sharp', 'DM011SH', 'carrier' => 'Disney Mobile' ], + 'DM012SH' => [ 'Sharp', 'DM012SH', 'carrier' => 'Disney Mobile' ], + 'DM013SH' => [ 'Sharp', 'DM013SH', 'carrier' => 'Disney Mobile' ], + 'DM014SH' => [ 'Sharp', 'DM014SH', 'carrier' => 'Disney Mobile' ], + 'DM015K' => [ 'Kyocera', 'DM015K', 'carrier' => 'Disney Mobile' ], + 'DM016SH' => [ 'Sharp', 'DM016SH', 'carrier' => 'Disney Mobile' ], + ], + 'DJC Touchtab3' => [ 'DJC', 'Touchtab3', DeviceType::TABLET ], 'AirBook TTJ702' => [ 'DNS', 'Airbook TTJ702', DeviceType::TABLET ], 'DNS Airbook TYT701' => [ 'DNS', 'Airbook TYT701', DeviceType::TABLET ], @@ -2657,19 +2732,25 @@ 'AirTab M81w' => [ 'DNS', 'AirTab M81w', DeviceType::TABLET ], 'M83w' => [ 'DNS', 'AirTab M83w', DeviceType::TABLET ], 'M84g' => [ 'DNS', 'AirTab M84g', DeviceType::TABLET ], - 'AirTab M104G' => [ 'DNS', 'AirTab M104G', DeviceType::TABLET ], - 'AirTab m971g' => [ 'DNS', 'AirTab M971G', DeviceType::TABLET ], - 'DNS AirTab M974w' => [ 'DNS', 'AirTab M974W', DeviceType::TABLET ], - 'AirTab M975w' => [ 'DNS', 'AirTab M975W', DeviceType::TABLET ], + 'M100qw' => [ 'DNS', 'AirTab M100qw', DeviceType::TABLET ], + 'M101g' => [ 'DNS', 'AirTab M101g', DeviceType::TABLET ], + 'AirTab M104G' => [ 'DNS', 'AirTab M104g', DeviceType::TABLET ], + 'AirTab m971g' => [ 'DNS', 'AirTab M971g', DeviceType::TABLET ], + 'M971w' => [ 'DNS', 'AirTab M971w', DeviceType::TABLET ], + 'M972g' => [ 'DNS', 'AirTab M972g', DeviceType::TABLET ], + 'M972w' => [ 'DNS', 'AirTab M972w', DeviceType::TABLET ], + 'DNS AirTab M974w' => [ 'DNS', 'AirTab M974w', DeviceType::TABLET ], + 'AirTab M975w' => [ 'DNS', 'AirTab M975w', DeviceType::TABLET ], 'DNS M975W' => [ 'DNS', 'AirTab M975W', DeviceType::TABLET ], 'AirTab MA7001' => [ 'DNS', 'AirTab MA7001', DeviceType::TABLET ], 'DNS AirTab MF1011' => [ 'DNS', 'AirTab MF1011', DeviceType::TABLET ], 'AirTab MW7851' => [ 'DNS', 'AirTab MW7851', DeviceType::TABLET ], - 'AirTab P70qw' => [ 'DNS', 'AirTab P70QW', DeviceType::TABLET ], - 'AirTab P71g' => [ 'DNS', 'AirTab P71G', DeviceType::TABLET ], - 'DNS AirTab P71g' => [ 'DNS', 'AirTab P71G', DeviceType::TABLET ], + 'AirTab P70qw' => [ 'DNS', 'AirTab P70qw', DeviceType::TABLET ], + 'AirTab P71g' => [ 'DNS', 'AirTab P71g', DeviceType::TABLET ], + 'DNS AirTab P71g' => [ 'DNS', 'AirTab P71g', DeviceType::TABLET ], 'AirTab P83' => [ 'DNS', 'AirTab P83', DeviceType::TABLET ], - 'DNS AirTab P101w' => [ 'DNS', 'AirTab P101W', DeviceType::TABLET ], + 'DNS AirTab P101w' => [ 'DNS', 'AirTab P101w', DeviceType::TABLET ], + 'AirTab P970w' => [ 'DNS', 'AirTab P970w', DeviceType::TABLET ], 'AirTab PC9701' => [ 'DNS', 'AirTab PC9701', DeviceType::TABLET ], 'DNS AirTab PF7001' => [ 'DNS', 'AirTab PF7001', DeviceType::TABLET ], ], @@ -2678,6 +2759,7 @@ 'DNS S3501' => [ 'DNS', 'S3501' ], 'DNS s4003' => [ 'DNS', 'S4003' ], 'DNS S4006' => [ 'DNS', 'S4006' ], + 'DNS S4008' => [ 'DNS', 'S4008' ], 'DNS S4502' => [ 'DNS', 'S4502' ], 'DNS S4502M' => [ 'DNS', 'S4502M' ], 'DNS S4507' => [ 'DNS', 'S4507' ], @@ -2719,9 +2801,19 @@ 'DOOV D770' => [ 'DOOV', 'D770' ], 'DOOV D800' => [ 'DOOV', 'D800' ], 'DOOV D910T' => [ 'DOOV', 'D910T' ], + 'DOOV D920' => [ 'DOOV', 'D920' ], + 'DOOV L1' => [ 'DOOV', 'L1' ], + 'DOOV L1M' => [ 'DOOV', 'L1M' ], + 'DOOV L3' => [ 'DOOV', 'L3' ], + 'DOOV L5' => [ 'DOOV', 'L5' ], + 'DOOV L5Pro' => [ 'DOOV', 'L5 Pro' ], 'DOOV S1' => [ 'DOOV', 'S1' ], 'DOOV S2' => [ 'DOOV', 'S2' ], 'DOOV S2y' => [ 'DOOV', 'S2y' ], + 'DOOV S3' => [ 'DOOV', 'S3' ], + 'DOOV S5' => [ 'DOOV', 'S5' ], + 'DOOV T20L' => [ 'DOOV', 'T20L' ], + 'DOOV T35' => [ 'DOOV', 'T35' ], 'DOOV T60' => [ 'DOOV', 'T60' ], 'DOOV T90' => [ 'DOOV', 'T90' ], ], @@ -2729,6 +2821,7 @@ 'Doro Liberto!!' => [ 'Doro Liberto 810' => [ 'Doro', 'Liberto 810' ], 'Doro Liberto 820' => [ 'Doro', 'Liberto 820' ], + 'Doro Liberto 820 Mini' => [ 'Doro', 'Liberto 820 Mini' ], ], 'M975' => [ 'Double Power', 'M975', DeviceType::TABLET ], @@ -2748,6 +2841,7 @@ 'E-Boda Supreme X80 Dual Core' => [ 'E-Boda', 'Supreme X80', DeviceType::TABLET ], 'E-Boda Supreme Dual Core X190' => [ 'E-Boda', 'Supreme X190', DeviceType::TABLET ], 'SUPREME IPS Dual Core X200' => [ 'E-Boda', 'Supreme X200', DeviceType::TABLET ], + 'E-Boda Supreme X400 Quad Core' => [ 'E-Boda', 'Supreme X400', DeviceType::TABLET ], 'E-Boda Supreme XL200IPS' => [ 'E-Boda', 'Supreme XL200', DeviceType::TABLET ], 'E-Boda Supreme XL400QC' => [ 'E-Boda', 'Supreme XL400', DeviceType::TABLET ], 'E-Boda Rainbow V47' => [ 'E-Boda', 'Rainbow V47' ], @@ -2768,6 +2862,7 @@ 'EasyPad 971' => [ 'Easypix', 'EasyPad 971', DeviceType::TABLET ], 'EBEN!!' => [ + 'EBEN A3' => [ 'EBEN', 'A3', DeviceType::TABLET ], 'EBEN S1' => [ 'EBEN', 'S1', DeviceType::TABLET ], 'EBEN T6' => [ 'EBEN', 'T6', DeviceType::TABLET ], 'EBEN T7' => [ 'EBEN', 'T7', DeviceType::TABLET ], @@ -2775,6 +2870,7 @@ ], 'EBEST!!' => [ + 'EBEST A35' => [ 'EBEST', 'A35' ], 'EBEST F5' => [ 'EBEST', 'F5' ], 'EBEST N4' => [ 'EBEST', 'N4' ], 'EBEST T5' => [ 'EBEST', 'T5' ], @@ -2786,9 +2882,11 @@ 'EBEST V8' => [ 'EBEST', 'V8' ], 'EBEST W16A' => [ 'EBEST', 'W16A' ], 'EBEST W18' => [ 'EBEST', 'W18' ], + 'EBEST W66' => [ 'EBEST', 'W66' ], 'EBEST W66A' => [ 'EBEST', 'W66A' ], 'EBEST W70' => [ 'EBEST', 'W70' ], 'EBEST Z5' => [ 'EBEST', 'Z5' ], + 'EBEST Z7' => [ 'EBEST', 'Z7' ], ], 'TA10CA3' => [ 'ECS', 'TA10CA3', DeviceType::TABLET ], @@ -2797,10 +2895,16 @@ 'TR10CS1' => [ 'ECS', 'TR10CS1', DeviceType::TABLET ], 'Elephone!!' => [ + 'Elephone G2' => [ 'Elephone', 'G2' ], + 'Elephone G4' => [ 'Elephone', 'G4' ], + 'Elephone G5' => [ 'Elephone', 'G5' ], 'Elephone G6' => [ 'Elephone', 'G6' ], + 'Elephone G7' => [ 'Elephone', 'G7' ], + 'Elephone G9' => [ 'Elephone', 'G9' ], 'Elephone-P10C' => [ 'Elephone', 'P10C' ], 'Elephone-P2000' => [ 'Elephone', 'P2000' ], 'Elephone P2000' => [ 'Elephone', 'P2000' ], + 'Elephone-P2000C' => [ 'Elephone', 'P2000C' ], 'Elephone P3000!' => [ 'Elephone', 'P3000' ], 'Elephone P5000!' => [ 'Elephone', 'P5000' ], 'Elephone P6000!' => [ 'Elephone', 'P6000' ], @@ -2816,6 +2920,7 @@ 'epade!!' => [ 'epade A3' => [ 'epade', 'A3' ], + 'epade A7' => [ 'epade', 'A7' ], 'epade A45' => [ 'epade', 'A45' ], 'epade A300' => [ 'epade', 'A300' ], 'epade A360S' => [ 'epade', 'A360S' ], @@ -2823,22 +2928,29 @@ 'epade N01' => [ 'epade', 'N01' ], 'epade Q3' => [ 'epade', 'Q3' ], 'epade S300' => [ 'epade', 'S300' ], + 'EPADE S3' => [ 'epade', 'S3' ], 'epade S5' => [ 'epade', 'S5' ], 'epade S7' => [ 'epade', 'S7' ], + 'epade V05' => [ 'epade', 'V05' ], ], 'equiso.smart.tv.pro' => [ 'Equiso', 'SmartTV', DeviceType::TELEVISION ], 'eSTAR!!' => [ + 'eSTAR BEAUTY HD Quad core' => [ 'eSTAR', 'Beauty HD', DeviceType::TABLET ], 'eSTAR CRYSTAL' => [ 'eSTAR', 'Crystal', DeviceType::TABLET ], 'eSTAR Easy' => [ 'eSTAR', 'Easy', DeviceType::TABLET ], 'eSTAR GO!' => [ 'eSTAR', 'Go!', DeviceType::TABLET ], 'eSTAR GRAND' => [ 'eSTAR', 'Grand', DeviceType::TABLET ], 'eSTAR GRAND HD' => [ 'eSTAR', 'Grand HD', DeviceType::TABLET ], - 'eSTAR GRAND HD Quad 3G' => [ 'eSTAR', 'Grand HD Quad 3G', DeviceType::TABLET ], + 'eSTAR GRAND HD Quad 3G' => [ 'eSTAR', 'Grand HD 3G', DeviceType::TABLET ], + 'eSTAR GRAND HD Intel Quad core 3G' => [ 'eSTAR', 'Grand HD 3G', DeviceType::TABLET ], 'eSTAR Gemini' => [ 'eSTAR', 'Gemini', DeviceType::TABLET ], + 'eSTAR MINI' => [ 'eSTAR', 'Mini', DeviceType::TABLET ], 'eSTAR MINI 3G' => [ 'eSTAR', 'Mini 3G', DeviceType::TABLET ], - 'eSTAR Zoom Quad' => [ 'eSTAR', 'Zoom Quad', DeviceType::TABLET ], + 'eSTAR Zoom Quad' => [ 'eSTAR', 'Zoom', DeviceType::TABLET ], + 'eSTAR ZOOM HD Duo' => [ 'eSTAR', 'Zoom HD', DeviceType::TABLET ], + 'eSTAR Zoom HD Quad' => [ 'eSTAR', 'Zoom HD', DeviceType::TABLET ], ], 'MID1018' => [ 'eSTAR', 'MID1018', DeviceType::TABLET ], @@ -2873,9 +2985,11 @@ 'Explay A320' => [ 'Explay', 'A320' ], 'Explay Advance' => [ 'Explay', 'Advance' ], 'Explay Dream' => [ 'Explay', 'Dream' ], + 'Explay Indigo' => [ 'Explay', 'Indigo' ], 'Explay Infinity' => [ 'Explay', 'Infinity' ], 'Explay A350' => [ 'Explay', 'Star' ], 'Explay Star' => [ 'Explay', 'Star' ], + 'Explay Vega' => [ 'Explay', 'Vega' ], 'X-tremer' => [ 'Explay', 'X-tremer' ], 'Explay X-tremer' => [ 'Explay', 'X-tremer' ], 'ActiveD 7.4 3G' => [ 'Explay', 'ActiveD 7.4 3G', DeviceType::TABLET ], @@ -2915,6 +3029,7 @@ 'FDT C838' => [ 'FDT', 'C838' ], 'FDT E5' => [ 'FDT', 'E5' ], 'FDT E6' => [ 'FDT', 'E6' ], + 'FDT E829' => [ 'FDT', 'E829' ], 'FDT E969' => [ 'FDT', 'E969' ], 'FDT G18' => [ 'FDT', 'G18' ], 'FDT G505' => [ 'FDT', 'G505' ], @@ -3017,9 +3132,11 @@ 'Flylife Connect 7.85 3G 2' => [ 'Fly', 'Flylife Connect 7.85 3G 2', DeviceType::TABLET ], 'Flylife Connect 7.85 3G Slim' => [ 'Fly', 'Flylife Connect 7.85 3G Slim', DeviceType::TABLET ], 'Flylife Connect 10.1 3G' => [ 'Fly', 'Flylife Connect 10.1 3G', DeviceType::TABLET ], + 'Flylife Web 7' => [ 'Fly', 'Flylife Web 7', DeviceType::TABLET ], 'Flylife Web 7.85 Slim' => [ 'Fly', 'Flylife Web 7.85 Slim', DeviceType::TABLET ], ], + 'Fly Flylife Web 7.85 Slim' => [ 'Fly', 'Flylife Web 7.85 Slim', DeviceType::TABLET ], 'F600' => [ 'Flying', 'F600' ], 'BC1003' => [ 'Flytouch', 'BC1003', DeviceType::TABLET ], @@ -3036,6 +3153,7 @@ 'tablet Fnac 10' => [ 'Fnac', 'Tablet 10', DeviceType::TABLET ], 'tablet Fnac 10 3G' => [ 'Fnac', 'Tablet 10 3G', DeviceType::TABLET ], 'fnac 10 v2' => [ 'Fnac', 'Tablet 10 v2', DeviceType::TABLET ], + 'fnac 3.0 8' => [ 'Fnac', 'Tablet 3.0 8', DeviceType::TABLET ], 'fnac 3.0 10 Plus' => [ 'Fnac', 'Tablet 3.0 10', DeviceType::TABLET ], ], @@ -3078,43 +3196,49 @@ ], '[0-9]0[0-9]F!!' => [ - '101F' => [ 'Fujitsu', 'Arrows A 101F' ], - '201F' => [ 'Fujitsu', 'Arrows A 201F' ], - '202F' => [ 'Fujitsu', 'Arrows A 202F' ], - '301F' => [ 'Fujitsu', 'Arrows A 301F' ], + '101F' => [ 'Fujitsu', 'ARROWS A 101F', 'carrier' => 'Softbank' ], + '201F' => [ 'Fujitsu', 'ARROWS A 201F', 'carrier' => 'Softbank' ], + '202F' => [ 'Fujitsu', 'ARROWS A 202F', 'carrier' => 'Softbank' ], + '301F' => [ 'Fujitsu', 'ARROWS A 301F', 'carrier' => 'Softbank' ], ], 'ISW?[0-9]{2,2}F!!' => [ - 'ISW11F' => [ 'Fujitsu', 'Arrows Z' ], - 'ISW13F' => [ 'Fujitsu', 'Arrows Z' ], - 'IS12F' => [ 'Fujitsu', 'Arrows ES' ], + 'ISW11F' => [ 'Fujitsu', 'ARROWS Z ISW11F', 'carrier' => 'au' ], + 'ISW13F' => [ 'Fujitsu', 'ARROWS Z ISW13F', 'carrier' => 'au' ], + 'IS12F' => [ 'Fujitsu', 'ARROWS ES IS12F', 'carrier' => 'au' ], ], 'F-[0-9]{2,2}[A-Z]!!' => [ - 'F-01D' => [ 'Fujitsu', 'Arrows Tab LTE', DeviceType::TABLET ], - 'F-01F' => [ 'Fujitsu', 'Arrows NX F' ], - 'F-02E' => [ 'Fujitsu', 'Arrows X' ], - 'F-02F' => [ 'Fujitsu', 'Arrows Tab F-02F', DeviceType::TABLET ], - 'F-02G' => [ 'Fujitsu', 'Arrows NX' ], - 'F-03D' => [ 'Fujitsu', 'Arrows Kiss' ], - 'F-03E' => [ 'Fujitsu', 'Arrows Kiss' ], - 'F-03G' => [ 'Fujitsu', 'Arrows Tab F-03G', DeviceType::TABLET ], - 'F-04E' => [ 'Fujitsu', 'Arrows V' ], - 'F-04F' => [ 'Fujitsu', 'F-04F' ], - 'F-05D' => [ 'Fujitsu', 'Arrows X LTE' ], - 'F-05E' => [ 'Fujitsu', 'Arrows Tab' ], - 'F-05F' => [ 'Fujitsu', 'Arrows NX' ], - 'F-05G' => [ 'Fujitsu', 'Arrows' ], - 'F-06E' => [ 'Fujitsu', 'Arrows NX' ], - 'F-06F' => [ 'Fujitsu', 'F-06F' ], - 'F-07D' => [ 'Fujitsu', 'Arrows μ' ], - 'F-08E' => [ 'Fujitsu', 'F-08E' ], - 'F-09D' => [ 'Fujitsu', 'ANTEPRIMA' ], - 'F-09E' => [ 'Fujitsu', 'F-09E' ], - 'F-10D' => [ 'Fujitsu', 'Arrows X F-10D' ], - 'F-11D' => [ 'Fujitsu', 'Arrows Me' ], - 'F-12C' => [ 'Fujitsu', 'Globetrotter' ], - 'F-12D' => [ 'Fujitsu', 'F-12D' ], + 'F-01D' => [ 'Fujitsu', 'ARROWS Tab LTE F-01D', DeviceType::TABLET, 'carrier' => 'DoCoMo' ], + 'F-01F' => [ 'Fujitsu', 'ARROWS NX F-01F', 'carrier' => 'DoCoMo' ], + 'F-01H' => [ 'Fujitsu', 'arrows Fit F-01H', 'carrier' => 'DoCoMo' ], + 'F-02E' => [ 'Fujitsu', 'ARROWS X F-02E', 'carrier' => 'DoCoMo' ], + 'F-02F' => [ 'Fujitsu', 'ARROWS Tab F-02F', DeviceType::TABLET, 'carrier' => 'DoCoMo' ], + 'F-02G' => [ 'Fujitsu', 'ARROWS NX F-02G', 'carrier' => 'DoCoMo' ], + 'F-02H' => [ 'Fujitsu', 'arrows NX F-02H', 'carrier' => 'DoCoMo' ], + 'F-03D' => [ 'Fujitsu', 'ARROWS Kiss F-03D', 'carrier' => 'DoCoMo' ], + 'F-03E' => [ 'Fujitsu', 'ARROWS Kiss with JILL STUART F-03E', 'carrier' => 'DoCoMo' ], + 'F-03F' => [ 'Fujitsu', 'F-03F', 'carrier' => 'Disney Mobile' ], + 'F-03G' => [ 'Fujitsu', 'ARROWS Tab F-03G', DeviceType::TABLET, 'carrier' => 'DoCoMo' ], + 'F-04E' => [ 'Fujitsu', 'ARROWS V F-04E', 'carrier' => 'DoCoMo' ], + 'F-04F' => [ 'Fujitsu', 'Business Smartphone F-04F', 'carrier' => 'DoCoMo' ], + 'F-04G' => [ 'Fujitsu', 'ARROWS NX F-04G', 'carrier' => 'DoCoMo' ], + 'F-05D' => [ 'Fujitsu', 'ARROWS X LTE F-05D', 'carrier' => 'DoCoMo' ], + 'F-05E' => [ 'Fujitsu', 'ARROWS Tab F-05E', 'carrier' => 'DoCoMo' ], + 'F-05F' => [ 'Fujitsu', 'ARROWS NX F-05F', 'carrier' => 'DoCoMo' ], + 'F-05G' => [ 'Fujitsu', 'ARROWS F-05G', 'carrier' => 'DoCoMo' ], + 'F-06E' => [ 'Fujitsu', 'ARROWS NX F-06E', 'carrier' => 'DoCoMo' ], + 'F-06F' => [ 'Fujitsu', 'Easy Smartphone 3 F-06F', 'carrier' => 'DoCoMo' ], + 'F-07D' => [ 'Fujitsu', 'ARROWS μ F-07D', 'carrier' => 'DoCoMo' ], + 'F-07E' => [ 'Fujitsu', 'F-07E', 'carrier' => 'Disney Mobile' ], + 'F-08D' => [ 'Fujitsu', 'F-08D', 'carrier' => 'Disney Mobile' ], + 'F-08E' => [ 'Fujitsu', 'Easy Smartphone 2 F-08E', 'carrier' => 'DoCoMo' ], + 'F-09D' => [ 'Fujitsu', 'ANTEPRIMA F-09D', 'carrier' => 'DoCoMo' ], + 'F-09E' => [ 'Fujitsu', 'Easy Smartphone Premium F-09E', 'carrier' => 'DoCoMo' ], + 'F-10D' => [ 'Fujitsu', 'ARROWS X F-10D', 'carrier' => 'DoCoMo' ], + 'F-11D' => [ 'Fujitsu', 'ARROWS Me F-11D', 'carrier' => 'DoCoMo' ], + 'F-12C' => [ 'Fujitsu', 'GLOBE-TROTTER F-12C', 'carrier' => 'DoCoMo' ], + 'F-12D' => [ 'Fujitsu', 'Easy Smartphone F-12D', 'carrier' => 'DoCoMo' ], ], 'f12[a-z]{3,3}!!' => [ @@ -3123,9 +3247,9 @@ ], 'FJ[LT][0-9]{2,2}!!' => [ - 'FJL21' => [ 'Fujitsu', 'Arrows ef FJL21' ], - 'FJL22' => [ 'Fujitsu', 'Arrows Z FJL22' ], - 'FJT21' => [ 'Fujitsu', 'Arrows Tab FJT21', DeviceType::TABLET ], + 'FJL21' => [ 'Fujitsu', 'ARROWS ef FJL21', 'carrier' => 'au' ], + 'FJL22' => [ 'Fujitsu', 'ARROWS Z FJL22', 'carrier' => 'au' ], + 'FJT21' => [ 'Fujitsu', 'ARROWS Tab FJT21', DeviceType::TABLET, 'carrier' => 'au' ], ], 'M532' => [ 'Fujitsu', 'Stylistic M532', DeviceType::TABLET ], @@ -3209,6 +3333,11 @@ 'GHIA!!' => [ 'GHIA 20218P' => [ 'Ghia', 'Any 20218P', DeviceType::TABLET ], 'GHIA 27154P' => [ 'Ghia', 'Any 27154P', DeviceType::TABLET ], + 'GHIA V2.0 27158N' => [ 'Ghia', 'Any 27158N', DeviceType::TABLET ], + 'GHIA 27214P' => [ 'Ghia', 'Any 27214P', DeviceType::TABLET ], + 'GHIA 27258B' => [ 'Ghia', 'Any 27258B', DeviceType::TABLET ], + 'GHIA 27258N' => [ 'Ghia', 'Any 27258N', DeviceType::TABLET ], + 'GHIA V2.0 27258N' => [ 'Ghia', 'Any 27258N', DeviceType::TABLET ], 'GHIA 29214P' => [ 'Ghia', 'Any 29214P', DeviceType::TABLET ], ], @@ -3217,6 +3346,7 @@ 'GSmart Alto A2' => [ 'Gigabyte', 'GSmart Alto A2' ], 'GSmart Arty A3' => [ 'Gigabyte', 'GSmart Arty A3' ], 'GSmart Akta A4' => [ 'Gigabyte', 'GSmart Akta A4' ], + 'GSmart Essence 4' => [ 'Gigabyte', 'GSmart Essence 4' ], 'GSmart-G1305' => [ 'Gigabyte', 'GSmart G1305' ], 'GSmart G1310' => [ 'Gigabyte', 'GSmart G1310' ], 'GSmart G1315!' => [ 'Gigabyte', 'GSmart G1315' ], @@ -3259,9 +3389,12 @@ '(GIO-)?(GiONEE[- ])?Dream D1!' => [ 'Gionee', 'Dream D1' ], '(GIO-)?(GiONEE[- ])?E3T!' => [ 'Gionee', 'E3T' ], '(GIO-)?(GiONEE[- ])?E3$!' => [ 'Gionee', 'E3' ], + '(GIO-)?(GiONEE[- ])?E5$!' => [ 'Gionee', 'E5' ], '(GIO-)?(GiONEE[- ])?E6mini!' => [ 'Gionee', 'E6 mini' ], '(GIO-)?(GiONEE[- ])?E6$!' => [ 'Gionee', 'E6' ], + '(GIO-)?(GiONEE[- ])?E6T$!' => [ 'Gionee', 'E6T' ], '(GIO-)?(GiONEE[- ])?E7$!' => [ 'Gionee', 'E7' ], + '(GIO-)?(GiONEE[- ])?F103!' => [ 'Gionee', 'F103' ], '(GIO-)?(GiONEE[- ])?F301!' => [ 'Gionee', 'F301' ], '(GIO-)?(GiONEE[- ])?GN100T!' => [ 'Gionee', 'GN100T' ], '(GIO-)?(GiONEE[- ])?GN100!' => [ 'Gionee', 'GN100' ], @@ -3308,6 +3441,10 @@ '(GIO-)?(GiONEE[- ])?GN9002!' => [ 'Gionee', 'GN9002' ], '(GIO-)?(GiONEE[- ])?GN9004!' => [ 'Gionee', 'GN9004' ], '(GIO-)?(GiONEE[- ])?GN9005!' => [ 'Gionee', 'GN9005' ], + 'Gionee M1' => [ 'Gionee', 'M1' ], + 'Gionee M2' => [ 'Gionee', 'M2' ], + 'Gionee M3S' => [ 'Gionee', 'M3S' ], + 'Gionee M5' => [ 'Gionee', 'M5' ], 'GPLUS N809' => [ 'Gionee', 'N809' ], '(GIO-)?(GiONEE[- ])?S101!' => [ 'Gionee', 'S101' ], '(GIO-)?(GiONEE[- ])?V182!' => [ 'Gionee', 'V182' ], @@ -3323,6 +3460,7 @@ '(GIO-)?(GiONEE[- ])?Pioneer P2!' => [ 'Gionee', 'Pioneer P2' ], '(GIO-)?(GiONEE[- ])?Pioneer P3!' => [ 'Gionee', 'Pioneer P3' ], '(GIO-)?(GiONEE[- ])?Pioneer P4!' => [ 'Gionee', 'Pioneer P4' ], + 'Gionee P3' => [ 'Gionee', 'Pioneer P3' ], 'Gionee P4' => [ 'Gionee', 'Pioneer P4' ], '(GIO-)?(GiONEE[- ])?Gpad G1!' => [ 'Gionee', 'GPAD G1', DeviceType::TABLET ], '(GIO-)?(GiONEE[- ])?Gpad G2!' => [ 'Gionee', 'GPAD G2', DeviceType::TABLET ], @@ -3460,22 +3598,36 @@ 'EVERCOSS A5A*' => [ 'Harga', 'EVERCOSS A5A' ], 'EVERCOSS A5C' => [ 'Harga', 'EVERCOSS A5C' ], 'EVERCOSS A5K' => [ 'Harga', 'EVERCOSS A5K' ], + 'EVERCOSS A5P*' => [ 'Harga', 'EVERCOSS A5P' ], 'EVERCOSS A5V' => [ 'Harga', 'EVERCOSS A5V' ], + 'EVERCOSS A5Z' => [ 'Harga', 'EVERCOSS A5Z' ], 'EVERCOSS A7A' => [ 'Harga', 'EVERCOSS A7A' ], + 'EVERCOSS A7A*' => [ 'Harga', 'EVERCOSS A7A' ], 'EVERCOSS A7B' => [ 'Harga', 'EVERCOSS A7B' ], 'EVERCOSS A7F' => [ 'Harga', 'EVERCOSS A7F' ], + 'EVERCOSS A7K' => [ 'Harga', 'EVERCOSS A7K' ], + 'EVERCOSS A7L' => [ 'Harga', 'EVERCOSS A7L' ], 'EVERCOSS A7N' => [ 'Harga', 'EVERCOSS A7N' ], 'EVERCOSS A7R' => [ 'Harga', 'EVERCOSS A7R' ], 'EVERCOSS A7S' => [ 'Harga', 'EVERCOSS A7S' ], 'EVAS evercoss-a7s' => [ 'Harga', 'EVERCOSS A7S' ], 'EVERCOSS A7T' => [ 'Harga', 'EVERCOSS A7T' ], + 'EVERCOSS A7T*' => [ 'Harga', 'EVERCOSS A7T' ], + 'EVERCOSS A7V' => [ 'Harga', 'EVERCOSS A7V' ], + 'EVERCOSS A7V+' => [ 'Harga', 'EVERCOSS A7V' ], 'EVERCOSS A7Z' => [ 'Harga', 'EVERCOSS A7Z' ], 'EVERCOSS A28A' => [ 'Harga', 'EVERCOSS A28A' ], 'EVERCOSS A28M' => [ 'Harga', 'EVERCOSS A28M' ], 'EVERCOSS A65' => [ 'Harga', 'EVERCOSS A65' ], 'Evercoss A66A' => [ 'Harga', 'EVERCOSS A66A' ], 'EVERCOSS A66S' => [ 'Harga', 'EVERCOSS A66S' ], + 'EVERCOSS A66V' => [ 'Harga', 'EVERCOSS A66V' ], + 'EVERCOSS A74A' => [ 'Harga', 'EVERCOSS A74A' ], + 'EVERCOSS A74C' => [ 'Harga', 'EVERCOSS A74C' ], + 'EVERCOSS A74D' => [ 'Harga', 'EVERCOSS A74D' ], 'EVERCOSS-A75L' => [ 'Harga', 'EVERCOSS A75L' ], + 'EVERCOSS A75W' => [ 'Harga', 'EVERCOSS A75W' ], + 'EVERCOSS A80A' => [ 'Harga', 'EVERCOSS A80A' ], 'EVERCOSS A200' => [ 'Harga', 'EVERCOSS A200' ], 'EVERCOSS AT1A' => [ 'Harga', 'EVERCOSS AT1A', DeviceType::TABLET ], 'EVERCOSS AT1A*' => [ 'Harga', 'EVERCOSS AT1A', DeviceType::TABLET ], @@ -3730,6 +3882,7 @@ 'Hisense E602M' => [ 'Hisense', 'E602M' ], 'Hisense HS-E910' => [ 'Hisense', 'E910' ], 'Hisense EG909' => [ 'Hisense', 'EG909' ], + 'HS-Hisense F20T' => [ 'Hisense', 'F20T' ], 'HS-Hisense I632T' => [ 'Hisense', 'I632T' ], 'HS-Hisense I635T' => [ 'Hisense', 'I635T' ], 'HS-Hisense I639T' => [ 'Hisense', 'I639T' ], @@ -3807,6 +3960,7 @@ 'HP 8 G2' => [ 'HP', '8 G2', DeviceType::TABLET ], 'HP 10' => [ 'HP', '10', DeviceType::TABLET ], 'HP 10 Tablet' => [ 'HP', '10', DeviceType::TABLET ], + 'HP 10 G2 Tablet' => [ 'HP', '10 G2', DeviceType::TABLET ], 'HP 10 Plus' => [ 'HP', '10 Plus', DeviceType::TABLET ], 'HP Slate 6 Voice Tab' => [ 'HP', 'Slate 6 Voice Tab', DeviceType::TABLET ], 'HP Slate 6 VoiceTab Plus' => [ 'HP', 'Slate 6 Voice Tab Plus', DeviceType::TABLET ], @@ -3822,6 +3976,7 @@ 'HP Pro Slate 8' => [ 'HP', 'Slate 8 Pro', DeviceType::TABLET ], 'HP Slate 10 HD' => [ 'HP', 'Slate 10 HD', DeviceType::TABLET ], 'Slate 10 HD' => [ 'HP', 'Slate 10 HD', DeviceType::TABLET ], + 'HP Slate 10 Plus' => [ 'HP', 'Slate 10 Plus', DeviceType::TABLET ], 'HP Pro Slate 12' => [ 'HP', 'Slate 12 Pro', DeviceType::TABLET ], 'HP Slate 17' => [ 'HP', 'Slate 17', DeviceType::TABLET ], 'Slate 21' => [ 'HP', 'Slate 21', DeviceType::TABLET ], @@ -3857,6 +4012,7 @@ 'HTC D316d' => [ 'HTC', 'Desire 316' ], 'HTC Desire 320' => [ 'HTC', 'Desire 320' ], 'htc v01' => [ 'HTC', 'Desire 320' ], + 'HTC Desire 326G dual sim' => [ 'HTC', 'Desire 326G' ], 'HTC Desire 400 dual sim' => [ 'HTC', 'Desire 400' ], 'HTC Desire 500' => [ 'HTC', 'Desire 500' ], 'HTC Desire 500 dual sim' => [ 'HTC', 'Desire 500' ], @@ -3868,8 +4024,10 @@ 'HTC 0PCV2' => [ 'HTC', 'Desire 510' ], 'HTC 0PCV220' => [ 'HTC', 'Desire 510' ], '0PCV1' => [ 'HTC', 'Desire 510' ], + 'HTC Desire 512' => [ 'HTC', 'Desire 512' ], 'HTC D516(d|t|w)!' => [ 'HTC', 'Desire 516' ], 'HTC Desire 516 dual sim' => [ 'HTC', 'Desire 516' ], + 'HTC Desire 520' => [ 'HTC', 'Desire 520' ], 'HTCD100LVW' => [ 'HTC', 'Desire 526' ], 'HTC 0PM1100' => [ 'HTC', 'Desire 526G' ], 'HTC Desire 526G' => [ 'HTC', 'Desire 526G' ], @@ -3904,13 +4062,17 @@ 'HTC Desire 620' => [ 'HTC', 'Desire 620' ], 'HTC Desire 620G' => [ 'HTC', 'Desire 620G' ], 'HTC Desire 620G dual sim' => [ 'HTC', 'Desire 620G' ], - 'HTC D626(d|x)!' => [ 'HTC', 'Desire 626' ], + 'HTC D626(d|w|x)!' => [ 'HTC', 'Desire 626' ], + 'HTC Desire 626' => [ 'HTC', 'Desire 626' ], 'HTC Desire 626G dual sim' => [ 'HTC', 'Desire 626G' ], 'HTC D626(ph)!' => [ 'HTC', 'Desire 626G' ], + 'HTC Desire 626GPLUS dual sim' => [ 'HTC', 'Desire 626G+' ], + 'HTC Desire 626s' => [ 'HTC', 'Desire 626s' ], 'HTC Desire 700 dual sim' => [ 'HTC', 'Desire 700' ], 'HTC 709d' => [ 'HTC', 'Desire 709d' ], 'HTC D816' => [ 'HTC', 'Desire 816' ], 'HTC D816(d|t|v|w|x)!' => [ 'HTC', 'Desire 816' ], + 'D816(d|t|v|w|x)!' => [ 'HTC', 'Desire 816' ], 'HTC D816(h)!' => [ 'HTC', 'Desire 816G' ], 'Desire 816' => [ 'HTC', 'Desire 816' ], 'HTC Desire 816' => [ 'HTC', 'Desire 816' ], @@ -3926,7 +4088,10 @@ 'HTC Desire 820q dual sim' => [ 'HTC', 'Desire 820q' ], 'HTC Desire 820s dual sim' => [ 'HTC', 'Desire 820s' ], 'HTC D820(ys)!' => [ 'HTC', 'Desire 820s' ], - 'HTC D826(d|w|y)!' => [ 'HTC', 'Desire 826' ], + 'D820mt' => [ 'HTC', 'Desire 820 Mini' ], + 'HTC Desire 826 dual sim' => [ 'HTC', 'Desire 826' ], + 'HTC D826(d|t|w|y)!' => [ 'HTC', 'Desire 826' ], + 'HTC D828w!' => [ 'HTC', 'Desire 828' ], 'HTC 5088' => [ 'HTC', 'Desire 5088' ], 'HTC 6160' => [ 'HTC', 'Desire 6160' ], 'HTC 7060' => [ 'HTC', 'Desire 7060' ], @@ -3974,7 +4139,8 @@ 'HTC Bravo C' => [ 'HTC', 'Desire' ], 'HTC eris' => [ 'HTC', 'Desire' ], 'HTC A81(81|83)!' => [ 'HTC', 'Desire' ], - 'HTC ?X06HT!' => [ 'HTC', 'Desire' ], + 'HTC ?X06HTII!' => [ 'HTC', 'Desire X06HTII', 'carrier' => 'Softbank' ], + 'HTC ?X06HT!' => [ 'HTC', 'Desire X06HT', 'carrier' => 'Softbank' ], 'HTC Desire CDMA' => [ 'HTC', 'Desire' ], 'HTC Dream' => [ 'HTC', 'Dream' ], 'HTC Droid DNA' => [ 'HTC', 'Droid DNA' ], @@ -4133,6 +4299,7 @@ 'HTC One max' => [ 'HTC', 'One Max' ], 'HTC One max dual' => [ 'HTC', 'One Max' ], 'HTC A9w' => [ 'HTC', 'One (A9)' ], + 'HTC One E9PLUS dual sim' => [ 'HTC', 'One (E9 Plus)' ], 'HTC One M9' => [ 'HTC', 'One (M9)' ], 'HTC 0PJA1!' => [ 'HTC', 'One (M9)' ], 'HTC 0PJA2!' => [ 'HTC', 'One (M9)' ], @@ -4140,6 +4307,7 @@ '0PJA2!' => [ 'HTC', 'One (M9)' ], 'HTC6535LVW' => [ 'HTC', 'One (M9)' ], 'HTC M9(u|w)!' => [ 'HTC', 'One (M9)' ], + 'HTC One M9PLUS' => [ 'HTC', 'One (M9 Plus)' ], 'HTC M9pw' => [ 'HTC', 'One (M9 Plus)' ], 'HTC M9ew' => [ 'HTC', 'One ME' ], 'htc hima ace ml dtul' => [ 'HTC', 'One ME' ], @@ -4272,7 +4440,7 @@ 'Inspire HD' => [ 'HTC', 'Inspire 4G' ], 'Inspire 4G' => [ 'HTC', 'Inspire 4G' ], 'Legend' => [ 'HTC', 'Legend' ], - 'Docomo HT-03A' => [ 'HTC', 'Magic' ], + 'Docomo HT-03A' => [ 'HTC', 'Magic HT-03A', 'carrier' => 'DoCoMo' ], 'One S' => [ 'HTC', 'One S' ], 'One X' => [ 'HTC', 'One X' ], 'One X+' => [ 'HTC', 'One X+' ], @@ -4301,12 +4469,9 @@ 'A6277' => [ 'HTC', 'Hero' ], 'a7272' => [ 'HTC', 'Desire Z' ], 'A7272+(HTC DesireZ)' => [ 'HTC', 'Desire Z' ], - 'S31HT' => [ 'HTC', 'Aria' ], 'S710d' => [ 'HTC', 'Droid Incredible 2' ], 'S710D' => [ 'HTC', 'Droid Incredible 2' ], 'T320a' => [ 'HTC', 'One V' ], - 'X06HT' => [ 'HTC', 'Desire' ], - '001HT' => [ 'HTC', 'Desire HD' ], 'X325a' => [ 'HTC', 'One X' ], 'X515d' => [ 'HTC', 'EVO 3D' ], 'X515e' => [ 'HTC', 'EVO 4G+' ], @@ -4340,13 +4505,17 @@ 'PJ35100' => [ 'HTC', 'One VX' ], 'PM36100' => [ 'HTC', 'One VX' ], 'PM63100' => [ 'HTC', 'One X+' ], - 'ISW11HT!' => [ 'HTC', 'EVO 4G' ], - 'ISW12HT!' => [ 'HTC', 'EVO 3D' ], - 'ISW13HT!' => [ 'HTC', 'J' ], - 'HTL21!' => [ 'HTC', 'J Butterfly' ], - 'HTL22' => [ 'HTC', 'J One' ], - 'HTC HTL22' => [ 'HTC', 'J One' ], - 'HTL23!' => [ 'HTC', 'J Butterfly (HTL23)' ], + 'S31HT' => [ 'HTC', 'Aria S31HT', 'carrier' => 'EMOBILE' ], + 'X06HT' => [ 'HTC', 'Desire X06HT', 'carrier' => 'Softbank' ], + '001HT' => [ 'HTC', 'Desire HD 001HT', 'carrier' => 'Softbank' ], + 'ISW11HT!' => [ 'HTC', 'EVO WiMAX ISW11HT', 'carrier' => 'au' ], + 'ISW12HT!' => [ 'HTC', 'EVO 3D ISW12HT', 'carrier' => 'au' ], + 'ISW13HT!' => [ 'HTC', 'J ISW13HT', 'carrier' => 'au' ], + 'HTL21!' => [ 'HTC', 'J Butterfly HTL21', 'carrier' => 'au' ], + 'HTL22' => [ 'HTC', 'J One HTL22', 'carrier' => 'au' ], + 'HTC HTL22' => [ 'HTC', 'J One HTL22', 'carrier' => 'au' ], + 'HTL23!' => [ 'HTC', 'J Butterfly HTL23', 'carrier' => 'au' ], + 'HTV31!' => [ 'HTC', 'J Butterfly HTV31', 'carrier' => 'au' ], 'USCCADR6275US!' => [ 'HTC', 'Desire' ], 'USCCADR6285US!' => [ 'HTC', 'Hero S' ], 'USCCADR6325US!' => [ 'HTC', 'Merge' ], @@ -4442,10 +4611,10 @@ 'MT2L03' => [ 'Huawei', 'Ascend Mate 2' ], 'HUAWEI MT7-(L09|J1|CL00|TL00|TL10|UL00)!' => [ 'Huawei', 'Ascend Mate 7' ], 'Z100-(L09|TL00)!' => [ 'Huawei', 'Ascend Mate 7' ], - 'HUAWEI NXT-AL10' => [ 'Huawei', 'Mate 8' ], + 'HUAWEI NXT-(AL10|UL10)!' => [ 'Huawei', 'Mate 8' ], 'M200-(UL00)!' => [ 'Huawei', 'Mate 8' ], 'unknown M200-L09' => [ 'Huawei', 'Mate 8' ], - 'HUAWEI CRR-(L09|CL00|UL00|UL20)!' => [ 'Huawei', 'Mate S' ], + 'HUAWEI CRR-(L09|CL00|CL20|UL00|UL20)!' => [ 'Huawei', 'Mate S' ], 'Huawei S8520' => [ 'Huawei', 'S8520' ], 'Huawei S8600' => [ 'Huawei', 'S8600' ], 'Huawei T8100' => [ 'Huawei', 'T8100' ], @@ -4492,8 +4661,8 @@ 'Huawei U8950!' => [ 'Huawei', 'Ascend G600' ], 'HUAWEI U8951!' => [ 'Huawei', 'Ascend G510' ], 'Huawei ?U9000!' => [ 'Huawei', 'Ascend X' ], - 'TIT-(AL00)!' => [ 'Huawei', 'Enjoy 5' ], - 'HUAWEI TIT-(AL00|CL10|U02)!' => [ 'Huawei', 'Enjoy 5' ], + 'TIT-(AL00|L01)!' => [ 'Huawei', 'Enjoy 5' ], + 'HUAWEI TIT-(AL00|CL10|TL00|U02)!' => [ 'Huawei', 'Enjoy 5' ], 'HUAWEI HONOR 2' => [ 'Huawei', 'Honor 2' ], 'Huawei U9508' => [ 'Huawei', 'Honor 2' ], 'Huawei ?U9508!' => [ 'Huawei', 'Honor 2 Quad-core' ], @@ -4511,12 +4680,12 @@ 'HUAWEI Honor 3c w' => [ 'Huawei', 'Honor 3C' ], 'CHM-(CL00|TL00H|TL00|U01|UL00)!' => [ 'Huawei', 'Honor Play 4C' ], 'SCL-(L01|L04|L001|L004|AL00|CL00|TL00|TL00H)!' => [ 'Huawei', 'Honor 4A' ], - 'HUAWEI SCL-(L01|L02|L03|L04|L21|TL00)!' => [ 'Huawei', 'Honor 4A' ], + 'HUAWEI SCL-(L01|L02|L03|L04|L21|TL00|U31)!' => [ 'Huawei', 'Honor 4A' ], 'CHE-(TL00|TL00H)!' => [ 'Huawei', 'Honor 4X' ], 'HW-Che1-CL10' => [ 'Huawei', 'Honor 4X' ], 'Che1-(L04|CL10|CL20)!' => [ 'Huawei', 'Honor 4X' ], 'Che2-(L11|L12|L23|TL00|UL00)!' => [ 'Huawei', 'Honor 4X' ], - 'KIW-(AL10|CL00|TL00H)!' => [ 'Huawei', 'Honor 5X' ], + 'KIW-(AL10|CL00|UL00|TL00H)!' => [ 'Huawei', 'Honor 5X' ], 'H60-(J1|L01|L02|L03|L04|L11|L12|L21)!' => [ 'Huawei', 'Honor 6' ], 'PE-(CL00|TL00|TL10|TL20|UL00)!' => [ 'Huawei', 'Honor 6 Plus' ], 'PLK-(L01|AL10|CL00|UL00|TL00|TL01H)!' => [ 'Huawei', 'Honor 7' ], @@ -4598,7 +4767,7 @@ 'Huawei ?G716!' => [ 'Huawei', 'Ascend G716' ], 'Huawei G718!' => [ 'Huawei', 'Ascend G718' ], 'Huawei G730!' => [ 'Huawei', 'Ascend G730' ], - 'G735-L23' => [ 'Huawei', 'Ascend G735' ], + 'G735-(L03|L23)!' => [ 'Huawei', 'Ascend G735' ], 'G740-L00' => [ 'Huawei', 'Ascend G740' ], 'Huawei G750!' => [ 'Huawei', 'Ascend G750' ], 'G750-(T00|T01)!' => [ 'Huawei', 'Ascend G750' ], @@ -4671,16 +4840,16 @@ 'Kyivstar Aqua' => [ 'Huawei', 'Sonic' ], 'Lucky Ultra Sonic U8650' => [ 'Huawei', 'Sonic' ], 'MTC Android' => [ 'Huawei', 'U8110' ], - 'A01HW' => [ 'Huawei', 'eMobile A01HW', DeviceType::TABLET ], - 'S31HW' => [ 'Huawei', 'Pocket WiFi S' ], - 'S41HW' => [ 'Huawei', 'Pocket WiFi S II' ], - 'S42HW' => [ 'Huawei', 'Smart Bar S42HW' ], - '007HW' => [ 'Huawei', 'Vision' ], - '201HW' => [ 'Huawei', 'Ascend P1' ], - '204HW' => [ 'Huawei', '204HW' ], - '301HW' => [ 'Huawei', 'Stream S 301HW' ], - '302HW' => [ 'Huawei', 'Stream S 302HW' ], - '403HW' => [ 'Huawei', 'MediaPad M1 403HW', DeviceType::TABLET ], + 'A01HW' => [ 'Huawei', 'A01HW', DeviceType::TABLET, 'carrier' => 'EMOBILE' ], + 'S31HW' => [ 'Huawei', 'Pocket WiFi S S31HW', 'carrier' => 'EMOBILE' ], + 'S41HW' => [ 'Huawei', 'Pocket WiFi S II S41HW', 'carrier' => 'EMOBILE' ], + 'S42HW' => [ 'Huawei', 'smart bar S42HW', 'carrier' => 'EMOBILE' ], + '007HW' => [ 'Huawei', 'Vision 007HW', 'carrier' => 'Softbank' ], + '201HW' => [ 'Huawei', 'STREAM 201HW', 'carrier' => 'Softbank' ], + '204HW' => [ 'Huawei', '204HW', 'carrier' => 'Softbank' ], + '301HW' => [ 'Huawei', 'Pocket WiFi 301HW', 'carrier' => 'Softbank' ], + '302HW' => [ 'Huawei', 'STREAM S 302HW', 'carrier' => 'Y! Mobile' ], + '403HW' => [ 'Huawei', 'MediaPad M1 8.0 403HW', DeviceType::TABLET, 'carrier' => 'Y! Mobile' ], 'UM840' => [ 'Huawei', 'Evolution' ], 'M860' => [ 'Huawei', 'Ascend' ], 'M865' => [ 'Huawei', 'Ascend II' ], @@ -4740,15 +4909,15 @@ 'U9501L' => [ 'Huawei', 'Ascend D LTE' ], 'U9510!' => [ 'Huawei', 'Ascend D quad' ], 'Comet' => [ 'Huawei', 'Comet' ], - 'GS02' => [ 'Huawei', 'Honor' ], - 'GS03' => [ 'Huawei', 'Ascend P1' ], 'DroniX-0.5' => [ 'Huawei', 'U8180' ], 'TSP21' => [ 'Huawei', 'U8110' ], - 'GL07S' => [ 'Huawei', 'Stream X GL07S' ], - 'HW-01E' => [ 'Huawei', 'Ascend HW-01E' ], - 'HW-03E' => [ 'Huawei', 'Ascend D2 HW-03E' ], - '402HW' => [ 'Huawei', 'MediaPad 10 Link+ 402HW', DeviceType::TABLET ], - '503HW' => [ 'Huawei', 'LUMIERE 503HW' ], + 'GS02' => [ 'Huawei', 'GS02', 'carrier' => 'EMOBILE' ], + 'GS03' => [ 'Huawei', 'GS03', 'carrier' => 'EMOBILE' ], + 'GL07S' => [ 'Huawei', 'STREAM X GL07S', 'carrier' => 'EMOBILE' ], + 'HW-01E' => [ 'Huawei', 'Ascend HW-01E', 'carrier' => 'DoCoMo' ], + 'HW-03E' => [ 'Huawei', 'Ascend D2 HW-03E', 'carrier' => 'DoCoMo' ], + '402HW' => [ 'Huawei', 'MediaPad 10 Link+ 402HW', DeviceType::TABLET, 'carrier' => 'Softbank' ], + '503HW' => [ 'Huawei', 'LUMIERE 503HW', 'carrier' => 'Y! Mobile' ], 'H866C' => [ 'Huawei', 'Ascend Y H866C' ], 'H882L' => [ 'Huawei', 'Ascend Y301-A' ], 'M310' => [ 'Huawei', 'MediaQ M310', DeviceType::TELEVISION ], @@ -4763,6 +4932,7 @@ 'HYUNDAI H11' => [ 'Hyundai', 'H11' ], 'Hyundai HT-10G' => [ 'Hyundai', 'HT-10G', DeviceType::TABLET ], 'HYUNDAI Q5' => [ 'Hyundai', 'Q5' ], + 'HYUNDAI Q5X' => [ 'Hyundai', 'Q5X' ], 'HYUNDAI T7' => [ 'Hyundai', 'T7', DeviceType::TABLET ], 'HYUNDAI T7S' => [ 'Hyundai', 'T7s', DeviceType::TABLET ], 'HYUNDAI T10' => [ 'Hyundai', 'T10', DeviceType::TABLET ], @@ -4924,13 +5094,13 @@ ], 'INFOBAR!!' => [ - 'INFOBAR A01' => [ 'iida', 'INFOBAR A01' ], // by Sharp - 'INFOBAR A01-2' => [ 'iida', 'INFOBAR A01' ], // by Sharp - 'INFOBAR C01' => [ 'iida', 'INFOBAR C01' ], // by Sharp + 'INFOBAR A01' => [ 'iida', 'INFOBAR A01', 'carrier' => 'au' ], // by Sharp + 'INFOBAR A01-2' => [ 'iida', 'INFOBAR A01', 'carrier' => 'au' ], // by Sharp + 'INFOBAR C01' => [ 'iida', 'INFOBAR C01', 'carrier' => 'au' ], // by Sharp ], - 'HTX21' => [ 'iida', 'INFOBAR A02' ], // by HTC - 'KYV33' => [ 'iida', 'INFOBAR A03' ], // by Kyocera + 'HTX21' => [ 'iida', 'INFOBAR A02', 'carrier' => 'au' ], // by HTC + 'KYV33' => [ 'iida', 'INFOBAR A03', 'carrier' => 'au' ], // by Kyocera 'IMO!!' => [ @@ -5020,18 +5190,23 @@ ], 'M210' => [ 'InFocus', 'M210' ], + 'M370i' => [ 'InFocus', 'M370' ], 'Infocus!!' => [ 'InFocus M2' => [ 'InFocus', 'M2' ], 'InFocus M2 3G' => [ 'InFocus', 'M2' ], 'InFocus M2PLUS' => [ 'InFocus', 'M2 Plus' ], + 'InFocus M260' => [ 'InFocus', 'M260' ], 'InFocus M310' => [ 'InFocus', 'M310' ], 'InFocus M320!' => [ 'InFocus', 'M320' ], 'InFocus M330!' => [ 'InFocus', 'M330' ], + 'InFocus M350!' => [ 'InFocus', 'M350' ], 'InFocus M510!' => [ 'InFocus', 'M510' ], 'InFocus M511!' => [ 'InFocus', 'M511' ], 'InFocus M512!' => [ 'InFocus', 'M512' ], + 'InFocus M530' => [ 'InFocus', 'M530' ], 'InFocus M810!' => [ 'InFocus', 'M810' ], + 'InFocus M812!' => [ 'InFocus', 'M812' ], ], 'M009F' => [ 'Infotmic', 'M009F' ], @@ -5101,6 +5276,7 @@ 'Aqua Star L' => [ 'Intex', 'Aqua Star L' ], 'Aqua Star II' => [ 'Intex', 'Aqua Star II' ], 'Aqua Star II 16GB' => [ 'Intex', 'Aqua Star II' ], + 'Aqua Star II HD' => [ 'Intex', 'Aqua Star II HD' ], 'Aqua Star 5.0' => [ 'Intex', 'Aqua Star 5.0' ], 'Aqua Star HD' => [ 'Intex', 'Aqua Star HD' ], 'Aqua Star Power' => [ 'Intex', 'Aqua Star Power' ], @@ -5121,6 +5297,7 @@ 'Aqua I5' => [ 'Intex', 'Aqua i5' ], 'Aqua i5 HD' => [ 'Intex', 'Aqua i5 HD' ], 'Aqua i5 mini' => [ 'Intex', 'Aqua i5 mini' ], + 'Aqua I5 Octa' => [ 'Intex', 'Aqua i5 Octa' ], 'Aqua i6' => [ 'Intex', 'Aqua i6' ], 'Aqua i7' => [ 'Intex', 'Aqua i7' ], 'Aqua I14' => [ 'Intex', 'Aqua i14' ], @@ -5130,6 +5307,7 @@ 'Aqua N8' => [ 'Intex', 'Aqua N8' ], 'Aqua N15' => [ 'Intex', 'Aqua N15' ], 'Aqua Q1+' => [ 'Intex', 'Aqua Q1' ], + 'Aqua Q7' => [ 'Intex', 'Aqua Q7' ], 'Aqua R3' => [ 'Intex', 'Aqua R3' ], 'Aqua T2' => [ 'Intex', 'Aqua T2' ], 'Aqua T3' => [ 'Intex', 'Aqua T3' ], @@ -5359,8 +5537,9 @@ '(KAZAM|Tornado|Trooper)!!' => [ 'KAZAM Thunder Q45' => [ 'KAZAM', 'Thunder Q4.5' ], 'Tornado 348' => [ 'KAZAM', 'Tornado 348' ], - 'KAZAM Trooper 445L' => [ 'KAZAM', 'Trooper 445' ], + 'KAZAM Trooper 445L' => [ 'KAZAM', 'Trooper 445L' ], 'KAZAM Trooper 450' => [ 'KAZAM', 'Trooper 450' ], + 'KAZAM Trooper 450L' => [ 'KAZAM', 'Trooper 450L' ], 'KAZAM Trooper 540' => [ 'KAZAM', 'Trooper 540' ], 'Trooper X35' => [ 'KAZAM', 'Trooper X3.5' ], 'Trooper X40' => [ 'KAZAM', 'Trooper X4.0' ], @@ -5456,14 +5635,15 @@ ], 'Kyobo mirasol eReader' => [ 'Kyobo', 'eReader', DeviceType::EREADER ], - 'ISW11K' => [ 'Kyocera', 'Digno' ], + 'ISW11K' => [ 'Kyocera', 'DIGNO ISW11K', 'carrier' => 'au' ], 'KYL[0-9]{2,2}!!' => [ - 'KYL21' => [ 'Kyocera', 'Digno S' ], - 'KYL22' => [ 'Kyocera', 'Digno M' ], + 'KYL21' => [ 'Kyocera', 'DIGNO S KYL21', 'carrier' => 'au' ], + 'KYL22' => [ 'Kyocera', 'DIGNO M KYL22', 'carrier' => 'au' ], ], - 'WX04K' => [ 'Kyocera', 'Digno Duo' ], + 'WX04K' => [ 'Kyocera', 'DIGNO Dual WX04K', 'carrier' => 'Willcom' ], + 'WX10K' => [ 'Kyocera', 'DIGNO Dual 2 WX10K', 'carrier' => 'Willcom' ], 'JC-KSP8000' => [ 'Kyocera', 'Echo' ], 'KSP8000' => [ 'Kyocera', 'Echo' ], 'Event' => [ 'Kyocera', 'Event' ], @@ -5495,26 +5675,28 @@ 'M9300' => [ 'Kyocera', 'Echo' ], - 'KY[LYV][0-9]{2,2}!!' => [ - 'KYL23' => [ 'Kyocera', 'Miraie' ], - 'KYY21' => [ 'Kyocera', 'Urbano L01' ], - 'KYY22' => [ 'Kyocera', 'Urbano L02' ], - 'KYY23' => [ 'Kyocera', 'Urbano L03' ], - 'KYY24' => [ 'Kyocera', 'Torque G01' ], - 'KYV31' => [ 'Kyocera', 'Urbano V01' ], - 'KYV32' => [ 'Kyocera', 'BASIO' ], - 'KYV34' => [ 'Kyocera', 'Torque G02' ], - 'KYV35' => [ 'Kyocera', 'Urbano V02' ], + 'KY[LTYV][0-9]{2,2}!!' => [ + 'KYL23' => [ 'Kyocera', 'miraie KYL23', 'carrier' => 'au' ], + 'KYY21' => [ 'Kyocera', 'URBANO L01', 'carrier' => 'au' ], + 'KYY22' => [ 'Kyocera', 'URBANO L02', 'carrier' => 'au' ], + 'KYY23' => [ 'Kyocera', 'URBANO L03', 'carrier' => 'au' ], + 'KYY24' => [ 'Kyocera', 'TORQUE G01', 'carrier' => 'au' ], + 'KYV31' => [ 'Kyocera', 'URBANO V01', 'carrier' => 'au' ], + 'KYV32' => [ 'Kyocera', 'BASIO KYV32', 'carrier' => 'au' ], + 'KYV34' => [ 'Kyocera', 'TORQUE G02', 'carrier' => 'au' ], + 'KYV35' => [ 'Kyocera', 'URBANO V02', 'carrier' => 'au' ], + 'KYV36' => [ 'Kyocera', 'DIGNO rafre', 'carrier' => 'au' ], + 'KYT31' => [ 'Kyocera', 'Qua tab', DeviceType::TABLET, 'carrier' => 'au' ], ], - 'URBANO PROGRESSO' => [ 'Kyocera', 'Urbano Progresso' ], + 'URBANO PROGRESSO' => [ 'Kyocera', 'URBANO PROGRESSO', 'carrier' => 'au' ], '[0-9]0[0-9]KC?!!' => [ - '101K' => [ 'Kyocera', 'HONEY BEE 101K' ], - '201K' => [ 'Kyocera', 'HONEY BEE 201K' ], - '202K' => [ 'Kyocera', 'Digno R 201K' ], - '302KC' => [ 'Kyocera', 'Digno T 302KC' ], - '404KC' => [ 'Kyocera', 'Digno C 404KC' ], + '101K' => [ 'Kyocera', 'HONEY BEE 101K', 'carrier' => 'Softbank' ], + '201K' => [ 'Kyocera', 'HONEY BEE 201K', 'carrier' => 'Softbank' ], + '202K' => [ 'Kyocera', 'DIGNO R 202K', 'carrier' => 'Softbank' ], + '302KC' => [ 'Kyocera', 'DIGNO T 302KC', 'carrier' => 'EMOBILE' ], + '404KC' => [ 'Kyocera', 'DIGNO C 404KC', 'carrier' => 'Y! Mobile' ], ], 'K-?Touch!!' => [ @@ -5719,8 +5901,10 @@ 'iris506Q' => [ 'Lava', 'Iris 506Q' ], 'iris700' => [ 'Lava', 'Iris 700' ], 'iris708' => [ 'Lava', 'Iris 708' ], + 'iris fuel10' => [ 'Lava', 'Iris fuel10' ], 'iris Fuel50' => [ 'Lava', 'Iris fuel50' ], 'iris Fuel60' => [ 'Lava', 'Iris fuel60' ], + 'Iris Fuel F1' => [ 'Lava', 'Iris Fuel F1' ], 'iris pro 20' => [ 'Lava', 'Iris Pro 20' ], 'iris pro 30' => [ 'Lava', 'Iris Pro 30' ], 'iris SELFIE50' => [ 'Lava', 'Iris selfie 50' ], @@ -5735,6 +5919,7 @@ 'Alfa L' => [ 'Lava', 'Iris Alfa L' ], 'N320' => [ 'Lava', 'Iris N320' ], 'X1 Grand' => [ 'Lava', 'Iris X1 Grand' ], + 'X9' => [ 'Lava', 'Iris X9' ], 'LAVA S12' => [ 'Lava', 'S12' ], '(XOLO )?[ABQX[0-9]{3,4}!!' => [ @@ -6105,6 +6290,7 @@ 'ideatv S61' => [ 'Lenovo', 'IDEA TV', DeviceType::TELEVISION ], 'LenovoTV 40S9' => [ 'Lenovo', 'TV 40S9', DeviceType::TELEVISION ], 'LenovoTV 50S52' => [ 'Lenovo', 'TV 50S52', DeviceType::TELEVISION ], + '501LV' => [ 'Lenovo', 'Tab2 501LV', 'carrier' => 'Softbank' ], '(BLF-)?lephone!!' => [ 'lephone 1800' => [ 'Lephone', '1800' ], @@ -6201,6 +6387,7 @@ 'LG-D3(70|73|75|80|85)!' => [ 'LG', 'L80' ], 'LG-D3(90|92|93)!' => [ 'LG', 'F60' ], 'LG-D4(00|05|10|15)!' => [ 'LG', 'L90' ], + 'LGD500' => [ 'LG', 'Optimus F6' ], 'LG-D5(00|05)!' => [ 'LG', 'Optimus F6' ], 'LG-D520!' => [ 'LG', 'Optimus F3Q' ], 'LG-D605!' => [ 'LG', 'Optimus L9 II' ], @@ -6283,8 +6470,11 @@ 'LG-F510!' => [ 'LG', 'G Flex 2' ], 'LG-F520!' => [ 'LG', 'AKA' ], 'LG-F540!' => [ 'LG', 'Volt' ], + 'LG-F560!' => [ 'LG', 'G Stylo' ], + 'LG-F570!' => [ 'LG', 'band Play' ], 'LG-F580!' => [ 'LG', 'Gentle' ], 'LG-F600!' => [ 'LG', 'V10' ], + 'LG-F620!' => [ 'LG', 'Class' ], ], 'LG-GT540!' => [ 'LG', 'Optimus' ], @@ -6301,17 +6491,16 @@ 'LG-H4(43|45)!' => [ 'LG', 'Escape2' ], 'LG-H5(00|02)!' => [ 'LG', 'Magna' ], 'LG-H5(20|22|25)!' => [ 'LG', 'Magna' ], - 'LG-H540!' => [ 'LG', 'G4 Stylus' ], + 'LG-H5(40|42)!' => [ 'LG', 'G4 Stylus' ], 'LG-H6(31|34|36)!' => [ 'LG', 'G Stylo' ], 'LG-H6(30|35)!' => [ 'LG', 'G4 Stylus' ], - 'LG-H650' => [ 'LG', 'H650' ], // Unknown + 'LG-H650!' => [ 'LG', 'Zero' ], 'LG-H7(31)!' => [ 'LG', 'G4 Vigor' ], 'LG-H7(35|36)!' => [ 'LG', 'G4s' ], 'LG-H7(78|88)!' => [ 'LG', 'AKA' ], 'LG-H8(10|11|12|15|18|19)!' => [ 'LG', 'G4' ], - 'LG-H900!' => [ 'LG', 'G4 Pro' ], // Maybe 'LG-H9(50|55|59)!' => [ 'LG', 'G Flex 2' ], - 'LG-H9(01|61)!' => [ 'LG', 'V10' ], + 'LG-H9(00|01|60|61)!' => [ 'LG', 'V10' ], ], 'LG-KH5200' => [ 'LG', 'Andro-1' ], @@ -6330,7 +6519,7 @@ 'LG-L15G' => [ 'LG', 'Sunrise' ], 'LGL16C!' => [ 'LG', 'Lucky' ], 'LGL21G!' => [ 'LG', 'Destiny' ], - 'LGL22C!' => [ 'LG', 'isai' ], + 'LGL22C!' => [ 'LG', 'Power' ], 'LG-L25L' => [ 'LG', 'Optimus Quest' ], 'LG-L30L' => [ 'LG', 'F70' ], 'LGL31L!' => [ 'LG', 'Access' ], @@ -6484,12 +6673,15 @@ 'LG-V4(00|10|11)!' => [ 'LG', 'G Pad 7.0', DeviceType::TABLET ], 'LG-V4(80|90)!' => [ 'LG', 'G Pad 8.0', DeviceType::TABLET ], 'LG-V4(95|96)!' => [ 'LG', 'G Pad F 8.0', DeviceType::TABLET ], + 'LG-V498!' => [ 'LG', 'G Pad II 8.0', DeviceType::TABLET ], 'LG-V5(00|07)!' => [ 'LG', 'G Pad 8.3', DeviceType::TABLET ], 'LG-V510!' => [ 'LG', 'G Pad 8.3 (Google Edition)', DeviceType::TABLET ], + 'LG-V607L' => [ 'LG', 'G Pad II 8.0', DeviceType::TABLET ], 'LG-V700!' => [ 'LG', 'G Pad 10.1', DeviceType::TABLET ], 'LG-V9(00|01)!' => [ 'LG', 'Optimus Pad', DeviceType::TABLET ], 'LG-V9(05|09)!' => [ 'LG', 'Optimus G-Slate', DeviceType::TABLET ], 'LG-V930' => [ 'LG', 'G Pad X 10.1', DeviceType::TABLET ], + 'LG-V9(35|40)!' => [ 'LG', 'G Pad II 10.1', DeviceType::TABLET ], ], 'LG-VK[0-9]{3,3}!!' => [ @@ -6528,7 +6720,7 @@ 'LG-VS910' => [ 'LG', 'Revolution' ], 'LG-VS930' => [ 'LG', 'Spectrum II' ], 'LG-VS950' => [ 'LG', 'Intuition' ], - 'LG-VS980' => [ 'LG', 'G2' ], + 'LG-VS980!' => [ 'LG', 'G2' ], 'LG-VS985' => [ 'LG', 'G3' ], 'LG-VS999' => [ 'LG', 'G4' ], ], @@ -6538,6 +6730,9 @@ 'LG-X1(35|45|47)!' => [ 'LG', 'L60' ], 'LG-X137' => [ 'LG', 'L60i' ], 'LG-X150' => [ 'LG', 'Bello 2' ], + 'LG-X1(55|60|65)!' => [ 'LG', 'Max' ], + 'LG-X1(70)!' => [ 'LG', 'Prime 2' ], + 'LG-X190' => [ 'LG', 'Ray' ], ], 'lge-F160!' => [ 'LG', 'Optimus LTE II' ], @@ -6552,11 +6747,12 @@ 'KU9500' => [ 'LG', 'Optimus Z' ], 'LG[LV][0-9]{2,2}!!' => [ - 'LGL21' => [ 'LG', 'Optimus G' ], - 'LGL22' => [ 'LG', 'G2' ], - 'LGL23' => [ 'LG', 'G Flex' ], - 'LGL24' => [ 'LG', 'isai FL' ], - 'LGV32' => [ 'LG', 'isai vivid' ], + 'LGL21' => [ 'LG', 'Optimus G LGL21', 'carrier' => 'au' ], + 'LGL22' => [ 'LG', 'isai LGL22', 'carrier' => 'au' ], + 'LGL23' => [ 'LG', 'G Flex LGL23', 'carrier' => 'au' ], + 'LGL24' => [ 'LG', 'isai FL LGL24', 'carrier' => 'au' ], + 'LGV31' => [ 'LG', 'isai VL LGV31', 'carrier' => 'au' ], + 'LGV32' => [ 'LG', 'isai vivid LGV32', 'carrier' => 'au' ], ], 'LU2300' => [ 'LG', 'Optimus Q' ], @@ -6601,24 +6797,24 @@ ], 'L-0[0-9][A-Z]!!' => [ - 'L-01D' => [ 'LG', 'Optimus LTE' ], - 'L-01E' => [ 'LG', 'Optimus G' ], - 'L-01F' => [ 'LG', 'G2' ], - 'L-02D' => [ 'LG', 'PRADA phone' ], - 'L-02E' => [ 'LG', 'Optimus LIFE' ], - 'L-02F' => [ 'LG', 'WiFi STATION L-02F' ], - 'L-04C' => [ 'LG', 'Optimus Chat' ], - 'L-04E' => [ 'LG', 'Optimus G Pro' ], - 'L-05D' => [ 'LG', 'Optimus it L-05D' ], - 'L-05E' => [ 'LG', 'Optimus it L-05E' ], - 'L-06C' => [ 'LG', 'Optimus Pad', DeviceType::TABLET ], - 'L-06D' => [ 'LG', 'Optimus Vu' ], - 'L-07C' => [ 'LG', 'Optimus Bright' ], + 'L-01D' => [ 'LG', 'Optimus LTE L-01D', 'carrier' => 'DoCoMo' ], + 'L-01E' => [ 'LG', 'Optimus G L-01E', 'carrier' => 'DoCoMo' ], + 'L-01F' => [ 'LG', 'G2 L-01F', 'carrier' => 'DoCoMo' ], + 'L-02D' => [ 'LG', 'PRADA phone L-02D', 'carrier' => 'DoCoMo' ], + 'L-02E' => [ 'LG', 'Optimus LIFE L-02E', 'carrier' => 'DoCoMo' ], + 'L-02F' => [ 'LG', 'WiFi STATION L-02F', 'carrier' => 'DoCoMo' ], + 'L-04C' => [ 'LG', 'Optimus chat L-04C', 'carrier' => 'DoCoMo' ], + 'L-04E' => [ 'LG', 'Optimus G Pro L-04E', 'carrier' => 'DoCoMo' ], + 'L-05D' => [ 'LG', 'Optimus it L-05D', 'carrier' => 'DoCoMo' ], + 'L-05E' => [ 'LG', 'Optimus it L-05E', 'carrier' => 'DoCoMo' ], + 'L-06C' => [ 'LG', 'Optimus Pad L-06C', DeviceType::TABLET, 'carrier' => 'DoCoMo' ], + 'L-06D' => [ 'LG', 'Optimus Vu L-06D', 'carrier' => 'DoCoMo' ], + 'L-07C' => [ 'LG', 'Optimus bright L-07C', 'carrier' => 'DoCoMo' ], ], '[0-9]0[0-9]LG!!' => [ - '401LG' => [ 'LG', '401LG' ], // Unknown (Softbank) - '402LG' => [ 'LG', 'F60S' ], + '401LG' => [ 'LG', '401LG', 'carrier' => 'Softbank' ], // Unknown + '402LG' => [ 'LG', 'Spray 402LG', 'carrier' => 'Y! Mobile' ], ], 'LG!!' => [ @@ -6668,7 +6864,7 @@ 'Optimusx4' => [ 'LG', 'Optimus X4' ], ], - 'IS11LG' => [ 'LG', 'Optimus X' ], + 'IS11LG' => [ 'LG', 'Optimus X IS11LG', 'carrier' => 'au' ], 'Vortex' => [ 'LG', 'Vortex' ], 'LDK-ICK v1.4' => [ 'LG', 'Esteem' ], 'Prada 3.0' => [ 'LG', 'PRADA 3.0' ], @@ -6735,6 +6931,7 @@ 'MASTONE!!' => [ 'MASTONE G3' => [ 'Mastone', 'G3' ], + 'MASTONE G9' => [ 'Mastone', 'G9' ], 'MASTONE G13' => [ 'Mastone', 'G13' ], 'MASTONE W16' => [ 'Mastone', 'W16' ], ], @@ -6886,6 +7083,7 @@ 'LIFETAB E10316' => [ 'Medion', 'Lifetab E10316', DeviceType::TABLET ], 'LIFETAB E10320' => [ 'Medion', 'Lifetab E10320', DeviceType::TABLET ], 'LIFETAB P891X' => [ 'Medion', 'Lifetab P891X', DeviceType::TABLET ], + 'LIFETAB P1034X' => [ 'Medion', 'Lifetab P1034X', DeviceType::TABLET ], 'LIFETAB S7316' => [ 'Medion', 'Lifetab S7316', DeviceType::TABLET ], 'LIFETAB S732X' => [ 'Medion', 'Lifetab S732X', DeviceType::TABLET ], 'LIFETAB S785X' => [ 'Medion', 'Lifetab S785X', DeviceType::TABLET ], @@ -6895,11 +7093,13 @@ 'LIFETAB S9714' => [ 'Medion', 'Lifetab S9714', DeviceType::TABLET ], 'LIFETAB S1033X' => [ 'Medion', 'Lifetab S1033X', DeviceType::TABLET ], 'LIFETAB S1034X' => [ 'Medion', 'Lifetab S1034X', DeviceType::TABLET ], + 'LIFETAB S1036X' => [ 'Medion', 'Lifetab S1036X', DeviceType::TABLET ], 'MEDION LIFE P4012' => [ 'Medion', 'Life P4012' ], 'MEDION P4013' => [ 'Medion', 'Life P4013' ], 'MEDION LIFE P4310' => [ 'Medion', 'Life P4310' ], 'MEDION P5001' => [ 'Medion', 'Life P5001' ], 'MEDION X4701' => [ 'Medion', 'X4701' ], + 'MEDION X5020' => [ 'Medion', 'X5020' ], 'LIFETAB P9514' => [ 'Medion', 'Lifetab P9514', DeviceType::TABLET ], 'MD LIFETAB P9516' => [ 'Medion', 'Lifetab P9516', DeviceType::TABLET ], ], @@ -7176,14 +7376,18 @@ 'Cynus F4' => [ 'Mobistel', 'Cynus F4' ], 'Cynus F5' => [ 'Mobistel', 'Cynus F5' ], 'Cynus F6' => [ 'Mobistel', 'Cynus F6' ], + 'Cynus F8' => [ 'Mobistel', 'Cynus F8' ], 'Cynus T1' => [ 'Mobistel', 'Cynus T1' ], 'Cynus T2' => [ 'Mobistel', 'Cynus T2' ], 'Cynus T5' => [ 'Mobistel', 'Cynus T5' ], + 'Cynus T6' => [ 'Mobistel', 'Cynus T6' ], 'Cynus T7' => [ 'Mobistel', 'Cynus T7' ], + 'Cynus T8' => [ 'Mobistel', 'Cynus T8' ], 'MOCHE SMART A16' => [ 'Moche', 'Smart A16' ], 'FreeTAB 10.1 Silver' => [ 'Modecom', 'FreeTAB 10.1 Silver', DeviceType::TABLET ], 'FreeTAB 1001' => [ 'Modecom', 'FreeTAB 1001', DeviceType::TABLET ], 'MODECOM FreeTab 1002 IPS X2' => [ 'Modecom', 'FreeTAB 1002 IPS X2', DeviceType::TABLET ], + 'FreeTAB 1003' => [ 'Modecom', 'FreeTAB 1003', DeviceType::TABLET ], 'FreeTAB1003' => [ 'Modecom', 'FreeTAB 1003', DeviceType::TABLET ], 'FreeTAB 1014 IPS X4 3G+' => [ 'Modecom', 'FreeTAB 1014 IPS X4', DeviceType::TABLET ], 'FreeTAB 7001 HD IC' => [ 'Modecom', 'FreeTAB 7001 HD IC', DeviceType::TABLET ], @@ -7350,7 +7554,7 @@ 'XT1115!' => [ 'Motorola', 'Moto X Pro' ], 'XT1225' => [ 'Motorola', 'Moto Maxx' ], 'XT12(50|54)!' => [ 'Motorola', 'Droid Turbo' ], - 'XT15(23|24|26|27|28)!' => [ 'Motorola', 'Moto E (2015)' ], + 'XT15(21|23|24|26|27|28)!' => [ 'Motorola', 'Moto E (2015)' ], 'XT15(40|41|42|43|44|48|50)!' => [ 'Motorola', 'Moto G (2015)' ], 'XT15(62|63)!' => [ 'Motorola', 'Moto X Play' ], 'XT1565' => [ 'Motorola', 'Droid MAXX 2' ], @@ -7359,7 +7563,6 @@ // 'XT1578' => [ 'Motorola', '"Clark"' ], 'XT1580' => [ 'Motorola', 'Moto X Force' ], 'XT1585' => [ 'Motorola', 'Droid Turbo 2' ], - '201M' => [ 'Motorola', 'Droid RAZR M' ], 'Atrix 2' => [ 'Motorola', 'ATRIX 2' ], 'Atrix 2 WeifanZ' => [ 'Motorola', 'ATRIX 2' ], 'Atrix 4G' => [ 'Motorola', 'ATRIX 4G' ], @@ -7398,10 +7601,10 @@ 'Milestone X' => [ 'Motorola', 'Milestone X' ], 'Milestone X2' => [ 'Motorola', 'Milestone X2' ], 'Motorola Milestone MAXX' => [ 'Motorola', 'Milestone MAXX' ], - 'MotoE2' => [ 'Motorola', 'Moto E (2015)' ], - 'MotoE2(4G-LTE)' => [ 'Motorola', 'Moto E (2015)' ], - 'MotoG3' => [ 'Motorola', 'Moto G (2015)' ], - 'MotoG3-TE' => [ 'Motorola', 'Moto G (2015)' ], + '(Moto)?E2$!' => [ 'Motorola', 'Moto E (2015)' ], + '(Moto)?E2\(4G-LTE\)$!' => [ 'Motorola', 'Moto E (2015)' ], + '(Moto)?G3$!' => [ 'Motorola', 'Moto G (2015)' ], + '(Moto)?G3-TE$!' => [ 'Motorola', 'Moto G (2015)' ], 'roiX' => [ 'Motorola', 'Droid X' ], 'Moto Backflip' => [ 'Motorola', 'BACKFLIP' ], 'RAZR' => [ 'Motorola', 'RAZR' ], @@ -7419,8 +7622,9 @@ 'Xoom Wifi' => [ 'Motorola', 'XOOM WiFi', DeviceType::TABLET ], 'Xoom LTE' => [ 'Motorola', 'XOOM 4G LTE', DeviceType::TABLET ], 'Xoom 3G' => [ 'Motorola', 'XOOM 3G', DeviceType::TABLET ], - 'ISW11M' => [ 'Motorola', 'PHOTON' ], - 'IS12M' => [ 'Motorola', 'RAZR' ], + '201M' => [ 'Motorola', 'RAZR M 201M', 'carrier' => 'Softbank' ], + 'ISW11M' => [ 'Motorola', 'PHOTON ISW11M', 'carrier' => 'au' ], + 'IS12M' => [ 'Motorola', 'RAZR IS12M', 'carrier' => 'au' ], 'MOTOROLA RAZR' => [ 'Motorola', 'RAZR' ], 'MOTWX435KT' => [ 'Motorola', 'TRIUMPH' ], 'X3-Ice MIUI XT720 Memorila Classics' => [ 'Motorola', 'Milestone' ], @@ -7571,29 +7775,30 @@ 'LT-TLA' => [ 'NEC', 'LifeTouch L' ], 'N-0[0-9][A-Z]!!' => [ - 'N-01D' => [ 'NEC', 'MEDIAS PP N-01D' ], - 'N-02E' => [ 'NEC', 'MEDIAS U N-02E' ], - 'N-04C' => [ 'NEC', 'MEDIAS N-04C' ], - 'N-04D' => [ 'NEC', 'MEDIAS LTE N-04D' ], - 'N-04E' => [ 'NEC', 'MEDIAS X N-04E' ], - 'N-05D' => [ 'NEC', 'MEDIAS ES N-05D' ], - 'N-05E' => [ 'NEC', 'MEDIAS W N-05E' ], - 'N-06C' => [ 'NEC', 'MEDIAS WP N-06C' ], - 'N-06D' => [ 'NEC', 'MEDIAS Tab N-06D', DeviceType::TABLET ], - 'N-06E' => [ 'NEC', 'MEDIAS X N-06E' ], - 'N-07D' => [ 'NEC', 'MEDIAS X N-07D' ], - 'N-08D' => [ 'NEC', 'MEDIAS Tab UL N-08D', DeviceType::TABLET ], - ], - - 'IS11N' => [ 'NEC', 'MEDIAS BR IS11N' ], - '101N' => [ 'NEC', 'MEDIAS CH Softbank 101N' ], + 'N-01D' => [ 'NEC', 'MEDIAS PP N-01D', 'carrier' => 'DoCoMo' ], + 'N-02E' => [ 'NEC', 'MEDIAS U N-02E', 'carrier' => 'DoCoMo' ], + 'N-03E' => [ 'NEC', 'N-03E', 'carrier' => 'Disney Mobile' ], + 'N-04C' => [ 'NEC', 'MEDIAS N-04C', 'carrier' => 'DoCoMo' ], + 'N-04D' => [ 'NEC', 'MEDIAS LTE N-04D', 'carrier' => 'DoCoMo' ], + 'N-04E' => [ 'NEC', 'MEDIAS X N-04E', 'carrier' => 'DoCoMo' ], + 'N-05D' => [ 'NEC', 'MEDIAS ES N-05D', 'carrier' => 'DoCoMo' ], + 'N-05E' => [ 'NEC', 'MEDIAS W N-05E', 'carrier' => 'DoCoMo' ], + 'N-06C' => [ 'NEC', 'MEDIAS WP N-06C', 'carrier' => 'DoCoMo' ], + 'N-06D' => [ 'NEC', 'MEDIAS Tab N-06D', DeviceType::TABLET, 'carrier' => 'DoCoMo' ], + 'N-06E' => [ 'NEC', 'MEDIAS X N-06E', 'carrier' => 'DoCoMo' ], + 'N-07D' => [ 'NEC', 'MEDIAS X N-07D', 'carrier' => 'DoCoMo' ], + 'N-08D' => [ 'NEC', 'MEDIAS Tab UL N-08D', DeviceType::TABLET, 'carrier' => 'DoCoMo' ], + ], + + 'IS11N' => [ 'NEC', 'MEDIAS BR IS11N', 'carrier' => 'au' ], + '101N' => [ 'NEC', 'MEDIAS CH 101N', 'carrier' => 'Softbank' ], 'NEC-101S' => [ 'NEC', 'MEDIAS 101S' ], 'NECTEL-101S' => [ 'NEC', 'MEDIAS 101S' ], 'NEC-101T' => [ 'NEC', 'MEDIAS 101T' ], '101T' => [ 'NEC', 'MEDIAS 101T' ], 'NEC-102' => [ 'NEC', 'MEDIAS 102' ], 'NE-103T' => [ 'NEC', 'MEDIAS U 103T' ], - 'NE-202' => [ 'NEC', 'MEDIAS 202' ], + 'NE-202' => [ 'NEC', 'MEDIAS', 'carrier' => 'Biglobe' ], 'NE-201A1A' => [ 'NEC', 'Terrain' ], 'NEC-NE-201A1A' => [ 'NEC', 'Terrain' ], 'NEC-NEC-NE-201A1A' => [ 'NEC', 'Terrain' ], @@ -7672,6 +7877,7 @@ 'Dynamic Wide' => [ 'NGM', 'Dynamic Wide' ], 'Dynamic Wing' => [ 'NGM', 'Dynamic Wing' ], 'Forward Active' => [ 'NGM', 'Forward Active' ], + 'Forward Art' => [ 'NGM', 'Forward Art' ], 'Forward Escape' => [ 'NGM', 'Forward Escape' ], 'Forward Endurance' => [ 'NGM', 'Forward Endurance' ], 'FORWARD EVOLVE' => [ 'NGM', 'Forward Evolve' ], @@ -7821,6 +8027,7 @@ 'ONE A2001' => [ 'OnePlus', '2' ], 'ONE A2003' => [ 'OnePlus', '2' ], 'ONE A2005' => [ 'OnePlus', '2' ], + 'ONE E1000' => [ 'OnePlus', 'X' ], 'ONE E1001' => [ 'OnePlus', 'X' ], 'ONE E1003' => [ 'OnePlus', 'X' ], 'ONE E1005' => [ 'OnePlus', 'X' ], @@ -8034,32 +8241,41 @@ 'OYSTERS T14N 3G' => [ 'Oysters', 'T14N' ], 'Liberty Tab G100' => [ 'Packard Bell', 'Liberty Tab G100', DeviceType::TABLET ], 'G100W' => [ 'Packard Bell', 'Liberty Tab G100', DeviceType::TABLET ], - 'DMC-CM1' => [ 'Panasonic', 'Lumix DMC-CM1', DeviceType::CAMERA ], 'P-0[0-9][A-Z]!!' => [ - 'P-01D' => [ 'Panasonic', 'P-01D' ], - 'P-02D' => [ 'Panasonic', 'Lumix Phone' ], - 'P-02E' => [ 'Panasonic', 'Eluga X' ], - 'P-03E' => [ 'Panasonic', 'Eluga P' ], - 'P-04D' => [ 'Panasonic', 'Eluga' ], - 'P-06D' => [ 'Panasonic', 'Eluga V' ], - 'P-07C' => [ 'Panasonic', 'P-07C' ], - 'P-07D' => [ 'Panasonic', 'Eluga Power' ], - 'P-08D' => [ 'Panasonic', 'Eluga Live' ], - ], + 'P-01D' => [ 'Panasonic', 'P-01D', 'carrier' => 'DoCoMo' ], + 'P-02D' => [ 'Panasonic', 'LUMIX Phone P-02D', 'carrier' => 'DoCoMo' ], + 'P-02E' => [ 'Panasonic', 'ELUGA X P-02E', 'carrier' => 'DoCoMo' ], + 'P-03E' => [ 'Panasonic', 'ELUGA P P-03E', 'carrier' => 'DoCoMo' ], + 'P-04D' => [ 'Panasonic', 'P-04D', 'carrier' => 'DoCoMo' ], + 'P-05D' => [ 'Panasonic', 'P-05D', 'carrier' => 'Disney Mobile' ], + 'P-06D' => [ 'Panasonic', 'ELUGA V P-06D', 'carrier' => 'DoCoMo' ], + 'P-07C' => [ 'Panasonic', 'P-07C', 'carrier' => 'DoCoMo' ], + 'P-07D' => [ 'Panasonic', 'ELUGA power P-07D', 'carrier' => 'DoCoMo' ], + 'P-08D' => [ 'Panasonic', 'ELUGA Live P-08D', DeviceType::TABLET, 'carrier' => 'DoCoMo' ], + ], + + '003P' => [ 'Panasonic', 'Sweety 003P', 'carrier' => 'Softbank' ], + '101P' => [ 'Panasonic', 'LUMIX Phone 101P', 'carrier' => 'Softbank' ], + '102P' => [ 'Panasonic', 'ELUGA dL1 102P', 'carrier' => 'Softbank' ], + 'DMC-CM1' => [ 'Panasonic', 'Lumix DMC-CM1', DeviceType::CAMERA ], 'dL1' => [ 'Panasonic', 'Eluga dL1' ], - '101P' => [ 'Panasonic', 'Lumix Phone' ], - '102P' => [ 'Panasonic', '102P' ], 'EB-4063-X' => [ 'Panasonic', 'Eluga X' ], 'Panasonic!!' => [ 'Panasonic ELUGA A' => [ 'Panasonic', 'Eluga A' ], + 'Panasonic ELUGA I' => [ 'Panasonic', 'Eluga I' ], + 'Panasonic ELUGA L 4G' => [ 'Panasonic', 'Eluga L' ], + 'Panasonic ELUGA L2' => [ 'Panasonic', 'Eluga L2' ], 'Panasonic ELUGA S' => [ 'Panasonic', 'Eluga S' ], 'Panasonic ELUGA U' => [ 'Panasonic', 'Eluga U' ], + 'Panasonic ELUGA Mark' => [ 'Panasonic', 'Eluga Mark' ], + 'Panasonic ELUGA Switch' => [ 'Panasonic', 'Eluga Switch' ], 'Panasonic P11' => [ 'Panasonic', 'P11' ], 'Panasonic P31' => [ 'Panasonic', 'P31' ], 'Panasonic P41' => [ 'Panasonic', 'P41' ], + 'Panasonic P41HD' => [ 'Panasonic', 'P41 HD' ], 'Panasonic P51' => [ 'Panasonic', 'P51' ], 'Panasonic P55' => [ 'Panasonic', 'P55' ], 'Panasonic P55 Novo' => [ 'Panasonic', 'P55 Novo' ], @@ -8072,6 +8288,7 @@ 'Panasonic T31' => [ 'Panasonic', 'T31' ], 'Panasonic T40' => [ 'Panasonic', 'T40' ], 'Panasonic T41' => [ 'Panasonic', 'T41' ], + 'Panasonic T45 4G' => [ 'Panasonic', 'T45' ], 'Panasonic KX-PRXA10' => [ 'Panasonic', 'KX-PRXA10', DeviceType::DECT ], 'Panasonic KX-PRXA15' => [ 'Panasonic', 'KX-PRXA15', DeviceType::DECT ], 'Panasonic SV-ME970' => [ 'Panasonic', 'Viera SV-ME970', DeviceType::TABLET ], @@ -8082,8 +8299,9 @@ 'JT-H580VT' => [ 'Panasonic', 'BizPad 7', DeviceType::TABLET ], 'JT-H581VT' => [ 'Panasonic', 'BizPad 10', DeviceType::TABLET ], 'FZ-A1(A|B)!' => [ 'Panasonic', 'Toughpad', DeviceType::TABLET ], - 'FZ-B2D' => [ 'Panasonic', 'Toughpad', DeviceType::TABLET ], + 'FZ-B2(B|D)!' => [ 'Panasonic', 'Toughpad', DeviceType::TABLET ], 'FZ-X1' => [ 'Panasonic', 'Toughpad', DeviceType::TABLET ], + 'pandigital9hr' => [ 'Pandigital', '9HR', DeviceType::TABLET ], 'pandigital9hr2' => [ 'Pandigital', '9HR2', DeviceType::TABLET ], 'pandigitalopc1' => [ 'Pandigital', 'OPC1', DeviceType::TABLET ], @@ -8121,7 +8339,7 @@ ], 'VEGA NO.6' => [ 'Pantech', 'Vega N˚ 6' ], - 'IS06' => [ 'Pantech', 'SIRIUS α' ], + 'IS06' => [ 'Pantech', 'SIRIUS α IS06', 'carrier' => 'au' ], 'ADR8995!' => [ 'Pantech', 'Breakout' ], 'ADR910L' => [ 'Pantech', 'Marauder' ], 'ADR910L 4G' => [ 'Pantech', 'Marauder' ], @@ -8137,8 +8355,8 @@ 'PantechP9090' => [ 'Pantech', 'Magnus' ], ], - 'PTL21' => [ 'Pantech', 'Vega PTL21' ], - 'IS11PT' => [ 'Pantech', 'Mirach IS11PT' ], + 'PTL21' => [ 'Pantech', 'Vega PTL21', 'carrier' => 'au' ], + 'IS11PT' => [ 'Pantech', 'Mirach IS11PT', 'carrier' => 'au' ], 'FC6100' => [ 'Parrot', 'FC6100', DeviceType::CAR ], 'chagall' => [ 'Pegatron', 'Chagall', DeviceType::TABLET ], 'PAT712W' => [ 'Perfeo', '712 W', DeviceType::TABLET ], @@ -8572,9 +8790,12 @@ 'PSP[0-9]{4,4}!!' => [ 'PSP3404DUO' => [ 'Prestigio', 'Multiphone 3404 Duo' ], + 'PSP3405DUO' => [ 'Prestigio', 'Multiphone 3405 Duo' ], 'PSP3450DUO' => [ 'Prestigio', 'Multiphone 3450 Duo' ], 'PSP3452DUO' => [ 'Prestigio', 'Multiphone Muze A3' ], 'PSP3502DUO' => [ 'Prestigio', 'Multiphone 3502 Duo' ], + 'PSP3504DUO' => [ 'Prestigio', 'Multiphone 3504 Duo' ], + 'PSP5307DUO' => [ 'Prestigio', 'Multiphone 5307 Duo' ], 'PSP5453DUO' => [ 'Prestigio', 'Multiphone 5453 Duo' ], 'PSP5454DUO' => [ 'Prestigio', 'Multiphone 5454 Duo' ], 'PSP5455DUO' => [ 'Prestigio', 'Multiphone 5455 Duo' ], @@ -9218,12 +9439,13 @@ 'SM-A[0-9]{3,3}!!' => [ 'SM-A300!' => [ 'Samsung', 'Galaxy A3' ], - 'SM-A310!' => [ 'Samsung', 'Galaxy A3 (2015)' ], + 'SM-A310!' => [ 'Samsung', 'Galaxy A3 (2016)' ], 'SM-A500!' => [ 'Samsung', 'Galaxy A5' ], - 'SM-A510!' => [ 'Samsung', 'Galaxy A5 (2015)' ], + 'SM-A510!' => [ 'Samsung', 'Galaxy A5 (2016)' ], 'SM-A700!' => [ 'Samsung', 'Galaxy A7' ], - 'SM-A710!' => [ 'Samsung', 'Galaxy A7 (2015)' ], + 'SM-A710!' => [ 'Samsung', 'Galaxy A7 (2016)' ], 'SM-A800!' => [ 'Samsung', 'Galaxy A8' ], + 'SM-A900!' => [ 'Samsung', 'Galaxy A9 (2016)' ], ], 'SM-C[0-9]{3,3}!!' => [ @@ -9239,6 +9461,7 @@ 'SM-G[0-9]{3,3}!!' => [ 'SM-G110!' => [ 'Samsung', 'Galaxy Pocket 2' ], 'SM-G130BT' => [ 'Samsung', 'Galaxy Young 2' ], + 'SM-G130BU' => [ 'Samsung', 'Galaxy Young 2' ], 'SM-G130E' => [ 'Samsung', 'Galaxy Star 2' ], 'SM-G130H' => [ 'Samsung', 'Galaxy Young 2' ], 'SM-G130HN' => [ 'Samsung', 'Galaxy Young 2 Duos' ], @@ -9261,6 +9484,7 @@ 'SM-G358[689]!' => [ 'Samsung', 'Galaxy Core Lite' ], 'SM-G360BT' => [ 'Samsung', 'Galaxy Win 2 Duos TV' ], 'SM-G360AZ' => [ 'Samsung', 'Galaxy Core Prime' ], + 'SM-G360R6!' => [ 'Samsung', 'Galaxy Core Prime' ], 'SM-G360[FGHMPTV689]!' => [ 'Samsung', 'Galaxy Core Prime' ], 'SM-G361!' => [ 'Samsung', 'Galaxy Core Prime VE' ], 'SM-G3812B!' => [ 'Samsung', 'Galaxy S III Slim' ], @@ -9296,13 +9520,16 @@ 'SM-G920!' => [ 'Samsung', 'Galaxy S6' ], 'SM-G925!' => [ 'Samsung', 'Galaxy S6 Edge' ], 'SM-G928!' => [ 'Samsung', 'Galaxy S6 Edge+' ], + 'SM-G935!' => [ 'Samsung', 'Galaxy S7 Edge' ], // Probably ], 'SM-I9500' => [ 'Samsung', 'Galaxy S4' ], 'SM-J[0-9]{3,3}!!' => [ 'SM-J100!' => [ 'Samsung', 'Galaxy J1' ], + 'SM-J105!' => [ 'Samsung', 'Galaxy J1' ], // Not released yet 'SM-J110!' => [ 'Samsung', 'Galaxy J1 Ace' ], + 'SM-J120!' => [ 'Samsung', 'Galaxy J1 (2016)' ], 'SM-J200!' => [ 'Samsung', 'Galaxy J2' ], 'SM-J3(10|20)!' => [ 'Samsung', 'Galaxy J3' ], 'SM-J500!' => [ 'Samsung', 'Galaxy J5' ], @@ -9354,12 +9581,13 @@ 'SM-T33[3]!' => [ 'Samsung', 'Galaxy Tab 4 8.0 (2015)', DeviceType::TABLET ], 'SM-T35[0157]!' => [ 'Samsung', 'Galaxy Tab A 8.0', DeviceType::TABLET ], 'SM-T36[05]!' => [ 'Samsung', 'Galaxy Tab Active (8.0)', DeviceType::TABLET ], + 'SM-T37[57]!' => [ 'Samsung', 'Galaxy Tab E 8.0', DeviceType::TABLET ], 'SM-T52[05]!' => [ 'Samsung', 'Galaxy Tab Pro 10.1', DeviceType::TABLET ], 'SM-T53[01257]!' => [ 'Samsung', 'Galaxy Tab 4 (10.1)', DeviceType::TABLET ], 'SM-T53[3]!' => [ 'Samsung', 'Galaxy Tab 4 10.1 (2015)', DeviceType::TABLET ], 'SM-T55[015]!' => [ 'Samsung', 'Galaxy Tab A 9.7', DeviceType::TABLET ], - 'SM-T56[017]!' => [ 'Samsung', 'Galaxy Tab E', DeviceType::TABLET ], - 'SM-T67[0]!' => [ 'Samsung', 'Galaxy View', DeviceType::TABLET ], + 'SM-T56[017]!' => [ 'Samsung', 'Galaxy Tab E 9.6', DeviceType::TABLET ], + 'SM-T67[07]!' => [ 'Samsung', 'Galaxy View', DeviceType::TABLET ], 'SM-T70[057]!' => [ 'Samsung', 'Galaxy Tab S 8.4', DeviceType::TABLET ], 'SM-T71[05]!' => [ 'Samsung', 'Galaxy Tab S2 8.0', DeviceType::TABLET ], 'SM-T80[0157]!' => [ 'Samsung', 'Galaxy Tab S 10.5', DeviceType::TABLET ], @@ -9491,44 +9719,44 @@ 'HOMESYNCT2WIFI' => [ 'Samsung', 'Galaxy HomeSync', DeviceType::TELEVISION ], 'SC-?0[0-9][A-Z]!!' => [ - 'SC-01C' => [ 'Samsung', 'Galaxy Tab', DeviceType::TABLET ], - 'SC-01D' => [ 'Samsung', 'Galaxy Tab 10.1 LTE', DeviceType::TABLET ], - 'SC-01E' => [ 'Samsung', 'Galaxy Tab 7.7 Plus', DeviceType::TABLET ], - 'SC-01F' => [ 'Samsung', 'Galaxy Note 3' ], - 'SC-01G' => [ 'Samsung', 'Galaxy Note Edge' ], - 'SC-01H' => [ 'Samsung', 'Galaxy Active neo' ], - 'SC-02B' => [ 'Samsung', 'Galaxy S' ], - 'SC-02C' => [ 'Samsung', 'Galaxy S II' ], - 'SC-02D' => [ 'Samsung', 'Galaxy Tab 7.0 Plus', DeviceType::TABLET ], - 'SC-02E' => [ 'Samsung', 'Galaxy Note II' ], - 'SC-02F' => [ 'Samsung', 'Galaxy J' ], - 'SC-02G' => [ 'Samsung', 'Galaxy S5 Active' ], - 'SC-03D' => [ 'Samsung', 'Galaxy S II LTE' ], - 'SC-03E' => [ 'Samsung', 'Galaxy S III α' ], - 'SC-03G' => [ 'Samsung', 'Galaxy Tab S 8.4', DeviceType::TABLET ], - 'SC03E' => [ 'Samsung', 'Galaxy S III α' ], - 'SC-04D' => [ 'Samsung', 'Galaxy Nexus' ], - 'SC-04E' => [ 'Samsung', 'Galaxy S4' ], - 'SC-04F' => [ 'Samsung', 'Galaxy S5' ], - 'SC-04G' => [ 'Samsung', 'Galaxy S6 Edge' ], - 'SC-05D' => [ 'Samsung', 'Galaxy Note LTE' ], - 'SC-05G' => [ 'Samsung', 'Galaxy S6' ], - 'SC-06D' => [ 'Samsung', 'Galaxy S III' ], + 'SC-01C' => [ 'Samsung', 'GALAXY Tab SC-01C', DeviceType::TABLET, 'carrier' => 'DoCoMo' ], + 'SC-01D' => [ 'Samsung', 'GALAXY Tab 10.1 LTE SC-01D', DeviceType::TABLET, 'carrier' => 'DoCoMo' ], + 'SC-01E' => [ 'Samsung', 'GALAXY Tab 7.7 Plus SC-01E', DeviceType::TABLET, 'carrier' => 'DoCoMo' ], + 'SC-01F' => [ 'Samsung', 'GALAXY Note 3 SC-01F', 'carrier' => 'DoCoMo' ], + 'SC-01G' => [ 'Samsung', 'GALAXY Note Edge SC-01G', 'carrier' => 'DoCoMo' ], + 'SC-01H' => [ 'Samsung', 'GALAXY Active neo SC-01H', 'carrier' => 'DoCoMo' ], + 'SC-02B' => [ 'Samsung', 'GALAXY S SC-02B', 'carrier' => 'DoCoMo' ], + 'SC-02C' => [ 'Samsung', 'GALAXY S II SC-02C', 'carrier' => 'DoCoMo' ], + 'SC-02D' => [ 'Samsung', 'GALAXY Tab 7.0 Plus SC-02D', DeviceType::TABLET, 'carrier' => 'DoCoMo' ], + 'SC-02E' => [ 'Samsung', 'GALAXY Note II SC-02E', 'carrier' => 'DoCoMo' ], + 'SC-02F' => [ 'Samsung', 'GALAXY J SC-02F', 'carrier' => 'DoCoMo' ], + 'SC-02G' => [ 'Samsung', 'GALAXY S5 Active SC-02G', 'carrier' => 'DoCoMo' ], + 'SC-03D' => [ 'Samsung', 'GALAXY S II LTE SC-03D', 'carrier' => 'DoCoMo' ], + 'SC-03E' => [ 'Samsung', 'GALAXY S III α SC-03E', 'carrier' => 'DoCoMo' ], + 'SC03E' => [ 'Samsung', 'GALAXY S III α SC-03E', 'carrier' => 'DoCoMo' ], + 'SC-03G' => [ 'Samsung', 'GALAXY Tab S 8.4 SC-03G', DeviceType::TABLET, 'carrier' => 'DoCoMo' ], + 'SC-04D' => [ 'Samsung', 'GALAXY NEXUS SC-04D', 'carrier' => 'DoCoMo' ], + 'SC-04E' => [ 'Samsung', 'GALAXY S4 SC-04E', 'carrier' => 'DoCoMo' ], + 'SC-04F' => [ 'Samsung', 'GALAXY S5 SC-04F', 'carrier' => 'DoCoMo' ], + 'SC-04G' => [ 'Samsung', 'GALAXY S6 Edge SC-04G', 'carrier' => 'DoCoMo' ], + 'SC-05D' => [ 'Samsung', 'GALAXY Note SC-05D', 'carrier' => 'DoCoMo' ], + 'SC-05G' => [ 'Samsung', 'GALAXY S6 SC-05G', 'carrier' => 'DoCoMo' ], + 'SC-06D' => [ 'Samsung', 'GALAXY S III SC-06D', 'carrier' => 'DoCoMo' ], ], 'SC[LT]2[0-9]!!' => [ - 'SCL21' => [ 'Samsung', 'Galaxy S III Progre' ], - 'SCL22' => [ 'Samsung', 'Galaxy Note 3' ], - 'SCL23' => [ 'Samsung', 'Galaxy S5' ], - 'SCL24' => [ 'Samsung', 'Galaxy Note Edge' ], - 'SCT21' => [ 'Samsung', 'Galaxy Tab S', DeviceType::TABLET ], + 'SCL21' => [ 'Samsung', 'GALAXY S III Progre SCL21', 'carrier' => 'au' ], + 'SCL22' => [ 'Samsung', 'GALAXY Note 3 SCL22', 'carrier' => 'au' ], + 'SCL23' => [ 'Samsung', 'GALAXY S5 SCL23', 'carrier' => 'au' ], + 'SCL24' => [ 'Samsung', 'GALAXY Note Edge SCL24', 'carrier' => 'au' ], + 'SCT21' => [ 'Samsung', 'GALAXY Tab S SCT21', DeviceType::TABLET, 'carrier' => 'au' ], ], - 'ISW11SC' => [ 'Samsung', 'Galaxy S II WiMAX' ], + 'ISW11SC' => [ 'Samsung', 'GALAXY S II WiMAX ISW11SC', 'carrier' => 'au' ], '40[0-9]SC!!' => [ - '403SC' => [ 'Samsung', 'Galaxy Tab 4 (7.0)', DeviceType::TABLET ], - '404SC' => [ 'Samsung', 'Galaxy S6 Edge' ], + '403SC' => [ 'Samsung', 'GALAXY Tab 4 (7.0) 403SC', DeviceType::TABLET, 'carrier' => 'Softbank' ], + '404SC' => [ 'Samsung', 'GALAXY S6 Edge 404SC', 'carrier' => 'Softbank' ], ], '(SENCOR )?ELEMENT!!' => [ @@ -9549,12 +9777,14 @@ 'STARXTREM' => [ 'SFR', 'STARXTREM' ], 'STARXTREM II' => [ 'SFR', 'STARXTREM II' ], 'STARXTREM 4' => [ 'SFR', 'STARXTREM 4' ], + 'STARXTREM5' => [ 'SFR', 'STARXTREM 5' ], 'Android edition by sfr STARADDICT' => [ 'SFR', 'STARADDICT' ], 'V961' => [ 'SFR', 'STARADDICT II' ], 'Smartphone Android by SFR STARADDICT II' => [ 'SFR', 'STARADDICT II' ], 'STARADDICT II Plus' => [ 'SFR', 'STARADDICT II Plus' ], 'STARADDICT III' => [ 'SFR', 'STARADDICT III' ], 'STARADDICT 4' => [ 'SFR', 'STARADDICT 4' ], + 'STARADDICT 5' => [ 'SFR', 'STARADDICT 5' ], 'Android Edition Starnaute' => [ 'SFR', 'STARNAUTE' ], 'STARNAUTE II' => [ 'SFR', 'STARNAUTE II' ], 'Starshine' => [ 'SFR', 'STARSHINE' ], @@ -9570,108 +9800,116 @@ 'STARTRAIL 4' => [ 'SFR', 'STARTRAIL 4' ], 'STARTRAIL5' => [ 'SFR', 'STARTRAIL 5' ], 'STARTRAIL 6 4G' => [ 'SFR', 'STARTRAIL 6' ], - 'STARTRAIL7' => [ 'SFR', 'STARTRAIL 6' ], + 'STARTRAIL6' => [ 'SFR', 'STARTRAIL 6' ], + 'STARTRAIL7' => [ 'SFR', 'STARTRAIL 7' ], 'SFR StarTab' => [ 'SFR', 'STARTAB', DeviceType::TABLET ], 'Bambook S1' => [ 'Shanda', 'Bambook S1', DeviceType::TABLET ], - '[4A]0[0-9]SH!!' => [ - '401SH' => [ 'Sharp', '401SH' ], - '402SH' => [ 'Sharp', 'Aquos Crystal X 402SH' ], - '403SH' => [ 'Sharp', 'Aquos Crystal 2 403SH' ], - '404SH' => [ 'Sharp', 'Aquos Xx 404SH' ], - 'A01SH' => [ 'Sharp', 'A01SH' ], + '[45A]0[0-9]SH!!' => [ + '401SH' => [ 'Sharp', '401SH', 'carrier' => 'Softbank' ], + '402SH' => [ 'Sharp', 'AQUOS CRYSTAL X 402SH', 'carrier' => 'Softbank' ], + '403SH' => [ 'Sharp', 'AQUOS CRYSTAL 2 403SH', 'carrier' => 'Softbank' ], + '404SH' => [ 'Sharp', 'AQUOS Xx 404SH', 'carrier' => 'Softbank' ], + '502SH' => [ 'Sharp', 'AQUOS Xx2 502SH', 'carrier' => 'Softbank' ], + '503SH' => [ 'Sharp', 'AQUOS Xx2 mini 503SH', 'carrier' => 'Softbank' ], + 'A01SH' => [ 'Sharp', 'GALAPAGOS A01SH', 'carrier' => 'Y! Mobile' ], ], 'IS0[0-9]!!' => [ - 'IS01' => [ 'Sharp', 'IS01' ], - 'IS03' => [ 'Sharp', 'IS03' ], - 'IS05' => [ 'Sharp', 'IS05' ], + 'IS01' => [ 'Sharp', 'IS01', 'carrier' => 'au' ], + 'IS03' => [ 'Sharp', 'IS03', 'carrier' => 'au' ], + 'IS05' => [ 'Sharp', 'IS05', 'carrier' => 'au' ], ], 'ISW?1[0-9]SH!!' => [ - 'IS11SH' => [ 'Sharp', 'Aquos IS11SH' ], - 'IS12SH' => [ 'Sharp', 'Aquos IS12SH' ], - 'IS13SH' => [ 'Sharp', 'Aquos IS13SH' ], - 'IS14SH' => [ 'Sharp', 'Aquos IS14SH' ], - 'IS15SH' => [ 'Sharp', 'Aquos IS15SH' ], - 'ISW16SH' => [ 'Sharp', 'Aquos ISW16SH' ], - 'IS17SH' => [ 'Sharp', 'Aquos CL IS17SH' ], + 'IS11SH' => [ 'Sharp', 'AQUOS PHONE IS11SH', 'carrier' => 'au' ], + 'IS12SH' => [ 'Sharp', 'AQUOS PHONE IS12SH', 'carrier' => 'au' ], + 'IS13SH' => [ 'Sharp', 'AQUOS PHONE IS13SH', 'carrier' => 'au' ], + 'IS14SH' => [ 'Sharp', 'AQUOS PHONE IS14SH', 'carrier' => 'au' ], + 'IS15SH' => [ 'Sharp', 'AQUOS PHONE SL IS15SH', 'carrier' => 'au' ], + 'ISW16SH' => [ 'Sharp', 'AQUOS PHONE SERIE ISW16SH', 'carrier' => 'au' ], + 'IS17SH' => [ 'Sharp', 'AQUOS PHONE CL IS17SH', 'carrier' => 'au' ], ], 'EB-A71GJ' => [ 'Sharp', 'EB-A71GJ', DeviceType::TABLET ], 'EB-W51GJ' => [ 'Sharp', 'EB-W51GJ', DeviceType::TABLET ], 'SBM[0-9]0[0-9]SH!!' => [ - 'SBM003SH' => [ 'Sharp', 'Galapagos' ], - 'SBM005SH' => [ 'Sharp', 'Galapagos' ], - 'SBM006SH' => [ 'Sharp', 'Aquos' ], - 'SBM007SH' => [ 'Sharp', 'Aquos 007SH' ], - 'SBM007SHJ' => [ 'Sharp', 'Aquos 007SH J' ], - 'SBM009SH' => [ 'Sharp', 'Aquos 009SH' ], - 'SBM009SHY' => [ 'Sharp', 'Yahoo! Phone' ], - 'SBM101SH' => [ 'Sharp', 'Aquos 101SH' ], - 'SBM102SH' => [ 'Sharp', 'Aquos 102SH' ], - 'SBM102SH2' => [ 'Sharp', 'Aquos 102SHII' ], - 'SBM103SH' => [ 'Sharp', 'Aquos 103SH' ], - 'SBM104SH' => [ 'Sharp', 'Aquos 104SH' ], - 'SBM106SH' => [ 'Sharp', 'Aquos 106SH' ], - 'SBM107SH' => [ 'Sharp', 'Aquos 107SH' ], - 'SBM107SHB' => [ 'Sharp', 'Aquos 107SH' ], - 'SBM200SH' => [ 'Sharp', 'PANTONE 6 200SH' ], - 'SBM203SH' => [ 'Sharp', 'Aquos Xx 203SH' ], - 'SBM204SH' => [ 'Sharp', 'Aquos 204SH' ], - 'SBM205SH' => [ 'Sharp', 'Aquos ss 205SH' ], - 'SBM206SH' => [ 'Sharp', 'Aquos 206SH' ], - 'SBM302SH' => [ 'Sharp', 'Aquos Xx 302SH' ], - 'SBM303SH' => [ 'Sharp', 'Aquos Xx mini 303SH' ], - 'SBM305SH' => [ 'Sharp', 'Aquos Crystal 305SH' ], - 'SBM306SH' => [ 'Sharp', 'Aquos Crystal 306SH' ], + 'SBM003SH' => [ 'Sharp', 'GALAPAGOS 003SH', 'carrier' => 'Softbank' ], + 'SBM005SH' => [ 'Sharp', 'GALAPAGOS 005SH', 'carrier' => 'Softbank' ], + 'SBM006SH' => [ 'Sharp', 'AQUOS PHONE 006SH', 'carrier' => 'Softbank' ], + 'SBM007SH' => [ 'Sharp', 'AQUOS PHONE THE HYBRID 007SH', 'carrier' => 'Softbank' ], + 'SBM007SHJ' => [ 'Sharp', 'AQUOS PHONE THE HYBRID 007SH J', 'carrier' => 'Softbank' ], + 'SBM009SH' => [ 'Sharp', 'AQUOS PHONE THE PREMIUM 009SH', 'carrier' => 'Softbank' ], + 'SBM009SHY' => [ 'Sharp', 'Yahoo! Phone 009SH Y', 'carrier' => 'Softbank' ], + 'SBM101SH' => [ 'Sharp', 'AQUOS PHONE THE HYBRID 101SH', 'carrier' => 'Softbank' ], + 'SBM102SH' => [ 'Sharp', 'AQUOS PHONE 102SH', 'carrier' => 'Softbank' ], + 'SBM102SH2' => [ 'Sharp', 'AQUOS PHONE 102SH II', 'carrier' => 'Softbank' ], + 'SBM103SH' => [ 'Sharp', 'AQUOS PHONE 103SH', 'carrier' => 'Softbank' ], + 'SBM104SH' => [ 'Sharp', 'AQUOS PHONE 104SH', 'carrier' => 'Softbank' ], + 'SBM106SH' => [ 'Sharp', 'AQUOS PHONE Xx 106SH', 'carrier' => 'Softbank' ], + 'SBM107SH' => [ 'Sharp', 'PANTONE 5 107SH', 'carrier' => 'Softbank' ], + 'SBM107SHB' => [ 'Sharp', 'AQUOS PHONE 107SH B', 'carrier' => 'Softbank' ], + 'SBM200SH' => [ 'Sharp', 'PANTONE 6 200SH', 'carrier' => 'Softbank' ], + 'SBM203SH' => [ 'Sharp', 'AQUOS PHONE Xx 203SH', 'carrier' => 'Softbank' ], + 'SBM204SH' => [ 'Sharp', 'シンプルスマホ 204SH', 'carrier' => 'Softbank' ], + 'SBM205SH' => [ 'Sharp', 'AQUOS PHONE ss 205SH', 'carrier' => 'Softbank' ], + 'SBM206SH' => [ 'Sharp', 'AQUOS PHONE Xx 206SH', 'carrier' => 'Softbank' ], + 'SBM302SH' => [ 'Sharp', 'AQUOS PHONE Xx 302SH', 'carrier' => 'Softbank' ], + 'SBM303SH' => [ 'Sharp', 'AQUOS PHONE Xx mini 303SH', 'carrier' => 'Softbank' ], + 'SBM305SH' => [ 'Sharp', 'AQUOS CRYSTAL 305SH', 'carrier' => 'Softbank' ], + 'SBM306SH' => [ 'Sharp', 'AQUOS CRYSTAL 306SH' ], // The U.S. Sprint version (now part of Softbank) ], '30[0-9]SH!!' => [ - '304SH' => [ 'Sharp', 'Aquos Xx 304SH' ], - '305SH' => [ 'Sharp', 'Aquos Crystal 305SH' ], - '306SH' => [ 'Sharp', 'Aquos Crystal 306SH' ], + '304SH' => [ 'Sharp', 'AQUOS Xx 304SH', 'carrier' => 'Softbank' ], + '305SH' => [ 'Sharp', 'AQUOS CRYSTAL 305SH', 'carrier' => 'Softbank' ], + '306SH' => [ 'Sharp', 'AQUOS CRYSTAL 306SH' ], // The U.S. Sprint version (now part of Softbank) ], 'SH-[01][0-9][A-Z]!!' => [ - 'SH-01D' => [ 'Sharp', 'Aquos SH-01D' ], - 'SH-01E' => [ 'Sharp', 'Aquos si SH-01E' ], - 'SH-01F' => [ 'Sharp', 'Aquos Zeta SH-01F' ], - 'SH-01G' => [ 'Sharp', 'Aquos Zeta SH-01G' ], - 'SH-01H' => [ 'Sharp', 'Aquos Zeta SH-01H' ], - 'SH-02D' => [ 'Sharp', 'Aquos slider SH-02D' ], - 'SH-02E' => [ 'Sharp', 'Aquos Zeta SH-02E' ], - 'SH-02F' => [ 'Sharp', 'Aquos EX SH-02F' ], - 'SH-02H' => [ 'Sharp', 'Aquos Compact SH-02H' ], - 'SH-03C' => [ 'Sharp', 'Lynx 3D' ], - 'SH-03F' => [ 'Sharp', 'SH-03F' ], - 'SH-03G' => [ 'Sharp', 'Aquos Zeta SH-03G' ], - 'SH-04E' => [ 'Sharp', 'Aquos EX SH-04E' ], - 'SH-04F' => [ 'Sharp', 'Aquos Zeta SH-04F' ], - 'SH-04G' => [ 'Sharp', 'Aquos Ever SH-04G' ], - 'SH-05E' => [ 'Sharp', 'SH-05E' ], - 'SH-05G' => [ 'Sharp', 'Aquos Pad SH-05G', DeviceType::TABLET ], - 'SH-06D' => [ 'Sharp', 'Aquos SH-06D' ], - 'SH-06DNERV' => [ 'Sharp', 'NERV SH-06D' ], - 'SH-06E' => [ 'Sharp', 'Aquos Zeta SH-06E' ], - 'SH-06F' => [ 'Sharp', 'Aquos Pad SH-06F' ], - 'SH-06G' => [ 'Sharp', 'Aquos SH-06G' ], - 'SH-07C' => [ 'Sharp', 'Galapagos SH-07C' ], - 'SH-07D' => [ 'Sharp', 'Aquos st SH-07D' ], - 'SH-07E' => [ 'Sharp', 'Aquos si SH-07E' ], - 'SH-08E' => [ 'Sharp', 'Aquos Pad SH-09E', DeviceType::TABLET ], - 'SH-09D' => [ 'Sharp', 'Aquos Zeta SH-09D' ], - 'SH-10B' => [ 'Sharp', 'Lynx' ], - 'SH-10D' => [ 'Sharp', 'Aquos sv SH-10D' ], - 'SH-12C' => [ 'Sharp', 'Aquos' ], - 'SH-13C' => [ 'Sharp', 'Aquos f SH-13C' ], + 'SH-01D' => [ 'Sharp', 'AQUOS PHONE SH-01D', 'carrier' => 'DoCoMo' ], + 'SH-01E' => [ 'Sharp', 'AQUOS PHONE si SH-01E', 'carrier' => 'DoCoMo' ], + 'SH-01F' => [ 'Sharp', 'AQUOS PHONE ZETA SH-01F', 'carrier' => 'DoCoMo' ], + 'SH-01FDQ' => [ 'Sharp', 'SH-01F DRAGON QUEST', 'carrier' => 'DoCoMo' ], + 'SH-01G' => [ 'Sharp', 'AQUOS PHONE ZETA SH-01G', 'carrier' => 'DoCoMo' ], + 'SH-01H' => [ 'Sharp', 'AQUOS PHONE ZETA SH-01H', 'carrier' => 'DoCoMo' ], + 'SH-02D' => [ 'Sharp', 'AQUOS PHONE slider SH-02D', 'carrier' => 'DoCoMo' ], + 'SH-02E' => [ 'Sharp', 'AQUOS PHONE ZETA SH-02E', 'carrier' => 'DoCoMo' ], + 'SH-02F' => [ 'Sharp', 'AQUOS PHONE EX SH-02F', 'carrier' => 'DoCoMo' ], + 'SH-02G' => [ 'Sharp', 'SH-02G', 'carrier' => 'Disney Mobile' ], + 'SH-02H' => [ 'Sharp', 'AQUOS Compact SH-02H', 'carrier' => 'DoCoMo' ], + 'SH-03C' => [ 'Sharp', 'LYNX 3D SH-03C', 'carrier' => 'DoCoMo' ], + 'SH-03F' => [ 'Sharp', 'スマートフォン for ジュニア2 SH-03F', 'carrier' => 'DoCoMo' ], + 'SH-03G' => [ 'Sharp', 'AQUOS ZETA SH-03G', 'carrier' => 'DoCoMo' ], + 'SH-04D' => [ 'Sharp', 'Q-pot.Phone SH-04D', 'carrier' => 'DoCoMo' ], + 'SH-04E' => [ 'Sharp', 'AQUOS PHONE EX SH-04E', 'carrier' => 'DoCoMo' ], + 'SH-04F' => [ 'Sharp', 'AQUOS ZETA SH-04F', 'carrier' => 'DoCoMo' ], + 'SH-04G' => [ 'Sharp', 'AQUOS EVER SH-04G', 'carrier' => 'DoCoMo' ], + 'SH-05E' => [ 'Sharp', 'スマートフォン for ジュニア SH-05E', 'carrier' => 'DoCoMo' ], + 'SH-05F' => [ 'Sharp', 'SH-05F', 'carrier' => 'Disney Mobile' ], + 'SH-05G' => [ 'Sharp', 'AQUOS PAD SH-05G', DeviceType::TABLET, 'carrier' => 'DoCoMo' ], + 'SH-06D' => [ 'Sharp', 'AQUOS PHONE SH-06D', 'carrier' => 'DoCoMo' ], + 'SH-06DNERV' => [ 'Sharp', 'SH-06D NERV', 'carrier' => 'DoCoMo' ], + 'SH-06E' => [ 'Sharp', 'AQUOS PHONE ZETA SH-06E', 'carrier' => 'DoCoMo' ], + 'SH-06F' => [ 'Sharp', 'AQUOS PAD SH-06F', 'carrier' => 'DoCoMo' ], + 'SH-06G' => [ 'Sharp', 'AQUOS SH-06G', 'carrier' => 'DoCoMo' ], + 'SH-07C' => [ 'Sharp', 'GALAPAGOS SH-07C', 'carrier' => 'DoCoMo' ], + 'SH-07D' => [ 'Sharp', 'AQUOS PHONE st SH-07D', 'carrier' => 'DoCoMo' ], + 'SH-07E' => [ 'Sharp', 'AQUOS PHONE si SH-07E', 'carrier' => 'DoCoMo' ], + 'SH-08E' => [ 'Sharp', 'AQUOS PAD SH-08E', DeviceType::TABLET, 'carrier' => 'DoCoMo' ], + 'SH-09D' => [ 'Sharp', 'AQUOS PHONE ZETA SH-09D', 'carrier' => 'DoCoMo' ], + 'SH-10B' => [ 'Sharp', 'LYNX SH-10B', 'carrier' => 'DoCoMo' ], + 'SH-10D' => [ 'Sharp', 'AQUOS PHONE sv SH-10D', 'carrier' => 'DoCoMo' ], + 'SH-12C' => [ 'Sharp', 'AQUOS PHONE SH-12C', 'carrier' => 'DoCoMo' ], + 'SH-13C' => [ 'Sharp', 'AQUOS PHONE f SH-13C', 'carrier' => 'DoCoMo' ], ], '(SHP-)?(SHARP )?SH[0-9]{2,3}!!' => [ 'SH80F' => [ 'Sharp', 'Aquos SH80F' ], - 'SH330U' => [ 'Sharp', 'SH330E' ], + 'SH90B' => [ 'Sharp', 'Aquos SH90B', 'carrier' => 'Biglobe' ], + 'SH330U' => [ 'Sharp', 'SH330U' ], 'SHP-SH330T' => [ 'Sharp', 'SH330T' ], 'SH330T(Yiliao)' => [ 'Sharp', 'SH330T' ], 'SH530U' => [ 'Sharp', 'SH530U' ], @@ -9701,19 +9939,20 @@ ], 'SH[FLTV][0-9]{2,2}!!' => [ - 'SHF31' => [ 'Sharp', 'Aquos K SHF31' ], - 'SHF32' => [ 'Sharp', 'Aquos K SHF32' ], - 'SHL21' => [ 'Sharp', 'Aquos Serie SHL21' ], - 'SHL22' => [ 'Sharp', 'Aquos Serie SHL22' ], - 'SHL23' => [ 'Sharp', 'Aquos Serie SHL23' ], - 'SHL24' => [ 'Sharp', 'Aquos Serie SHL24' ], - 'SHL25' => [ 'Sharp', 'Aquos Serie SHL25' ], - 'SHT21' => [ 'Sharp', 'Aquos Pad SHT21', DeviceType::TABLET ], - 'SHT22' => [ 'Sharp', 'Aquos Pad SHT22', DeviceType::TABLET ], - 'SHV31' => [ 'Sharp', 'Aquos Serie mini SHV31' ], - 'SHV32' => [ 'Sharp', 'Aquos Serie SHV32' ], - ], - 'WX04SH' => [ 'Sharp', 'Aquos es' ], + 'SHF31' => [ 'Sharp', 'AQUOS K SHF31', 'carrier' => 'au' ], + 'SHF32' => [ 'Sharp', 'AQUOS K SHF32', 'carrier' => 'au' ], + 'SHL21' => [ 'Sharp', 'AQUOS PHONE SERIE SHL21', 'carrier' => 'au' ], + 'SHL22' => [ 'Sharp', 'AQUOS PHONE SERIE SHL22', 'carrier' => 'au' ], + 'SHL23' => [ 'Sharp', 'AQUOS PHONE SERIE SHL23', 'carrier' => 'au' ], + 'SHL24' => [ 'Sharp', 'AQUOS PHONE SERIE mini SHL24', 'carrier' => 'au' ], + 'SHL25' => [ 'Sharp', 'AQUOS SERIE SHL25', 'carrier' => 'au' ], + 'SHT21' => [ 'Sharp', 'AQUOS PAD SHT21', DeviceType::TABLET, 'carrier' => 'au' ], + 'SHT22' => [ 'Sharp', 'AQUOS PAD SHT22', DeviceType::TABLET, 'carrier' => 'au' ], + 'SHV31' => [ 'Sharp', 'AQUOS SERIE mini SHV31', 'carrier' => 'au' ], + 'SHV32' => [ 'Sharp', 'AQUOS SERIE SHV32', 'carrier' => 'au' ], + ], + 'WX04SH' => [ 'Sharp', 'AQUOS PHONE es WX04SH', 'carrier' => 'Willcom' ], + 'WX05SH' => [ 'Sharp', 'AQUOS PHONE ef WX05SH', 'carrier' => 'Willcom' ], 'SHARP-ADS1' => [ 'Sharp', 'FX Plus' ], 'AQUOS!!' => [ @@ -9762,7 +10001,9 @@ 'Smartfren Andromax AD688G' => [ 'Smartfren', 'Andromax C2' ], 'Andromax C2' => [ 'Smartfren', 'Andromax C2' ], 'Smartfren Andromax NEWAD688G' => [ 'Smartfren', 'Andromax C2' ], + 'AD688G' => [ 'Smartfren', 'Andromax C2' ], 'Smartfren Andromax AD6B1H' => [ 'Smartfren', 'Andromax C3' ], + 'AD6B1H' => [ 'Smartfren', 'Andromax C3' ], 'Andromax NC36B1H' => [ 'Smartfren', 'Andromax C3s' ], 'Smartfren Andromax NC36B1G' => [ 'Smartfren', 'Andromax C3s' ], 'Andromaxx-D_E1000' => [ 'Smartfren', 'Andromax D' ], @@ -9878,25 +10119,26 @@ ], 'E[0-9]{4,4}!!' => [ - 'E20(03|06|53)!' => [ 'Sony', 'Xperia E4g' ], // ... - 'E20(33|43)!' => [ 'Sony', 'Xperia E4g dual' ], // ... - 'E21(04|05)!' => [ 'Sony', 'Xperia E4' ], // ... - 'E21(15|24)!' => [ 'Sony', 'Xperia E4 dual' ], // ... - 'E23(03|06|53)!' => [ 'Sony', 'Xperia M4 Aqua' ], // ... - 'E23(12|33|63)!' => [ 'Sony', 'Xperia M4 Aqua dual' ], // ... - 'E53(03|06|53)!' => [ 'Sony', 'Xperia C4' ], // ... - 'E53(33|43|63)!' => [ 'Sony', 'Xperia C4 dual' ], // ... - 'E55(06|53)!' => [ 'Sony', 'Xperia C5 Ultra' ], // ... - 'E55(33|63)!' => [ 'Sony', 'Xperia C5 Ultra dual' ], // ... - 'E56(03|06)!' => [ 'Sony', 'Xperia M5' ], // ... - 'E56(43|63)!' => [ 'Sony', 'Xperia M5 dual' ], // ... - 'E58(03|23)!' => [ 'Sony', 'Xperia Z5 Compact' ], // ... - 'E63(33)!' => [ 'Sony', 'Xperia Z3+ dual' ], // ... - 'E65(08)!' => [ 'Sony', 'Xperia Z4v' ], // ... - 'E65(33|53)!' => [ 'Sony', 'Xperia Z3+' ], // ... - 'E66(03|53)!' => [ 'Sony', 'Xperia Z5' ], // ... - 'E66(83)!' => [ 'Sony', 'Xperia Z5 dual' ], // ... - 'E68(33|53|83)!' => [ 'Sony', 'Xperia Z5 Premium' ], // ... + 'E20(03|06|53)!' => [ 'Sony', 'Xperia E4g' ], + 'E20(33|43)!' => [ 'Sony', 'Xperia E4g dual' ], + 'E21(04|05)!' => [ 'Sony', 'Xperia E4' ], + 'E21(15|24)!' => [ 'Sony', 'Xperia E4 dual' ], + 'E23(03|06|53)!' => [ 'Sony', 'Xperia M4 Aqua' ], + 'E23(12|33|63)!' => [ 'Sony', 'Xperia M4 Aqua dual' ], + 'E53(03|06|53)!' => [ 'Sony', 'Xperia C4' ], + 'E53(33|43|63)!' => [ 'Sony', 'Xperia C4 dual' ], + 'E55(06|53)!' => [ 'Sony', 'Xperia C5 Ultra' ], + 'E55(33|63)!' => [ 'Sony', 'Xperia C5 Ultra dual' ], + 'E56(03|06)!' => [ 'Sony', 'Xperia M5' ], + 'E56(43|63)!' => [ 'Sony', 'Xperia M5 dual' ], + 'E58(03|23)!' => [ 'Sony', 'Xperia Z5 Compact' ], + 'E63(33)!' => [ 'Sony', 'Xperia Z3+ dual' ], + 'E65(08)!' => [ 'Sony', 'Xperia Z4v' ], + 'E65(33|53)!' => [ 'Sony', 'Xperia Z3+' ], + 'E66(03|53)!' => [ 'Sony', 'Xperia Z5' ], + 'E66(83)!' => [ 'Sony', 'Xperia Z5 dual' ], + 'E68(33|53)!' => [ 'Sony', 'Xperia Z5 Premium' ], + 'E68(83)!' => [ 'Sony', 'Xperia Z5 Premium dual' ], ], 'E[0-9]{2,2}[a-z]!!' => [ @@ -9985,59 +10227,60 @@ 'XM50h' => [ 'Sony', 'Xperia T2 Ultra dual' ], // Tianchi 'XM50t' => [ 'Sony', 'Xperia T2 Ultra' ], // Tianchi 'Z1i' => [ 'Sony Ericsson', 'Xperia Play' ], // Zeus - 'S51SE' => [ 'Sony Ericsson', 'Xperia Mini' ], // Smultron + + 'S51SE' => [ 'Sony Ericsson', 'mini S51SE', 'carrier' => 'EMOBILE' ], // Smultron 'IS[0-9]{2,2}S!!' => [ - 'IS11S' => [ 'Sony Ericsson', 'Xperia Acro' ], // Akane - 'IS12S' => [ 'Sony Ericsson', 'Xperia Acro HD' ], // Hayate + 'IS11S' => [ 'Sony Ericsson', 'Xperia acro IS11S', 'carrier' => 'au' ], // Akane + 'IS12S' => [ 'Sony Ericsson', 'Xperia acro HD IS12S', 'carrier' => 'au' ], // Hayate ], 'SO-0[0-9][A-Z]!!' => [ - 'SO-01B' => [ 'Sony Ericsson', 'Xperia X10' ], // Rachael - 'SO-01C' => [ 'Sony Ericsson', 'Xperia Arc' ], // Anzu - 'SO-01D' => [ 'Sony Ericsson', 'Xperia Play' ], // Zeus - 'SO-01E' => [ 'Sony', 'Xperia AX' ], // Tsubasa - 'SO-01F' => [ 'Sony', 'Xperia Z1' ], // Honami - 'SO-01G' => [ 'Sony', 'Xperia Z3' ], // ... - 'SO-01H' => [ 'Sony', 'Xperia Z5' ], // ... - 'SO-02C' => [ 'Sony Ericsson', 'Xperia Acro' ], // Azusa - 'SO-02D' => [ 'Sony Ericsson', 'Xperia NX' ], // Nozomi - 'SO-02E' => [ 'Sony', 'Xperia Z' ], // Yuga - 'SO-02F' => [ 'Sony', 'Xperia Z1f' ], // Itsuki - 'SO-02G' => [ 'Sony', 'Xperia Z3 Compact' ], // ... - 'SO-02H' => [ 'Sony', 'Xperia Z5 Compact' ], // ... - 'SO-03C' => [ 'Sony Ericsson', 'Xperia Ray' ], // Urushi - 'SO-03D' => [ 'Sony Ericsson', 'Xperia Acro HD' ], // Hikari - 'SO-03E' => [ 'Sony', 'Xperia Tablet Z', DeviceType::TABLET ], // Pollux - 'SO-03F' => [ 'Sony', 'Xperia Z2' ], // Sirius - 'SO-03G' => [ 'Sony', 'Xperia Z4' ], - 'SO-03H' => [ 'Sony', 'Xperia Z5 Premium' ], - 'SO-04D' => [ 'Sony', 'Xperia GX' ], // Hayabusa - 'SO-04E' => [ 'Sony', 'Xperia A' ], // Dogo - 'SO-04EM' => [ 'Sony', 'Xperia feat. HATSUNE MIKU' ], - 'SO-04F' => [ 'Sony', 'Xperia A2' ], // Altair - 'SO-04G' => [ 'Sony', 'Xperia A4' ], - 'SO-05D' => [ 'Sony', 'Xperia SX' ], // Komachi - 'SO-05F' => [ 'Sony', 'Xperia Tablet Z2', DeviceType::TABLET ], // Castor - 'SO-05G' => [ 'Sony', 'Xperia Tablet Z4', DeviceType::TABLET ], // ... + 'SO-01B' => [ 'Sony Ericsson', 'Xperia SO-01B', 'carrier' => 'DoCoMo' ], // Rachael + 'SO-01C' => [ 'Sony Ericsson', 'Xperia arc SO-01C', 'carrier' => 'DoCoMo' ], // Anzu + 'SO-01D' => [ 'Sony Ericsson', 'Xperia PLAY SO-01D', 'carrier' => 'DoCoMo' ], // Zeus + 'SO-01E' => [ 'Sony', 'Xperia AX SO-01E', 'carrier' => 'DoCoMo' ], // Tsubasa + 'SO-01F' => [ 'Sony', 'Xperia Z1 SO-01F', 'carrier' => 'DoCoMo' ], // Honami + 'SO-01G' => [ 'Sony', 'Xperia Z3 SO-01G', 'carrier' => 'DoCoMo' ], // ... + 'SO-01H' => [ 'Sony', 'Xperia Z5 SO-01H', 'carrier' => 'DoCoMo' ], // ... + 'SO-02C' => [ 'Sony Ericsson', 'Xperia acro SO-02C', 'carrier' => 'DoCoMo' ], // Azusa + 'SO-02D' => [ 'Sony Ericsson', 'Xperia NX SO-02D', 'carrier' => 'DoCoMo' ], // Nozomi + 'SO-02E' => [ 'Sony', 'Xperia Z SO-02E', 'carrier' => 'DoCoMo' ], // Yuga + 'SO-02F' => [ 'Sony', 'Xperia Z1 f SO-02F', 'carrier' => 'DoCoMo' ], // Itsuki + 'SO-02G' => [ 'Sony', 'Xperia Z3 Compact SO-02G', 'carrier' => 'DoCoMo' ], // ... + 'SO-02H' => [ 'Sony', 'Xperia Z5 Compact SO-02H', 'carrier' => 'DoCoMo' ], // ... + 'SO-03C' => [ 'Sony Ericsson', 'Xperia ray SO-03C', 'carrier' => 'DoCoMo' ], // Urushi + 'SO-03D' => [ 'Sony Ericsson', 'Xperia acro HD SO-03D', 'carrier' => 'DoCoMo' ], // Hikari + 'SO-03E' => [ 'Sony', 'Xperia Tablet Z SO-03E', DeviceType::TABLET, 'carrier' => 'DoCoMo' ], // Pollux + 'SO-03F' => [ 'Sony', 'Xperia Z2 SO-03F', 'carrier' => 'DoCoMo' ], // Sirius + 'SO-03G' => [ 'Sony', 'Xperia Z4 SO-03G', 'carrier' => 'DoCoMo' ], + 'SO-03H' => [ 'Sony', 'Xperia Z5 Premium SO-03H', 'carrier' => 'DoCoMo' ], + 'SO-04D' => [ 'Sony', 'Xperia GX SO-04D', 'carrier' => 'DoCoMo' ], // Hayabusa + 'SO-04E' => [ 'Sony', 'Xperia A SO-04E', 'carrier' => 'DoCoMo' ], // Dogo + 'SO-04EM' => [ 'Sony', 'Xperia feat. HATSUNE MIKU SO-04E', 'carrier' => 'DoCoMo' ], + 'SO-04F' => [ 'Sony', 'Xperia A2 SO-04F', 'carrier' => 'DoCoMo' ], // Altair + 'SO-04G' => [ 'Sony', 'Xperia A4 SO-04G', 'carrier' => 'DoCoMo' ], + 'SO-05D' => [ 'Sony', 'Xperia SX SO-05D', 'carrier' => 'DoCoMo' ], // Komachi + 'SO-05F' => [ 'Sony', 'Xperia Tablet Z2 SO-05F', DeviceType::TABLET, 'carrier' => 'DoCoMo' ], // Castor + 'SO-05G' => [ 'Sony', 'Xperia Tablet Z4 SO-05G', DeviceType::TABLET, 'carrier' => 'DoCoMo' ], // ... ], 'SO[LTV][0-9]{2,2}!!' => [ - 'SOL21' => [ 'Sony', 'Xperia VL' ], // Surf - 'SOL22' => [ 'Sony', 'Xperia UL' ], // Gaga - 'SOL23' => [ 'Sony', 'Xperia Z1' ], // Honami - 'SOL24' => [ 'Sony', 'Xperia Z Ultra' ], // Togari - 'SOL25' => [ 'Sony', 'Xperia Z2a' ], // Canopus - 'SOL26' => [ 'Sony', 'Xperia Z3' ], // ... - 'SOT21' => [ 'Sony', 'Xperia Tablet Z2', DeviceType::TABLET ], // Castor - 'SOT31' => [ 'Sony', 'Xperia Tablet Z4', DeviceType::TABLET ], // Castor - 'SOV31' => [ 'Sony', 'Xperia Z4' ], // ... - 'SOV32' => [ 'Sony', 'Xperia Z5' ], // ... + 'SOL21' => [ 'Sony', 'Xperia VL SOL21', 'carrier' => 'au' ], // Surf + 'SOL22' => [ 'Sony', 'Xperia UL SOL22', 'carrier' => 'au' ], // Gaga + 'SOL23' => [ 'Sony', 'Xperia Z1 SOL23', 'carrier' => 'au' ], // Honami + 'SOL24' => [ 'Sony', 'Xperia Z Ultra SOL24', 'carrier' => 'au' ], // Togari + 'SOL25' => [ 'Sony', 'Xperia ZL2 SOL25', 'carrier' => 'au' ], // Canopus + 'SOL26' => [ 'Sony', 'Xperia Z3 SOL26', 'carrier' => 'au' ], // ... + 'SOT21' => [ 'Sony', 'Xperia Tablet Z2 SOT21', DeviceType::TABLET, 'carrier' => 'au' ], // Castor + 'SOT31' => [ 'Sony', 'Xperia Tablet Z4 SOT31', DeviceType::TABLET, 'carrier' => 'au' ], // Castor + 'SOV31' => [ 'Sony', 'Xperia Z4 SOV31', 'carrier' => 'au' ], // ... + 'SOV32' => [ 'Sony', 'Xperia Z5 SOV32', 'carrier' => 'au' ], // ... ], '40[0-9]SO!!' => [ - '401SO' => [ 'Sony', 'Xperia Z3' ], // ... - '402SO' => [ 'Sony', 'Xperia Z4' ], // ... + '401SO' => [ 'Sony', 'Xperia Z3 401SO', 'carrier' => 'Softbank' ], // ... + '402SO' => [ 'Sony', 'Xperia Z4 402SO', 'carrier' => 'Softbank' ], // ... ], 'Xperia!!' => [ @@ -10316,6 +10559,7 @@ 'EzeeTab\'1001' => [ 'Storex', 'eZee\'Tab 1001', DeviceType::TABLET ], 'eZeeTab1003' => [ 'Storex', 'eZee\'Tab 1003', DeviceType::TABLET ], 'eZee\'Tab1004' => [ 'Storex', 'eZee\'Tab 1004', DeviceType::TABLET ], + 'eZee\' Tab10010-S' => [ 'Storex', 'eZee\'Tab 10010s', DeviceType::TABLET ], 'eZeeTab7c2' => [ 'Storex', 'eZee\'Tab 7c2', DeviceType::TABLET ], 'eZeeTab7c5' => [ 'Storex', 'eZee\'Tab 7c5', DeviceType::TABLET ], 'eZee\'Tab7D10-S' => [ 'Storex', 'eZee\'Tab 7d10s', DeviceType::TABLET ], @@ -10323,10 +10567,12 @@ 'eZee\'Tab7D13-S' => [ 'Storex', 'eZee\'Tab 7d13s', DeviceType::TABLET ], 'eZee\'Tab7D14-S' => [ 'Storex', 'eZee\'Tab 7d14s', DeviceType::TABLET ], 'eZeeTab7D15-M' => [ 'Storex', 'eZee\'Tab 7d15s', DeviceType::TABLET ], + 'eZee\'tab7Q12-S' => [ 'Storex', 'eZee\'Tab 7q12s', DeviceType::TABLET ], 'eZee\'Tab785D12-S' => [ 'Storex', 'eZee\'Tab 785d12s', DeviceType::TABLET ], 'eZee\'Tab8D11-S' => [ 'Storex', 'eZee\'Tab 8d11s', DeviceType::TABLET ], 'eZee\'Tab97D11-S' => [ 'Storex', 'eZee\'Tab 97d11s', DeviceType::TABLET ], 'eZee\'Tab10D11-M' => [ 'Storex', 'eZee\'Tab 10d11m', DeviceType::TABLET ], + 'eZee\'tab10D12-S' => [ 'Storex', 'eZee\'Tab 10d12s', DeviceType::TABLET ], 'eZee\'Tab13Q10-M' => [ 'Storex', 'eZee\'Tab 13q10m', DeviceType::TABLET ], ], @@ -10339,6 +10585,8 @@ 'Cyclone!!' => [ 'Cyclone Explorer' => [ 'Sumvision', 'Cyclone Explorer', DeviceType::TABLET ], + 'CYCLONE EXPLORER II' => [ 'Sumvision', 'Cyclone Explorer 2', DeviceType::TABLET ], + 'cyclone Titan' => [ 'Sumvision', 'Cyclone Titan', DeviceType::TABLET ], 'Cyclone Voyager' => [ 'Sumvision', 'Cyclone Voyager', DeviceType::TABLET ], 'Cyclone Voyager 2' => [ 'Sumvision', 'Cyclone Voyager 2', DeviceType::TABLET ], ], @@ -10399,6 +10647,7 @@ 'Symphony W65' => [ 'Symphony', 'Xplorer W65' ], 'Symphony W65i' => [ 'Symphony', 'Xplorer W65i' ], 'Symphony W66' => [ 'Symphony', 'Xplorer W66' ], + 'Symphony W67' => [ 'Symphony', 'Xplorer W67' ], 'Symphony W68' => [ 'Symphony', 'Xplorer W68' ], 'Symphony W68Q' => [ 'Symphony', 'Xplorer W68Q' ], 'Symphony W69' => [ 'Symphony', 'Xplorer W69' ], @@ -10631,13 +10880,16 @@ 'A80HD四核(C4H6)' => [ 'Teclast', 'A80HD', DeviceType::TABLET ], 'A88 mini四核(M1C5)' => [ 'Teclast', 'A88 mini', DeviceType::TABLET ], 'G17(B5DV)' => [ 'Teclast', 'G17', DeviceType::TABLET ], + 'G17(B7DV)' => [ 'Teclast', 'G17', DeviceType::TABLET ], 'G17h 3G??(K5E2)' => [ 'Teclast', 'G17h', DeviceType::TABLET ], + 'G17h 3G??(K6E2' => [ 'Teclast', 'G17h', DeviceType::TABLET ], 'G17h 3G四核(K5E2)' => [ 'Teclast', 'G17h', DeviceType::TABLET ], 'G17h 3G四核(K6E2)' => [ 'Teclast', 'G17h', DeviceType::TABLET ], 'G17s 3G' => [ 'Teclast', 'G17s', DeviceType::TABLET ], 'G17s 3G??(K5E5)' => [ 'Teclast', 'G17s', DeviceType::TABLET ], 'G17s 3G四核(K5E5)' => [ 'Teclast', 'G17s', DeviceType::TABLET ], 'G17s 3G四核(K5E4)' => [ 'Teclast', 'G17s', DeviceType::TABLET ], + 'G17s 3G四核(K5E3)' => [ 'Teclast', 'G17s', DeviceType::TABLET ], 'G18 3G四核(C6B9)' => [ 'Teclast', 'G18', DeviceType::TABLET ], 'G18mini(C5B9)' => [ 'Teclast', 'G18 mini', DeviceType::TABLET ], 'G18d 3G四核(D3A2)' => [ 'Teclast', 'G18d', DeviceType::TABLET ], @@ -10734,6 +10986,7 @@ 'X80h(FB5M)' => [ 'Teclast', 'X80h', DeviceType::TABLET ], 'X80h(FB6M)' => [ 'Teclast', 'X80h', DeviceType::TABLET ], 'X80HD(G2N5)' => [ 'Teclast', 'X80HD', DeviceType::TABLET ], + 'X80HD(G2N6)' => [ 'Teclast', 'X80HD', DeviceType::TABLET ], 'X80HD(G2N8)' => [ 'Teclast', 'X80HD', DeviceType::TABLET ], 'X80HD(G2N9)' => [ 'Teclast', 'X80HD', DeviceType::TABLET ], 'X81-8G3D' => [ 'Teclast', 'X81', DeviceType::TABLET ], @@ -10762,6 +11015,7 @@ 'X98 Air II(HG9M)' => [ 'Teclast', 'X98 Air II', DeviceType::TABLET ], 'X98 Air II(HG9N)' => [ 'Teclast', 'X98 Air II', DeviceType::TABLET ], 'X98 Air III(M5C5)' => [ 'Teclast', 'X98 Air III', DeviceType::TABLET ], + 'X98 Air III(M5C6)' => [ 'Teclast', 'X98 Air III', DeviceType::TABLET ], 'X98 Pro (K9C6)' => [ 'Teclast', 'X98 Pro', DeviceType::TABLET ], 'tegav2' => [ 'Tegatech', 'TEGA v2', DeviceType::TABLET ], 'Tele2fon V3' => [ 'Tele2fon', 'v3' ], @@ -10921,11 +11175,11 @@ 'TSB CLOUD COMPANION;TOSHIBA AC AND AZ' => [ 'Toshiba', 'Dynabook AZ', 'desktop' ], 'TOSHIBA AC AND AZ' => [ 'Toshiba', 'Dynabook AZ', 'desktop' ], 'TOSHIBA FOLIO AND A' => [ 'Toshiba', 'Folio 100', DeviceType::TABLET ], - 'T-01C' => [ 'Toshiba', 'Regza T-01C' ], - 'T-01D' => [ 'Toshiba', 'Regza T-01D' ], - 'T-02D' => [ 'Toshiba', 'Regza T-02D' ], - 'IS04' => [ 'Toshiba', 'Regza IS04' ], - 'IS11T' => [ 'Toshiba', 'Regza IS11T' ], + 'T-01C' => [ 'Toshiba', 'REGZA Phone T-01C', 'carrier' => 'DoCoMo' ], + 'T-01D' => [ 'Toshiba', 'REGZA Phone T-01D', 'carrier' => 'DoCoMo' ], + 'T-02D' => [ 'Toshiba', 'REGZA Phone T-02D', 'carrier' => 'DoCoMo' ], + 'IS04' => [ 'Toshiba', 'REGZA Phone IS04', 'carrier' => 'au' ], + 'IS11T' => [ 'Toshiba', 'REGZA Phone IS11T', 'carrier' => 'au' ], 'AT1S0' => [ 'Toshiba', 'Regza AT1S0' ], 'AT7-A' => [ 'Toshiba', 'Excite AT7-A', DeviceType::TABLET ], 'AT7-B' => [ 'Toshiba', 'Excite AT7-B', DeviceType::TABLET ], @@ -11020,6 +11274,7 @@ 'Amazing A4' => [ 'TWM', 'Amazing A4' ], 'Amazing A4C' => [ 'TWM', 'Amazing A4C' ], 'Amazing A4S' => [ 'TWM', 'Amazing A4S' ], + 'Amazing A5S' => [ 'TWM', 'Amazing A5S' ], 'Amazing A6' => [ 'TWM', 'Amazing A6' ], 'Amazing A7' => [ 'TWM', 'Amazing A7' ], 'Amazing A8' => [ 'TWM', 'Amazing A8' ], @@ -11215,6 +11470,8 @@ 'vivo X5Pro L' => [ 'Vivo', 'X5 Pro L' ], 'VIV-vivo X5Pro V' => [ 'Vivo', 'X5 Pro V' ], 'vivo X5Pro V' => [ 'Vivo', 'X5 Pro V' ], + 'vivo X6A' => [ 'Vivo', 'X6A' ], + 'vivo X6Plus L' => [ 'Vivo', 'X6 Plus L' ], 'vivo Xplay' => [ 'Vivo', 'Xplay' ], 'vivo X510t' => [ 'Vivo', 'Xplay' ], 'vivo Xplay2' => [ 'Vivo', 'Xplay 2' ], @@ -11260,6 +11517,7 @@ 'vivo Y35' => [ 'Vivo', 'Y35' ], 'vivo Y35A' => [ 'Vivo', 'Y35A' ], 'vivo Y37' => [ 'Vivo', 'Y37' ], + 'vivo Y51' => [ 'Vivo', 'Y51' ], 'vivo Y613' => [ 'Vivo', 'Y613' ], 'vivo Y613F' => [ 'Vivo', 'Y613F' ], 'vivo Y622' => [ 'Vivo', 'Y622' ], @@ -11321,7 +11579,9 @@ 'Primo-G3' => [ 'Walton', 'Primo G3' ], 'Primo G4' => [ 'Walton', 'Primo G4' ], 'Primo G5' => [ 'Walton', 'Primo G5' ], + 'Primo G6' => [ 'Walton', 'Primo G6' ], 'Primo GF2' => [ 'Walton', 'Primo GF2' ], + 'Primo GF4' => [ 'Walton', 'Primo GF4' ], 'Primo GH+' => [ 'Walton', 'Primo GH+' ], 'Primo-GH2' => [ 'Walton', 'Primo GH2' ], 'Primo GH2' => [ 'Walton', 'Primo GH2' ], @@ -11343,6 +11603,7 @@ 'Walton Primo R1' => [ 'Walton', 'Primo R1' ], 'Primo R2' => [ 'Walton', 'Primo R2' ], 'Primo R3' => [ 'Walton', 'Primo R3' ], + 'Primo RH' => [ 'Walton', 'Primo RH' ], 'Primo RX2' => [ 'Walton', 'Primo RX2' ], 'Primo S1' => [ 'Walton', 'Primo S1' ], 'WALTON Primo S3' => [ 'Walton', 'Primo S3' ], @@ -11391,6 +11652,7 @@ 'WIKO-CINK SLIM' => [ 'Wiko', 'Cink Slim' ], 'CINK SLIM' => [ 'Wiko', 'Cink Slim' ], 'Cink Slim A' => [ 'Wiko', 'Cink Slim A' ], + 'Cink Slim B' => [ 'Wiko', 'Cink Slim B' ], 'CINK SLIM 2' => [ 'Wiko', 'Cink Slim 2' ], 'DARKFULL' => [ 'Wiko', 'Darkfull' ], 'DARKMOON' => [ 'Wiko', 'Darkmoon' ], @@ -11537,6 +11799,7 @@ 'MI 2' => [ 'Xiaomi', 'Mi 2' ], 'MI 2C' => [ 'Xiaomi', 'Mi 2' ], 'MI 2A!' => [ 'Xiaomi', 'Mi 2A' ], + 'MI2A' => [ 'Xiaomi', 'Mi 2A' ], 'MI 2S' => [ 'Xiaomi', 'Mi 2S' ], 'MI 2SC' => [ 'Xiaomi', 'Mi 2S' ], 'MI 2/2S' => [ 'Xiaomi', 'Mi 2S' ], @@ -11549,6 +11812,7 @@ 'MI 3C' => [ 'Xiaomi', 'Mi 3' ], 'MI 3W' => [ 'Xiaomi', 'Mi 3' ], '2013061' => [ 'Xiaomi', 'Mi 3' ], + 'Mi3W' => [ 'Xiaomi', 'Mi 3' ], 'Xiaomi Mi 4' => [ 'Xiaomi', 'Mi 4' ], 'xiaomi M4' => [ 'Xiaomi', 'Mi 4' ], 'MI 4' => [ 'Xiaomi', 'Mi 4' ], @@ -11592,6 +11856,7 @@ '2013122' => [ 'Xiaomi', 'Redmi Note 1' ], 'Redmi Note 2' => [ 'Xiaomi', 'Redmi Note 2' ], 'Xiaomi Note2' => [ 'Xiaomi', 'Redmi Note 2' ], + 'Redmi Note 3' => [ 'Xiaomi', 'Redmi Note 3' ], '20130(22|23)!' => [ 'Xiaomi', 'Redmi Red Rice' ], '20140(11)!' => [ 'Xiaomi', 'Redmi Red Rice' ], '20145(01)!' => [ 'Xiaomi', 'Redmi Red Rice' ], @@ -11665,11 +11930,13 @@ 'Andy C3.5EI' => [ 'Yezz', 'Andy C3.5EI' ], 'Andy C5V' => [ 'Yezz', 'Andy C5V' ], 'Andy C5VP' => [ 'Yezz', 'Andy C5VP' ], + 'ANDY-3.5EI' => [ 'Yezz', 'Andy 3.5EI' ], 'YEZZ-4E' => [ 'Yezz', 'Andy 4E' ], 'Andy 4E' => [ 'Yezz', 'Andy 4E' ], 'Andy 4EI' => [ 'Yezz', 'Andy 4EI' ], 'ANDY 5EI' => [ 'Yezz', 'Andy 5EI' ], 'Yezz-ANDY5EL' => [ 'Yezz', 'Andy 5EL' ], + 'Yezz-T7FD' => [ 'Yezz', 'Epic T7FD', DeviceType::TABLET ], 'C868' => [ 'Yicheer', 'C868' ], 'DEM752NC' => [ 'Yifang', 'M752' ], 'EMR1879' => [ 'Yidong', 'EMR1879', DeviceType::TABLET ], @@ -11679,6 +11946,7 @@ 'YX-YUSUN E96' => [ 'Yusun', 'E96' ], 'YUSUN E98' => [ 'Yusun', 'E98' ], 'YUSUN L71' => [ 'Yusun', 'L71' ], + 'YUSUN L88' => [ 'Yusun', 'L88' ], 'LA-I Dual core' => [ 'Yusun', 'LA-I' ], 'LA-M3' => [ 'Yusun', 'LA-M3' ], 'LA1-L' => [ 'Yusun', 'LA1-L' ], @@ -11691,6 +11959,7 @@ 'YUSUN LA2-T1' => [ 'Yusun', 'LA2-T1' ], 'YUSUN LA2 T1' => [ 'Yusun', 'LA2-T1' ], 'LA2-T1' => [ 'Yusun', 'LA2-T1' ], + 'YUSUN LA2-W' => [ 'Yusun', 'LA2-W' ], 'LA2-W' => [ 'Yusun', 'LA2-W' ], 'LA2-W1' => [ 'Yusun', 'LA2-W1' ], 'YUSUN LA2 W1' => [ 'Yusun', 'LA2-W1' ], @@ -11812,7 +12081,9 @@ 'Blade L2' => [ 'ZTE', 'Blade L2' ], 'Blade L2 Plus' => [ 'ZTE', 'Blade L2 Plus' ], 'ZTE Blade L3' => [ 'ZTE', 'Blade L3' ], + 'Blade L3' => [ 'ZTE', 'Blade L3' ], 'ZTE Blade L3 Lite' => [ 'ZTE', 'Blade L3 Lite' ], + 'Blade L5 Plus' => [ 'ZTE', 'Blade L5 Plus' ], 'Blade Q' => [ 'ZTE', 'Blade Q' ], 'ZTE Blade Q' => [ 'ZTE', 'Blade Q' ], 'ZTE Blade Q Lux' => [ 'ZTE', 'Blade Q Lux' ], @@ -12187,9 +12458,9 @@ 'ZTE V5S' => [ 'ZTE', 'V5S Grand Memo' ], 'N918St' => [ 'ZTE', 'V5S Grand Memo' ], 'ZTE T81' => [ 'ZTE', 'Fronteer 4G' ], - '003Z' => [ 'ZTE', 'Softbank 003Z' ], - '008Z' => [ 'ZTE', 'Softbank 008Z' ], - '009Z' => [ 'ZTE', 'Softbank Star7' ], + '003Z' => [ 'ZTE', 'Libero 003Z', 'carrier' => 'Softbank' ], + '008Z' => [ 'ZTE', 'シンプルスマートフォン 008Z', 'carrier' => 'Softbank' ], + '009Z' => [ 'ZTE', 'STAR7 009Z', 'carrier' => 'Softbank' ], 'ZTE A2015' => [ 'ZTE', 'A2015' ], 'ZTE A2016' => [ 'ZTE', 'A2016' ], 'ZTE B2015' => [ 'ZTE', 'B2015' ], @@ -12198,8 +12469,8 @@ 'ZTE S2004' => [ 'ZTE', 'Tianji 3' ], 'ZTE S2005' => [ 'ZTE', 'Star 2' ], 'ZTE S2010' => [ 'ZTE', 'S2010' ], - '402ZT' => [ 'ZTE', 'Blade Q+ 402ZT' ], - '502ZT' => [ 'ZTE', 'Spro 2 502ZT' ], + '402ZT' => [ 'ZTE', 'Blade Q+ 402ZT', 'carrier' => 'Softbank' ], + '502ZT' => [ 'ZTE', 'Spro 2 502ZT', 'carrier' => 'Softbank' ], 'ZA950' => [ 'Zonda', 'Mega 5.0 ZA950' ], '(Zopo )?ZP100!' => [ 'Zopo', 'ZP100 Pilot' ], 'ZP200' => [ 'Zopo', 'ZP200 Shining' ], @@ -12280,7 +12551,7 @@ 'Ultym 5L' => [ 'Bouygues', 'Ultym 5L' ], 'Ultym 5.2' => [ 'Bouygues', 'Ultym 5.2' ], - 'dtab01' => [ 'Docomo', 'dtab', DeviceType::TABLET ], + 'dtab01' => [ 'DoCoMo', 'dtab', DeviceType::TABLET ], 'Etisalat Smartphone' => [ 'Etisalat', 'Smartphone' ], @@ -12337,6 +12608,7 @@ 'i-mobile i-STYLE 2.5' => [ 'i-Mobile', 'i-Style 2.5' ], 'i-mobile i-style 2.6' => [ 'i-Mobile', 'i-Style 2.6' ], 'i-mobile i-style 2.6A' => [ 'i-Mobile', 'i-Style 2.6A' ], + 'i-mobile i-STYLE 2.9' => [ 'i-Mobile', 'i-Style 2.9' ], 'i-mobile i-style 3' => [ 'i-Mobile', 'i-Style 3' ], 'i-mobile i-STYLE 4' => [ 'i-Mobile', 'i-Style 4' ], 'i-MOBILE i-STYLE 5' => [ 'i-Mobile', 'i-Style 5' ], diff --git a/data/models-feature.php b/data/models-feature.php index d3c6425..9201858 100644 --- a/data/models-feature.php +++ b/data/models-feature.php @@ -4,6 +4,8 @@ DeviceModels::$FEATURE_MODELS = [ 'EF71' => [ 'BenQ-Siemens', 'EF71' ], + 'Lightpipe' => [ 'Kyocera', 'E1100 Neo' ], + 'K612' => [ 'Kyocera', 'K612 Strobe' ], 'EX115' => [ 'Motorola', 'Starling EX115' ], 'EX118' => [ 'Motorola', 'MOTOKEY XT EX118' ], 'EX119' => [ 'Motorola', 'Brea EX119' ], @@ -70,281 +72,23 @@ 'SM-B780(A|W)!' => [ 'Samsung', 'Rugby 4' ], 'S7350' => [ 'Samsung', 'S7350 Ultra S' ], 'sam-r560' => [ 'Samsung', 'Messenger II R560' ], - 'CK13[ai]?!' => [ 'Sony Ericsson', 'txt' ], - 'CK15[ai]?!' => [ 'Sony Ericsson', 'txt Pro' ], - 'F100[ai]?!' => [ 'Sony Ericsson', 'Jalou' ], - 'J105[ai]?!' => [ 'Sony Ericsson', 'Naite' ], - 'J108[ai]?!' => [ 'Sony Ericsson', 'Cedar' ], - 'J10i?!' => [ 'Sony Ericsson', 'Elm' ], - 'J20i?!' => [ 'Sony Ericsson', 'Hazel' ], - 'U100[ai]?!' => [ 'Sony Ericsson', 'Yari' ], - 'U10[ai]?!' => [ 'Sony Ericsson', 'Aino' ], - 'W100i?!' => [ 'Sony Ericsson', 'Spiro' ], - 'W150i?!' => [ 'Sony Ericsson', 'Yendo' ], - 'W20i?!' => [ 'Sony Ericsson', 'Zylo' ], - 'WT13i!' => [ 'Sony Ericsson', 'Mix Walkman' ], - 'X5i?!' => [ 'Sony Ericsson', 'Xperia Pureness X5' ], + 'CK13[ai]?$!' => [ 'Sony Ericsson', 'txt' ], + 'CK15[ai]?$!' => [ 'Sony Ericsson', 'txt Pro' ], + 'F100[ai]?$!' => [ 'Sony Ericsson', 'Jalou' ], + 'J105[ai]?$!' => [ 'Sony Ericsson', 'Naite' ], + 'J108[ai]?$!' => [ 'Sony Ericsson', 'Cedar' ], + 'J10(i2?)?$!' => [ 'Sony Ericsson', 'Elm' ], + 'J20i?$!' => [ 'Sony Ericsson', 'Hazel' ], + 'U100[ai]?$!' => [ 'Sony Ericsson', 'Yari' ], + 'U10[ai]?$!' => [ 'Sony Ericsson', 'Aino' ], + 'W100i?$!' => [ 'Sony Ericsson', 'Spiro' ], + 'W150i?$!' => [ 'Sony Ericsson', 'Yendo' ], + 'W20i?$!' => [ 'Sony Ericsson', 'Zylo' ], + 'WT13i$!' => [ 'Sony Ericsson', 'Mix Walkman' ], + 'X5i$!' => [ 'Sony Ericsson', 'Xperia Pureness X5' ], 'tecnot36' => [ 'Tecno', 'T36' ], 'Vodafone 575' => [ 'Vodafone', '575' ], 'GT-I6410!' => [ 'Vodafone', '360 M1' ], 'GT-I8320!' => [ 'Vodafone', '360 H1' ], 'GT-I8330!' => [ 'Vodafone', '360 H2' ], - - 'KDDI-KC3Q' => [ 'iida', 'misora' ], // KYX02 by Kyocera - 'KDDI-KC3S' => [ 'iida', 'PRISMOID' ], // KYX03 by Kyocera - 'KDDI-KC3V' => [ 'iida', 'lotta' ], // KYX04 by Kyocera - 'KDDI-ST22' => [ 'iida', 'INFOBAR' ], // A5307ST by Sanyo - 'KDDI-ST33' => [ 'iida', 'INFOBAR 2' ], // W55SA by Sanyo - 'KDDI-SN3K' => [ 'iida', 'G9' ], // SOX01 by Sony Ericsson - 'KDDI-SN3T' => [ 'iida', 'G11' ], // SOX02 by Sony Ericsson - 'KDDI-TS3Q' => [ 'iida', 'PLY' ], // TSX04 by Toshiba - 'KDDI-TS3U' => [ 'iida', 'LIGHT POOL' ], // by Toshiba - 'KDDI-TS3W' => [ 'iida', 'X-RAY' ], // by Toshiba - - 'KDDI-CA21' => [ 'Casio', 'A3012CA' ], - 'KDDI-CA22' => [ 'Casio', 'A5302CA' ], - 'KDDI-CA23' => [ 'Casio', 'A5401CA' ], - 'KDDI-CA24' => [ 'Casio', 'A5403CA' ], - 'KDDI-CA25' => [ 'Casio', 'A5406CA' ], - 'KDDI-CA26' => [ 'Casio', 'A5407CA' ], - 'KDDI-CA27' => [ 'Casio', 'A5512CA' ], - 'KDDI-CA28' => [ 'Casio', 'GzOne Type-R' ], // A5513CA - 'KDDI-CA31' => [ 'Casio', 'W21CA' ], - 'KDDI-CA32' => [ 'Casio', 'W31CA' ], - 'KDDI-CA33' => [ 'Casio', 'W41CA' ], - 'KDDI-CA34' => [ 'Casio', 'W42CA' ], - 'KDDI-CA35' => [ 'Casio', 'W43CA' ], - 'KDDI-CA36' => [ 'Casio', 'E03CA' ], - 'KDDI-CA37' => [ 'Casio', 'W51CA' ], - 'KDDI-CA38' => [ 'Casio', 'W52CA' ], - 'KDDI-CA39' => [ 'Casio', 'W53CA' ], - 'KDDI-CA3A' => [ 'Casio', 'W61CA' ], - 'KDDI-CA3B' => [ 'Casio', 'W62CA' ], - 'KDDI-CA3C' => [ 'Casio', 'W63CA' ], - 'KDDI-CA3D' => [ 'Casio', 'CA001' ], - 'KDDI-CA3E' => [ 'Casio', 'CA002' ], - 'KDDI-CA3F' => [ 'Casio', 'CA003' ], - 'KDDI-CA3G' => [ 'Casio', 'CA004' ], - 'KDDI-CA3H' => [ 'Casio', 'CA005' ], - 'KDDI-CA3I' => [ 'Casio', 'GzOne Type-X' ], // CAY01 - 'KDDI-CA3J' => [ 'Casio', 'CA006' ], - 'KDDI-CA3K' => [ 'Casio', 'CA007' ], - 'KDDI-FJ31' => [ 'Fujitsu', 'F001' ], - 'KDDI-HI23' => [ 'Hitachi', 'A5303H' ], - 'KDDI-HI24' => [ 'Hitachi', 'A5303H II' ], - 'KDDI-HI31' => [ 'Hitachi', 'W11H' ], - 'KDDI-HI32' => [ 'Hitachi', 'W21H' ], - 'KDDI-HI33' => [ 'Hitachi', 'W22H' ], - 'KDDI-HI34' => [ 'Hitachi', 'PENCK' ], // W31H - 'KDDI-HI35' => [ 'Hitachi', 'W32H' ], - 'KDDI-HI36' => [ 'Hitachi', 'W41H' ], - 'KDDI-HI37' => [ 'Hitachi', 'W42H' ], - 'KDDI-HI38' => [ 'Hitachi', 'W43H' ], - 'KDDI-HI39' => [ 'Hitachi', 'W51H' ], - 'KDDI-HI3A' => [ 'Hitachi', 'W52H' ], - 'KDDI-HI3B' => [ 'Hitachi', 'W53H' ], - 'KDDI-HI3C' => [ 'Hitachi', 'W61H' ], - 'KDDI-HI3D' => [ 'Hitachi', 'W62H' ], - 'KDDI-HI3E' => [ 'Hitachi', 'W63H' ], - 'KDDI-HI3F' => [ 'Hitachi', 'H001' ], // HI001 - 'KDDI-HI3G' => [ 'Hitachi', 'Mobile Hi-Vision CAM Wooo' ], // HIY01 - 'KDDI-HI3H' => [ 'Hitachi', 'beskey' ], // HIY02 - 'KDDI-KC21' => [ 'Kyocera', 'C3002K' ], - 'KDDI-KC22' => [ 'Kyocera', 'A5305K' ], - 'KDDI-KC23' => [ 'Kyocera', 'A1401K' ], - 'KDDI-KC24' => [ 'Kyocera', 'A5502K' ], - 'KDDI-KC25' => [ 'Kyocera', 'A5502K' ], - 'KDDI-KC26' => [ 'Kyocera', 'A1403K' ], - 'KDDI-KC27' => [ 'Kyocera', 'A5515K' ], - 'KDDI-KC28' => [ 'Kyocera', 'A5521K' ], - 'KDDI-KC29' => [ 'Kyocera', 'A5526K' ], - 'KDDI-KC2A' => [ 'Kyocera', 'A5528K' ], - 'KDDI-KC31' => [ 'Kyocera', 'W11K' ], - 'KDDI-KC32' => [ 'Kyocera', 'W21K' ], - 'KDDI-KC33' => [ 'Kyocera', 'W31K' ], - 'KDDI-KC34' => [ 'Kyocera', 'W32K' ], - 'KDDI-KC35' => [ 'Kyocera', 'W41K' ], - 'KDDI-KC36' => [ 'Kyocera', 'W42K' ], - 'KDDI-KC37' => [ 'Kyocera', 'W43K' ], - 'KDDI-KC38' => [ 'Kyocera', 'W44K' ], - 'KDDI-KC39' => [ 'Kyocera', 'W51K' ], - 'KDDI-KC3A' => [ 'Kyocera', 'MEDIA SKIN' ], // W52K - 'KDDI-KC3B' => [ 'Kyocera', 'W53K/W64K' ], - 'KDDI-KC3D' => [ 'Kyocera', 'W61K' ], - 'KDDI-KC3E' => [ 'Kyocera', 'W44K II' ], - 'KDDI-KC3G' => [ 'Kyocera', 'W62K' ], - 'KDDI-KC3H' => [ 'Kyocera', 'W63K' ], - 'KDDI-KC3I' => [ 'Kyocera', 'W65K' ], - 'KDDI-KC3K' => [ 'Kyocera', 'W63K' ], - 'KDDI-KC3M' => [ 'Kyocera', 'K001' ], // KY001 - 'KDDI-KC3N' => [ 'Kyocera', 'NS01' ], // KYX01 - 'KDDI-KC3O' => [ 'Kyocera', 'K002' ], // KY002 - 'KDDI-KC3P' => [ 'Kyocera', 'K003' ], // KY003 - 'KDDI-KC3R' => [ 'Kyocera', 'SA001' ], - 'KDDI-KC3T' => [ 'Kyocera', 'E07K' ], - 'KDDI-KC3U' => [ 'Kyocera', 'K004' ], // KY004 - 'KDDI-KC3W' => [ 'Kyocera', 'mamorino' ], // KYY01 - 'KDDI-KC3X' => [ 'Kyocera', 'SA002' ], - 'KDDI-KC3Y' => [ 'Kyocera', 'K005' ], // KY005 - 'KDDI-KC3Z' => [ 'Kyocera', 'K006' ], // KY006 - 'KDDI-KC41' => [ 'Kyocera', 'K006' ], - 'KDDI-KC42' => [ 'Kyocera', 'K007' ], // KY007 - 'KDDI-KC43' => [ 'Kyocera', 'K008' ], // KY008 - 'KDDI-KC44' => [ 'Kyocera', 'mamorino2' ], // KYY02 - 'KDDI-KC45' => [ 'Kyocera', 'K010' ], // KY010 - 'KDDI-KC46' => [ 'Kyocera', 'K009' ], // KY009 - 'KDDI-KC47' => [ 'Kyocera', 'Mi-Look' ], - 'KDDI-KC48' => [ 'Kyocera', 'E10K' ], - 'KDDI-MA21' => [ 'Panasonic', 'C3003P' ], - 'KDDI-MA31' => [ 'Panasonic', 'W51P' ], - 'KDDI-MA32' => [ 'Panasonic', 'W52P' ], - 'KDDI-MA33' => [ 'Panasonic', 'W61P' ], - 'KDDI-MA34' => [ 'Panasonic', 'W62P' ], - 'KDDI-MA35' => [ 'Panasonic', 'P001' ], - 'KDDI-PT21' => [ 'Pantech', 'A1405PT' ], - 'KDDI-PT23' => [ 'Pantech', 'A1407PT' ], - 'KDDI-PT33' => [ 'Pantech', 'W61PT' ], - 'KDDI-PT34' => [ 'Pantech', 'W62PT' ], - 'KDDI-PT35' => [ 'Pantech', 'NS02' ], - 'KDDI-PT36' => [ 'Pantech', 'PT002' ], - 'KDDI-SA21' => [ 'Sanyo', 'A3011SA' ], - 'KDDI-SA22' => [ 'Sanyo', 'A3015SA' ], - 'KDDI-SA24' => [ 'Sanyo', 'A1302SA' ], - 'KDDI-SA25' => [ 'Sanyo', 'A1303SA' ], - 'KDDI-SA26' => [ 'Sanyo', 'A5503SA' ], - 'KDDI-SA27' => [ 'Sanyo', 'A5505SA' ], - 'KDDI-SA28' => [ 'Sanyo', 'A1305SA' ], - 'KDDI-SA29' => [ 'Sanyo', 'A5522SA' ], - 'KDDI-SA2A' => [ 'Sanyo', 'A5527SA' ], - 'KDDI-SA31' => [ 'Sanyo', 'W21SA' ], - 'KDDI-SA32' => [ 'Sanyo', 'W22SA' ], - 'KDDI-SA33' => [ 'Sanyo', 'W31SA' ], - 'KDDI-SA34' => [ 'Sanyo', 'W32SA' ], - 'KDDI-SA35' => [ 'Sanyo', 'W33SA' ], - 'KDDI-SA36' => [ 'Sanyo', 'W41SA' ], - 'KDDI-SA37' => [ 'Sanyo', 'E02SA' ], - 'KDDI-SA38' => [ 'Sanyo', 'W43SA' ], - 'KDDI-SA39' => [ 'Sanyo', 'W51SA' ], - 'KDDI-SA3A' => [ 'Sanyo', 'W52SA' ], - 'KDDI-SA3B' => [ 'Sanyo', 'W54SA' ], - 'KDDI-SA3C' => [ 'Sanyo', 'W61SA' ], - 'KDDI-SA3D' => [ 'Sanyo', 'W63SA' ], - 'KDDI-SA3E' => [ 'Sanyo', 'W64SA' ], - 'KDDI-SH31' => [ 'Sharp', 'W41SH' ], - 'KDDI-SH32' => [ 'Sharp', 'W51SH' ], - 'KDDI-SH33' => [ 'Sharp', 'W52SH' ], - 'KDDI-SH34' => [ 'Sharp', 'W61SH' ], - 'KDDI-SH35' => [ 'Sharp', 'W62SH' ], - 'KDDI-SH36' => [ 'Sharp', 'URBANO' ], // W63SH - 'KDDI-SH37' => [ 'Sharp', 'W64SH' ], - 'KDDI-SH38' => [ 'Sharp', 'SH001' ], - 'KDDI-SH39' => [ 'Sharp', 'E05SH' ], - 'KDDI-SH3A' => [ 'Sharp', 'E06SH' ], - 'KDDI-SH3B' => [ 'Sharp', 'SH002' ], - 'KDDI-SH3C' => [ 'Sharp', 'Sportio water beat' ], // SHY01 - 'KDDI-SH3D' => [ 'Sharp', 'SH003' ], - 'KDDI-SH3E' => [ 'Sharp', 'SH004' ], - 'KDDI-SH3F' => [ 'Sharp', 'SH005' ], - 'KDDI-SH3G' => [ 'Sharp', 'SH006' ], - 'KDDI-SH3H' => [ 'Sharp', 'SH007' ], - 'KDDI-SH3I' => [ 'Sharp', 'SH008' ], - 'KDDI-SH3J' => [ 'Sharp', 'SH009' ], - 'KDDI-SH3K' => [ 'Sharp', 'SH010' ], - 'KDDI-SH3L' => [ 'Sharp', 'SH011' ], - 'KDDI-SN21' => [ 'Sony Ericsson', 'A3014S' ], - 'KDDI-SN22' => [ 'Sony Ericsson', 'A1101S' ], - 'KDDI-SN23' => [ 'Sony Ericsson', 'A1301S' ], - 'KDDI-SN24' => [ 'Sony Ericsson', 'A5402S' ], - 'KDDI-SN25' => [ 'Sony Ericsson', 'A5404S' ], - 'KDDI-SN26' => [ 'Sony Ericsson', 'A1402S' ], - 'KDDI-SN28' => [ 'Sony Ericsson', 'A1402S II' ], - 'KDDI-SN31' => [ 'Sony Ericsson', 'W21S' ], - 'KDDI-SN32' => [ 'Sony Ericsson', 'W31S' ], - 'KDDI-SN33' => [ 'Sony Ericsson', 'W32S' ], - 'KDDI-SN34' => [ 'Sony Ericsson', 'W41S' ], - 'KDDI-SN35' => [ 'Sony Ericsson', 'EZ FeliCa' ], // W32S - 'KDDI-SN36' => [ 'Sony Ericsson', 'W42S' ], - 'KDDI-SN37' => [ 'Sony Ericsson', 'W43S' ], - 'KDDI-SN38' => [ 'Sony Ericsson', 'W44S' ], - 'KDDI-SN39' => [ 'Sony Ericsson', 'W51S' ], - 'KDDI-SN3A' => [ 'Sony Ericsson', 'W52S' ], - 'KDDI-SN3B' => [ 'Sony Ericsson', 'W53S' ], - 'KDDI-SN3C' => [ 'Sony Ericsson', 'W54S' ], - 'KDDI-SN3D' => [ 'Sony Ericsson', 'W61S' ], - 'KDDI-SN3E' => [ 'Sony Ericsson', 'W62S' ], - 'KDDI-SN3F' => [ 'Sony Ericsson', 're' ], // W63S - 'KDDI-SN3G' => [ 'Sony Ericsson', 'W64S' ], - 'KDDI-SN3H' => [ 'Sony Ericsson', 'Xmini' ], // W65S - 'KDDI-SN3I' => [ 'Sony Ericsson', 'Premier3' ], // SOY01 - 'KDDI-SN3J' => [ 'Sony Ericsson', 'S001' ], - 'KDDI-SN3L' => [ 'Sony Ericsson', 'BRAVIA Phone U1' ], // SOY02 - 'KDDI-SN3M' => [ 'Sony Ericsson', 'S002' ], - 'KDDI-SN3N' => [ 'Sony Ericsson', 'URBANO BARONE' ], // SOY03 - 'KDDI-SN3O' => [ 'Sony Ericsson', 'S003' ], - 'KDDI-SN3P' => [ 'Sony Ericsson', 'S004' ], - 'KDDI-SN3Q' => [ 'Sony Ericsson', 'S005' ], - 'KDDI-SN3R' => [ 'Sony Ericsson', 'URBANO MOND' ], // SOY04 - 'KDDI-SN3S' => [ 'Sony Ericsson', 'S006' ], - 'KDDI-SN3U' => [ 'Sony Ericsson', 'S007' ], - 'KDDI-SN3V' => [ 'Sony Ericsson', 'URBANO AFFARE' ], - 'KDDI-ST21' => [ 'Sanyo', 'A5306ST' ], - 'KDDI-ST23' => [ 'Sanyo', 'A5405SA' ], - 'KDDI-ST24' => [ 'Sanyo', 'A5507SA' ], - 'KDDI-ST25' => [ 'Sanyo', 'talby' ], // A5508SA - 'KDDI-ST26' => [ 'Sanyo', 'Sweets' ], // A5510SA - 'KDDI-ST27' => [ 'Sanyo', 'A5514SA' ], - 'KDDI-ST28' => [ 'Sanyo', 'A5518SA' ], - 'KDDI-ST29' => [ 'Sanyo', 'Sweets pure' ], // A5519SA - 'KDDI-ST2A' => [ 'Sanyo', 'A5520SA' ], - 'KDDI-ST2C' => [ 'Sanyo', 'Sweets cute' ], // A5524SA - 'KDDI-ST2D' => [ 'Sanyo', 'A5525SA' ], - 'KDDI-ST31' => [ 'Sanyo', 'W42SA' ], - 'KDDI-ST32' => [ 'Sanyo', 'W53SA' ], - 'KDDI-ST34' => [ 'Sanyo', 'W62SA' ], - 'KDDI-TS21' => [ 'Toshiba', 'C5001T' ], - 'KDDI-TS22' => [ 'Toshiba', 'A3013T' ], - 'KDDI-TS23' => [ 'Toshiba', 'A5301T' ], - 'KDDI-TS24' => [ 'Toshiba', 'A5304T' ], - 'KDDI-TS25' => [ 'Toshiba', 'A1304T' ], - 'KDDI-TS26' => [ 'Toshiba', 'A5501T' ], - 'KDDI-TS27' => [ 'Toshiba', 'A5504T' ], - 'KDDI-TS28' => [ 'Toshiba', 'A5506T' ], - 'KDDI-TS29' => [ 'Toshiba', 'A5509T' ], - 'KDDI-TS2A' => [ 'Toshiba', 'A5511T' ], - 'KDDI-TS2B' => [ 'Toshiba', 'A5516T' ], - 'KDDI-TS2C' => [ 'Toshiba', 'A5517T' ], - 'KDDI-TS2D' => [ 'Toshiba', 'A5523T' ], - 'KDDI-TS2E' => [ 'Toshiba', 'A5529T' ], - 'KDDI-TS31' => [ 'Toshiba', 'W21T' ], - 'KDDI-TS32' => [ 'Toshiba', 'W31T' ], - 'KDDI-TS33' => [ 'Toshiba', 'W32T' ], - 'KDDI-TS34' => [ 'Toshiba', 'W41T' ], - 'KDDI-TS35' => [ 'Toshiba', 'neon' ], // W42T - 'KDDI-TS36' => [ 'Toshiba', 'W43T' ], - 'KDDI-TS37' => [ 'Toshiba', 'W44T' ], - 'KDDI-TS38' => [ 'Toshiba', 'W45T' ], - 'KDDI-TS39' => [ 'Toshiba', 'DRAPE' ], // W46T - 'KDDI-TS3A' => [ 'Toshiba', 'W47T' ], - 'KDDI-TS3B' => [ 'Toshiba', 'W51T' ], - 'KDDI-TS3C' => [ 'Toshiba', 'W52T' ], - 'KDDI-TS3D' => [ 'Toshiba', 'W53T' ], - 'KDDI-TS3E' => [ 'Toshiba', 'W54T' ], - 'KDDI-TS3G' => [ 'Toshiba', 'W55T' ], - 'KDDI-TS3H' => [ 'Toshiba', 'W56T' ], - 'KDDI-TS3I' => [ 'Toshiba', 'W61T' ], - 'KDDI-TS3J' => [ 'Toshiba', 'W62T' ], - 'KDDI-TS3K' => [ 'Toshiba', 'Sportio' ], // W63T - 'KDDI-TS3L' => [ 'Toshiba', 'W64T' ], - 'KDDI-TS3M' => [ 'Toshiba', 'W65T' ], - 'KDDI-TS3N' => [ 'Toshiba', 'T001' ], - 'KDDI-TS3O' => [ 'Toshiba', 'biblio' ], // TSY01 - 'KDDI-TS3P' => [ 'Toshiba', 'T002' ], - 'KDDI-TS3R' => [ 'Toshiba', 'T003' ], - 'KDDI-TS3S' => [ 'Toshiba', 'T004' ], - 'KDDI-TS3T' => [ 'Toshiba', 'E08T' ], - 'KDDI-TS3V' => [ 'Toshiba', 'T005' ], - 'KDDI-TS3X' => [ 'Toshiba', 'T006' ], - 'KDDI-TS3Y' => [ 'Toshiba', 'T008' ], - 'KDDI-TS3Z' => [ 'Toshiba', 'T007' ], - 'KDDI-TS41' => [ 'Toshiba', 'E09F' ], ]; diff --git a/data/models-kddi.php b/data/models-kddi.php new file mode 100644 index 0000000..36c1853 --- /dev/null +++ b/data/models-kddi.php @@ -0,0 +1,353 @@ + [ 'iida', 'misora' ], // KYX02 by Kyocera + 'KC3S' => [ 'iida', 'PRISMOID' ], // KYX03 by Kyocera + 'KC3V' => [ 'iida', 'lotta' ], // KYX04 by Kyocera + 'ST22' => [ 'iida', 'INFOBAR' ], // A5307ST by Sanyo + 'ST33' => [ 'iida', 'INFOBAR 2' ], // W55SA by Sanyo + 'SN3K' => [ 'iida', 'G9' ], // SOX01 by Sony Ericsson + 'SN3T' => [ 'iida', 'G11' ], // SOX02 by Sony Ericsson + 'TS3Q' => [ 'iida', 'PLY' ], // TSX04 by Toshiba + 'TS3U' => [ 'iida', 'LIGHT POOL' ], // by Toshiba + 'TS3W' => [ 'iida', 'X-RAY' ], // by Toshiba + + 'CA11' => [ 'Casio', 'C303CA' ], + 'CA12' => [ 'Casio', 'C311CA' ], + 'CA13' => [ 'Casio', 'C409CA' ], + 'CA14' => [ 'Casio', 'C452CA' ], + 'CA21' => [ 'Casio', 'A3012CA' ], + 'CA22' => [ 'Casio', 'A5302CA' ], + 'CA23' => [ 'Casio', 'A5401CA' ], + 'CA24' => [ 'Casio', 'A5403CA' ], + 'CA25' => [ 'Casio', 'A5406CA' ], + 'CA26' => [ 'Casio', 'A5407CA' ], + 'CA27' => [ 'Casio', 'A5512CA' ], + 'CA28' => [ 'Casio', 'GzOne Type-R A5513CA' ], + 'CA31' => [ 'Casio', 'W21CA' ], + 'CA32' => [ 'Casio', 'W31CA' ], + 'CA33' => [ 'Casio', 'W41CA' ], + 'CA34' => [ 'Casio', 'W42CA' ], + 'CA35' => [ 'Casio', 'W43CA' ], + 'CA36' => [ 'Casio', 'E03CA' ], + 'CA37' => [ 'Casio', 'W51CA' ], + 'CA38' => [ 'Casio', 'W52CA' ], + 'CA39' => [ 'Casio', 'W53CA' ], + 'CA3A' => [ 'Casio', 'W61CA' ], + 'CA3B' => [ 'Casio', 'W62CA' ], + 'CA3C' => [ 'Casio', 'W63CA' ], + 'CA3D' => [ 'Casio', 'CA001' ], + 'CA3E' => [ 'Casio', 'CA002' ], + 'CA3F' => [ 'Casio', 'CA003' ], + 'CA3G' => [ 'Casio', 'CA004' ], + 'CA3H' => [ 'Casio', 'CA005' ], + 'CA3I' => [ 'Casio', 'GzOne Type-X CAY01' ], + 'CA3J' => [ 'Casio', 'CA006' ], + 'CA3K' => [ 'Casio', 'CA007' ], + 'DN01' => [ 'Denso', 'C202DE' ], + 'DN11' => [ 'Denso', 'C402DE' ], + 'ERK0' => [ 'Ericsson', 'R280' ], + 'FJ31' => [ 'Fujitsu', 'F001' ], + 'HI01' => [ 'Hitachi', 'C201H' ], + 'HI02' => [ 'Hitachi', 'C201H' ], + 'HI11' => [ 'Hitachi', 'C302H' ], + 'HI12' => [ 'Hitachi', 'C309H' ], + 'HI13' => [ 'Hitachi', 'C407H' ], + 'HI14' => [ 'Hitachi', 'C451H' ], + 'HI21' => [ 'Hitachi', 'C3001H' ], + 'HI23' => [ 'Hitachi', 'A5303H' ], + 'HI24' => [ 'Hitachi', 'A5303H II' ], + 'HI31' => [ 'Hitachi', 'W11H' ], + 'HI32' => [ 'Hitachi', 'W21H' ], + 'HI33' => [ 'Hitachi', 'W22H' ], + 'HI34' => [ 'Hitachi', 'PENCK W31H' ], + 'HI35' => [ 'Hitachi', 'W32H' ], + 'HI36' => [ 'Hitachi', 'W41H' ], + 'HI37' => [ 'Hitachi', 'W42H' ], + 'HI38' => [ 'Hitachi', 'W43H' ], + 'HI39' => [ 'Hitachi', 'W51H' ], + 'HI3A' => [ 'Hitachi', 'W52H' ], + 'HI3B' => [ 'Hitachi', 'W53H' ], + 'HI3C' => [ 'Hitachi', 'W61H' ], + 'HI3D' => [ 'Hitachi', 'W62H' ], + 'HI3E' => [ 'Hitachi', 'W63H' ], + 'HI3F' => [ 'Hitachi', 'H001' ], // HI001 + 'HI3G' => [ 'Hitachi', 'Mobile Hi-Vision CAM Wooo HIY01' ], + 'HI3H' => [ 'Hitachi', 'beskey HIY02' ], + 'KC11' => [ 'Kyocera', 'C307K' ], + 'KC12' => [ 'Kyocera', 'C313K' ], + 'KC13' => [ 'Kyocera', 'C414K' ], + 'KC14' => [ 'Kyocera', 'A1012K' ], + 'KC15' => [ 'Kyocera', 'A1013K' ], + 'KC21' => [ 'Kyocera', 'C3002K' ], + 'KC22' => [ 'Kyocera', 'A5305K' ], + 'KC23' => [ 'Kyocera', 'A1401K' ], + 'KC24' => [ 'Kyocera', 'A5502K' ], + 'KC25' => [ 'Kyocera', 'A5502K' ], + 'KC26' => [ 'Kyocera', 'A1403K' ], + 'KC27' => [ 'Kyocera', 'A5515K' ], + 'KC28' => [ 'Kyocera', 'A5521K' ], + 'KC29' => [ 'Kyocera', 'A5526K' ], + 'KC2A' => [ 'Kyocera', 'A5528K' ], + 'KC31' => [ 'Kyocera', 'W11K' ], + 'KC32' => [ 'Kyocera', 'W21K' ], + 'KC33' => [ 'Kyocera', 'W31K' ], + 'KC34' => [ 'Kyocera', 'W32K' ], + 'KC35' => [ 'Kyocera', 'W41K' ], + 'KC36' => [ 'Kyocera', 'W42K' ], + 'KC37' => [ 'Kyocera', 'W43K' ], + 'KC38' => [ 'Kyocera', 'W44K' ], + 'KC39' => [ 'Kyocera', 'W51K' ], + 'KC3A' => [ 'Kyocera', 'MEDIA SKIN W52K' ], + 'KC3B' => [ 'Kyocera', 'W53K/W64K' ], + 'KC3D' => [ 'Kyocera', 'W61K' ], + 'KC3E' => [ 'Kyocera', 'W44K II' ], + 'KC3G' => [ 'Kyocera', 'W62K' ], + 'KC3H' => [ 'Kyocera', 'W63K' ], + 'KC3I' => [ 'Kyocera', 'W65K' ], + 'KC3K' => [ 'Kyocera', 'W63K' ], + 'KC3M' => [ 'Kyocera', 'K001' ], // KY001 + 'KC3N' => [ 'Kyocera', 'NS01' ], // KYX01 + 'KC3O' => [ 'Kyocera', 'K002' ], // KY002 + 'KC3P' => [ 'Kyocera', 'K003' ], // KY003 + 'KC3R' => [ 'Kyocera', 'SA001' ], + 'KC3T' => [ 'Kyocera', 'E07K' ], + 'KC3U' => [ 'Kyocera', 'K004' ], // KY004 + 'KC3W' => [ 'Kyocera', 'mamorino' ], // KYY01 + 'KC3X' => [ 'Kyocera', 'SA002' ], + 'KC3Y' => [ 'Kyocera', 'K005' ], // KY005 + 'KC3Z' => [ 'Kyocera', 'K006' ], // KY006 + 'KC41' => [ 'Kyocera', 'K006' ], + 'KC42' => [ 'Kyocera', 'K007' ], // KY007 + 'KC43' => [ 'Kyocera', 'K008' ], // KY008 + 'KC44' => [ 'Kyocera', 'mamorino 2' ], // KYY02 + 'KC45' => [ 'Kyocera', 'K010' ], // KY010 + 'KC46' => [ 'Kyocera', 'K009' ], // KY009 + 'KC47' => [ 'Kyocera', 'Mi-Look' ], + 'KC48' => [ 'Kyocera', 'E10K' ], + 'KC4A' => [ 'Kyocera', 'K011' ], + 'KCC1' => [ 'Kyocera', 'D303K' ], + 'KCC2' => [ 'Kyocera', 'D304K' ], + 'KCI1' => [ 'Kyocera', '703G' ], + 'KCI2' => [ 'Kyocera', '702G' ], + 'KCT1' => [ 'Kyocera', 'TK01' ], + 'KCT2' => [ 'Kyocera', 'TK02' ], + 'KCT3' => [ 'Kyocera', 'TK02' ], + 'KCT4' => [ 'Kyocera', 'TK03' ], + 'KCT5' => [ 'Kyocera', 'TK04' ], + 'KCT6' => [ 'Kyocera', 'TK05' ], + 'KCT7' => [ 'Kyocera', 'TK11' ], + 'KCT8' => [ 'Kyocera', 'TK12' ], + 'KCT9' => [ 'Kyocera', 'TK21' ], + 'KCTA' => [ 'Kyocera', 'TK22' ], + 'KCTB' => [ 'Kyocera', 'TK23' ], + 'KCTC' => [ 'Kyocera', 'TK31' ], + 'MA11' => [ 'Panasonic', 'C308P' ], + 'MA12' => [ 'Panasonic', 'C308P' ], + 'MA13' => [ 'Panasonic', 'C408P' ], + 'MA21' => [ 'Panasonic', 'C3003P' ], + 'MA31' => [ 'Panasonic', 'W51P' ], + 'MA32' => [ 'Panasonic', 'W52P' ], + 'MA33' => [ 'Panasonic', 'W61P' ], + 'MA34' => [ 'Panasonic', 'W62P' ], + 'MA35' => [ 'Panasonic', 'P001' ], + 'MAC1' => [ 'Panasonic', 'D305P' ], + 'MAC2' => [ 'Panasonic', 'D305P' ], + 'MAI1' => [ 'Panasonic', '704G' ], + 'MAI2' => [ 'Panasonic', '704G' ], + 'MAT1' => [ 'Panasonic', 'TP01' ], + 'MAT2' => [ 'Panasonic', 'TP01' ], + 'MAT3' => [ 'Panasonic', 'TP11' ], + 'MIT1' => [ 'Mitsubishi', 'TD11' ], + 'PT21' => [ 'Pantech', 'A1405PT' ], + 'PT23' => [ 'Pantech', 'A1407PT' ], + 'PT33' => [ 'Pantech', 'W61PT' ], + 'PT34' => [ 'Pantech', 'W62PT' ], + 'PT35' => [ 'Pantech', 'NS02' ], + 'PT36' => [ 'Pantech', 'PT002' ], + 'SA21' => [ 'Sanyo', 'A3011SA' ], + 'SA22' => [ 'Sanyo', 'A3015SA' ], + 'SA24' => [ 'Sanyo', 'A1302SA' ], + 'SA25' => [ 'Sanyo', 'A1303SA' ], + 'SA26' => [ 'Sanyo', 'A5503SA' ], + 'SA27' => [ 'Sanyo', 'A5505SA' ], + 'SA28' => [ 'Sanyo', 'A1305SA' ], + 'SA29' => [ 'Sanyo', 'A5522SA' ], + 'SA2A' => [ 'Sanyo', 'A5527SA' ], + 'SA31' => [ 'Sanyo', 'W21SA' ], + 'SA32' => [ 'Sanyo', 'W22SA' ], + 'SA33' => [ 'Sanyo', 'W31SA' ], + 'SA34' => [ 'Sanyo', 'W32SA' ], + 'SA35' => [ 'Sanyo', 'W33SA' ], + 'SA36' => [ 'Sanyo', 'W41SA' ], + 'SA37' => [ 'Sanyo', 'E02SA' ], + 'SA38' => [ 'Sanyo', 'W43SA' ], + 'SA39' => [ 'Sanyo', 'W51SA' ], + 'SA3A' => [ 'Sanyo', 'W52SA' ], + 'SA3B' => [ 'Sanyo', 'W54SA' ], + 'SA3C' => [ 'Sanyo', 'W61SA' ], + 'SA3D' => [ 'Sanyo', 'W63SA' ], + 'SA3E' => [ 'Sanyo', 'W64SA' ], + 'SY12' => [ 'Sanyo', 'C401SA' ], + 'SY13' => [ 'Sanyo', 'C405SA' ], + 'SY14' => [ 'Sanyo', 'C412SA' ], + 'SY15' => [ 'Sanyo', 'C1001SA' ], + 'SYC1' => [ 'Sanyo', 'D301SA' ], + 'SYT1' => [ 'Sanyo', 'TS01' ], + 'SYT2' => [ 'Sanyo', 'TS02' ], + 'SYT3' => [ 'Sanyo', 'TS11' ], + 'SYT4' => [ 'Sanyo', 'TS31' ], + 'SH31' => [ 'Sharp', 'W41SH' ], + 'SH32' => [ 'Sharp', 'W51SH' ], + 'SH33' => [ 'Sharp', 'W52SH' ], + 'SH34' => [ 'Sharp', 'W61SH' ], + 'SH35' => [ 'Sharp', 'W62SH' ], + 'SH36' => [ 'Sharp', 'URBANO W63SH' ], + 'SH37' => [ 'Sharp', 'W64SH' ], + 'SH38' => [ 'Sharp', 'SH001' ], + 'SH39' => [ 'Sharp', 'E05SH' ], + 'SH3A' => [ 'Sharp', 'E06SH' ], + 'SH3B' => [ 'Sharp', 'SH002' ], + 'SH3C' => [ 'Sharp', 'Sportio water beat SHY01' ], + 'SH3D' => [ 'Sharp', 'SH003' ], + 'SH3E' => [ 'Sharp', 'SH004' ], + 'SH3F' => [ 'Sharp', 'SH005' ], + 'SH3G' => [ 'Sharp', 'SH006' ], + 'SH3H' => [ 'Sharp', 'SH007' ], + 'SH3I' => [ 'Sharp', 'SH008' ], + 'SH3J' => [ 'Sharp', 'SH009' ], + 'SH3K' => [ 'Sharp', 'SH010' ], + 'SH3L' => [ 'Sharp', 'SH011' ], + 'SN11' => [ 'Sony', 'C305S' ], + 'SN13' => [ 'Sony', 'C406S' ], + 'SN14' => [ 'Sony', 'C404S' ], + 'SN15' => [ 'Sony', 'C413S' ], + 'SN16' => [ 'Sony', 'C413S' ], + 'SN17' => [ 'Sony Ericsson', 'C1002S' ], + 'SN21' => [ 'Sony Ericsson', 'A3014S' ], + 'SN22' => [ 'Sony Ericsson', 'A1101S' ], + 'SN23' => [ 'Sony Ericsson', 'A1301S' ], + 'SN24' => [ 'Sony Ericsson', 'A5402S' ], + 'SN25' => [ 'Sony Ericsson', 'A5404S' ], + 'SN26' => [ 'Sony Ericsson', 'A1402S' ], + 'SN27' => [ 'Sony Ericsson', 'A1402S II' ], + 'SN28' => [ 'Sony Ericsson', 'A1402S II' ], + 'SN29' => [ 'Sony Ericsson', 'A1404S' ], + 'SN31' => [ 'Sony Ericsson', 'W21S' ], + 'SN32' => [ 'Sony Ericsson', 'W31S' ], + 'SN33' => [ 'Sony Ericsson', 'W32S' ], + 'SN34' => [ 'Sony Ericsson', 'W41S' ], + 'SN35' => [ 'Sony Ericsson', 'EZ FeliCa W32S' ], + 'SN36' => [ 'Sony Ericsson', 'W42S' ], + 'SN37' => [ 'Sony Ericsson', 'W43S' ], + 'SN38' => [ 'Sony Ericsson', 'W44S' ], + 'SN39' => [ 'Sony Ericsson', 'W51S' ], + 'SN3A' => [ 'Sony Ericsson', 'W52S' ], + 'SN3B' => [ 'Sony Ericsson', 'W53S' ], + 'SN3C' => [ 'Sony Ericsson', 'W54S' ], + 'SN3D' => [ 'Sony Ericsson', 'W61S' ], + 'SN3E' => [ 'Sony Ericsson', 'W62S' ], + 'SN3F' => [ 'Sony Ericsson', 're W63S' ], + 'SN3G' => [ 'Sony Ericsson', 'W64S' ], + 'SN3H' => [ 'Sony Ericsson', 'Xmini W65S' ], + 'SN3I' => [ 'Sony Ericsson', 'Premier3 SOY01' ], + 'SN3J' => [ 'Sony Ericsson', 'S001' ], + 'SN3L' => [ 'Sony Ericsson', 'BRAVIA Phone U1 SOY02' ], + 'SN3M' => [ 'Sony Ericsson', 'S002' ], + 'SN3N' => [ 'Sony Ericsson', 'URBANO BARONE SOY03' ], + 'SN3O' => [ 'Sony Ericsson', 'S003' ], + 'SN3P' => [ 'Sony Ericsson', 'S004' ], + 'SN3Q' => [ 'Sony Ericsson', 'S005' ], + 'SN3R' => [ 'Sony Ericsson', 'URBANO MOND SOY04' ], + 'SN3S' => [ 'Sony Ericsson', 'S006' ], + 'SN3U' => [ 'Sony Ericsson', 'S007' ], + 'SN3V' => [ 'Sony Ericsson', 'URBANO AFFARE SOY05' ], + 'ST11' => [ 'Sanyo', 'C403ST' ], + 'ST12' => [ 'Sanyo', 'C411ST' ], + 'ST13' => [ 'Sanyo', 'A1011ST' ], + 'ST14' => [ 'Sanyo', 'A1014ST' ], + 'ST21' => [ 'Sanyo', 'A5306ST' ], + 'ST23' => [ 'Sanyo', 'A5405SA' ], + 'ST24' => [ 'Sanyo', 'A5507SA' ], + 'ST25' => [ 'Sanyo', 'talby A5508SA' ], + 'ST26' => [ 'Sanyo', 'Sweets A5510SA' ], + 'ST27' => [ 'Sanyo', 'A5514SA' ], + 'ST28' => [ 'Sanyo', 'A5518SA' ], + 'ST29' => [ 'Sanyo', 'Sweets pure A5519SA' ], + 'ST2A' => [ 'Sanyo', 'A5520SA' ], + 'ST2C' => [ 'Sanyo', 'Sweets cute A5524SA' ], + 'ST2D' => [ 'Sanyo', 'A5525SA' ], + 'ST31' => [ 'Sanyo', 'W42SA' ], + 'ST32' => [ 'Sanyo', 'W53SA' ], + 'ST34' => [ 'Sanyo', 'W62SA' ], + 'SY01' => [ 'Sanyo', 'SCP-4000' ], + 'SY02' => [ 'Sanyo', 'SCP-4500' ], + 'SY03' => [ 'Sanyo', 'SCP-5000' ], + 'SY11' => [ 'Sanyo', 'C304SA' ], + 'SY12' => [ 'Sanyo', 'C401SA' ], + 'SY13' => [ 'Sanyo', 'C405SA' ], + 'SY14' => [ 'Sanyo', 'C412SA' ], + 'SY15' => [ 'Sanyo', 'C1001SA' ], + 'TS01' => [ 'Toshiba', 'IS02' ], + 'TS11' => [ 'Toshiba', 'C301T' ], + 'TS12' => [ 'Toshiba', 'C310T' ], + 'TS13' => [ 'Toshiba', 'C410T' ], + 'TS14' => [ 'Toshiba', 'C415T' ], + 'TS21' => [ 'Toshiba', 'C5001T' ], + 'TS22' => [ 'Toshiba', 'A3013T' ], + 'TS23' => [ 'Toshiba', 'A5301T' ], + 'TS24' => [ 'Toshiba', 'A5304T' ], + 'TS25' => [ 'Toshiba', 'A1304T' ], + 'TS26' => [ 'Toshiba', 'A5501T' ], + 'TS27' => [ 'Toshiba', 'A5504T' ], + 'TS28' => [ 'Toshiba', 'A5506T' ], + 'TS29' => [ 'Toshiba', 'A5509T' ], + 'TS2A' => [ 'Toshiba', 'A5511T' ], + 'TS2B' => [ 'Toshiba', 'A5516T' ], + 'TS2C' => [ 'Toshiba', 'A5517T' ], + 'TS2D' => [ 'Toshiba', 'A5523T' ], + 'TS2E' => [ 'Toshiba', 'A5529T' ], + 'TS31' => [ 'Toshiba', 'W21T' ], + 'TS32' => [ 'Toshiba', 'W31T' ], + 'TS33' => [ 'Toshiba', 'W32T' ], + 'TS34' => [ 'Toshiba', 'W41T' ], + 'TS35' => [ 'Toshiba', 'neon W42T' ], + 'TS36' => [ 'Toshiba', 'W43T' ], + 'TS37' => [ 'Toshiba', 'W44T' ], + 'TS38' => [ 'Toshiba', 'W45T' ], + 'TS39' => [ 'Toshiba', 'DRAPE W46T' ], + 'TS3A' => [ 'Toshiba', 'W47T' ], + 'TS3B' => [ 'Toshiba', 'W51T' ], + 'TS3C' => [ 'Toshiba', 'W52T' ], + 'TS3D' => [ 'Toshiba', 'W53T' ], + 'TS3E' => [ 'Toshiba', 'W54T' ], + 'TS3G' => [ 'Toshiba', 'W55T' ], + 'TS3H' => [ 'Toshiba', 'W56T' ], + 'TS3I' => [ 'Toshiba', 'W61T' ], + 'TS3J' => [ 'Toshiba', 'W62T' ], + 'TS3K' => [ 'Toshiba', 'Sportio W63T' ], + 'TS3L' => [ 'Toshiba', 'W64T' ], + 'TS3M' => [ 'Toshiba', 'W65T' ], + 'TS3N' => [ 'Toshiba', 'T001' ], + 'TS3O' => [ 'Toshiba', 'biblio TSY01' ], + 'TS3P' => [ 'Toshiba', 'T002' ], + 'TS3R' => [ 'Toshiba', 'T003' ], + 'TS3S' => [ 'Toshiba', 'T004' ], + 'TS3T' => [ 'Toshiba', 'E08T' ], + 'TS3V' => [ 'Toshiba', 'T005' ], + 'TS3X' => [ 'Toshiba', 'T006' ], + 'TS3Y' => [ 'Toshiba', 'T008' ], + 'TS3Z' => [ 'Toshiba', 'T007' ], + 'TS41' => [ 'Toshiba', 'E09F' ], + 'TSC1' => [ 'Toshiba', 'D302T' ], + 'TSI1' => [ 'Toshiba', '701G' ], + 'TST1' => [ 'Toshiba', 'TT01' ], + 'TST2' => [ 'Toshiba', 'TT02' ], + 'TST3' => [ 'Toshiba', 'TT03' ], + 'TST4' => [ 'Toshiba', 'TT11' ], + 'TST5' => [ 'Toshiba', 'TT21' ], + 'TST6' => [ 'Toshiba', 'TT22' ], + 'TST7' => [ 'Toshiba', 'TT31' ], +]; diff --git a/data/models-symbian.php b/data/models-symbian.php index 58a879e..c31d924 100644 --- a/data/models-symbian.php +++ b/data/models-symbian.php @@ -12,7 +12,7 @@ 'A920' => [ 'Motorola', 'A920', 'flag' => Flag::UIQ ], 'A925' => [ 'Motorola', 'A925', 'flag' => Flag::UIQ ], 'A1000' => [ 'Motorola', 'A1000', 'flag' => Flag::UIQ ], - 'M1000' => [ 'Motorola', 'M1000', 'flag' => Flag::UIQ ], + 'M1000' => [ 'Motorola', 'M1000', 'flag' => Flag::UIQ, 'carrier' => 'DoCoMo' ], 'G700' => [ 'Sony Ericsson', 'G700', 'flag' => Flag::UIQ ], 'G900' => [ 'Sony Ericsson', 'G900', 'flag' => Flag::UIQ ], 'M600i' => [ 'Sony Ericsson', 'M600', 'flag' => Flag::UIQ ], diff --git a/data/models-wm.php b/data/models-wm.php index a0a1dbd..db87d72 100644 --- a/data/models-wm.php +++ b/data/models-wm.php @@ -8,9 +8,9 @@ 'F900' => [ 'Acer', 'Tempo F900' ], 'S200' => [ 'Acer', 'neoTouch S200' ], 'P400' => [ 'Acer', 'neoTouch P400' ], + '-GalaxyII' => [ 'Asus', 'Galaxy II' ], 'Bird_T900' => [ 'Bird', 'T900' ], 'Coolpad F800' => [ 'Coolpad', 'F800' ], - 'T-01A!' => [ 'DoCoMo', 'PRO series T-01A' ], 'T5388' => [ 'Dopod', 'Touch Diamond 2' ], 'garmin-asus-Nuvifone-M10' => [ 'Garmin-Asus', 'Nuvifone M10' ], 'GIGABYTE-MS800' => [ 'Gigabyte', 'GSmart MS800' ], @@ -84,14 +84,12 @@ 'SGH-i780' => [ 'Samsung', 'i780 Mirage' ], 'SGH-i900' => [ 'Samsung', 'i900 Omnia' ], 'SCH-i920' => [ 'Samsung', 'i920 Omnia II' ], - 'WS007SH' => [ 'Sharp', 'W-ZERO3' ], 'M1i' => [ 'Sony Ericsson', 'Aspen' ], 'X1' => [ 'Sony Ericsson', 'Xperia X1' ], 'X1[ia]!' => [ 'Sony Ericsson', 'Xperia X1' ], 'X2' => [ 'Sony Ericsson', 'Xperia X2' ], 'X2[ia]!' => [ 'Sony Ericsson', 'Xperia X2' ], 'TG01' => [ 'Toshiba', 'TG01' ], - 'X02T' => [ 'Toshiba', 'Dynapocket X02T' ], 'T-Mobile Cleopatra' => [ 'T-Mobile', 'Shadow II' ], 'XV6175' => [ 'UTStarcom', 'XV6175' ], 'XV6175.1' => [ 'UTStarcom', 'XV6175' ], @@ -99,4 +97,17 @@ 'v1240' => [ 'Vodafone', 'VDA IV' ], 'v1640' => [ 'Vodafone', 'VPA IV' ], 'HTC VPACompactIV' => [ 'Vodafone', 'VPA Compact IV' ], + + 'WS007SH' => [ 'Sharp', 'W-ZERO3 WS007SH', 'carrier' => 'Willcom' ], + 'S01SH' => [ 'Sharp', 'EM·ONE S01SH', 'carrier' => 'EMOBILE' ], + 'S01SH2' => [ 'Sharp', 'EM·ONE alpha S01SH2', 'carrier' => 'EMOBILE' ], + 'T-01A!' => [ 'Toshiba', 'T-01A', 'carrier' => 'DoCoMo' ], + 'X01T' => [ 'Toshiba', 'G900 X01T', 'carrier' => 'Softbank' ], + 'X02T' => [ 'Toshiba', 'dynapocket X02T', 'carrier' => 'Softbank' ], + 'X01HT' => [ 'HTC', 'TyTN X01HT', 'carrier' => 'Softbank' ], + 'X02HT' => [ 'HTC', 'S630 X02HT', 'carrier' => 'Softbank' ], + 'X03HT' => [ 'HTC', 'S730 X03HT', 'carrier' => 'Softbank' ], + 'X04HT' => [ 'HTC', 'TOUCH DIAMOND X04HT', 'carrier' => 'Softbank' ], + 'X05HT' => [ 'HTC', 'TOUCH PRO X05HT', 'carrier' => 'Softbank' ], + 'X01SC' => [ 'Samsung', 'OMNIA Pro X01SC', 'carrier' => 'Softbank' ], ]; diff --git a/data/models-wp.php b/data/models-wp.php index c2e26b5..57a87e9 100644 --- a/data/models-wp.php +++ b/data/models-wp.php @@ -260,6 +260,7 @@ 'Taylor' => [ 'Samsung', 'Taylor' ], 'S606' => [ 'TCL', 'Horizon S606' ], 'TSUNAGI' => [ 'Toshiba', 'Tsunagi' ], + 'TG01' => [ 'Toshiba', 'TG01' ], 'MI4' => [ 'Xiaomi', 'Mi 4' ], 'Win-Q900S' => [ 'XOLO', 'Win Q900s' ], 'Win Q1000' => [ 'XOLO', 'Win Q1000' ], diff --git a/data/profiles.php b/data/profiles.php index 55171c1..0336111 100644 --- a/data/profiles.php +++ b/data/profiles.php @@ -199,6 +199,7 @@ 'http://www-ccpp.tcl-ta.com/files/ALCATELOneTouch6015X.xml' => [ 'Alcatel', 'One Touch Fire E', 'Firefox OS', DeviceType::MOBILE ], 'http://www-ccpp.tcl-ta.com/files/ALCATELOneTouch6015X_v2.0.xml' => [ 'Alcatel', 'One Touch Fire E', 'Firefox OS', DeviceType::MOBILE ], 'http://www-ccpp.tcl-ta.com/files/ALCATEL_ONETOUCH_Flash_Plus.xml' => [ 'Alcatel', 'One Touch Flash Plus', 'Android', DeviceType::MOBILE ], + 'http://www-ccpp.tcl-ta.com/files/7048A.xml' => [ 'Alcatel', 'One Touch Go Play', 'Android', DeviceType::MOBILE ], 'http://www-ccpp.tcl-ta.com/files/7048X.xml' => [ 'Alcatel', 'One Touch Go Play', 'Android', DeviceType::MOBILE ], 'http://www-ccpp.tcl-ta.com/files/ONE_TOUCH_8020E.xml' => [ 'Alcatel', 'One Touch Hero', 'Android', DeviceType::MOBILE ], 'http://www-ccpp.tcl-ta.com/files/7055A.xml' => [ 'Alcatel', 'One Touch Hero 2C', 'Android', DeviceType::MOBILE ], @@ -267,6 +268,7 @@ 'http://www-ccpp.tcl-ta.com/files/ONE_TOUCH_4014D.xml' => [ 'Alcatel', 'One Touch Pixi 3 (4)', 'Android', DeviceType::MOBILE ], 'http://www-ccpp.tcl-ta.com/files/5065D.xml' => [ 'Alcatel', 'One Touch Pixi 3 (5)', 'Android', DeviceType::MOBILE ], 'http://www-ccpp.tcl-ta.com/files/5054O.xml' => [ 'Alcatel', 'One Touch Pixi 3 (5.5)', 'Android', DeviceType::MOBILE ], + 'http://www-ccpp.tcl-ta.com/files/5054S.xml' => [ 'Alcatel', 'One Touch Pixi 3 (5.5)', 'Android', DeviceType::MOBILE ], 'http://www-ccpp.tcl-ta.com/files/5054X.xml' => [ 'Alcatel', 'One Touch Pixi 3 (5.5)', 'Android', DeviceType::MOBILE ], 'http://www-ccpp.tcl-ta.com/files/4045A.xml' => [ 'Alcatel', 'One Touch Pop 2 (4)', 'Android', DeviceType::MOBILE ], 'http://www-ccpp.tcl-ta.com/files/5042A.xml' => [ 'Alcatel', 'One Touch Pop 2 (4.5)', 'Android', DeviceType::MOBILE ], @@ -471,6 +473,7 @@ 'http://device.sprintpcs.com/Audiovox/PM8920KIT/T120SP0T19.rdf' => [ 'Audiovox', 'PM-8920', null, DeviceType::MOBILE ], 'http://www.zte.com.cn/mobile/uaprof/ZTE_Blade_Q_Maxi.xml' => [ 'Avea', 'inTouch 3 Large', 'Android', DeviceType::MOBILE ], 'http://www.zte.com.cn/mobile/uaprof/Avea_inTouch_4.xml' => [ 'Avea', 'inTouch 4', 'Android', DeviceType::TABLET ], + 'http://www.jeekomi.com/hw/Avvio489_WAP_BROWSER.xml' => [ 'Avvio', '489', 'Android', DeviceType::MOBILE ], 'http://guardsys.museui.com/Avvio750_PEP_WAP_BROWSER.xml' => [ 'Avvio', '750', 'Android', DeviceType::MOBILE ], 'http://config.51coolpad.com/UAProfile/Brightstar/Avvio_L500.xml' => [ 'Avvio', 'L500', 'Android', DeviceType::MOBILE ], 'http://www.axiooworld.com' => [ 'Axioo', 'Picopad', 'Android', DeviceType::TABLET ], @@ -547,13 +550,16 @@ 'http://www.bluhelp.com/upload/xmlfiles/STUDIO_5.0K.xml' => [ 'BLU', 'Studio 5.0k', 'Android', DeviceType::MOBILE ], 'http://www.bluhelp.com/upload/xmlfiles/ STUDIO5.0SII.XML' => [ 'BLU', 'Studio 5.0s II', 'Android', DeviceType::MOBILE ], 'http://www.bluhelp.com/upload/xmlfiles/STUDIO5.5S.xml' => [ 'BLU', 'Studio 5.5s', 'Android', DeviceType::MOBILE ], + 'http://www.bluhelp.com/upload/xmlfiles/STUDIO_C.XML' => [ 'BLU', 'Studio C', 'Android', DeviceType::MOBILE ], 'http://www.bluhelp.com/upload/xmlfiles/STUDIO_G.xml' => [ 'BLU', 'Studio G', 'Android', DeviceType::MOBILE ], 'http://www.bluhelp.com/upload/xmlfiles/STUDIO5.0S_HD.xml' => [ 'BLU', 'Studio X', 'Android', DeviceType::MOBILE ], 'http://www.bluhelp.com/upload/xmlfiles/STUDIO_X.xml' => [ 'BLU', 'Studio X', 'Android', DeviceType::MOBILE ], + 'http://www.bluhelp.com/upload/xmlfiles/BLU_STUDIO_X_PLUS.xml' => [ 'BLU', 'Studio X Plus', 'Android', DeviceType::MOBILE ], 'http://www.bluhelp.com/upload/xmlfiles/Studio_X_Plus.xml' => [ 'BLU', 'Studio X Plus', 'Android', DeviceType::MOBILE ], 'http://www.bluhelp.com/upload/xmlfiles/Touchbook_7.0_3G.xml' => [ 'BLU', 'Touch Book 7.0', 'Android', DeviceType::TABLET ], 'http://www.bmobile.eu.com/uaprofile/Bmobile_AX1030.xml' => [ 'Bmobile', 'AX1030', 'Android', DeviceType::MOBILE ], 'http://www.bmobile.eu.com/uaprofile/Bmobile_AX1060.xml' => [ 'Bmobile', 'AX1060', 'Android', DeviceType::MOBILE ], + 'http://www.bmobile.eu.com/uaprofile/Bmobile_AX1065.xml' => [ 'Bmobile', 'AX1065', 'Android', DeviceType::MOBILE ], 'http://bmobile.eu.com/uaprofile/UAProfile_BmobileAX512.xml' => [ 'Bmobile', 'AX512', 'Android', DeviceType::MOBILE ], 'http://www.bmobile.eu.com/uaprofile/UAProfile_BmobileAX512.xml' => [ 'Bmobile', 'AX512', 'Android', DeviceType::MOBILE ], 'http://www.bmobile.eu.com/uaprofile/Bmobile_AX570.xml' => [ 'Bmobile', 'AX570', 'Android', DeviceType::MOBILE ], @@ -608,10 +614,12 @@ 'http://uaprofile.YuLong.com/uaprof/YuLong-CoolPad8809-1.0.xml' => [ 'CoolPad', '8809', 'Android', DeviceType::MOBILE ], 'http://nmsc.ctvap.cn/uaprof/YL/YL_Coolpad_E230_2_20100520.xml' => [ 'Coolpad', 'E230', 'Brew', DeviceType::MOBILE ], 'http://device.sprintpcs.com/Coolpad/801ES/Coolpad-801ES-CP021.rdf' => [ 'Coolpad', 'Quattro II 4G', 'Android', DeviceType::MOBILE ], + 'http://www.azumi-mobile.com/agenteprofile/equipos/Azumi_A50.xml' => [ 'Cozco', 'C1 Plus', 'Android', DeviceType::MOBILE ], 'http://www.oppo.com/resource/UA-PROF/OPPOMC002.xml' => [ 'Dakele', 'MC002', 'Android', DeviceType::MOBILE ], 'http://ftp.us.dell.com/Factor_Software_Updates/Grappa_UA_Profile.xml' => [ 'Dell', 'Grappa', 'Android', DeviceType::MOBILE ], 'http://122.200.68.229/docs/mini3ix.xml' => [ 'Dell', 'Mini 3ix', 'Android', DeviceType::MOBILE ], 'http://www.zte.com.cn/mobile/uaprof/XCD35.xml' => [ 'Dell', 'XCD35', 'Android', DeviceType::MOBILE ], + 'http://www.zte.com.cn/mobile/uaprof/DL800.xml' => [ 'Digicel', 'DL800', 'Android', DeviceType::MOBILE ], 'http://www.htcmms.com.tw/gen/Juno-1.0.xml' => [ 'Dopod', 'C750', 'Windows Mobile', DeviceType::MOBILE ], 'http://www.htcmms.com.tw/gen/Tachi-1.0.xml' => [ 'Dopod', 'T5399', 'Windows Mobile', DeviceType::MOBILE ], 'http://www.htcmms.com.tw/gen/Qilin-1.0.xml' => [ 'Dopod', 'T8388', 'Windows Mobile', DeviceType::MOBILE ], @@ -675,6 +683,7 @@ 'http://www.fly-phone.ru/UAP/Fly_IQ449.xml' => [ 'Fly', 'IQ449 Pronto', 'Android', DeviceType::MOBILE ], 'http://www.fly-phone.ru/UAP/Fly_IQ4490.xml' => [ 'Fly', 'IQ449 Pronto', 'Android', DeviceType::MOBILE ], 'http://www.fly-phone.ru/UAP/Fly_IQ4491_Quad.xml' => [ 'Fly', 'IQ449 Pronto', 'Android', DeviceType::MOBILE ], + 'http://www.fly-phone.ru/UAP/Fly_IQ4503_Quad.xml' => [ 'Fly', 'IQ450 Horizon', 'Android', DeviceType::MOBILE ], 'http://www.fly-phone.ru/UAP/Fly_IQ450_Quattro.xml' => [ 'Fly', 'IQ450 Horizon', 'Android', DeviceType::MOBILE ], 'http://www.fly-phone.ru/UAP/Fly_IQ451.xml' => [ 'Fly', 'IQ451 Vista', 'Android', DeviceType::MOBILE ], 'http://www.fly-phone.ru/UAP/Fly_IQ4511_Octa.xml' => [ 'Fly', 'IQ451 Vista', 'Android', DeviceType::MOBILE ], @@ -740,6 +749,7 @@ 'http://www.oppo.com/resource/UA-PROF/OPPOHIKe 868.xml' => [ 'HIKe', 'Z1 868', 'Android', DeviceType::MOBILE ], 'http://phone.hisense.com/khfw/rjxz/201310/P020131012478952694173.xml' => [ 'Hisense', 'E360M', 'Android', DeviceType::MOBILE ], 'http://www.hisensephone.com/Hisense_E51-M_ua_profile.xml' => [ 'Hisense', 'E51-M', 'Android', DeviceType::MOBILE ], + 'http://www.hisensephone.com/Hisense_F20T_ua_profile.xml' => [ 'Hisense', 'F20T', 'Android', DeviceType::MOBILE ], 'http://phone.hisense.com/khfw/rjxz/201303/P020130307299783065342.xml' => [ 'Hisense', 'T820', 'Android', DeviceType::MOBILE ], 'http://phone.hisense.com/khfw/rjxz/201208/P020120809608224982262.xml' => [ 'Hisense', 'T830', 'Android', DeviceType::MOBILE ], 'http://phone.hisense.com/khfw/rjxz/201205/P020120521576380789573.xml' => [ 'Hisense', 'T860', 'Android', DeviceType::MOBILE ], @@ -762,6 +772,7 @@ 'http://www.hp.com/ipaqcarrier/hpipaqhw692xv10.xml' => [ 'HP', 'iPAQ hw6920', 'Windows Mobile', DeviceType::MOBILE ], 'http://www.hp.com/ipaqcarrier/hpipaqrw6815v10.xml' => [ 'HP', 'iPAQ rw6815', 'Windows Mobile', DeviceType::MOBILE ], 'http://www.hp.com/ipaqcarrier/HPiPAQVoiceMessenger10.xml' => [ 'HP', 'iPAQ Voice Messenger', 'Windows Mobile', DeviceType::MOBILE ], + 'http://js.redirect.hp.com/jumpstation?bd=all&c=none&locale=ww_ww&pf=all&s=hp_linkplus_uaprofile&tp=mobility'=> [ 'HP', 'Slate 10 Plus', 'Android', DeviceType::TABLET ], 'http://js.redirect.hp.com/jumpstation?bd=all&c=none&locale=ww_ww&pf=all&s=hp_vogue_uaprofile&tp=mobility'=> [ 'HP', 'Slate 8 Plus', 'Android', DeviceType::TABLET ], 'http://www.htcmms.com.tw/gen/Strk-1.0.xml' => [ 'HTC', '3100', 'Windows Mobile', DeviceType::MOBILE ], 'http://www.htcmms.com.tw/Android/Common/SongShan/ua-profile.xml' => [ 'HTC', 'A3360', 'Android', DeviceType::MOBILE ], @@ -817,6 +828,7 @@ 'http://www.htcmms.com.tw/Android/Vodafone/l9kfHYvA01/ua-profile.xml' => [ 'HTC', 'Desire 310', 'Android', DeviceType::MOBILE ], 'http://www.htcmms.com.tw/Android/Telcel/nhYHJ3dbMv/ua-profile.xml' => [ 'HTC', 'Desire 320', 'Android', DeviceType::MOBILE ], 'http://www.htcmms.com.tw/Android/TELUS/nhYHJ3dbMv/ua-profile.xml' => [ 'HTC', 'Desire 320', 'Android', DeviceType::MOBILE ], + 'http://www.htcmms.com.tw/Android/Vodafone/nhYHJ3dbMv/ua-profile.xml' => [ 'HTC', 'Desire 320', 'Android', DeviceType::MOBILE ], 'http://www.htcmms.com.tw/Android/AMX/0P3Z11/ua-profile.xml' => [ 'HTC', 'Desire 500', 'Android', DeviceType::MOBILE ], 'http://www.htcmms.com.tw/Android/Common/0P3Z1/ua-profile.xml' => [ 'HTC', 'Desire 500', 'Android', DeviceType::MOBILE ], 'http://www.htcmms.com.tw/Android/Common/0P3Z11/ua-profile.xml' => [ 'HTC', 'Desire 500', 'Android', DeviceType::MOBILE ], @@ -846,6 +858,7 @@ 'http://www.htcmms.com.tw/Android/Telstra/R183PSZ1oa/ua-profile.xml' => [ 'HTC', 'Desire 510', 'Android', DeviceType::MOBILE ], 'http://www.htcmms.com.tw/Android/Telus/7l3xFmWvDC/ua-profile.xml' => [ 'HTC', 'Desire 510', 'Android', DeviceType::MOBILE ], 'http://www.htcmms.com.tw/Android/TMO/R183PSZ1oa/ua-profile.xml' => [ 'HTC', 'Desire 510', 'Android', DeviceType::MOBILE ], + 'http://www.htcmms.com.tw/Android/Vodafone/R183PSZ1oa/ua-profile.xml' => [ 'HTC', 'Desire 510', 'Android', DeviceType::MOBILE ], 'http://www.htcmms.com.tw/Android/Common/PO49120/ua-profile.xml' => [ 'HTC', 'Desire 600', 'Android', DeviceType::MOBILE ], 'http://www.htcmms.com.tw/Android/Common/PO471/ua-profile.xml' => [ 'HTC', 'Desire 600c', 'Android', DeviceType::MOBILE ], 'http://device.sprintpcs.com/HTC/HTC0P4E1-VIRGIN/1106526.rdf' => [ 'HTC', 'Desire 601', 'Android', DeviceType::MOBILE ], @@ -905,6 +918,7 @@ 'http://www.htcmms.com.tw/Android/Common/x7cG56PcBk/ua-profile.xml' => [ 'HTC', 'Desire 816G', 'Android', DeviceType::MOBILE ], 'http://www.htcmms.com.tw/Android/Bouygues/GC0znJc20B/ua-profile.xml' => [ 'HTC', 'Desire 820', 'Android', DeviceType::MOBILE ], 'http://www.htcmms.com.tw/Android/CMCC/B3BRtglhHJ/ua-profile.xml' => [ 'HTC', 'Desire 820', 'Android', DeviceType::MOBILE ], + 'http://www.htcmms.com.tw/Android/CMCC/rTlnYuch0E/ua-profile.xml' => [ 'HTC', 'Desire 820', 'Android', DeviceType::MOBILE ], 'http://www.htcmms.com.tw/Android/Common/8y4niiluZ7/ua-profile.xml' => [ 'HTC', 'Desire 820', 'Android', DeviceType::MOBILE ], 'http://www.htcmms.com.tw/Android/Common/B3BRtglhHJ/ua-profile.xml' => [ 'HTC', 'Desire 820', 'Android', DeviceType::MOBILE ], 'http://www.htcmms.com.tw/Android/Common/EjHarhDDvK/ua-profile.xml' => [ 'HTC', 'Desire 820', 'Android', DeviceType::MOBILE ], @@ -916,6 +930,7 @@ 'http://www.htcmms.com.tw/Android/Common/aXk2CNmBRo/ua-profile.xml' => [ 'HTC', 'Desire 826', 'Android', DeviceType::MOBILE ], 'http://www.htcmms.com.tw/Android/Common/c8HDMjoq7Q/ua-profile.xml' => [ 'HTC', 'Desire 826', 'Android', DeviceType::MOBILE ], 'http://www.htcmms.com.tw/Android/Common/L7YHOLHUJE/ua-profile.xml' => [ 'HTC', 'Desire 826', 'Android', DeviceType::MOBILE ], + 'http://www.htcmms.com.tw/Android/Common/6G97EEWjge/ua-profile.xml' => [ 'HTC', 'Desire 828', 'Android', DeviceType::MOBILE ], 'http://mms.mycricket.com/htc_h1000c.xml' => [ 'HTC', 'Desire C', 'Android', DeviceType::MOBILE ], 'http://www.htcmms.com.tw/Android/Bell/A320a/ua-profile.xml' => [ 'HTC', 'Desire C', 'Android', DeviceType::MOBILE ], 'http://www.htcmms.com.tw/Android/Common/L01/ua-profile.xml' => [ 'HTC', 'Desire C', 'Android', DeviceType::MOBILE ], @@ -1183,6 +1198,7 @@ 'http://device.sprintpcs.com/HTC/831C-SPRINT/42065110.rdf' => [ 'HTC', 'One (M8)', 'Android', DeviceType::MOBILE ], 'http://device.sprintpcs.com/HTC/831C-SPRINT/42565114.rdf' => [ 'HTC', 'One (M8)', 'Android', DeviceType::MOBILE ], 'http://device.sprintpcs.com/HTC/831C-SPRINT/42565118.rdf' => [ 'HTC', 'One (M8)', 'Android', DeviceType::MOBILE ], + 'http://device.sprintpcs.com/HTC/831C-SPRINT/42565418.rdf' => [ 'HTC', 'One (M8)', 'Android', DeviceType::MOBILE ], 'http://device.sprintpcs.com/HTC/831C-SPRINT/Bad Boyz Sprint ONE M8 Harman v21 ART.rdf' => [ 'HTC', 'One (M8)', 'Android', DeviceType::MOBILE ], 'http://device.sprintpcs.com/HTC/831C-SPRINT/Bad Boyz Sprint ONE M8 L Sense 7 v10.rdf' => [ 'HTC', 'One (M8)', 'Android', DeviceType::MOBILE ], 'http://device.sprintpcs.com/HTC/831C-SPRINT/Bad Boyz Sprint ONE M8 Lollipop v30.rdf' => [ 'HTC', 'One (M8)', 'Android', DeviceType::MOBILE ], @@ -1248,6 +1264,7 @@ 'http://www.htcmms.com.tw/Android/Common/xbKGNh1DoH/ua-profile.xml' => [ 'HTC', 'One (M9)', 'Android', DeviceType::MOBILE ], 'http://device.sprintpcs.com/HTC/HTC0P3P7-Chameleon/%CDMA_ROM_VERSION%.rdf' => [ 'HTC', 'One Max', 'Android', DeviceType::MOBILE ], 'http://device.sprintpcs.com/HTC/HTC0P3P7-Chameleon/0576512.rdf' => [ 'HTC', 'One Max', 'Android', DeviceType::MOBILE ], + 'http://device.sprintpcs.com/HTC/HTC0P3P7-Chameleon/3036513.rdf' => [ 'HTC', 'One Max', 'Android', DeviceType::MOBILE ], 'http://device.sprintpcs.com/HTC/HTC0P3P7-SPRINT/1166514.rdf' => [ 'HTC', 'One Max', 'Android', DeviceType::MOBILE ], 'http://device.sprintpcs.com/HTC/HTC0P3P7-SPRINT/2096511.rdf' => [ 'HTC', 'One Max', 'Android', DeviceType::MOBILE ], 'http://device.sprintpcs.com/HTC/HTC0P3P7-SPRINT/3026515.rdf' => [ 'HTC', 'One Max', 'Android', DeviceType::MOBILE ], @@ -1593,6 +1610,7 @@ 'http://wap1.huawei.com/uaprof/HW_HUAWEI_G730-C00_20130826.xml' => [ 'Huawei', 'Ascend G730', 'Android', DeviceType::MOBILE ], 'http://wap1.huawei.com/uaprof/HW_HUAWEI_G730-C10_1_20130828.xml' => [ 'Huawei', 'Ascend G730', 'Android', DeviceType::MOBILE ], 'http://wap1.huawei.com/uaprof/HW_HUAWEI_G730-L075.xml' => [ 'Huawei', 'Ascend G730', 'Android', DeviceType::MOBILE ], + 'http://wap1.huawei.com/uaprof/HUAWEI_G735-L03__NLA_UAProfile.xml' => [ 'Huawei', 'Ascend G735', 'Android', DeviceType::MOBILE ], 'http://wap1.huawei.com/uaprof/HUAWEI_G735-L23_UAProfile.xml' => [ 'Huawei', 'Ascend G735', 'Android', DeviceType::MOBILE ], 'http://wap1.huawei.com/uaprof/HuaweiG740-L00LTE-DRM.xml' => [ 'Huawei', 'Ascend G740', 'Android', DeviceType::MOBILE ], 'http://wap1.huawei.com/uaprof/HuaweiG740-L00LTE-Normal.xml' => [ 'Huawei', 'Ascend G740', 'Android', DeviceType::MOBILE ], @@ -1602,11 +1620,13 @@ 'http://wap1.huawei.com/uaprof/HUAWEI_G760-TL00_UAProfile.xml' => [ 'Huawei', 'Ascend G760', 'Android', DeviceType::MOBILE ], 'http://wap1.huawei.com/uaprof/HW_HUAWEI_G620S-UL00.xml' => [ 'Huawei', 'Ascend G760', 'Android', DeviceType::MOBILE ], 'http://wap1.huawei.com/uaprof/HW_HUAWEI_G760-L01.xml' => [ 'Huawei', 'Ascend G760', 'Android', DeviceType::MOBILE ], + 'http://wap1.huawei.com/uaprof/HW_HUAWEI_G760-L01_Europe_DRM-UAProfile.xml' => [ 'Huawei', 'Ascend G760', 'Android', DeviceType::MOBILE ], 'http://wap1.huawei.com/uaprof/HW_HUAWEI_G760-L071.xml' => [ 'Huawei', 'Ascend G760', 'Android', DeviceType::MOBILE ], 'http://wap1.huawei.com/uaprof/HUAWEI_RIO-AL00_UAProfile.xml' => [ 'Huawei', 'Ascend G8', 'Android', DeviceType::MOBILE ], 'http://wap1.huawei.com/uaprof/HUAWEI_RIO-L01_UAProfile.xml' => [ 'Huawei', 'Ascend G8', 'Android', DeviceType::MOBILE ], 'http://wap1.huawei.com/uaprof/HUAWEI_RIO-L01_UAProfile_DRM.xml' => [ 'Huawei', 'Ascend G8', 'Android', DeviceType::MOBILE ], 'http://wap1.huawei.com/uaprof/HUAWEI_RIO-L01_UAProfile_DRM_FL.xml' => [ 'Huawei', 'Ascend G8', 'Android', DeviceType::MOBILE ], + 'http://wap1.huawei.com/uaprof/HUAWEI_RIO-L02_UAProfile.xml' => [ 'Huawei', 'Ascend G8', 'Android', DeviceType::MOBILE ], 'http://wap1.huawei.com/uaprof/HUAWEI_RIO-L02_UAProfile_DRM.xml' => [ 'Huawei', 'Ascend G8', 'Android', DeviceType::MOBILE ], 'http://wap1.huawei.com/uaprof/HUAWEI_RIO-L03_UAProfile_DRM.xml' => [ 'Huawei', 'Ascend G8', 'Android', DeviceType::MOBILE ], 'http://wap1.huawei.com/uaprof/HUAWEI_RIO-TL00_UAProfile.xml' => [ 'Huawei', 'Ascend G8', 'Android', DeviceType::MOBILE ], @@ -1615,6 +1635,7 @@ 'http://wap1.huawei.com/uaprof/SC-UL10_LTE_UAProfile.xml' => [ 'Huawei', 'Ascend GX1', 'Android', DeviceType::MOBILE ], 'http://mms.mycricket.com/Huawei-M865.xml' => [ 'Huawei', 'Ascend II', 'Android', DeviceType::MOBILE ], 'http://uaprof.vtext.com/Huawei/ADR3310/ADR3310v1.xml' => [ 'Huawei', 'Ascend II', 'Android', DeviceType::MOBILE ], + 'http://uaprof.vtext.com/OEM/ADR3305/ADR3305v1.xml' => [ 'Huawei', 'Ascend II', 'Android', DeviceType::MOBILE ], 'http://wap1.huawei.com/uaprof/Huawei-M865C.xml' => [ 'Huawei', 'Ascend II', 'Android', DeviceType::MOBILE ], 'http://wap1.huawei.com/uaprof/HUAWEI_MATE_T00_UAProfile.xml' => [ 'Huawei', 'Ascend Mate', 'Android', DeviceType::MOBILE ], 'http://wap1.huawei.com/uaprof/HUAWEI_MATE_UAProfile.XML' => [ 'Huawei', 'Ascend Mate', 'Android', DeviceType::MOBILE ], @@ -1660,7 +1681,9 @@ 'http://wap1.huawei.com/uaprof/HUAWEI_GRA_L09_DRM_UAProfile.xml' => [ 'Huawei', 'Ascend P8', 'Android', DeviceType::MOBILE ], 'http://wap1.huawei.com/uaprof/HUAWEI_GRA_L09_UAProfile.xml' => [ 'Huawei', 'Ascend P8', 'Android', DeviceType::MOBILE ], 'http://wap1.huawei.com/uaprof/HUAWEI_GRA_L09_VDF_UAProfile_3G.xml' => [ 'Huawei', 'Ascend P8', 'Android', DeviceType::MOBILE ], + 'http://wap1.huawei.com/uaprof/HUAWEI_GRA_TL00_UAProfile.xml' => [ 'Huawei', 'Ascend P8', 'Android', DeviceType::MOBILE ], 'http://wap1.huawei.com/uaprof/HUAWEI_X100-UL00_UAProfile.xml' => [ 'Huawei', 'Ascend P8', 'Android', DeviceType::MOBILE ], + 'http://wap1.huawei.com/uaprof/HW_GRA-CL00_1_20150105.xml' => [ 'Huawei', 'Ascend P8', 'Android', DeviceType::MOBILE ], 'http://wap1.huawei.com/uaprof/HW_HUAWEI_GRA-CL00_1_20150317.xml' => [ 'Huawei', 'Ascend P8', 'Android', DeviceType::MOBILE ], 'http://wap1.huawei.com/uaprof/HW_HUAWEI_GRA-CL10_1_20150317.xml' => [ 'Huawei', 'Ascend P8', 'Android', DeviceType::MOBILE ], 'http://wap1.huawei.com/uaprof/HW_M100-CL00_1_20150120.xml' => [ 'Huawei', 'Ascend P8', 'Android', DeviceType::MOBILE ], @@ -1745,6 +1768,7 @@ 'http://wap1.huawei.com/uaprof/HuaweiY320-U151v100WCDMA.xml' => [ 'Huawei', 'Ascend Y320', 'Android', DeviceType::MOBILE ], 'http://wap1.huawei.com/uaprof/HuaweiY320-U30v100WCDMA.xml' => [ 'Huawei', 'Ascend Y320', 'Android', DeviceType::MOBILE ], 'http://wap1.huawei.com/uaprof/HuaweiY320-U351v100WCDMA.xml' => [ 'Huawei', 'Ascend Y320', 'Android', DeviceType::MOBILE ], + 'http://wap1.huawei.com/uaprof/HuaweiY321-U051v100WCDMA.xml' => [ 'Huawei', 'Ascend Y321', 'Android', DeviceType::MOBILE ], 'http://wap1.huawei.com/uaprof/HUAWEI_Y330-U01_UAProfile.xml' => [ 'Huawei', 'Ascend Y330', 'Android', DeviceType::MOBILE ], 'http://wap1.huawei.com/uaprof/HUAWEI_Y330-U05_UAProfile.xml' => [ 'Huawei', 'Ascend Y330', 'Android', DeviceType::MOBILE ], 'http://wap1.huawei.com/uaprof/HUAWEI_Y330-U07_UAProfile.xml' => [ 'Huawei', 'Ascend Y330', 'Android', DeviceType::MOBILE ], @@ -1790,6 +1814,7 @@ 'http://wap1.huawei.com/uaprof/HuaweiY600-U00_UAProfile.xml' => [ 'Huawei', 'Ascend Y600', 'Android', DeviceType::MOBILE ], 'http://wap1.huawei.com/uaprof/HuaweiY600-U151_UAProfile.xml' => [ 'Huawei', 'Ascend Y600', 'Android', DeviceType::MOBILE ], 'http://wap1.huawei.com/uaprof/HuaweiY600-U20_UAProfile.xml' => [ 'Huawei', 'Ascend Y600', 'Android', DeviceType::MOBILE ], + 'http://wap1.huawei.com/uaprof/HuaweiY600-U351_UAProfile.xml' => [ 'Huawei', 'Ascend Y600', 'Android', DeviceType::MOBILE ], 'http://wap1.huawei.com/uaprof/HuaweiY600-U40_UAProfile.xml' => [ 'Huawei', 'Ascend Y600', 'Android', DeviceType::MOBILE ], 'http://wap1.huawei.com/uaprof/HuaweiY610-U00_UAProfile.xml' => [ 'Huawei', 'Ascend Y610', 'Android', DeviceType::MOBILE ], 'http://wap1.huawei.com/uaprof/HUAWEI_Y625_U13_UAProfile.xml' => [ 'Huawei', 'Ascend Y625', 'Android', DeviceType::MOBILE ], @@ -1832,6 +1857,8 @@ 'http://wap1.huawei.com/uaprof/HuaweiU8687-Normal.xml' => [ 'Huawei', 'Chronos', 'Android', DeviceType::MOBILE ], 'http://wap1.huawei.com/uaprof/HUAWEI_TIT-AL00_UAProfile .xml' => [ 'Huawei', 'Enjoy 5', 'Android', DeviceType::MOBILE ], 'http://wap1.huawei.com/uaprof/HUAWEI_TIT-CL10_UAProfile.xml' => [ 'Huawei', 'Enjoy 5', 'Android', DeviceType::MOBILE ], + 'http://wap1.huawei.com/uaprof/HUAWEI_TIT-L01_UAProfile .xml' => [ 'Huawei', 'Enjoy 5', 'Android', DeviceType::MOBILE ], + 'http://wap1.huawei.com/uaprof/HUAWEI_TIT-TL00_UAProfile.xml' => [ 'Huawei', 'Enjoy 5', 'Android', DeviceType::MOBILE ], 'http://wap1.huawei.com/uaprof/HUAWEI_TIT-U02_UAProfile .xml' => [ 'Huawei', 'Enjoy 5', 'Android', DeviceType::MOBILE ], 'http://wap1.huawei.com/uaprof/HW_HUAWEI_CM990_1_20130108.xml' => [ 'Huawei', 'Evolución 3', 'Android', DeviceType::MOBILE ], 'http://wap1.huawei.com/uaprof/HuaweiUM840v100GPRS.xml' => [ 'Huawei', 'Evolution', 'Android', DeviceType::MOBILE ], @@ -1889,6 +1916,7 @@ 'http://wap1.huawei.com/uaprof/HW_SCL-L21_UAProfile.xml' => [ 'Huawei', 'Honor 4A', 'Android', DeviceType::MOBILE ], 'http://wap1.huawei.com/uaprof/HW_SCL-TL00H_UAProfile.xml' => [ 'Huawei', 'Honor 4A', 'Android', DeviceType::MOBILE ], 'http://wap1.huawei.com/uaprof/HW_SCL-TL00_UAProfile.xml' => [ 'Huawei', 'Honor 4A', 'Android', DeviceType::MOBILE ], + 'http://wap1.huawei.com/uaprof/HW_SCL-U31_UAProfile.xml' => [ 'Huawei', 'Honor 4A', 'Android', DeviceType::MOBILE ], 'http://wap1.huawei.com/uaprof/HUAWEI_CHM-TL00H_UAProfile.xml' => [ 'Huawei', 'Honor 4C', 'Android', DeviceType::MOBILE ], 'http://wap1.huawei.com/uaprof/HUAWEI_CHM-U01_UAProfile.xml' => [ 'Huawei', 'Honor 4C', 'Android', DeviceType::MOBILE ], 'http://wap1.huawei.com/uaprof/HUAWEI_CHM-UL00_UAProfile.xml' => [ 'Huawei', 'Honor 4C', 'Android', DeviceType::MOBILE ], @@ -1902,6 +1930,7 @@ 'http://wap1.huawei.com/uaprof/HONOR_Che2-TL00M_5.1_UAProfile.xml' => [ 'Huawei', 'Honor 4X', 'Windows', ], 'http://wap1.huawei.com/uaprof/HONOR_Che2-TL00M_UAProfile.xml' => [ 'Huawei', 'Honor 4X', 'Android', DeviceType::MOBILE ], 'http://wap1.huawei.com/uaprof/HONOR_Che2-TL00_UAProfile.xml' => [ 'Huawei', 'Honor 4X', 'Android', DeviceType::MOBILE ], + 'http://wap1.huawei.com/uaprof/HONOR_Che2-UL00_6.0_UAProfile.xml' => [ 'Huawei', 'Honor 4X', 'Android', DeviceType::MOBILE ], 'http://wap1.huawei.com/uaprof/HONOR_Che2-UL00_UAProfile.xml' => [ 'Huawei', 'Honor 4X', 'Android', DeviceType::MOBILE ], 'http://wap1.huawei.com/uaprof/HUAWEI_CHE-TL00H_UAProfile.xml' => [ 'Huawei', 'Honor 4X', 'Android', DeviceType::MOBILE ], 'http://wap1.huawei.com/uaprof/HUAWEI_CHE-TL00_UAProfile.xml' => [ 'Huawei', 'Honor 4X', 'Android', DeviceType::MOBILE ], @@ -1914,6 +1943,7 @@ 'http://wap1.huawei.com/uaprof/HW_KIW-AL10_UAProfile.xml' => [ 'Huawei', 'Honor 5X', 'Android', DeviceType::MOBILE ], 'http://wap1.huawei.com/uaprof/HW_KIW-CL00_1_20150425.xml' => [ 'Huawei', 'Honor 5X', 'Android', DeviceType::MOBILE ], 'http://wap1.huawei.com/uaprof/HW_KIW-TL00H_UAProfile.xml' => [ 'Huawei', 'Honor 5X', 'Android', DeviceType::MOBILE ], + 'http://wap1.huawei.com/uaprof/HW_KIW-UL00_UAProfile.xml' => [ 'Huawei', 'Honor 5X', 'Android', DeviceType::MOBILE ], 'http://wap1.huawei.com/uaprof/HUAWEI_H60_J1_UAProfile.xml' => [ 'Huawei', 'Honor 6', 'Android', DeviceType::MOBILE ], 'http://wap1.huawei.com/uaprof/HUAWEI_H60_L01_UAProfile.xml' => [ 'Huawei', 'Honor 6', 'Android', DeviceType::MOBILE ], 'http://wap1.huawei.com/uaprof/HUAWEI_H60_L02_UAProfile.xml' => [ 'Huawei', 'Honor 6', 'Android', DeviceType::MOBILE ], @@ -1938,6 +1968,7 @@ 'http://wap1.huawei.com/uaprof/HUAWEI_PLK-UL00-Uaprofile.xml' => [ 'Huawei', 'Honor 7', 'Android', DeviceType::MOBILE ], 'http://wap1.huawei.com/uaprof/HW_C9746_1_20150319.xml' => [ 'Huawei', 'Honor 7', 'Android', DeviceType::MOBILE ], 'http://wap1.huawei.com/uaprof/HUAWEI_ATH-CL00_Uaprofile.xml' => [ 'Huawei', 'Honor 7i', 'Android', DeviceType::MOBILE ], + 'http://wap1.huawei.com/uaprof/HONOR_CHM-TL00H_6.0_UAProfile.xml' => [ 'Huawei', 'Honor Play 4C', 'Android', DeviceType::MOBILE ], 'http://wap1.huawei.com/uaprof/HONOR_CHM-U01_UAProfile.xml' => [ 'Huawei', 'Honor Play 4C', 'Android', DeviceType::MOBILE ], 'http://wap1.huawei.com/uaprof/HUAWEI_CHM-TL00_UAProfile.xml' => [ 'Huawei', 'Honor Play 4C', 'Android', DeviceType::MOBILE ], 'http://wap1.huawei.com/uaprof/HUAWEI_CHM-U01_Russia_UAProfile.xml' => [ 'Huawei', 'Honor Play 4C', 'Android', DeviceType::MOBILE ], @@ -1999,10 +2030,12 @@ 'http://wap1.huawei.com/uaprof/HUAWEI_CRR_L09_UAProfile.xml' => [ 'Huawei', 'Mate 8', 'Android', DeviceType::MOBILE ], 'http://wap1.huawei.com/uaprof/HUAWEI_M200_L09_UAProfile.xml' => [ 'Huawei', 'Mate 8', 'Android', DeviceType::MOBILE ], 'http://wap1.huawei.com/uaprof/HUAWEI_NXT-AL10_UAProfile.xml' => [ 'Huawei', 'Mate 8', 'Android', DeviceType::MOBILE ], + 'http://wap1.huawei.com/uaprof/HUAWEI_NXT-UL00_UAProfile.xml' => [ 'Huawei', 'Mate 8', 'Android', DeviceType::MOBILE ], 'http://wap1.huawei.com/uaprof/HUAWEI_CRR-UL00_UAProfile.xml' => [ 'Huawei', 'Mate S', 'Android', DeviceType::MOBILE ], 'http://wap1.huawei.com/uaprof/HUAWEI_CRR-UL20_UAProfile.xml' => [ 'Huawei', 'Mate S', 'Android', DeviceType::MOBILE ], 'http://wap1.huawei.com/uaprof/HUAWEI_CRR_L09_UAProfile_3G.xml' => [ 'Huawei', 'Mate S', 'Android', DeviceType::MOBILE ], 'http://wap1.huawei.com/uaprof/HW_CRR-CL00_1_20150310.xml' => [ 'Huawei', 'Mate S', 'Android', DeviceType::MOBILE ], + 'http://wap1.huawei.com/uaprof/HW_CRR-CL20_1_20150310.xml' => [ 'Huawei', 'Mate S', 'Android', DeviceType::MOBILE ], 'http://wap1.huawei.com/uaprof/HuaweiMediaPadEVDODataOnly.xml' => [ 'Huawei', 'MediaPad', 'Android', DeviceType::TABLET ], 'http://wap1.huawei.com/uaprof/HuaweiMediaPadWCDMADataOnly.xml' => [ 'Huawei', 'MediaPad', 'Android', DeviceType::TABLET ], 'http://wap1.huawei.com/uaprof/HuaweiMediaPadWCDMA_ICS.xml' => [ 'Huawei', 'MediaPad', 'Android', DeviceType::TABLET ], @@ -2117,6 +2150,7 @@ 'http://wap1.huawei.com/uaprof/HuaweiU8110v100WCDMA.xml' => [ 'Huawei', 'U8110', 'Android', DeviceType::MOBILE ], 'http://wap1.huawei.com/uaprof/HuaweiU8110v100WCDMANormal.xml' => [ 'Huawei', 'U8110', 'Android', DeviceType::MOBILE ], 'http://wap1.huawei.com/uaprof/HuaweiU8160WCDMA-MTS.xml' => [ 'Huawei', 'U8160', 'Android', DeviceType::MOBILE ], + 'http://wap1.huawei.com/uaprof/HuaweiU8230v100GPRS.xml' => [ 'Huawei', 'U8230', 'Android', DeviceType::MOBILE ], 'http://wap1.huawei.com/uaprof/HuaweiU8230v100WCDMAEclair.xml' => [ 'Huawei', 'U8230', 'Android', DeviceType::MOBILE ], 'http://wap.huawei.com/uaprof/HuaweiV830v100WCDMA.xml' => [ 'Huawei', 'U830', null, DeviceType::MOBILE ], 'http://wap1.huawei.com/uaprof/HuaweiU8300v100GPRSNormal.xml' => [ 'Huawei', 'U8300', 'Android', DeviceType::MOBILE ], @@ -2132,6 +2166,7 @@ 'http://www.htcmms.com.tw/tmo/i-mate K-JAM PPC-1.3.xml' => [ 'i-mate', 'K-JAM', 'Windows Mobile', DeviceType::MOBILE ], 'http://imatemms.imate.com/gen/UAProf_Pebble_v1.xml' => [ 'i-mate', 'Pebble', null, DeviceType::MOBILE ], 'http://asmobile.ehosting.com.tw/uaprof/i-mobile607.xml' => [ 'i-mobile', '607', null, DeviceType::MOBILE ], + 'http://www.1066.cn/uaprof/prof/i-mobile/i-STYLE2.9.xml' => [ 'i-Mobile', 'i-Style 2.9', 'Android', DeviceType::MOBILE ], 'http://www.1066.cn/uaprof/prof/i-mobile/i-STYLE7.6.xml' => [ 'i-Mobile', 'i-Style 7.6', 'Android', DeviceType::MOBILE ], 'http://uap.cellon.com/i-mobile IQ X.xml' => [ 'i-Mobile', 'iQ X', 'Android', DeviceType::MOBILE ], 'http://uap.cellon.com/i-mobile IQ X2.xml' => [ 'i-Mobile', 'iQ X2', 'Android', DeviceType::MOBILE ], @@ -2315,6 +2350,7 @@ 'http://www.msai.in/uaprof/Lava/Lava_Iris_X1_Grand.xml' => [ 'Lava', 'Iris X1 Grand', 'Android', DeviceType::MOBILE ], 'http://www.msai.in/uaprof/Lava/Lava_Iris_X5.xml' => [ 'Lava', 'Iris X5', 'Android', DeviceType::MOBILE ], 'http://www.msai.in/uaprof/Lava/LAVA_IRISX8.xml' => [ 'Lava', 'Iris X8', 'Android', DeviceType::MOBILE ], + 'http://www.msai.in/uaprof/Lava/X9.xml' => [ 'Lava', 'Iris X9', 'Android', DeviceType::MOBILE ], 'http://www.msai.in/uaprof/XOLO/XOLO_A500L.xml' => [ 'Lava', 'XOLO A500L', 'Android', DeviceType::MOBILE ], 'http://www.msai.in/uaprof/XOLO/XOLO_A500sLite.xml' => [ 'Lava', 'XOLO A500S Lite', 'Android', DeviceType::MOBILE ], 'http://www.msai.in/uaprof/XOLO/BLACK.xml' => [ 'Lava', 'XOLO Black', 'Android', DeviceType::MOBILE ], @@ -2521,6 +2557,7 @@ 'http://device.sprintpcs.com/LG/LS995-SPRINT/LS995ZV6.rdf' => [ 'LG', 'G Flex', 'Android', DeviceType::MOBILE ], 'http://device.sprintpcs.com/LG/LS995-SPRINT/LS995ZV7.rdf' => [ 'LG', 'G Flex', 'Android', DeviceType::MOBILE ], 'http://device.sprintpcs.com/LG/LS995-SPRINT/LS995ZVA.rdf' => [ 'LG', 'G Flex', 'Android', DeviceType::MOBILE ], + 'http://device.sprintpcs.com/LG/LS995-SPRINT/LS995ZVB.rdf' => [ 'LG', 'G Flex', 'Android', DeviceType::MOBILE ], 'http://device.sprintpcs.com/LG/LS995-SPRPRE/LS995ZVA.rdf' => [ 'LG', 'G Flex', 'Android', DeviceType::MOBILE ], 'http://gsm.lge.com/html/gsm/D950-M10-D1-KK.xml' => [ 'LG', 'G Flex', 'Android', DeviceType::MOBILE ], 'http://gsm.lge.com/html/gsm/D950-M10-D1.xml' => [ 'LG', 'G Flex', 'Android', DeviceType::MOBILE ], @@ -2537,6 +2574,7 @@ 'http://gsm.lge.com/html/gsm/D959-M10-D1-KK.xml' => [ 'LG', 'G Flex', 'Android', DeviceType::MOBILE ], 'http://gsm.lge.com/html/gsm/D959-M10-D1.xml' => [ 'LG', 'G Flex', 'Android', DeviceType::MOBILE ], 'http://gsm.lge.com/html/gsm/F340L-M3-D1-KK.xml' => [ 'LG', 'G Flex', 'Android', DeviceType::MOBILE ], + 'http://device.sprintpcs.com/LG/LS996-BOOST/LS996ZV9.rdf' => [ 'LG', 'G Flex 2', 'Android', DeviceType::MOBILE ], 'http://device.sprintpcs.com/LG/LS996-Chameleon/latest' => [ 'LG', 'G Flex 2', 'Android', DeviceType::MOBILE ], 'http://device.sprintpcs.com/LG/LS996-SPRINT/LS996ZV5.rdf' => [ 'LG', 'G Flex 2', 'Android', DeviceType::MOBILE ], 'http://device.sprintpcs.com/LG/LS996-SPRINT/LS996ZV6.rdf' => [ 'LG', 'G Flex 2', 'Android', DeviceType::MOBILE ], @@ -2545,6 +2583,8 @@ 'http://device.sprintpcs.com/LG/LS996-SPRINT/LS996ZV9.rdf' => [ 'LG', 'G Flex 2', 'Android', DeviceType::MOBILE ], 'http://gsm.lge.com/html/gsm/LS996-M10-D1.xml' => [ 'LG', 'G Flex 2', 'Android', DeviceType::MOBILE ], 'http://gsm.lge.com/html/gsm/MbAHlRXTX34T2a8f/H950-M10-D1.xml' => [ 'LG', 'G Flex 2', 'Android', DeviceType::MOBILE ], + 'http://gsm.lge.com/html/gsm/MbAHlRXTX34T2a8f/H950-M3-D1.xml' => [ 'LG', 'G Flex 2', 'Android', DeviceType::MOBILE ], + 'http://gsm.lge.com/html/gsm/MbAHlRXTX34T2a8f/H955-M10-D1.xml' => [ 'LG', 'G Flex 2', 'Android', DeviceType::MOBILE ], 'http://gsm.lge.com/html/gsm/MbAHlRXTX34T2a8f/H955-M20-D1.xml' => [ 'LG', 'G Flex 2', 'Android', DeviceType::MOBILE ], 'http://gsm.lge.com/html/gsm/MbAHlRXTX34T2a8f/H955-M3-D1.xml' => [ 'LG', 'G Flex 2', 'Android', DeviceType::MOBILE ], 'http://gsm.lge.com/html/gsm/MbAHlRXTX34T2a8f/H955-M6-D1.xml' => [ 'LG', 'G Flex 2', 'Android', DeviceType::MOBILE ], @@ -2584,10 +2624,12 @@ 'http://device.sprintpcs.com/LG/LS770-BOOST/LS770ZV3.rdf' => [ 'LG', 'G Stylo', 'Android', DeviceType::MOBILE ], 'http://device.sprintpcs.com/LG/LS770-BOOST/LS770ZV4.rdf' => [ 'LG', 'G Stylo', 'Android', DeviceType::MOBILE ], 'http://device.sprintpcs.com/LG/LS770-BOOST/LS770ZV5.rdf' => [ 'LG', 'G Stylo', 'Android', DeviceType::MOBILE ], + 'http://device.sprintpcs.com/LG/LS770-BOOST/LS770ZV7.rdf' => [ 'LG', 'G Stylo', 'Android', DeviceType::MOBILE ], 'http://device.sprintpcs.com/LG/LS770-SPRINT/LS770ZV4.rdf' => [ 'LG', 'G Stylo', 'Android', DeviceType::MOBILE ], 'http://device.sprintpcs.com/LG/LS770-SPRINT/LS770ZV5.rdf' => [ 'LG', 'G Stylo', 'Android', DeviceType::MOBILE ], 'http://device.sprintpcs.com/LG/LS770-SPRPRE/LS770ZV3.rdf' => [ 'LG', 'G Stylo', 'Android', DeviceType::MOBILE ], 'http://device.sprintpcs.com/LG/LS770-SPRPRE/LS770ZV4.rdf' => [ 'LG', 'G Stylo', 'Android', DeviceType::MOBILE ], + 'http://device.sprintpcs.com/LG/LS770-VIRGIN/LS770ZV7.rdf' => [ 'LG', 'G Stylo', 'Android', DeviceType::MOBILE ], 'http://gsm.lge.com/html/gsm/5uyruBAm__1ZuYMa/H631-M10-D1.xml' => [ 'LG', 'G Stylo', 'Android', DeviceType::MOBILE ], 'http://gsm.lge.com/html/gsm/b7_gceeg_u9fMBZq/H636-M10-D1.xml' => [ 'LG', 'G Stylo', 'Android', DeviceType::MOBILE ], 'http://gsm.lge.com/html/gsm/uIJXil7N_tpYFHo7/LGMS631-M10-D1.xml' => [ 'LG', 'G Stylo', 'Android', DeviceType::MOBILE ], @@ -2605,12 +2647,14 @@ 'http://device.sprintpcs.com/LG/LS980-SPRINT/LS980ZVE.rdf' => [ 'LG', 'G2', 'Android', DeviceType::MOBILE ], 'http://device.sprintpcs.com/LG/LS980-SPRINT/LS980ZVG.rdf' => [ 'LG', 'G2', 'Android', DeviceType::MOBILE ], 'http://device.sprintpcs.com/LG/LS980-SPRINT/LS980ZVH.rdf' => [ 'LG', 'G2', 'Android', DeviceType::MOBILE ], + 'http://device.sprintpcs.com/LG/LS980-SPRINT/LS980ZVI.rdf' => [ 'LG', 'G2', 'Android', DeviceType::MOBILE ], 'http://device.sprintpcs.com/LG/LS980-SPRINT/OpTimuS.rdf' => [ 'LG', 'G2', 'Android', DeviceType::MOBILE ], 'http://device.sprintpcs.comLS980ZV8.rdf' => [ 'LG', 'G2', 'Android', DeviceType::MOBILE ], 'http://device.sprintpcs.comLS980ZVG.rdf' => [ 'LG', 'G2', 'Android', DeviceType::MOBILE ], 'http://gsm.lge.com/html/gsm/01F-M3-D1-KK.xml' => [ 'LG', 'G2', 'Android', DeviceType::MOBILE ], 'http://gsm.lge.com/html/gsm/01F-M3-D1.xml' => [ 'LG', 'G2', 'Android', DeviceType::MOBILE ], 'http://gsm.lge.com/html/gsm/01F-M9-D1-KK.xml' => [ 'LG', 'G2', 'Android', DeviceType::MOBILE ], + 'http://gsm.lge.com/html/gsm/980 4G-M12-D1-KK.xml' => [ 'LG', 'G2', 'Android', DeviceType::MOBILE ], 'http://gsm.lge.com/html/gsm/D800-M10-D1-KK.xml' => [ 'LG', 'G2', 'Android', DeviceType::MOBILE ], 'http://gsm.lge.com/html/gsm/D800-M10-D1.xml' => [ 'LG', 'G2', 'Android', DeviceType::MOBILE ], 'http://gsm.lge.com/html/gsm/D800-M3-D1-KK.xml' => [ 'LG', 'G2', 'Android', DeviceType::MOBILE ], @@ -2678,6 +2722,7 @@ 'http://gsm.lge.com/html/gsm/618-M3-D1.xml' => [ 'LG', 'G2 mini', 'Android', DeviceType::MOBILE ], 'http://gsm.lge.com/html/gsm/8-M3-D1.xml' => [ 'LG', 'G2 mini', 'Android', DeviceType::MOBILE ], 'http://gsm.lge.com/html/gsm/D610-M3-D1.xml' => [ 'LG', 'G2 mini', 'Android', DeviceType::MOBILE ], + 'http://gsm.lge.com/html/gsm/D610AR-M3-D1.xml' => [ 'LG', 'G2 mini', 'Android', DeviceType::MOBILE ], 'http://gsm.lge.com/html/gsm/D610TR-M3-D1.xml' => [ 'LG', 'G2 mini', 'Android', DeviceType::MOBILE ], 'http://gsm.lge.com/html/gsm/D610TR-M5-D1.xml' => [ 'LG', 'G2 mini', 'Android', DeviceType::MOBILE ], 'http://gsm.lge.com/html/gsm/D618-M3-D1.xml' => [ 'LG', 'G2 mini', 'Android', DeviceType::MOBILE ], @@ -2698,6 +2743,7 @@ 'http://device.sprintpcs.com/LG/LS990-SPRINT/LS990ZVA.rdf' => [ 'LG', 'G3', 'Android', DeviceType::MOBILE ], 'http://device.sprintpcs.com/LG/LS990-SPRINT/LS990ZVB.rdf' => [ 'LG', 'G3', 'Android', DeviceType::MOBILE ], 'http://device.sprintpcs.com/LG/LS990-SPRINT/LS990ZVC.rdf' => [ 'LG', 'G3', 'Android', DeviceType::MOBILE ], + 'http://device.sprintpcs.com/LG/LS995-SPRINT/LS990ZVA.rdf' => [ 'LG', 'G3', 'Android', DeviceType::MOBILE ], 'http://gsm.lge.com/html/gsm/%H:%M:%S/D855-M3-D1.xml' => [ 'LG', 'G3', 'Android', DeviceType::MOBILE ], 'http://gsm.lge.com/html/gsm/%s/%s/%s/D855-M3-D1.xml' => [ 'LG', 'G3', 'Android', DeviceType::MOBILE ], 'http://gsm.lge.com/html/gsm/985 4G-M3-D1.xml' => [ 'LG', 'G3', 'Android', DeviceType::MOBILE ], @@ -2766,6 +2812,7 @@ 'http://gsm.lge.com/html/gsm/Qf23_I29ZbHl2AuA/H815-M6-D1.xml' => [ 'LG', 'G4', 'Android', DeviceType::MOBILE ], 'http://gsm.lge.com/html/gsm/Qf23_I29ZbHl2AuA/H818-M3-D1.xml' => [ 'LG', 'G4', 'Android', DeviceType::MOBILE ], 'http://gsm.lge.com/html/gsm/YSdHbanpHC5h2R_E/H810-M10-D1.xml' => [ 'LG', 'G4', 'Android', DeviceType::MOBILE ], + 'http://gsm.lge.com/html/gsm/YSdHbanpHC5h2R_E/H810-M3-D1.xml' => [ 'LG', 'G4', 'Android', DeviceType::MOBILE ], 'http://gsm.lge.com/html/gsm/YSdHbanpHC5h2R_E/H812-M10-D1.xml' => [ 'LG', 'G4', 'Android', DeviceType::MOBILE ], 'http://gsm.lge.com/html/gsm/YSdHbanpHC5h2R_E/H815-M10-D1.xml' => [ 'LG', 'G4', 'Android', DeviceType::MOBILE ], 'http://gsm.lge.com/html/gsm/YSdHbanpHC5h2R_E/H815-M20-D1.xml' => [ 'LG', 'G4', 'Android', DeviceType::MOBILE ], @@ -2779,11 +2826,13 @@ 'http://gsm.lge.com/html/gsm/YSdHbanpHC5h2R_E/H818-M5-D1.xml' => [ 'LG', 'G4', 'Android', DeviceType::MOBILE ], 'http://gsm.lge.com/html/gsm/YSdHbanpHC5h2R_E/H819-M3-D1.xml' => [ 'LG', 'G4', 'Android', DeviceType::MOBILE ], 'http://gsm.lge.com/html/gsm/eNsCGw_apwMhnXPM/H900-M10-D1.xml' => [ 'LG', 'G4 Pro', 'Android', DeviceType::MOBILE ], + 'http://gsm.lge.com/html/gsm/_W4s8Utf_eec5qYV/H900-M10-D1.xml' => [ 'LG', 'G4 Pro', 'Android', DeviceType::MOBILE ], 'http://gsm.lge.com/html/gsm/-pBWguyi4C2qxxHn/H540-M3-D1.xml' => [ 'LG', 'G4 Stylus', 'Android', DeviceType::MOBILE ], 'http://gsm.lge.com/html/gsm/-pBWguyi4C2qxxHn/H540-M4-D1.xml' => [ 'LG', 'G4 Stylus', 'Android', DeviceType::MOBILE ], 'http://gsm.lge.com/html/gsm/b7_gceeg_u9fMBZq/H630-M3-D1.xml' => [ 'LG', 'G4 Stylus', 'Android', DeviceType::MOBILE ], 'http://gsm.lge.com/html/gsm/b7_gceeg_u9fMBZq/H630D-M3-D1.xml' => [ 'LG', 'G4 Stylus', 'Android', DeviceType::MOBILE ], 'http://gsm.lge.com/html/gsm/b7_gceeg_u9fMBZq/H635-M3-D1.xml' => [ 'LG', 'G4 Stylus', 'Android', DeviceType::MOBILE ], + 'http://gsm.lge.com/html/gsm/b7_gceeg_u9fMBZq/H635A-M3-D1.xml' => [ 'LG', 'G4 Stylus', 'Android', DeviceType::MOBILE ], 'http://gsm.lge.com/html/gsm/H540-M3-D1.xml' => [ 'LG', 'G4 Stylus', 'Android', DeviceType::MOBILE ], 'http://gsm.lge.com/html/gsm/MX_LG_G4015.xml' => [ 'LG', 'G4015', null, DeviceType::MOBILE ], 'http://gsm.lge.com/html/gsm/LG-G4020.xml' => [ 'LG', 'G4020', null, DeviceType::MOBILE ], @@ -3140,6 +3189,7 @@ 'http://uaprof.vmobl.com/LG/VM696-VMUB/1.0/UAProf.xml' => [ 'LG', 'Optimus Elite', 'Android', DeviceType::MOBILE ], 'http://gsm.lge.com/html/gsm/L40g-M6-D1.xml' => [ 'LG', 'Optimus Extreme', 'Android', DeviceType::MOBILE ], 'http://device.sprintpcs.com/LG/LS720-2011011301/LS720ZV8.rdf' => [ 'LG', 'Optimus F3', 'Android', DeviceType::MOBILE ], + 'http://device.sprintpcs.com/LG/LS720-BOOST//LG/LS720-BOOST/LS720ZV8.rdf' => [ 'LG', 'Optimus F3', 'Android', DeviceType::MOBILE ], 'http://device.sprintpcs.com/LG/LS720-BOOST/LS720ZV6.rdf' => [ 'LG', 'Optimus F3', 'Android', DeviceType::MOBILE ], 'http://device.sprintpcs.com/LG/LS720-BOOST/LS720ZV8.rdf' => [ 'LG', 'Optimus F3', 'Android', DeviceType::MOBILE ], 'http://device.sprintpcs.com/LG/LS720-Chameleon/latest' => [ 'LG', 'Optimus F3', 'Android', DeviceType::MOBILE ], @@ -3385,6 +3435,7 @@ 'http://device.sprintpcs.com/LG/L55C/LGL55CV1.rdf' => [ 'LG', 'Optimus Q', 'Android', DeviceType::MOBILE ], 'http://device.sprintpcs.com/LG/L55C/LGL55CV3.rdf' => [ 'LG', 'Optimus Q', 'Android', DeviceType::MOBILE ], 'http://device.sprintpcs.com/LG/LS670/LS670ZV8.rdf' => [ 'LG', 'Optimus S', 'Android', DeviceType::MOBILE ], + 'http://device.sprintpcs.com/LG/LS670/LS670ZV9.rdf' => [ 'LG', 'Optimus S', 'Android', DeviceType::MOBILE ], 'http://device.sprintpcs.com/LG/LS670/LS670ZVD.rdf' => [ 'LG', 'Optimus S', 'Android', DeviceType::MOBILE ], 'http://device.sprintpcs.com/LG/LS670/LS670ZVH.rdf' => [ 'LG', 'Optimus S', 'Android', DeviceType::MOBILE ], 'http://device.sprintpcs.com/LG/LS670/LS670ZVJ.rdf' => [ 'LG', 'Optimus S', 'Android', DeviceType::MOBILE ], @@ -3440,6 +3491,7 @@ 'http://gsm.lge.com/html/gsm/LGL15G-M10-D1.xml' => [ 'LG', 'Sunrise', 'Android', DeviceType::MOBILE ], 'http://gsm.lge.com/html/gsm/Q9h6lw8rC-nijrc6/LGL15G-M10-D1.xml' => [ 'LG', 'Sunrise', 'Android', DeviceType::MOBILE ], 'http://gsm.lge.com/html/gsm/yObOcsVFUyAgTj5W/LGL33L-M10-D1.xml' => [ 'LG', 'Sunset', 'Android', DeviceType::MOBILE ], + 'http://gsm.lge.com/html/gsm/LG-T310i-M3-D1-NS.xml' => [ 'LG', 'T310i', null, DeviceType::MOBILE ], 'http://gsm.lge.com/html/gsm/LG-T325-M3-D1.xml' => [ 'LG', 'T325', null, DeviceType::MOBILE ], 'http://gsm.lge.com/html/gsm/LG-T370-M3-D1.xml' => [ 'LG', 'T370', null, DeviceType::MOBILE ], 'http://gsm.lge.com/html/gsm/LG-T375-M3-D1.xml' => [ 'LG', 'T375', null, DeviceType::MOBILE ], @@ -3485,6 +3537,7 @@ 'http://gsm.lge.com/html/gsm/LG-U830.xml' => [ 'LG', 'U830 Chocolate', null, DeviceType::MOBILE ], 'http://gsm.lge.com/html/gsm/LG-U900.xml' => [ 'LG', 'U900', null, DeviceType::MOBILE ], 'http://gsm.lge.com/html/gsm/LG-U970.xml' => [ 'LG', 'U970 Shine', null, DeviceType::MOBILE ], + 'http://gsm.lge.com/html/gsm/eNsCGw_apwMhnXPM/H960-M3-D1.xml' => [ 'LG', 'V10', 'Android', DeviceType::MOBILE ], 'http://device.sprintpcs.com/LG/LG730-6100000231/LG730ZV5.rdf' => [ 'LG', 'Venice', 'Android', DeviceType::MOBILE ], 'http://device.sprintpcs.com/LG/LG730-BOOST/LG730ZV5.rdf' => [ 'LG', 'Venice', 'Android', DeviceType::MOBILE ], 'http://device.sprintpcs.com/LG/LG730-BOOST/LG730ZV6.rdf' => [ 'LG', 'Venice', 'Android', DeviceType::MOBILE ], @@ -3975,6 +4028,7 @@ 'http://nds1.nds.nokia.com/uaprof/N5000r100.xml' => [ 'Nokia', '5000', null, DeviceType::MOBILE ], 'http://nds.nokia.com/uaprof/N5070nmr100.xml' => [ 'Nokia', '5070', 'Series40', DeviceType::MOBILE ], 'http://nds.nokia.com/uaprof/N5070r100.xml' => [ 'Nokia', '5070', 'Series40', DeviceType::MOBILE ], + 'http://nds1.nds.nokia.com/uaprof/N5070r100.xml' => [ 'Nokia', '5070b', null, DeviceType::MOBILE ], 'http://nds.nokia.com/uaprof/N5100r100.xml' => [ 'Nokia', '5100', 'Series40', DeviceType::MOBILE ], 'http://nds.nokia.com/uaprof/N5100r200.xml' => [ 'Nokia', '5100', 'Series40', DeviceType::MOBILE ], 'http://nds1.nds.nokia.com/uaprof/N5130c-2r100.xml' => [ 'Nokia', '5130 XpressMusic', 'Series40', DeviceType::MOBILE ], @@ -4338,6 +4392,7 @@ 'http://nds.nokia.com/uaprof/N6708r100.xml' => [ 'Nokia', '6708', 'UIQ', DeviceType::MOBILE ], 'http://nds1.nds.nokia.com/uaprof/Nokia6710sr100-2G.xml' => [ 'Nokia', '6710 Navigator', 'Series60', DeviceType::MOBILE ], 'http://nds1.nds.nokia.com/uaprof/Nokia6710sr100-3G.xml' => [ 'Nokia', '6710 Navigator', 'Series60', DeviceType::MOBILE ], + 'http://nds1.nds.nokia.com/uaprof/Nokia6720c-1br100.xml' => [ 'Nokia', '6720 classic', 'Series60', DeviceType::MOBILE ], 'http://nds1.nds.nokia.com/uaprof/Nokia6720cr100.xml' => [ 'Nokia', '6720 classic', 'Series60', DeviceType::MOBILE ], 'http://nds1.nds.nokia.com/uaprof/N6730cr100.xml' => [ 'Nokia', '6730 classic', 'Series60', DeviceType::MOBILE ], 'http://nds1.nds.nokia.com/uaprof/N6760s-1r100-2G.xml' => [ 'Nokia', '6760 slide', 'Series60', DeviceType::MOBILE ], @@ -4811,6 +4866,7 @@ 'http://www.oppo.com/resource/UA-PROF/OPPOR8007.xml' => [ 'Oppo', 'R1S R8007', 'Android', DeviceType::MOBILE ], 'http://ua.prof.oppo.com/resource/ua-PROF/OPPOR8201.xml' => [ 'Oppo', 'R1x R8201', 'Android', DeviceType::MOBILE ], 'http://ua.prof.oppo.com/resource/ua-PROF/OPPOR8206.xml' => [ 'Oppo', 'R1x R8206', 'Android', DeviceType::MOBILE ], + 'http://www.oppo.com/resource/UA-PROF/OPPOR2010.xml' => [ 'Oppo', 'R2010', 'Android', DeviceType::MOBILE ], 'http://www.oppo.com/resource/UA-PROF/OPPOR2017.xml' => [ 'Oppo', 'R2017', 'Android', DeviceType::MOBILE ], 'http://www.oppo.com/resource/UA-PROF/OPPOR7007.xml' => [ 'Oppo', 'R3 R7007', 'Android', DeviceType::MOBILE ], 'http://ua.prof.oppo.com/resource/ua-PROF/OPPOR8106.xml' => [ 'Oppo', 'R5 R8106', 'Android', DeviceType::MOBILE ], @@ -4835,6 +4891,7 @@ 'http://www.oppo.com/resource/UA-PROF/OPPOR819T.xml' => [ 'Oppo', 'Real R819T', 'Android', DeviceType::MOBILE ], 'http://www.oppo.com/resource/UA-PROF/OPPOU707T.xml' => [ 'Oppo', 'U2S U707T', 'Android', DeviceType::MOBILE ], 'http://www.oppo.com/resource/UA-PROF/OPPOU705T.xml' => [ 'Oppo', 'U705T', 'Android', DeviceType::MOBILE ], + 'http://www.gigabytecm.com/ua/Boston4G.xml' => [ 'Optimus', 'Boston 4G', 'Android', DeviceType::MOBILE ], 'http://www.qisda.com/UserFiles/uaprof_boston_4g.xml' => [ 'Optimus', 'Boston 4G', 'Android', DeviceType::MOBILE ], 'https://s3-eu-west-1.amazonaws.com/fotabucket/uaprof/uaprof_qisda_boston.xml' => [ 'Optimus', 'Boston 4G', 'Android', DeviceType::MOBILE ], 'http://www.opto.co.jp/win_ht/uaprof/H-21-1.0.xml' => [ 'Opto', 'H-21', 'Windows Mobile', DeviceType::MOBILE ], @@ -5005,6 +5062,8 @@ 'http://wap.dl.prestigio.com/uaprofile/tablets/PMT5002_Wi_V1.xml' => [ 'Prestigio', 'Multipad Wize 5002', 'Android', DeviceType::TABLET ], 'http://wap.dl.prestigio.com/uaprofile/smartphones/PAP3350DUO_V1.xml' => [ 'Prestigio', 'Multiphone 3350 Duo', 'Android', DeviceType::MOBILE ], 'http://wap.dl.prestigio.com/uaprofile/smartphones/PAP3400DUO_V1.xml' => [ 'Prestigio', 'Multiphone 3400 Duo', 'Android', DeviceType::MOBILE ], + 'http://wap.dl.prestigio.com/uaprofile/smartphones/PSP3404DUO_V1.xml' => [ 'Prestigio', 'Multiphone 3404 Duo', 'Android', DeviceType::MOBILE ], + 'http://wap.dl.prestigio.com/uaprofile/smartphones/PSP3405DUO_V1.xml' => [ 'Prestigio', 'Multiphone 3405 Duo', 'Android', DeviceType::MOBILE ], 'http://wap.dl.prestigio.com/uaprofile/smartphones/PSP3450DUO_V1.xml' => [ 'Prestigio', 'Multiphone 3450 Duo', 'Android', DeviceType::MOBILE ], 'http://wap.dl.prestigio.com/uaprofile/smartphones/PSP3502DUO_V1.xml' => [ 'Prestigio', 'Multiphone 3502 Duo', 'Android', DeviceType::MOBILE ], 'http://wap.dl.prestigio.com/uaprofile/smartphones/PAP3540DUO_Polcomtel_V1.xml' => [ 'Prestigio', 'Multiphone 3540 Duo', 'Android', DeviceType::MOBILE ], @@ -5018,6 +5077,7 @@ 'http://wap.dl.prestigio.com/uaprofile/smartphones/PAP5044DUO_V1.xml' => [ 'Prestigio', 'Multiphone 5044 Duo', 'Android', DeviceType::MOBILE ], 'http://wap.dl.prestigio.com/uaprofile/smartphones/PAP5430_V1.xml' => [ 'Prestigio', 'Multiphone 5430', 'Android', DeviceType::MOBILE ], 'http://wap.dl.prestigio.com/uaprofile/smartphones/PAP5450DUO_V1.xml' => [ 'Prestigio', 'Multiphone 5450 Duo', 'Android', DeviceType::MOBILE ], + 'http://wap.dl.prestigio.com/uaprofile/smartphones/PAP5451DUO_V1.xml' => [ 'Prestigio', 'Multiphone 5451 Duo', 'Android', DeviceType::MOBILE ], 'http://wap.dl.prestigio.com/uaprofile/smartphones/PSP5453DUO_V1.xml' => [ 'Prestigio', 'Multiphone 5453 Duo', 'Android', DeviceType::MOBILE ], 'http://wap.dl.prestigio.com/uaprofile/smartphones/PSP5454DUO_V1.xml' => [ 'Prestigio', 'Multiphone 5454 Duo', 'Android', DeviceType::MOBILE ], 'http://wap.dl.prestigio.com/uaprofile/smartphones/PSP5455_DUO_V1.xml' => [ 'Prestigio', 'Multiphone 5455 Duo', 'Android', DeviceType::MOBILE ], @@ -5673,6 +5733,7 @@ 'http://wap.samsungmobile.com/uaprof/SM-G318H.xml' => [ 'Samsung', 'Galaxy Ace 4 Neo', 'Android', DeviceType::MOBILE ], 'http://wap.samsungmobile.com/uaprof/SM-G318HZ.xml' => [ 'Samsung', 'Galaxy Ace 4 Neo', 'Android', DeviceType::MOBILE ], 'http://wap.samsungmobile.com/uaprof/SM-G318ML.xml' => [ 'Samsung', 'Galaxy Ace 4 Neo', 'Android', DeviceType::MOBILE ], + 'http://wap.samsungmobile.com/uaprof/SM-G318MZ.xml' => [ 'Samsung', 'Galaxy Ace 4 Neo', 'Android', DeviceType::MOBILE ], 'http://nmsc.ctvap.cn/uaprof/SCH/SCH_I619_1_20120112.xml' => [ 'Samsung', 'Galaxy Ace A+', 'Android', DeviceType::MOBILE ], 'http://wap.samsungmobile.com/uaprof/SCH-I619.xml' => [ 'Samsung', 'Galaxy Ace A+', 'Android', DeviceType::MOBILE ], 'http://nmsc.ctvap.cn/uaprof/SCH/SCH_i589_1_20110504.xml' => [ 'Samsung', 'Galaxy Ace Duos', 'Android', DeviceType::MOBILE ], @@ -5730,6 +5791,7 @@ 'http://wap.samsungmobile.com/uaprof/SM-G350BO.xml' => [ 'Samsung', 'Galaxy Core Plus', 'Android', DeviceType::MOBILE ], 'http://wap.samsungmobile.com/uaprof/SM-G350L.xml' => [ 'Samsung', 'Galaxy Core Plus', 'Android', DeviceType::MOBILE ], 'http://device.sprintpcs.com/Samsung/SM-G360P-2012071301/NL8.rdf' => [ 'Samsung', 'Galaxy Core Prime', 'Android', DeviceType::MOBILE ], + 'http://device.sprintpcs.com/Samsung/SM-G360P-2012071301/OH1.rdf' => [ 'Samsung', 'Galaxy Core Prime', 'Android', DeviceType::MOBILE ], 'http://device.sprintpcs.com/Samsung/SM-G360P-BOOST/NL8.rdf' => [ 'Samsung', 'Galaxy Core Prime', 'Android', DeviceType::MOBILE ], 'http://device.sprintpcs.com/Samsung/SM-G360P-BOOST/OF4.rdf' => [ 'Samsung', 'Galaxy Core Prime', 'Android', DeviceType::MOBILE ], 'http://device.sprintpcs.com/Samsung/SM-G360P-BOOST/OH1.rdf' => [ 'Samsung', 'Galaxy Core Prime', 'Android', DeviceType::MOBILE ], @@ -5844,6 +5906,7 @@ 'http://wap.samsungmobile.com/uaprof/SM-J500H.xml' => [ 'Samsung', 'Galaxy J5', 'Android', DeviceType::MOBILE ], 'http://wap.samsungmobile.com/uaprof/SM-J500M.xml' => [ 'Samsung', 'Galaxy J5', 'Android', DeviceType::MOBILE ], 'http://wap.samsungmobile.com/uaprof/SM-J500MPET.xml' => [ 'Samsung', 'Galaxy J5', 'Android', DeviceType::MOBILE ], + 'http://wap.samsungmobile.com/uaprof/SM-J500Y.xml' => [ 'Samsung', 'Galaxy J5', 'Android', DeviceType::MOBILE ], 'http://wap.samsungmobile.com/uaprof/SM-J700F.xml' => [ 'Samsung', 'Galaxy J7', 'Android', DeviceType::MOBILE ], 'http://wap.samsungmobile.com/uaprof/SM-J700H.xml' => [ 'Samsung', 'Galaxy J7', 'Android', DeviceType::MOBILE ], 'http://wap.samsungmobile.com/uaprof/SM-J700M.xml' => [ 'Samsung', 'Galaxy J7', 'Android', DeviceType::MOBILE ], @@ -5984,6 +6047,7 @@ 'http://device.sprintpcs.com/Samsung/SM-N920P-SPRINT/OI6.rdf' => [ 'Samsung', 'Galaxy Note 5', 'Android', DeviceType::MOBILE ], 'http://device.sprintpcs.com/Samsung/SM-N920P-SPRINT/OJ6.rdf' => [ 'Samsung', 'Galaxy Note 5', 'Android', DeviceType::MOBILE ], 'http://device.sprintpcs.com/Samsung/SM-N920P-SPRINT/OK3.rdf' => [ 'Samsung', 'Galaxy Note 5', 'Android', DeviceType::MOBILE ], + 'http://wap.samsungmobile.com/uaprof/SM-N920T.xml' => [ 'Samsung', 'Galaxy Note 5', 'Android', DeviceType::MOBILE ], 'http://wap.samsungmobile.com/uaprof/GT-N5100.xml' => [ 'Samsung', 'Galaxy Note 8.0', 'Android', DeviceType::TABLET ], 'http://wap.samsungmobile.com/uaprof/GT-N5110.xml' => [ 'Samsung', 'Galaxy Note 8.0', 'Android', DeviceType::TABLET ], 'http://wap.samsungmobile.com/uaprof/GT-N5120.xml' => [ 'Samsung', 'Galaxy Note 8.0', 'Android', DeviceType::TABLET ], @@ -6210,6 +6274,7 @@ 'http://device.sprintpcs.com/Samsung/SPH-L710-VIRGIN/MK5.rdf' => [ 'Samsung', 'Galaxy S III', 'Android', DeviceType::MOBILE ], 'http://device.sprintpcs.com/Samsung/SPH-L710-VIRGIN/NDC.rdf' => [ 'Samsung', 'Galaxy S III', 'Android', DeviceType::MOBILE ], 'http://device.sprintpcs.com/Samsung/SPH-L710-VIRGIN/NJ3.rdf' => [ 'Samsung', 'Galaxy S III', 'Android', DeviceType::MOBILE ], + 'http://device.sprintpcs.com/Samsung/SPH-L710-VIRGIN/OJ1.rdf' => [ 'Samsung', 'Galaxy S III', 'Android', DeviceType::MOBILE ], 'http://device.sprintpcs.com/Samsung/SPH-L710/LE5.rdf' => [ 'Samsung', 'Galaxy S III', 'Android', DeviceType::MOBILE ], 'http://device.sprintpcs.com/Samsung/SPH-L710/LEN.rdf' => [ 'Samsung', 'Galaxy S III', 'Android', DeviceType::MOBILE ], 'http://device.sprintpcs.com/Samsung/SPH-L710/LF9.rdf' => [ 'Samsung', 'Galaxy S III', 'Android', DeviceType::MOBILE ], @@ -6311,6 +6376,7 @@ 'http://device.sprintpcs.com/Samsung/SPH-L720-SPRINT/NG2.rdf' => [ 'Samsung', 'Galaxy S4', 'Android', DeviceType::MOBILE ], 'http://device.sprintpcs.com/Samsung/SPH-L720-SPRINT/OD2.rdf' => [ 'Samsung', 'Galaxy S4', 'Android', DeviceType::MOBILE ], 'http://device.sprintpcs.com/Samsung/SPH-L720-SPRINT/OH1.rdf' => [ 'Samsung', 'Galaxy S4', 'Android', DeviceType::MOBILE ], + 'http://device.sprintpcs.com/Samsung/SPH-L720-SPRINT/OK3.rdf' => [ 'Samsung', 'Galaxy S4', 'Android', DeviceType::MOBILE ], 'http://device.sprintpcs.com/Samsung/SPH-L720T-Chameleon/latest' => [ 'Samsung', 'Galaxy S4', 'Android', DeviceType::MOBILE ], 'http://device.sprintpcs.com/Samsung/SPH-L720T-Chameleon/NG5.rdf' => [ 'Samsung', 'Galaxy S4', 'Android', DeviceType::MOBILE ], 'http://device.sprintpcs.com/Samsung/SPH-L720T-MVNO/NC6.rdf' => [ 'Samsung', 'Galaxy S4', 'Android', DeviceType::MOBILE ], @@ -6324,6 +6390,7 @@ 'http://device.sprintpcs.com/Samsung/SPH-L720T-SPRINT/OD2.rdf' => [ 'Samsung', 'Galaxy S4', 'Android', DeviceType::MOBILE ], 'http://device.sprintpcs.com/Samsung/SPH-L720T-SPRINT/OF1.rdf' => [ 'Samsung', 'Galaxy S4', 'Android', DeviceType::MOBILE ], 'http://device.sprintpcs.com/Samsung/SPH-L720T-SPRINT/OH1.rdf' => [ 'Samsung', 'Galaxy S4', 'Android', DeviceType::MOBILE ], + 'http://device.sprintpcs.com/Samsung/SPH-L720T-SPRINT/OK3.rdf' => [ 'Samsung', 'Galaxy S4', 'Android', DeviceType::MOBILE ], 'http://device.sprintpcs.com/Samsung/SPH-L72A-SPRINT/MF9.rdf' => [ 'Samsung', 'Galaxy S4', 'Android', DeviceType::MOBILE ], 'http://gsm.lge.com/html/gsm/I9500-M3-D1-KK.xml' => [ 'Samsung', 'Galaxy S4', 'Android', DeviceType::MOBILE ], 'http://nmsc.ctvap.cn/uaprof/SCH/SCH_I959_1_20130319.xml' => [ 'Samsung', 'Galaxy S4', 'Android', DeviceType::MOBILE ], @@ -6393,6 +6460,7 @@ 'http://device.sprintpcs.com/Samsung/SM-G900P-BOOST/OD3.rdf' => [ 'Samsung', 'Galaxy S5', 'Android', DeviceType::MOBILE ], 'http://device.sprintpcs.com/Samsung/SM-G900P-BOOST/OF6.rdf' => [ 'Samsung', 'Galaxy S5', 'Android', DeviceType::MOBILE ], 'http://device.sprintpcs.com/Samsung/SM-G900P-BOOST/OG1.rdf' => [ 'Samsung', 'Galaxy S5', 'Android', DeviceType::MOBILE ], + 'http://device.sprintpcs.com/Samsung/SM-G900P-BOOST/OK4.rdf' => [ 'Samsung', 'Galaxy S5', 'Android', DeviceType::MOBILE ], 'http://device.sprintpcs.com/Samsung/SM-G900P-Chameleon/latest' => [ 'Samsung', 'Galaxy S5', 'Android', DeviceType::MOBILE ], 'http://device.sprintpcs.com/Samsung/SM-G900P-Chameleon/NCB.rdf' => [ 'Samsung', 'Galaxy S5', 'Android', DeviceType::MOBILE ], 'http://device.sprintpcs.com/Samsung/SM-G900P-MVNO/ND2.rdf' => [ 'Samsung', 'Galaxy S5', 'Android', DeviceType::MOBILE ], @@ -6452,10 +6520,12 @@ 'http://wap.samsungmobile.com/uaprof/SM-G903M.xml' => [ 'Samsung', 'Galaxy S5 Neo', 'Android', DeviceType::MOBILE ], 'http://device.sprintpcs.com/Samsung/SM-G860P-Chameleon/latest' => [ 'Samsung', 'Galaxy S5 Sport', 'Android', DeviceType::MOBILE ], 'http://device.sprintpcs.com/Samsung/SM-G860P-SPRINT/latest' => [ 'Samsung', 'Galaxy S5 Sport', 'Android', DeviceType::MOBILE ], + 'http://device.sprintpcs.com/Samsung/SM-G860P-SPRINT/NG2.rdf' => [ 'Samsung', 'Galaxy S5 Sport', 'Android', DeviceType::MOBILE ], 'http://device.sprintpcs.com/Samsung/SM-G860P-SPRINT/NG3.rdf' => [ 'Samsung', 'Galaxy S5 Sport', 'Android', DeviceType::MOBILE ], 'http://device.sprintpcs.com/Samsung/SM-G860P-SPRINT/NK2.rdf' => [ 'Samsung', 'Galaxy S5 Sport', 'Android', DeviceType::MOBILE ], 'http://device.sprintpcs.com/Samsung/SM-G860P-SPRINT/OC5.rdf' => [ 'Samsung', 'Galaxy S5 Sport', 'Android', DeviceType::MOBILE ], 'http://device.sprintpcs.com/Samsung/SM-G860P-SPRINT/OH1.rdf' => [ 'Samsung', 'Galaxy S5 Sport', 'Android', DeviceType::MOBILE ], + 'http://device.sprintpcs.com/Samsung/SM-G860P-SPRINT/OK1.rdf' => [ 'Samsung', 'Galaxy S5 Sport', 'Android', DeviceType::MOBILE ], 'http://device.sprintpcs.com/Samsung/SM-G920P-BOOST/OCF.rdf' => [ 'Samsung', 'Galaxy S6', 'Android', DeviceType::MOBILE ], 'http://device.sprintpcs.com/Samsung/SM-G920P-BOOST/OE2.rdf' => [ 'Samsung', 'Galaxy S6', 'Android', DeviceType::MOBILE ], 'http://device.sprintpcs.com/Samsung/SM-G920P-BOOST/OI1.rdf' => [ 'Samsung', 'Galaxy S6', 'Android', DeviceType::MOBILE ], @@ -6470,6 +6540,7 @@ 'http://device.sprintpcs.com/Samsung/SM-G920P-SPRINT/OH1.rdf' => [ 'Samsung', 'Galaxy S6', 'Android', DeviceType::MOBILE ], 'http://device.sprintpcs.com/Samsung/SM-G920P-SPRINT/OI1.rdf' => [ 'Samsung', 'Galaxy S6', 'Android', DeviceType::MOBILE ], 'http://device.sprintpcs.com/Samsung/SM-G920P-SPRINT/OJ7.rdf' => [ 'Samsung', 'Galaxy S6', 'Android', DeviceType::MOBILE ], + 'http://device.sprintpcs.com/Samsung/SM-G920P-SPRINT/OL1.rdf' => [ 'Samsung', 'Galaxy S6', 'Android', DeviceType::MOBILE ], 'http://nmsc.ctvap.cn/uaprof/SCH/SCH_SM-G9209_1_20150302.xml' => [ 'Samsung', 'Galaxy S6', 'Android', DeviceType::MOBILE ], 'http://wap.samsungmobile.com/uaprof/SM-G920A.xml' => [ 'Samsung', 'Galaxy S6', 'Android', DeviceType::MOBILE ], 'http://wap.samsungmobile.com/uaprof/SM-G920AZ.xml' => [ 'Samsung', 'Galaxy S6', 'Android', DeviceType::MOBILE ], @@ -6504,6 +6575,7 @@ 'http://device.sprintpcs.com/Samsung/SM-G928P-SPRINT/OJ6.rdf' => [ 'Samsung', 'Galaxy S6 Edge+', 'Android', DeviceType::MOBILE ], 'http://device.sprintpcs.com/Samsung/SM-G928P-SPRINT/OK3.rdf' => [ 'Samsung', 'Galaxy S6 Edge+', 'Android', DeviceType::MOBILE ], 'http://wap.samsungmobile.com/uaprof/SAMSUNGUAPROFA.xml' => [ 'Samsung', 'Galaxy S6 Edge+', 'Android', DeviceType::MOBILE ], + 'http://wap.samsungmobile.com/uaprof/SM-G928F.xml' => [ 'Samsung', 'Galaxy S6 Edge+', 'Android', DeviceType::MOBILE ], 'http://wap.samsungmobile.com/uaprof/SM-G928G.xml' => [ 'Samsung', 'Galaxy S6 Edge+', 'Android', DeviceType::MOBILE ], 'http://wap.samsungmobile.com/uaprof/GT-I9003.xml' => [ 'Samsung', 'Galaxy SL', 'Android', DeviceType::MOBILE ], 'http://wap.samsungmobile.com/uaprof/GT-i9003L.xml' => [ 'Samsung', 'Galaxy SL', 'Android', DeviceType::MOBILE ], @@ -6590,6 +6662,7 @@ 'http://wap.samsungmobile.com/uaprof/SM-T335BO.xml' => [ 'Samsung', 'Galaxy Tab 4 (8.0)', 'Android', DeviceType::TABLET ], 'http://wap.samsungmobile.com/uaprof/SM-T337A.xml' => [ 'Samsung', 'Galaxy Tab 4 (8.0)', 'Android', DeviceType::TABLET ], 'http://wap.samsungmobile.com/uaprof/SM-T337T.xml' => [ 'Samsung', 'Galaxy Tab 4 (8.0)', 'Android', DeviceType::TABLET ], + 'http://wap.samsungmobile.com/uaprof/SM-T239.xml' => [ 'Samsung', 'Galaxy Tab 4 Lite', 'Android', DeviceType::TABLET ], 'http://wap.samsungmobile.com/uaprof/SM-T239M.xml' => [ 'Samsung', 'Galaxy Tab 4 Lite', 'Android', DeviceType::TABLET ], 'http://wap.samsungmobile.com/uaprof/SGH-I987.xml' => [ 'Samsung', 'Galaxy Tab 7.0', 'Android', DeviceType::TABLET ], 'http://wap.samsungmobile.com/uaprof/SGH-T849.xml' => [ 'Samsung', 'Galaxy Tab 7.0', 'Android', DeviceType::TABLET ], @@ -6653,9 +6726,11 @@ 'http://device.sprintpcs.com/Samsung/SM-T817P-Chameleon/latest' => [ 'Samsung', 'Galaxy Tab S2 9.7', 'Android', DeviceType::TABLET ], 'http://device.sprintpcs.com/Samsung/SM-T817P-SPRINT/OH6.rdf' => [ 'Samsung', 'Galaxy Tab S2 9.7', 'Android', DeviceType::TABLET ], 'http://device.sprintpcs.com/Samsung/SM-T817P-SPRINT/OJ5.rdf' => [ 'Samsung', 'Galaxy Tab S2 9.7', 'Android', DeviceType::TABLET ], + 'http://device.sprintpcs.com/Samsung/SM-T817P-SPRINT/OL1.rdf' => [ 'Samsung', 'Galaxy Tab S2 9.7', 'Android', DeviceType::TABLET ], 'http://wap.samsungmobile.com/uaprof/SM-T810.xml' => [ 'Samsung', 'Galaxy Tab S2 9.7', 'Android', DeviceType::TABLET ], 'http://wap.samsungmobile.com/uaprof/SM-T815.xml' => [ 'Samsung', 'Galaxy Tab S2 9.7', 'Android', DeviceType::TABLET ], 'http://wap.samsungmobile.com/uaprof/SM-T815Y.xml' => [ 'Samsung', 'Galaxy Tab S2 9.7', 'Android', DeviceType::TABLET ], + 'http://wap.samsungmobile.com/uaprof/SM-T817A.xml' => [ 'Samsung', 'Galaxy Tab S2 9.7', 'Android', DeviceType::TABLET ], 'http://wap.samsungmobile.com/uaprof/SM-T817T.xml' => [ 'Samsung', 'Galaxy Tab S2 9.7', 'Android', DeviceType::TABLET ], 'http://wap.samsungmobile.com/uaprof/SM-T817W.xml' => [ 'Samsung', 'Galaxy Tab S2 9.7', 'Android', DeviceType::TABLET ], 'http://nmsc.ctvap.cn/uaprof/SCH/SCH_I719_1_20120413.xml' => [ 'Samsung', 'Galaxy Trend', 'Android', DeviceType::MOBILE ], @@ -6686,6 +6761,7 @@ 'http://device.sprintpcs.com/Samsung/SPH-L300/LJ9.rdf' => [ 'Samsung', 'Galaxy Victory 4G LTE', 'Android', DeviceType::MOBILE ], 'http://device.sprintpcs.com/Samsung/SPH-L300/MC1.rdf' => [ 'Samsung', 'Galaxy Victory 4G LTE', 'Android', DeviceType::MOBILE ], 'http://device.sprintpcs.com/Samsung/SPH-L300/ND4.rdf' => [ 'Samsung', 'Galaxy Victory 4G LTE', 'Android', DeviceType::MOBILE ], + 'http://wap.samsungmobile.com/uaprof/SM-T670.xml' => [ 'Samsung', 'Galaxy View', 'Android', DeviceType::TABLET ], 'http://wap.samsungmobile.com/uaprof/GT-I8150.xml' => [ 'Samsung', 'Galaxy W', 'Android', DeviceType::MOBILE ], 'http://wap.samsungmobile.com/uaprof/GT-I8150B.xml' => [ 'Samsung', 'Galaxy W', 'Android', DeviceType::MOBILE ], 'http://wap.samsungmobile.com/uaprof/GT-I8150T.xml' => [ 'Samsung', 'Galaxy W', 'Android', DeviceType::MOBILE ], @@ -6738,6 +6814,7 @@ 'http://wap.samsungmobile.com/uaprof/GT-S6310NBO.xml' => [ 'Samsung', 'Galaxy Young', 'Android', DeviceType::MOBILE ], 'http://wap.samsungmobile.com/uaprof/GT-S6310T.xml' => [ 'Samsung', 'Galaxy Young', 'Android', DeviceType::MOBILE ], 'http://wap.samsungmobile.com/uaprof/SM-G130BT.xml' => [ 'Samsung', 'Galaxy Young 2', 'Android', DeviceType::MOBILE ], + 'http://wap.samsungmobile.com/uaprof/SM-G130BU.xml' => [ 'Samsung', 'Galaxy Young 2', 'Android', DeviceType::MOBILE ], 'http://wap.samsungmobile.com/uaprof/SM-G130H.xml' => [ 'Samsung', 'Galaxy Young 2', 'Android', DeviceType::MOBILE ], 'http://wap.samsungmobile.com/uaprof/SM-G130HN.xml' => [ 'Samsung', 'Galaxy Young 2 Duos', 'Android', DeviceType::MOBILE ], 'http://wap.samsungmobile.com/uaprof/SM-G130HNBO.xml' => [ 'Samsung', 'Galaxy Young 2 Duos', 'Android', DeviceType::MOBILE ], @@ -7836,6 +7913,7 @@ 'http://uaprof.sonymobile.com/D5303R1903.xml' => [ 'Sony', 'Xperia T2 Ultra', 'Android', DeviceType::MOBILE ], 'http://uaprof.sonymobile.com/D5306R1903.xml' => [ 'Sony', 'Xperia T2 Ultra', 'Android', DeviceType::MOBILE ], 'http://uaprof.sonymobile.com/D5306R1912.xml' => [ 'Sony', 'Xperia T2 Ultra', 'Android', DeviceType::MOBILE ], + 'http://uaprof.sonymobile.com/D5316R1903.xml' => [ 'Sony', 'Xperia T2 Ultra', 'Android', DeviceType::MOBILE ], 'http://uaprof.sonymobile.com/D5322R1903.xml' => [ 'Sony', 'Xperia T2 Ultra', 'Android', DeviceType::TABLET ], 'http://uaprof.sonymobile.com/XM50hR1911.xml' => [ 'Sony', 'Xperia T2 Ultra', 'Android', DeviceType::TABLET ], 'http://uaprof.sonymobile.com/XM50hR1912.xml' => [ 'Sony', 'Xperia T2 Ultra', 'Android', DeviceType::MOBILE ], @@ -8054,6 +8132,7 @@ 'http://wap.sonyericsson.com/UAprof/K790aR201.xml' => [ 'Sony Ericsson', 'K790a', null, DeviceType::MOBILE ], 'http://wap.sonyericsson.com/UAprof/K790iR201.xml' => [ 'Sony Ericsson', 'K790i', null, DeviceType::MOBILE ], 'http://wap.sonyericsson.com/UAprof/K800iR201.xml' => [ 'Sony Ericsson', 'K800i', null, DeviceType::MOBILE ], + 'http://wap.sonyericsson.com/UAprof/K810iR201.xml' => [ 'Sony Ericsson', 'K810i', null, DeviceType::MOBILE ], 'http://wap.sonyericsson.com/UAprof/K850iR101.xml' => [ 'Sony Ericsson', 'K850i', null, DeviceType::MOBILE ], 'http://uaprof.sonymobile.com/WT19iR1002.xml' => [ 'Sony Ericsson', 'Live with Walkman', 'Android', DeviceType::MOBILE ], 'http://wap.sonyericsson.com/UAprof/Live with WalkmanR411.xml' => [ 'Sony Ericsson', 'Live with Walkman', 'Android', DeviceType::MOBILE ], @@ -8507,6 +8586,7 @@ 'http://wap1.mtk.com.tw/MTK_Phone_JB_UAprofile.xml' => [ 'Vivo', 'Y613', 'Android', DeviceType::MOBILE ], 'http://download0.inner.bbk.com/pro/VIV_vivo_Y913_1_20140922.xml' => [ 'Vivo', 'Y913', 'Android', DeviceType::MOBILE ], 'http://download0.vivo.com.cn/pro/browser/VIV_vivo_Y923_1_20150319.xml' => [ 'Vivo', 'Y923', 'Android', DeviceType::MOBILE ], + 'http://download0.inner.bbk.com/pro/VIV_vivo_Y928_1_20141008.xml' => [ 'Vivo', 'Y928', 'Android', DeviceType::MOBILE ], 'http://download0.vivo.com.cn/pro/browser/VIV_vivo_Y937_1_20150701.xml' => [ 'Vivo', 'Y937', 'Android', DeviceType::MOBILE ], 'http://wap.vkmobile.com/uaprof/vk5000.xml' => [ 'VK Mobile', 'VK5000', null, DeviceType::MOBILE ], 'http://www.zte.com.cn/mobile/uaprof/Vodafone-1231.xml' => [ 'Vodafone', '1231', null, DeviceType::MOBILE ], @@ -8582,6 +8662,9 @@ 'http://www.fly-phone.ru/UAP/Fly_IQ4501_Quad.xml' => [ 'Walton', 'Primo HM', 'Android', DeviceType::MOBILE ], 'http://whaminfocom.com/profiles/WG40.xml' => [ 'Wham', 'WG40', 'Android', DeviceType::MOBILE ], 'http://www.wonutel.co.kr/UAProfile/WonuS1.xml' => [ 'Wonu', 'S1', null, DeviceType::MOBILE ], + 'http://apkupdate.miui.com/other/HM2LTE-IN_H2X_2014818_UAProfile.xml' => [ 'Xiaomi', 'Redmi 2', 'Android', DeviceType::MOBILE ], + 'http://apkupdate.miui.com/other/HM2LTE-SA_H2X_2014817_UAProfile.xml' => [ 'Xiaomi', 'Redmi 2', 'Android', DeviceType::MOBILE ], + 'http://www.oppo.com/resource/UA-PROF/OPPOHM Note 1S.xml' => [ 'Xiaomi', 'Redmi Note 1', 'Android', DeviceType::MOBILE ], 'http://apkupdate.miui.com/other/HM2013023_UAprofile.xml' => [ 'Xiaomi', 'Redmi Red Rice', 'Android', DeviceType::MOBILE ], 'http://apkupdate.miui.com/other/HM2014011_UAprofile.xml' => [ 'Xiaomi', 'Redmi Red Rice', 'Android', DeviceType::MOBILE ], 'http://apkupdate.miui.com/other/HM2014501_UAprofile.xml' => [ 'Xiaomi', 'Redmi Red Rice', 'Android', DeviceType::MOBILE ], @@ -8615,6 +8698,7 @@ 'http://www.zte.com.cn/mobile/uaprof/ZTE_Blade_L2.xml' => [ 'ZTE', 'Blade L2', 'Android', DeviceType::MOBILE ], 'http://www.zte.com.cn/mobile/uaprof/ZTE_Blade_L2_4.4.xml' => [ 'ZTE', 'Blade L2', 'Android', DeviceType::MOBILE ], 'http://www.zte.com.cn/mobile/uaprof/Blade L2 Plus.xml' => [ 'ZTE', 'Blade L2 Plus', 'Android', DeviceType::MOBILE ], + 'http://www.zte.com.cn/mobile/uaprof/Blade_L3.xml' => [ 'ZTE', 'Blade L3', 'Android', DeviceType::MOBILE ], 'http://www.zte.com.cn/mobile/uaprof/ZTE_Blade_L3.xml' => [ 'ZTE', 'Blade L3', 'Android', DeviceType::MOBILE ], 'http://www.zte.com.cn/mobile/uaprof/ZTE_Blade_Q.xml' => [ 'ZTE', 'Blade Q', 'Android', DeviceType::MOBILE ], 'http://www.zte.com.cn/mobile/uaprof/ZTE_Blade_Q_Lux.xml' => [ 'ZTE', 'Blade Q Lux', 'Android', DeviceType::MOBILE ], @@ -8760,6 +8844,7 @@ 'http://device.sprintpcs.com/ZTE/N9130-BOOST/N9130V1.0.0B06.rdf' => [ 'ZTE', 'N9130 Speed', 'Android', DeviceType::MOBILE ], 'http://device.sprintpcs.com/ZTE/N9130-BOOST/N9130V1.0.0B08.rdf' => [ 'ZTE', 'N9130 Speed', 'Android', DeviceType::MOBILE ], 'http://device.sprintpcs.com/ZTE/N9130-BOOST/N9130V1.0.0B09.rdf' => [ 'ZTE', 'N9130 Speed', 'Android', DeviceType::MOBILE ], + 'http://device.sprintpcs.com/ZTE/N9130-Chameleon/N9130V1.0.0B09.rdf' => [ 'ZTE', 'N9130 Speed', 'Android', DeviceType::MOBILE ], 'http://device.sprintpcs.com/ZTE/N9500-6105573748/N9500V1.0.0B18.rdf' => [ 'ZTE', 'N9500 Flash', 'Android', DeviceType::MOBILE ], 'http://device.sprintpcs.com/ZTE/N9500-BOOST/N9500V1.0.0B14.rdf' => [ 'ZTE', 'N9500 Flash', 'Android', DeviceType::MOBILE ], 'http://device.sprintpcs.com/ZTE/N9500-BOOST/N9500V1.0.0B18.rdf' => [ 'ZTE', 'N9500 Flash', 'Android', DeviceType::MOBILE ], diff --git a/src/Analyser/Corrections.php b/src/Analyser/Corrections.php index c24285d..d2b7790 100644 --- a/src/Analyser/Corrections.php +++ b/src/Analyser/Corrections.php @@ -25,6 +25,10 @@ private function &applyCorrections() $this->hideBrowserOnDeviceTypeTelevision(); } + if (isset($this->data->browser->name) && $this->data->device->type == Constants\DeviceType::GAMING) { + $this->hideBrowserOnDeviceTypeGaming(); + } + if ($this->data->device->type == Constants\DeviceType::TELEVISION) { $this->hideOsOnDeviceTypeTelevision(); } @@ -92,6 +96,10 @@ private function correctVersionOfMobileInternetExplorer() private function hideBrowserBasedOnOperatingSystem() { + if ($this->data->os->name == 'iOS' && $this->data->browser->name == 'Safari') { + $this->data->browser->hidden = true; + } + if ($this->data->os->name == 'Series60' && $this->data->browser->name == 'Internet Explorer') { $this->data->browser->reset(); $this->data->engine->reset(); @@ -115,6 +123,13 @@ private function hideBrowserBasedOnOperatingSystem() } } + private function hideBrowserOnDeviceTypeGaming() + { + if (isset($this->data->device->model) && $this->data->device->model == 'Playstation 2' && $this->data->browser->name == 'Internet Explorer') { + $this->data->browser->reset(); + } + } + private function hideBrowserOnDeviceTypeTelevision() { switch ($this->data->browser->name) { @@ -162,8 +177,7 @@ private function hideBrowserOnDeviceTypeTelevision() private function hideOsOnDeviceTypeTelevision() { if (isset($this->data->os->name) && !in_array($this->data->os->name, [ 'Aliyun OS', 'Tizen', 'Android', 'Android TV', 'FireOS', 'Google TV', 'Firefox OS' ])) { - unset($this->data->os->name); - unset($this->data->os->version); + $this->data->os->reset(); } } } diff --git a/src/Analyser/Derive.php b/src/Analyser/Derive.php index 4c8c354..4ff7cac 100644 --- a/src/Analyser/Derive.php +++ b/src/Analyser/Derive.php @@ -80,6 +80,12 @@ private function deriveFirefoxOS() case '34.0': $this->data->os->version = new Version([ 'value' => '2.1' ]); break; + case '37.0': + $this->data->os->version = new Version([ 'value' => '2.2' ]); + break; + case '44.0': + $this->data->os->version = new Version([ 'value' => '2.5' ]); + break; } } } @@ -310,6 +316,16 @@ private function deriveBasedOnOperatingSystem() $this->data->browser->hidden = true; } + /* Derive OS/2 nickname */ + + if ($this->data->os->name == 'OS/2') { + if (!empty($this->data->os->version)) { + if ($this->data->os->version->is('>', '2')) { + $this->data->os->version->nickname = 'Warp'; + } + } + } + /* Derive iOS and OS X aliases */ if ($this->data->os->name == 'iOS') { diff --git a/src/Analyser/Header/Useragent.php b/src/Analyser/Header/Useragent.php index 232ba14..e9018a3 100644 --- a/src/Analyser/Header/Useragent.php +++ b/src/Analyser/Header/Useragent.php @@ -4,7 +4,7 @@ class Useragent { - use Useragent\Os, Useragent\Device, Useragent\Browser, Useragent\Engine, Useragent\Bot; + use Useragent\Os, Useragent\Device, Useragent\Browser, Useragent\Using, Useragent\Engine, Useragent\Bot; public function __construct($header, &$data) { @@ -19,6 +19,7 @@ public function __construct($header, &$data) $this->detectOperatingSystem($header) ->detectDevice($header) ->detectBrowser($header) + ->detectUsing($header) ->detectEngine($header) ->detectBot($header); @@ -27,4 +28,11 @@ public function __construct($header, &$data) $this->refineBrowser($header) ->refineOperatingSystem($header); } + + private function removeKnownPrefixes($ua) + { + $ua = preg_replace('/^OneBrowser\/[0-9.]+\//', '', $ua); + $ua = preg_replace('/^MQQBrowser\/[0-9.]+\//', '', $ua); + return $ua; + } } diff --git a/src/Analyser/Header/Useragent/Bot.php b/src/Analyser/Header/Useragent/Bot.php index e1317ac..59ad4d1 100644 --- a/src/Analyser/Header/Useragent/Bot.php +++ b/src/Analyser/Header/Useragent/Bot.php @@ -9,9 +9,20 @@ trait Bot { private function &detectBot($ua) { + /* Detect bots based on url in the UA string */ + + if (preg_match('/\+https?:\/\//iu', $ua)) { + $this->data->browser->reset(); + $this->data->os->reset(); + $this->data->engine->reset(); + $this->data->device->reset(); + + $this->data->device->type = Constants\DeviceType::BOT; + } + /* Detect bots based on common markers */ - if (preg_match('/(?:Bot|Robot|Spider|Crawler)([\/;]|$)/iu', $ua)) { + if (preg_match('/(?:Bot|Robot|Spider|Crawler)([\/\);]|$)/iu', $ua)) { $this->data->browser->reset(); $this->data->os->reset(); $this->data->engine->reset(); diff --git a/src/Analyser/Header/Useragent/Browser.php b/src/Analyser/Header/Useragent/Browser.php index 75848fa..91c9787 100644 --- a/src/Analyser/Header/Useragent/Browser.php +++ b/src/Analyser/Header/Useragent/Browser.php @@ -68,37 +68,46 @@ private function &refineBrowser($ua) private function detectSafari($ua) { if (preg_match('/Safari/u', $ua)) { + $falsepositive = false; - if (isset($this->data->os->name) && $this->data->os->name == 'iOS') { - $this->data->browser->stock = true; - $this->data->browser->hidden = true; - $this->data->browser->name = 'Safari'; - $this->data->browser->version = null; - - if (preg_match('/Version\/([0-9\.]+)/u', $ua, $match)) { - $this->data->browser->version = new Version([ 'value' => $match[1], 'hidden' => true ]); - } + if (preg_match('/Qt/u', $ua)) { + $falsepositive = true; } - if (isset($this->data->os->name) && ($this->data->os->name == 'OS X' || $this->data->os->name == 'Windows')) { - $this->data->browser->name = 'Safari'; - $this->data->browser->stock = $this->data->os->name == 'OS X'; + if (!$falsepositive) { + if (isset($this->data->os->name) && $this->data->os->name == 'iOS') { + $this->data->browser->name = 'Safari'; + $this->data->browser->type = Constants\BrowserType::BROWSER; + $this->data->browser->version = null; + $this->data->browser->stock = true; - if (preg_match('/Version\/([0-9\.]+)/u', $ua, $match)) { - $this->data->browser->version = new Version([ 'value' => $match[1] ]); + if (preg_match('/Version\/([0-9\.]+)/u', $ua, $match)) { + $this->data->browser->version = new Version([ 'value' => $match[1], 'hidden' => true ]); + } } - if (preg_match('/AppleWebKit\/[0-9\.]+\+/u', $ua)) { - $this->data->browser->name = 'WebKit Nightly Build'; - $this->data->browser->version = null; + if (isset($this->data->os->name) && ($this->data->os->name == 'OS X' || $this->data->os->name == 'Windows')) { + $this->data->browser->name = 'Safari'; + $this->data->browser->type = Constants\BrowserType::BROWSER; + $this->data->browser->stock = $this->data->os->name == 'OS X'; + + if (preg_match('/Version\/([0-9\.]+)/u', $ua, $match)) { + $this->data->browser->version = new Version([ 'value' => $match[1] ]); + } + + if (preg_match('/AppleWebKit\/[0-9\.]+\+/u', $ua)) { + $this->data->browser->name = 'WebKit Nightly Build'; + $this->data->browser->version = null; + } } } } if (preg_match('/(?:Apple-PubSub|AppleSyndication)\//u', $ua)) { - $this->data->browser->stock = true; $this->data->browser->name = 'Safari RSS'; + $this->data->browser->type = Constants\BrowserType::APP_FEEDREADER; $this->data->browser->version = null; + $this->data->browser->stock = true; $this->data->os->name = 'OS X'; $this->data->os->version = null; @@ -113,8 +122,9 @@ private function detectSafari($ua) private function detectChrome($ua) { if (preg_match('/(?:Chrome|CrMo|CriOS)\/[0-9]/u', $ua) || preg_match('/Browser\/Chrome[0-9]/u', $ua)) { - $this->data->browser->stock = false; $this->data->browser->name = 'Chrome'; + $this->data->browser->type = Constants\BrowserType::BROWSER; + $this->data->browser->stock = false; $version = ''; if (preg_match('/(?:Chrome|CrMo|CriOS)\/([0-9.]*)/u', $ua, $match)) { @@ -140,6 +150,7 @@ private function detectChrome($ua) /* Webview for Android 4.4 and higher */ if (implode('.', array_slice(explode('.', $version), 1, 2)) == '0.0' && (preg_match('/Version\//u', $ua) || preg_match('/Release\//u', $ua))) { $this->data->browser->using = new Using([ 'name' => 'Chromium WebView', 'version' => new Version([ 'value' => explode('.', $version)[0] ]) ]); + $this->data->browser->type = Constants\BrowserType::UNKNOWN; $this->data->browser->stock = true; $this->data->browser->name = null; $this->data->browser->version = null; @@ -149,6 +160,7 @@ private function detectChrome($ua) /* Webview for Android 5 */ if (preg_match('/; wv\)/u', $ua)) { $this->data->browser->using = new Using([ 'name' => 'Chromium WebView', 'version' => new Version([ 'value' => explode('.', $version)[0] ]) ]); + $this->data->browser->type = Constants\BrowserType::UNKNOWN; $this->data->browser->stock = true; $this->data->browser->name = null; $this->data->browser->version = null; @@ -243,6 +255,7 @@ private function detectChrome($ua) $this->data->browser->stock = false; $this->data->browser->channel = ''; $this->data->browser->name = 'Chromium'; + $this->data->browser->type = Constants\BrowserType::BROWSER; if (preg_match('/Chromium\/([0-9.]*)/u', $ua, $match)) { $this->data->browser->version = new Version([ 'value' => $match[1] ]); @@ -258,6 +271,7 @@ private function detectChrome($ua) if (preg_match('/Chrome\/[0-9]+\.77\.34\.5/u', $ua)) { $this->data->browser->using = new Using([ 'name' => 'Chrome Content Shell' ]); + $this->data->browser->type = Constants\BrowserType::UNKNOWN; $this->data->browser->stock = false; $this->data->browser->name = null; $this->data->browser->version = null; @@ -269,6 +283,7 @@ private function detectChrome($ua) if (preg_match('/AmazonWebAppPlatform\//u', $ua)) { $this->data->browser->using = new Using([ 'name' => 'Amazon WebView' ]); + $this->data->browser->type = Constants\BrowserType::UNKNOWN; $this->data->browser->stock = false; $this->data->browser->name = null; $this->data->browser->version = null; @@ -280,6 +295,7 @@ private function detectChrome($ua) if (preg_match('/Crosswalk\/([0-9.]*)/u', $ua, $match)) { $this->data->browser->using = new Using([ 'name' => 'Crosswalk WebView', 'version' => new Version([ 'value' => $match[1], 'details' => 1 ]) ]); + $this->data->browser->type = Constants\BrowserType::UNKNOWN; $this->data->browser->stock = false; $this->data->browser->name = null; $this->data->browser->version = null; @@ -304,15 +320,18 @@ private function detectExplorer($ua) if (preg_match('/\(IE ([0-9.]*)/u', $ua, $match)) { $this->data->browser->name = 'Internet Explorer'; $this->data->browser->version = new Version([ 'value' => $match[1] ]); + $this->data->browser->type = Constants\BrowserType::BROWSER; } if (preg_match('/Browser\/IE([0-9.]*)/u', $ua, $match)) { $this->data->browser->name = 'Internet Explorer'; $this->data->browser->version = new Version([ 'value' => $match[1] ]); + $this->data->browser->type = Constants\BrowserType::BROWSER; } if (preg_match('/MSIE/u', $ua)) { $this->data->browser->name = 'Internet Explorer'; + $this->data->browser->type = Constants\BrowserType::BROWSER; if (preg_match('/IEMobile/u', $ua) || preg_match('/Windows CE/u', $ua) || preg_match('/Windows Phone/u', $ua) || preg_match('/WP7/u', $ua) || preg_match('/WPDesktop/u', $ua)) { $this->data->browser->name = 'Mobile Internet Explorer'; @@ -331,12 +350,14 @@ private function detectExplorer($ua) $this->data->engine->name = 'Tasman'; $this->data->device->type = Constants\DeviceType::DESKTOP; - if ($this->data->browser->version->is('>=', '5.1.1') && $this->data->browser->version->is('<=', '5.1.3')) { - $this->data->os->name = 'OS X'; - } + if (!empty($this->data->browser->version)) { + if ($this->data->browser->version->is('>=', '5.1.1') && $this->data->browser->version->is('<=', '5.1.3')) { + $this->data->os->name = 'OS X'; + } - if ($this->data->browser->version->is('>=', '5.2')) { - $this->data->os->name = 'OS X'; + if ($this->data->browser->version->is('>=', '5.2')) { + $this->data->os->name = 'OS X'; + } } } } @@ -344,23 +365,40 @@ private function detectExplorer($ua) if (preg_match('/Trident\/[789][^\)]+; rv:([0-9.]*)\)/u', $ua, $match)) { $this->data->browser->name = 'Internet Explorer'; $this->data->browser->version = new Version([ 'value' => $match[1] ]); + $this->data->browser->type = Constants\BrowserType::BROWSER; } if (preg_match('/Trident\/[789][^\)]+; Touch; rv:([0-9.]*);\s+IEMobile\//u', $ua, $match)) { $this->data->browser->name = 'Mobile Internet Explorer'; $this->data->browser->version = new Version([ 'value' => $match[1] ]); + $this->data->browser->type = Constants\BrowserType::BROWSER; } if (preg_match('/Trident\/[789][^\)]+; Touch; rv:([0-9.]*); WPDesktop/u', $ua, $match)) { $this->data->browser->mode = 'desktop'; $this->data->browser->name = 'Mobile Internet Explorer'; $this->data->browser->version = new Version([ 'value' => $match[1] ]); + $this->data->browser->type = Constants\BrowserType::BROWSER; + } + + /* Old versions of Pocket Internet Explorer */ + + if (preg_match('/Microsoft Pocket Internet Explorer\//u', $ua)) { + $this->data->browser->name = 'Pocket Internet Explorer'; + $this->data->browser->version = new Version([ 'value' => '1.0' ]); + $this->data->browser->type = Constants\BrowserType::BROWSER; + } + + if (preg_match('/MSPIE ([0-9.]*)/u', $ua, $match)) { + $this->data->browser->name = 'Pocket Internet Explorer'; + $this->data->browser->version = new Version([ 'value' => $match[1] ]); + $this->data->browser->type = Constants\BrowserType::BROWSER; } /* Set the browser family */ - if ($this->data->isBrowser('Internet Explorer') || $this->data->isBrowser('Mobile Internet Explorer')) { + if ($this->data->isBrowser('Internet Explorer') || $this->data->isBrowser('Mobile Internet Explorer') || $this->data->isBrowser('Pocket Internet Explorer')) { unset($this->data->browser->family); } } @@ -373,6 +411,7 @@ private function detectEdge($ua) if (preg_match('/Edge\/([0-9]+)/u', $ua, $match)) { $this->data->browser->name = 'Edge'; $this->data->browser->alias = 'Edge ' . $match[1]; + $this->data->browser->type = Constants\BrowserType::BROWSER; $this->data->browser->channel = ''; $this->data->browser->version = null; } @@ -395,6 +434,7 @@ private function detectOpera($ua) $this->data->browser->channel = ''; $this->data->browser->name = 'Opera'; $this->data->browser->version = new Version([ 'value' => $match[1], 'details' => 2 ]); + $this->data->browser->type = Constants\BrowserType::BROWSER; if (preg_match('/Edition Developer/iu', $ua)) { $this->data->browser->channel = 'Developer'; @@ -416,6 +456,7 @@ private function detectOpera($ua) if (preg_match('/OMI\/([0-9]+\.[0-9]+)/u', $ua, $match)) { $this->data->browser->name = 'Opera Devices'; $this->data->browser->version = new Version([ 'value' => $match[1] ]); + $this->data->browser->type = Constants\BrowserType::BROWSER; $this->data->device->type = Constants\DeviceType::TELEVISION; @@ -423,11 +464,12 @@ private function detectOpera($ua) unset($this->data->os->version); } - if (preg_match('/Opera[\/\-\s]/iu', $ua)) { + if (preg_match('/Opera[\/\-\s]/iu', $ua) || preg_match('/Browser\/Opera/iu', $ua)) { $this->data->browser->stock = false; $this->data->browser->name = 'Opera'; + $this->data->browser->type = Constants\BrowserType::BROWSER; - if (preg_match('/Opera[\/| ]([0-9.]*)/u', $ua, $match)) { + if (preg_match('/Opera[\/| ]?([0-9.]*)/u', $ua, $match)) { $this->data->browser->version = new Version([ 'value' => $match[1] ]); } @@ -516,13 +558,24 @@ private function detectOpera($ua) } if (preg_match('/OPiOS\/([0-9.]*)/u', $ua, $match)) { + $this->data->browser->stock = false; $this->data->browser->name = 'Opera Mini'; $this->data->browser->version = new Version([ 'value' => $match[1], 'details' => 2 ]); + $this->data->browser->type = Constants\BrowserType::BROWSER; } if (preg_match('/Coast\/([0-9.]*)/u', $ua, $match)) { + $this->data->browser->stock = false; $this->data->browser->name = 'Coast by Opera'; $this->data->browser->version = new Version([ 'value' => $match[1], 'details' => 3 ]); + $this->data->browser->type = Constants\BrowserType::BROWSER; + } + + if (preg_match('/Oupeng(?:HD)?[\/-]([0-9.]*)/u', $ua, $match)) { + $this->data->browser->stock = false; + $this->data->browser->name = 'Opera Oupeng'; + $this->data->browser->version = new Version([ 'value' => $match[1], 'details' => 2 ]); + $this->data->browser->type = Constants\BrowserType::BROWSER; } } @@ -534,6 +587,7 @@ private function detectFirefox($ua) if (preg_match('/Firefox/u', $ua)) { $this->data->browser->stock = false; $this->data->browser->name = 'Firefox'; + $this->data->browser->type = Constants\BrowserType::BROWSER; if (preg_match('/Firefox\/([0-9ab.]*)/u', $ua, $match)) { $this->data->browser->version = new Version([ 'value' => $match[1] ]); @@ -563,7 +617,7 @@ private function detectFirefox($ua) $device = Data\DeviceModels::identify('firefoxos', $match[1]); if ($device->identified) { $device->identified |= $this->data->device->identified; - $this->data->os->name = 'Firefox OS'; + $this->data->os->reset([ 'name' => 'Firefox OS' ]); $this->data->device = $device; } } @@ -571,20 +625,11 @@ private function detectFirefox($ua) if (preg_match('/Tablet;(?: ([^;]+);)? rv/u', $ua, $match)) { $this->data->device->type = Constants\DeviceType::TABLET; - - if (isset($match[1])) { - $device = Data\DeviceModels::identify('firefoxos', $match[1]); - if ($device->identified) { - $device->identified |= $this->data->device->identified; - $this->data->os->name = 'Firefox OS'; - $this->data->device = $device; - } - } } if (preg_match('/Viera;(?: ([^;]+);)? rv/u', $ua, $match)) { $this->data->device->type = Constants\DeviceType::TELEVISION; - $this->data->os->name = 'Firefox OS'; + $this->data->os->reset([ 'name' => 'Firefox OS' ]); } if ($this->data->device->type == Constants\DeviceType::MOBILE || $this->data->device->type == Constants\DeviceType::TABLET) { @@ -596,9 +641,23 @@ private function detectFirefox($ua) } } + + if (preg_match('/GranParadiso/u', $ua)) { + $this->data->browser->stock = false; + $this->data->browser->name = 'Firefox'; + $this->data->browser->type = Constants\BrowserType::BROWSER; + + if (preg_match('/GranParadiso\/([0-9ab.]*)/u', $ua, $match)) { + $this->data->browser->version = new Version([ 'value' => $match[1] ]); + } + + $this->data->browser->channel = 'Gran Paradiso'; + } + if (preg_match('/Namoroka/u', $ua)) { $this->data->browser->stock = false; $this->data->browser->name = 'Firefox'; + $this->data->browser->type = Constants\BrowserType::BROWSER; if (preg_match('/Namoroka\/([0-9ab.]*)/u', $ua, $match)) { $this->data->browser->version = new Version([ 'value' => $match[1] ]); @@ -610,6 +669,7 @@ private function detectFirefox($ua) if (preg_match('/Shiretoko/u', $ua)) { $this->data->browser->stock = false; $this->data->browser->name = 'Firefox'; + $this->data->browser->type = Constants\BrowserType::BROWSER; if (preg_match('/Shiretoko\/([0-9ab.]*)/u', $ua, $match)) { $this->data->browser->version = new Version([ 'value' => $match[1] ]); @@ -621,6 +681,7 @@ private function detectFirefox($ua) if (preg_match('/Minefield/u', $ua)) { $this->data->browser->stock = false; $this->data->browser->name = 'Firefox'; + $this->data->browser->type = Constants\BrowserType::BROWSER; if (preg_match('/Minefield\/([0-9ab.]*)/u', $ua, $match)) { $this->data->browser->version = new Version([ 'value' => $match[1] ]); @@ -632,6 +693,7 @@ private function detectFirefox($ua) if (preg_match('/BonEcho/u', $ua)) { $this->data->browser->stock = false; $this->data->browser->name = 'Firefox'; + $this->data->browser->type = Constants\BrowserType::BROWSER; if (preg_match('/BonEcho\/([0-9ab.]*)/u', $ua, $match)) { $this->data->browser->version = new Version([ 'value' => $match[1] ]); @@ -643,6 +705,7 @@ private function detectFirefox($ua) if (preg_match('/Fennec/u', $ua)) { $this->data->browser->stock = false; $this->data->browser->name = 'Firefox Mobile'; + $this->data->browser->type = Constants\BrowserType::BROWSER; if (preg_match('/Fennec\/([0-9ab.]*)/u', $ua, $match)) { $this->data->browser->version = new Version([ 'value' => $match[1] ]); @@ -654,6 +717,7 @@ private function detectFirefox($ua) if (preg_match('/Minimo/u', $ua)) { $this->data->browser->stock = false; $this->data->browser->name = 'Minimo'; + $this->data->browser->type = Constants\BrowserType::BROWSER; if (preg_match('/Minimo\/([0-9ab.]*)/u', $ua, $match)) { $this->data->browser->version = new Version([ 'value' => $match[1] ]); @@ -663,6 +727,7 @@ private function detectFirefox($ua) if (preg_match('/Firebird/u', $ua)) { $this->data->browser->stock = false; $this->data->browser->name = 'Firebird'; + $this->data->browser->type = Constants\BrowserType::BROWSER; if (preg_match('/Firebird\/([0-9ab.]*)/u', $ua, $match)) { $this->data->browser->version = new Version([ 'value' => $match[1] ]); @@ -672,6 +737,7 @@ private function detectFirefox($ua) if (preg_match('/FxiOS\/([0-9.]*)/u', $ua, $match)) { $this->data->browser->name = 'Firefox'; $this->data->browser->version = new Version([ 'value' => $match[1] ]); + $this->data->browser->type = Constants\BrowserType::BROWSER; } @@ -694,6 +760,7 @@ private function detectSeamonkey($ua) if (preg_match('/SeaMonkey/u', $ua)) { $this->data->browser->stock = false; $this->data->browser->name = 'SeaMonkey'; + $this->data->browser->type = Constants\BrowserType::BROWSER; if (preg_match('/SeaMonkey\/([0-9ab.]*)/u', $ua, $match)) { $this->data->browser->version = new Version([ 'value' => $match[1] ]); @@ -708,6 +775,7 @@ private function detectSeamonkey($ua) $this->data->browser->stock = false; $this->data->browser->name = 'SeaMonkey'; $this->data->browser->version = new Version([ 'value' => $match[1] ]); + $this->data->browser->type = Constants\BrowserType::BROWSER; } } @@ -721,11 +789,17 @@ private function detectLegacyNetscape($ua) if (preg_match('/Mozilla\/([123].[0-9]+)/u', $ua, $match)) { $this->data->browser->name = 'Netscape Navigator'; $this->data->browser->version = new Version([ 'value' => preg_replace("/([0-9])([0-9])/", '$1.$2', $match[1]) ]); + $this->data->browser->type = Constants\BrowserType::BROWSER; } if (preg_match('/Mozilla\/(4.[0-9]+)/u', $ua, $match)) { $this->data->browser->name = 'Netscape Communicator'; $this->data->browser->version = new Version([ 'value' => preg_replace("/([0-9])([0-9])/", '$1.$2', $match[1]) ]); + $this->data->browser->type = Constants\BrowserType::BROWSER; + + if (preg_match('/Nav\)/u', $ua)) { + $this->data->browser->name = 'Netscape Navigator'; + } } } } @@ -736,11 +810,19 @@ private function detectModernNetscape($ua) if (preg_match('/Netscape/u', $ua)) { $this->data->browser->stock = false; $this->data->browser->name = 'Netscape'; + $this->data->browser->type = Constants\BrowserType::BROWSER; if (preg_match('/Netscape[0-9]?\/([0-9.]*)/u', $ua, $match)) { $this->data->browser->version = new Version([ 'value' => $match[1] ]); } } + + if (preg_match('/Navigator\/([0-9.]*)/u', $ua, $match)) { + $this->data->browser->stock = false; + $this->data->browser->name = 'Netscape Navigator'; + $this->data->browser->type = Constants\BrowserType::BROWSER; + $this->data->browser->version = new Version([ 'value' => $match[1], 'details' => 3 ]); + } } @@ -748,24 +830,77 @@ private function detectModernNetscape($ua) private function detectMosaic($ua) { - if (preg_match('/NCSA[ _]Mosaic\/([0-9.]*)/u', $ua, $match)) { + if (preg_match('/NCSA[ _]Mosaic(?:\(tm\))?(?: for the X Window System| for Windows)?\/(?:Version )?([0-9.]*)/u', $ua, $match)) { $this->data->browser->name = 'NCSA Mosaic'; $this->data->browser->version = new Version([ 'value' => $match[1] ]); + $this->data->browser->family = new Family([ 'name' => 'Mosaic' ]); + $this->data->browser->type = Constants\BrowserType::BROWSER; + $this->data->browser->stock = false; + } + + if (preg_match('/AIR_Mosaic(?:\(16bit\))?\/v([0-9.]*)/u', $ua, $match)) { + $this->data->browser->name = 'AIR Mosaic'; + $this->data->browser->version = new Version([ 'value' => $match[1], 'details' => 2 ]); + $this->data->browser->family = new Family([ 'name' => 'Mosaic' ]); + $this->data->browser->type = Constants\BrowserType::BROWSER; $this->data->browser->stock = false; } - if (preg_match('/MosaicView\/([0-9.]*)/u', $ua, $match)) { + if (preg_match('/(?:MosaicView|Spyglass[ _]Mosaic)\/([0-9.]*)/u', $ua, $match)) { $this->data->browser->name = 'Spyglass Mosaic'; $this->data->browser->version = new Version([ 'value' => $match[1] ]); + $this->data->browser->family = new Family([ 'name' => 'Mosaic' ]); + $this->data->browser->type = Constants\BrowserType::BROWSER; + $this->data->browser->stock = false; + } + + if (preg_match('/SPRY_Mosaic(?:\(16bit\))?\/v([0-9.]*)/u', $ua, $match)) { + $this->data->browser->name = 'SPRY Mosaic'; + $this->data->browser->version = new Version([ 'value' => $match[1], 'details' => 2 ]); + $this->data->browser->family = new Family([ 'name' => 'Mosaic' ]); + $this->data->browser->type = Constants\BrowserType::BROWSER; + $this->data->browser->stock = false; + } + + if (preg_match('/DCL SuperMosaic\/([0-9.]*)/u', $ua, $match)) { + $this->data->browser->name = 'SuperMosaic'; + $this->data->browser->version = new Version([ 'value' => $match[1], 'details' => 2 ]); + $this->data->browser->family = new Family([ 'name' => 'Mosaic' ]); + $this->data->browser->type = Constants\BrowserType::BROWSER; $this->data->browser->stock = false; } if (preg_match('/VMS_Mosaic\/([0-9.]*)/u', $ua, $match)) { $this->data->browser->name = 'VMS Mosaic'; $this->data->browser->version = new Version([ 'value' => $match[1] ]); + $this->data->browser->family = new Family([ 'name' => 'Mosaic' ]); + $this->data->browser->type = Constants\BrowserType::BROWSER; + $this->data->browser->stock = false; + } + + if (preg_match('/mMosaic\/([0-9.]*)/u', $ua, $match)) { + $this->data->browser->name = 'mMosaic'; + $this->data->browser->version = new Version([ 'value' => $match[1] ]); + $this->data->browser->family = new Family([ 'name' => 'Mosaic' ]); + $this->data->browser->type = Constants\BrowserType::BROWSER; $this->data->browser->stock = false; } + if (preg_match('/Quarterdeck Mosaic Version ([0-9.]*)/u', $ua, $match)) { + $this->data->browser->name = 'Quarterdeck Mosaic'; + $this->data->browser->version = new Version([ 'value' => $match[1] ]); + $this->data->browser->family = new Family([ 'name' => 'Mosaic' ]); + $this->data->browser->type = Constants\BrowserType::BROWSER; + $this->data->browser->stock = false; + } + + if (preg_match('/WinMosaic\/Version ([0-9.]*)/u', $ua, $match)) { + $this->data->browser->name = 'WinMosaic'; + $this->data->browser->version = new Version([ 'value' => $match[1] ]); + $this->data->browser->family = new Family([ 'name' => 'Mosaic' ]); + $this->data->browser->type = Constants\BrowserType::BROWSER; + $this->data->browser->stock = false; + } } @@ -776,6 +911,7 @@ private function detectUC($ua) if (preg_match('/UCWEB/u', $ua)) { $this->data->browser->stock = false; $this->data->browser->name = 'UC Browser'; + $this->data->browser->type = Constants\BrowserType::BROWSER; unset($this->data->browser->channel); @@ -887,11 +1023,13 @@ private function detectUC($ua) $this->data->browser->stock = false; $this->data->browser->name = 'UC Browser'; $this->data->browser->version = new Version([ 'value' => $match[1], 'details' => 3 ]); + $this->data->browser->type = Constants\BrowserType::BROWSER; } if (preg_match('/ucweb-squid/u', $ua)) { $this->data->browser->stock = false; $this->data->browser->name = 'UC Browser'; + $this->data->browser->type = Constants\BrowserType::BROWSER; unset($this->data->browser->channel); } @@ -899,6 +1037,7 @@ private function detectUC($ua) if (preg_match('/\) ?UC /u', $ua)) { $this->data->browser->stock = false; $this->data->browser->name = 'UC Browser'; + $this->data->browser->type = Constants\BrowserType::BROWSER; unset($this->data->browser->version); unset($this->data->browser->channel); @@ -918,6 +1057,7 @@ private function detectUC($ua) $this->data->browser->stock = false; $this->data->browser->name = 'UC Browser'; $this->data->browser->version = new Version([ 'value' => $match[1], 'details' => 2 ]); + $this->data->browser->type = Constants\BrowserType::BROWSER; unset($this->data->browser->channel); @@ -930,6 +1070,7 @@ private function detectUC($ua) $this->data->browser->stock = false; $this->data->browser->name = 'UC Browser'; $this->data->browser->version = new Version([ 'value' => $match[1], 'details' => 2 ]); + $this->data->browser->type = Constants\BrowserType::BROWSER; unset($this->data->browser->channel); } @@ -1000,6 +1141,7 @@ private function detectNetfront($ua) if (preg_match('/Net[fF]ront/u', $ua)) { $this->data->browser->name = 'NetFront'; $this->data->device->type = Constants\DeviceType::MOBILE; + $this->data->browser->type = Constants\BrowserType::BROWSER; if (preg_match('/NetFront\/?([0-9.]*)/ui', $ua, $match)) { $this->data->browser->version = new Version([ 'value' => $match[1] ]); @@ -1037,12 +1179,14 @@ private function detectNetfront($ua) if (preg_match('/Browser\/(?:NF|NetFr?ont-)([0-9.]*)/ui', $ua, $match)) { $this->data->browser->name = 'NetFront'; $this->data->browser->version = new Version([ 'value' => $match[1] ]); + $this->data->browser->type = Constants\BrowserType::BROWSER; $this->data->device->type = Constants\DeviceType::MOBILE; } if (preg_match('/NX\/([0-9.]*)/u', $ua, $match)) { $this->data->browser->name = 'NetFront NX'; $this->data->browser->version = new Version([ 'value' => $match[1], 'details' => 2 ]); + $this->data->browser->type = Constants\BrowserType::BROWSER; if (!isset($this->data->device->type) || !$this->data->device->type) { if (preg_match('/(DTV|HbbTV)/iu', $ua)) { @@ -1057,6 +1201,15 @@ private function detectNetfront($ua) $this->data->os->name = ''; $this->data->os->version = null; } + + /* The Sony Mylo 2 identifies as Firefox 2, but is NetFront */ + + if (preg_match('/Sony\/COM2/u', $ua, $match)) { + $this->data->browser->reset([ + 'name' => 'NetFront', + 'type' => Constants\BrowserType::BROWSER + ]); + } } @@ -1069,6 +1222,10 @@ private function detectObigo($ua) 'value' => $version ]; + if (preg_match('/[0-9.]+/', $version, $match)) { + $result['details'] = 2; + } + if (preg_match('/([0-9])[A-Z]/', $version, $match)) { $result['value'] = intval($match[1]); $result['alias'] = $version; @@ -1079,27 +1236,37 @@ private function detectObigo($ua) if (preg_match('/(?:Obigo|Teleca)/ui', $ua)) { $this->data->browser->name = 'Obigo'; + $this->data->browser->type = Constants\BrowserType::BROWSER; if (preg_match('/Obigo\/0?([0-9.]+)/iu', $ua, $match)) { $this->data->browser->version = new Version($processObigoVersion($match[1])); - } elseif (preg_match('/TelecaBrowser\/(WAP|[A-Z])0?([0-9.]+[A-Z]?)/iu', $ua, $match)) { - $this->data->browser->name = 'Obigo ' . $match[1]; + } elseif (preg_match('/TelecaBrowser\/(WAP|[A-Z])?0?([0-9.]+[A-Z]?)/iu', $ua, $match)) { $this->data->browser->version = new Version($processObigoVersion($match[2])); - } elseif (preg_match('/(?:Obigo(?:InternetBrowser|[- ]Browser)?|Teleca)\/(WAP|[A-Z])[0O]?([0-9.]+[A-Z]?)/ui', $ua, $match)) { - $this->data->browser->name = 'Obigo ' . $match[1]; + if (!empty($match[1])) { + $this->data->browser->name = 'Obigo ' . $match[1]; + } + } elseif (preg_match('/(?:Obigo(?:InternetBrowser|[- ]Browser)?|Teleca)\/(WAP|[A-Z])?[0O]?([0-9.]+[A-Z]?)/ui', $ua, $match)) { $this->data->browser->version = new Version($processObigoVersion($match[2])); - } elseif (preg_match('/(?:Obigo|Teleca)[- ]([WAP|[A-Z])0?([0-9.]+[A-Z]?)(?:[0-9])?(?:[\/;]|$)/ui', $ua, $match)) { - $this->data->browser->name = 'Obigo ' . $match[1]; + if (!empty($match[1])) { + $this->data->browser->name = 'Obigo ' . $match[1]; + } + } elseif (preg_match('/(?:Obigo|Teleca)[- ]([WAP|[A-Z])?0?([0-9.]+[A-Z]?)(?:[0-9])?(?:[\/;]|$)/ui', $ua, $match)) { $this->data->browser->version = new Version($processObigoVersion($match[2])); - } elseif (preg_match('/Browser\/(?:Obigo|Teleca)[_-](?:Browser\/)?(WAP|[A-Z])0?([0-9.]+[A-Z]?)/ui', $ua, $match)) { - $this->data->browser->name = 'Obigo ' . $match[1]; + if (!empty($match[1])) { + $this->data->browser->name = 'Obigo ' . $match[1]; + } + } elseif (preg_match('/Browser\/(?:Obigo|Teleca)[_-](?:Browser\/)?(WAP|[A-Z])?0?([0-9.]+[A-Z]?)/ui', $ua, $match)) { $this->data->browser->version = new Version($processObigoVersion($match[2])); + if (!empty($match[1])) { + $this->data->browser->name = 'Obigo ' . $match[1]; + } } } if (preg_match('/(Q)0?([0-9][A-Z])/u', $ua, $match)) { $this->data->browser->name = 'Obigo ' . $match[1]; $this->data->browser->version = new Version($processObigoVersion($match[2])); + $this->data->browser->type = Constants\BrowserType::BROWSER; } } @@ -1111,11 +1278,13 @@ private function detectAnt($ua) if (preg_match('/ANTFresco\/([0-9.]+)/iu', $ua, $match)) { $this->data->browser->name = 'ANT Fresco'; $this->data->browser->version = new Version([ 'value' => $match[1] ]); + $this->data->browser->type = Constants\BrowserType::BROWSER; } if (preg_match('/ANTGalio\/([0-9.]+)/iu', $ua, $match)) { $this->data->browser->name = 'ANT Galio'; $this->data->browser->version = new Version([ 'value' => $match[1], 'details' => 3 ]); + $this->data->browser->type = Constants\BrowserType::BROWSER; } } @@ -1128,6 +1297,7 @@ private function detectMachBlue($ua) $this->data->os->name = ''; $this->data->browser->name = 'MachBlue XT'; $this->data->browser->version = new Version([ 'value' => $match[1], 'details' => 2 ]); + $this->data->browser->type = Constants\BrowserType::BROWSER; $this->data->device->type = Constants\DeviceType::TELEVISION; } @@ -1135,6 +1305,7 @@ private function detectMachBlue($ua) $this->data->os->name = ''; $this->data->browser->name = 'MachBlue XT'; $this->data->device->type = Constants\DeviceType::TELEVISION; + $this->data->browser->type = Constants\BrowserType::BROWSER; } } @@ -1145,6 +1316,7 @@ private function detectEspial($ua) { if (preg_match('/Espial/u', $ua)) { $this->data->browser->name = 'Espial'; + $this->data->browser->type = Constants\BrowserType::BROWSER; $this->data->os->name = ''; $this->data->os->version = null; @@ -1178,21 +1350,29 @@ private function detectIris($ua) $this->data->browser->name = 'Iris'; $this->data->browser->hidden = false; $this->data->browser->stock = false; + $this->data->browser->type = Constants\BrowserType::BROWSER; if (preg_match('/Iris\/([0-9.]*)/u', $ua, $match)) { $this->data->browser->version = new Version([ 'value' => $match[1] ]); } - $this->data->device->reset(); - $this->data->device->type = Constants\DeviceType::MOBILE; - - $this->data->os->reset(); - $this->data->os->name = 'Windows Mobile'; - if (preg_match('/ WM([0-9]) /u', $ua, $match)) { + $this->data->device->reset(); + $this->data->device->type = Constants\DeviceType::MOBILE; + + $this->data->os->reset(); + $this->data->os->name = 'Windows Mobile'; $this->data->os->version = new Version([ 'value' => $match[1] . '.0' ]); - } else { + } + + if (preg_match('/Windows NT/u', $ua, $match)) { $this->data->browser->mode = 'desktop'; + + $this->data->device->reset(); + $this->data->device->type = Constants\DeviceType::MOBILE; + + $this->data->os->reset(); + $this->data->os->name = 'Windows Mobile'; } } } @@ -1204,6 +1384,7 @@ private function detectDolfin($ua) { if (preg_match('/Dolfin/u', $ua) || preg_match('/Jasmine/u', $ua)) { $this->data->browser->name = 'Dolfin'; + $this->data->browser->type = Constants\BrowserType::BROWSER; if (preg_match('/Dolfin\/([0-9.]*)/u', $ua, $match)) { $this->data->browser->version = new Version([ 'value' => $match[1] ]); @@ -1226,6 +1407,7 @@ private function detectWebOSBrowser($ua) { if (preg_match('/wOSBrowser/u', $ua)) { $this->data->browser->name = 'webOS Browser'; + $this->data->browser->type = Constants\BrowserType::BROWSER; if ($this->data->os->name != 'webOS') { $this->data->os->name = 'webOS'; @@ -1241,6 +1423,7 @@ private function detectSailfishBrowser($ua) if (preg_match('/Sailfish ?Browser/u', $ua)) { $this->data->browser->name = 'Sailfish Browser'; $this->data->browser->stock = true; + $this->data->browser->type = Constants\BrowserType::BROWSER; if (preg_match('/Sailfish ?Browser\/([0-9.]*)/u', $ua, $match)) { $this->data->browser->version = new Version([ 'value' => $match[1], 'details' => 2 ]); @@ -1257,6 +1440,7 @@ private function detectSilk($ua) if (preg_match('/Silk-Accelerated/u', $ua) || !preg_match('/PlayStation/u', $ua)) { $this->data->browser->name = 'Silk'; $this->data->browser->channel = null; + $this->data->browser->type = Constants\BrowserType::BROWSER; if (preg_match('/Silk\/([0-9.]*)/u', $ua, $match)) { $this->data->browser->version = new Version([ 'value' => $match[1], 'details' => 2 ]); @@ -1292,6 +1476,7 @@ private function detectNokiaBrowser($ua) if (preg_match('/BrowserNG/u', $ua)) { $this->data->browser->name = 'Nokia Browser'; + $this->data->browser->type = Constants\BrowserType::BROWSER; if (preg_match('/BrowserNG\/([0-9.]*)/u', $ua, $match)) { $this->data->browser->version = new Version([ 'value' => $match[1], 'details' => 3, 'builds' => false ]); @@ -1301,6 +1486,7 @@ private function detectNokiaBrowser($ua) if (preg_match('/NokiaBrowser/u', $ua)) { $this->data->browser->name = 'Nokia Browser'; $this->data->browser->channel = null; + $this->data->browser->type = Constants\BrowserType::BROWSER; if (preg_match('/NokiaBrowser\/([0-9.]*)/u', $ua, $match)) { $this->data->browser->version = new Version([ 'value' => $match[1], 'details' => 3 ]); @@ -1313,6 +1499,8 @@ private function detectNokiaBrowser($ua) if (preg_match('/OSRE/u', $ua)) { $this->data->browser->name = 'Nokia Xpress'; $this->data->browser->mode = 'proxy'; + $this->data->browser->type = Constants\BrowserType::BROWSER; + $this->data->device->type = Constants\DeviceType::MOBILE; $this->data->os->name = null; @@ -1322,6 +1510,7 @@ private function detectNokiaBrowser($ua) if (preg_match('/S40OviBrowser/u', $ua)) { $this->data->browser->name = 'Nokia Xpress'; $this->data->browser->mode = 'proxy'; + $this->data->browser->type = Constants\BrowserType::BROWSER; if (preg_match('/S40OviBrowser\/([0-9.]*)/u', $ua, $match)) { $this->data->browser->version = new Version([ 'value' => $match[1], 'details' => 3 ]); @@ -1375,6 +1564,7 @@ private function detectNokiaBrowser($ua) if (preg_match('/Maemo[ |_]Browser/u', $ua)) { $this->data->browser->name = 'MicroB'; + $this->data->browser->type = Constants\BrowserType::BROWSER; if (preg_match('/Maemo[ |_]Browser[ |_]([0-9.]*)/u', $ua, $match)) { $this->data->browser->version = new Version([ 'value' => $match[1], 'details' => 3 ]); @@ -1389,6 +1579,7 @@ private function detectKonqueror($ua) { if (preg_match('/[k|K]onqueror\//u', $ua)) { $this->data->browser->name = 'Konqueror'; + $this->data->browser->type = Constants\BrowserType::BROWSER; if (preg_match('/[k|K]onqueror\/([0-9.]*)/u', $ua, $match)) { $this->data->browser->version = new Version([ 'value' => $match[1] ]); @@ -1409,6 +1600,8 @@ private function detectSpecficBrowsers($ua) if (preg_match('/Boxee/u', $ua)) { $this->data->browser->name = 'Boxee'; + $this->data->browser->type = Constants\BrowserType::APP_MEDIAPLAYER; + $this->data->device->type = Constants\DeviceType::TELEVISION; if (preg_match('/Boxee\/([0-9.]*)/u', $ua, $match)) { @@ -1421,6 +1614,7 @@ private function detectSpecficBrowsers($ua) if (preg_match('/^XBMC\/(?:PRE-)?([0-9.]+)/u', $ua, $match)) { $this->data->browser->name = 'XBMC'; $this->data->browser->version = new Version([ 'value' => $match[1], 'details' => 2 ]); + $this->data->browser->type = Constants\BrowserType::APP_MEDIAPLAYER; } /* Kodi */ @@ -1428,6 +1622,7 @@ private function detectSpecficBrowsers($ua) if (preg_match('/^Kodi\/([0-9.]+)/u', $ua, $match)) { $this->data->browser->name = 'Kodi'; $this->data->browser->version = new Version([ 'value' => $match[1], 'details' => 2 ]); + $this->data->browser->type = Constants\BrowserType::APP_MEDIAPLAYER; } /* Sraf TV Browser */ @@ -1443,6 +1638,7 @@ private function detectSpecficBrowsers($ua) if (preg_match('/LG Browser\/([0-9.]*)/u', $ua, $match)) { $this->data->browser->name = 'LG Browser'; $this->data->browser->version = new Version([ 'value' => $match[1], 'details' => 2 ]); + $this->data->browser->type = Constants\BrowserType::BROWSER; $this->data->device->type = Constants\DeviceType::TELEVISION; } @@ -1465,6 +1661,7 @@ private function detectSpecficBrowsers($ua) $this->data->browser->reset(); $this->data->browser->name = 'NineSky'; $this->data->browser->version = new Version([ 'value' => $match[1] ]); + $this->data->browser->type = Constants\BrowserType::BROWSER; if (isset($this->data->device->manufacturer) && $this->data->device->manufacturer == 'Apple') { $this->data->device->reset(); @@ -1483,6 +1680,7 @@ private function detectSpecficBrowsers($ua) if (preg_match('/Skyfire\/([0-9.]*)/u', $ua, $match)) { $this->data->browser->name = 'Skyfire'; $this->data->browser->version = new Version([ 'value' => $match[1] ]); + $this->data->browser->type = Constants\BrowserType::BROWSER; $this->data->device->type = Constants\DeviceType::MOBILE; @@ -1495,6 +1693,7 @@ private function detectSpecficBrowsers($ua) if (preg_match('/Dolphin(?:HDCN)?\/(?:INT|CN)?-?([0-9.]*)/u', $ua, $match)) { $this->data->browser->name = 'Dolphin'; $this->data->browser->version = new Version([ 'value' => $match[1] ]); + $this->data->browser->type = Constants\BrowserType::BROWSER; $this->data->device->type = Constants\DeviceType::MOBILE; } @@ -1510,6 +1709,7 @@ private function detectSpecficBrowsers($ua) } $this->data->browser->version = new Version([ 'value' => $version, 'details' => 2 ]); + $this->data->browser->type = Constants\BrowserType::BROWSER; $this->data->browser->channel = ''; if (!isset($this->data->os->name) && $match[1] == 'QQBrowser') { @@ -1520,6 +1720,14 @@ private function detectSpecficBrowsers($ua) if (preg_match('/MQQBrowser\/Mini([0-9.]*)/u', $ua, $match)) { $this->data->browser->name = 'QQ Browser Mini'; $this->data->browser->version = new Version([ 'value' => $match[1], 'details' => 2 ]); + $this->data->browser->type = Constants\BrowserType::BROWSER; + $this->data->browser->channel = ''; + } + + if (preg_match('/QQ\/([0-9.]*)/u', $ua, $match)) { + $this->data->browser->name = 'QQ Browser'; + $this->data->browser->version = new Version([ 'value' => $match[1], 'details' => 2 ]); + $this->data->browser->type = Constants\BrowserType::BROWSER; $this->data->browser->channel = ''; } @@ -1530,6 +1738,7 @@ private function detectSpecficBrowsers($ua) $this->data->browser->family = null; $this->data->browser->channel = ''; $this->data->browser->version = new Version([ 'value' => $match[1] ]); + $this->data->browser->type = Constants\BrowserType::BROWSER; if (!$this->data->os->isFamily('Android')) { $this->data->device->type = Constants\DeviceType::MOBILE; @@ -1544,6 +1753,7 @@ private function detectSpecficBrowsers($ua) $this->data->browser->family = null; $this->data->browser->channel = ''; $this->data->browser->version = new Version([ 'value' => $match[1] ]); + $this->data->browser->type = Constants\BrowserType::BROWSER; } if (preg_match('/QHBrowser\/([0-9\.]+)/u', $ua, $match)) { @@ -1555,6 +1765,7 @@ private function detectSpecficBrowsers($ua) $this->data->browser->name = 'Qihoo 360 Browser'; $this->data->browser->channel = ''; $this->data->browser->version = new Version([ 'value' => $version ]); + $this->data->browser->type = Constants\BrowserType::BROWSER; if (!$this->data->isOs('iOS')) { $this->data->device->type = Constants\DeviceType::MOBILE; @@ -1575,6 +1786,7 @@ private function detectSpecficBrowsers($ua) $this->data->browser->name = 'Mercury Browser'; $this->data->browser->channel = ''; $this->data->browser->version = new Version([ 'value' => $version ]); + $this->data->browser->type = Constants\BrowserType::BROWSER; } /* iBrowser */ @@ -1589,12 +1801,14 @@ private function detectSpecficBrowsers($ua) $this->data->browser->version = new Version([ 'value' => $version, 'details' => 2 ]); $this->data->browser->channel = ''; + $this->data->browser->type = Constants\BrowserType::BROWSER; } if (preg_match('/iBrowser\/Mini([0-9.]*)/u', $ua, $match)) { $this->data->browser->name = 'iBrowser Mini'; $this->data->browser->version = new Version([ 'value' => $match[1], 'details' => 2 ]); $this->data->browser->channel = ''; + $this->data->browser->type = Constants\BrowserType::BROWSER; } /* Puffin */ @@ -1604,6 +1818,7 @@ private function detectSpecficBrowsers($ua) $this->data->browser->version = new Version([ 'value' => $match[1], 'details' => (intval(substr(strrchr($match[1], '.'), 1)) > 99 ? -1 : null) ]); $this->data->browser->mode = 'proxy'; $this->data->browser->channel = ''; + $this->data->browser->type = Constants\BrowserType::BROWSER; if (isset($match[2])) { switch ($match[2]) { @@ -1647,6 +1862,7 @@ private function detectSpecficBrowsers($ua) if (preg_match('/Midori\/([0-9.]*)/u', $ua, $match)) { $this->data->browser->name = 'Midori'; $this->data->browser->version = new Version([ 'value' => $match[1] ]); + $this->data->browser->type = Constants\BrowserType::BROWSER; $this->data->device->manufacturer = null; $this->data->device->model = null; @@ -1660,6 +1876,8 @@ private function detectSpecficBrowsers($ua) if (preg_match('/midori(?:\/[0-9.]*)?$/u', $ua)) { $this->data->browser->name = 'Midori'; + $this->data->browser->type = Constants\BrowserType::BROWSER; + $this->data->device->type = Constants\DeviceType::DESKTOP; if (preg_match('/midori\/([0-9.]*)$/u', $ua, $match)) { @@ -1672,6 +1890,7 @@ private function detectSpecficBrowsers($ua) if (preg_match('/MiniBr?owserM(?:obile)?\/([0-9.]*)/u', $ua, $match)) { $this->data->browser->name = 'MiniBrowser'; $this->data->browser->version = new Version([ 'value' => $match[1] ]); + $this->data->browser->type = Constants\BrowserType::BROWSER; $this->data->device->type = Constants\DeviceType::MOBILE; @@ -1685,6 +1904,7 @@ private function detectSpecficBrowsers($ua) $this->data->browser->name = 'Maxthon'; $this->data->browser->channel = ''; $this->data->browser->version = null; + $this->data->browser->type = Constants\BrowserType::BROWSER; if (preg_match('/Maxthon[\/\' ]\(?([0-9.]*)\)?/iu', $ua, $match)) { $this->data->browser->version = new Version([ 'value' => $match[1], 'details' => 3 ]); @@ -1699,6 +1919,7 @@ private function detectSpecficBrowsers($ua) $this->data->browser->name = 'Maxthon Nitro'; $this->data->browser->channel = ''; $this->data->browser->version = null; + $this->data->browser->type = Constants\BrowserType::BROWSER; if (preg_match('/MxNitro\/([0-9.]*)/iu', $ua, $match)) { $this->data->browser->version = new Version([ 'value' => $match[1], 'details' => 3 ]); @@ -1711,18 +1932,34 @@ private function detectSpecficBrowsers($ua) $this->data->browser->name = 'WebPositive'; $this->data->browser->channel = ''; $this->data->browser->version = null; + $this->data->browser->type = Constants\BrowserType::BROWSER; if (preg_match('/WebPositive\/([0-9]\.[0-9.]+)/u', $ua, $match)) { $this->data->browser->version = new Version([ 'value' => $match[1], 'details' => 3 ]); } } + /* IBM WebExplorer */ + + if (preg_match('/IBM[- ]WebExplorer[ -]?(DLL ?|Window API ?)?/u', $ua)) { + $this->data->browser->name = 'IBM WebExplorer'; + $this->data->browser->channel = ''; + $this->data->browser->type = Constants\BrowserType::BROWSER; + + if (preg_match('/IBM[- ]WebExplorer[ -]?(?:DLL ?|Window API ?)?\/v([0-9]\.[0-9\.]+)/u', $ua, $match)) { + $this->data->browser->version = new Version([ 'value' => $match[1] ]); + } + + $this->data->os->name = 'OS/2'; + } + /* WorldWideweb */ if (preg_match('/WorldWideweb \(NEXT\)/u', $ua, $match)) { $this->data->browser->name = 'WorldWideWeb'; $this->data->browser->channel = ''; $this->data->browser->version = null; + $this->data->browser->type = Constants\BrowserType::BROWSER; $this->data->os->name = 'NextStep'; } @@ -1732,6 +1969,7 @@ private function detectSpecficBrowsers($ua) if (preg_match('/SogouAndroidBrowser\/([0-9.]*)/u', $ua, $match)) { $this->data->browser->name = 'Sogou Mobile'; $this->data->browser->version = new Version([ 'value' => $match[1] ]); + $this->data->browser->type = Constants\BrowserType::BROWSER; if (isset($this->data->device->manufacturer) && $this->data->device->manufacturer == 'Apple') { unset($this->data->device->manufacturer); @@ -1751,328 +1989,371 @@ private function detectSpecficBrowsers($ua) if (preg_match('/Xiino\/([0-9.]+)/u', $ua, $match)) { $this->data->browser->name = 'Xiino'; $this->data->browser->version = new Version([ 'value' => $match[1] ]); - $this->data->os->name = 'Palm OS'; + $this->data->browser->type = Constants\BrowserType::BROWSER; + $this->data->device->type = Constants\DeviceType::MOBILE; + + $this->data->os->name = 'Palm OS'; + + if (preg_match('/\(v. ([0-9.]+)/u', $ua, $match)) { + $this->data->os->version = new Version([ 'value' => $match[1] ]); + } } - /* WebPro */ + /* Novarra WebPro */ if (preg_match('/WebPro/u', $ua) && preg_match('/PalmOS/u', $ua)) { $this->data->browser->name = 'WebPro'; $this->data->browser->version = null; + $this->data->browser->type = Constants\BrowserType::BROWSER; if (preg_match('/WebPro\/?([0-9.]*)/u', $ua, $match)) { $this->data->browser->version = new Version([ 'value' => $match[1] ]); } } + + /* Novarra Vision */ + + if (preg_match('/Novarra-Vision\/?([0-9.]*)/u', $ua, $match)) { + $this->data->browser->name = 'Novarra Vision'; + $this->data->browser->version = new Version([ 'value' => $match[1] ]); + $this->data->browser->family = null; + $this->data->browser->mode = 'proxy'; + $this->data->browser->type = Constants\BrowserType::BROWSER; + + if ($this->data->device->type != Constants\DeviceType::MOBILE) { + $this->data->os->reset(); + $this->data->device->type = Constants\DeviceType::MOBILE; + } + } } private function detectRemainingBrowsers($ua) { - $browsers = [ - [ 'name' => 'AdobeAIR', 'regexp' => '/AdobeAIR\/([0-9.]*)/u' ], - [ 'name' => 'Awesomium', 'regexp' => '/Awesomium\/([0-9.]*)/u' ], - [ 'name' => 'Bsalsa Embedded', 'regexp' => '/EmbeddedWB ([0-9.]*)/u' ], - [ 'name' => 'Bsalsa Embedded', 'regexp' => '/bsalsa\.com/u' ], - [ 'name' => 'Bsalsa Embedded', 'regexp' => '/Embedded Web Browser/u' ], - [ 'name' => 'Canvace', 'regexp' => '/Canvace Standalone\/([0-9.]*)/u' ], - [ 'name' => 'Ekioh', 'regexp' => '/Ekioh\/([0-9.]*)/u' ], - [ 'name' => 'JavaFX', 'regexp' => '/JavaFX\/([0-9.]*)/u' ], - [ 'name' => 'GFXe', 'regexp' => '/GFXe\/([0-9.]*)/u' ], - [ 'name' => 'LuaKit', 'regexp' => '/luakit/u' ], - [ 'name' => 'Titanium', 'regexp' => '/Titanium\/([0-9.]*)/u' ], - [ 'name' => 'OpenWebKitSharp', 'regexp' => '/OpenWebKitSharp/u' ], - [ 'name' => 'Prism', 'regexp' => '/Prism\/([0-9.]*)/u' ], - [ 'name' => 'Qt', 'regexp' => '/Qt\/([0-9.]*)/u' ], - [ 'name' => 'Qt', 'regexp' => '/QtWebEngine\/([0-9.]*)/u' ], - [ 'name' => 'QtEmbedded', 'regexp' => '/QtEmbedded/u' ], - [ 'name' => 'QtEmbedded', 'regexp' => '/QtEmbedded.*Qt\/([0-9.]*)/u' ], - [ 'name' => 'ReqwirelessWeb', 'regexp' => '/ReqwirelessWeb\/([0-9.]*)/u' ], - [ 'name' => 'RhoSimulator', 'regexp' => '/RhoSimulator/u' ], - [ 'name' => 'UWebKit', 'regexp' => '/UWebKit\/([0-9.]*)/u' ], - [ 'name' => 'Node-WebKit', 'regexp' => '/nw-tests\/([0-9.]*)/u' ], - [ 'name' => 'WebKit2.NET', 'regexp' => '/WebKit2.NET/u' ], - - [ 'name' => 'PhantomJS', 'regexp' => '/PhantomJS\/([0-9.]*)/u' ], - - [ 'name' => 'Google Earth', 'regexp' => '/Google Earth\/([0-9.]*)/u' ], - [ 'name' => 'Google Desktop', 'regexp' => '/Google Desktop\/([0-9.]*)/u', 'details' => 2 ], - [ 'name' => 'Google Search', 'regexp' => '/GSA\/([0-9.]*)/u', 'details' => 3 ], - - [ 'name' => 'EA Origin', 'regexp' => '/Origin\/([0-9.]*)/u' ], - [ 'name' => 'SecondLife', 'regexp' => '/SecondLife\/([0-9.]*)/u' ], - [ 'name' => 'Valve Steam', 'regexp' => '/Valve Steam/u' ], - - /* Media players */ - [ 'name' => 'iTunes', 'regexp' => '/iTunes\/(?:xaa.)?([0-9.]*)/u' ], - [ 'name' => 'iTunes', 'regexp' => '/iTunes-AppleTV\//u' ], - [ 'name' => 'QuickTime', 'regexp' => '/QuickTime[\/\\\\](?:xaa.)?([0-9.]*)/u' ], - [ 'name' => 'Bluefish', 'regexp' => '/bluefish ([0-9.]*)/u' ], - [ 'name' => 'Songbird', 'regexp' => '/Songbird\/([0-9.]*)/u' ], - [ 'name' => 'Stagefright', 'regexp' => '/stagefright\/([0-9.]*)/u' ], - [ 'name' => 'SubStream', 'regexp' => '/SubStream\/([0-9.]*)/u', 'type' => Constants\DeviceType::MOBILE ], - - /* Email clients */ - [ 'name' => 'Lightning', 'regexp' => '/Lightning\/([0-9.]*)/u' ], - [ 'name' => 'Thunderbird', 'regexp' => '/Thunderbird[\/ ]([0-9.]*)/u', 'type' => Constants\DeviceType::DESKTOP ], - [ 'name' => 'Microsoft FrontPage', 'regexp' => '/MS FrontPage ([0-9.]*)/u', 'details' => 2, 'type' => Constants\DeviceType::DESKTOP ], - [ 'name' => 'Microsoft Outlook', 'regexp' => '/Microsoft Outlook IMO, Build ([0-9.]*)/u', 'details' => 2, 'type' => Constants\DeviceType::DESKTOP ], - [ 'name' => 'Microsoft Outlook', 'regexp' => '/Microsoft Outlook ([0-9.]*)/u', 'details' => 2, 'type' => Constants\DeviceType::DESKTOP ], - [ 'name' => 'Microsoft Outlook Express', 'regexp' => '/Outlook-Express\/([0-9.]*)/u', 'details' => 2, 'type' => Constants\DeviceType::DESKTOP ], - [ 'name' => 'Lotus Notes', 'regexp' => '/Lotus-Notes\/([0-9.]*)/u', 'details' => 2, 'type' => Constants\DeviceType::DESKTOP ], - [ 'name' => 'Postbox', 'regexp' => '/Postbox[\/ ]([0-9.]*)/u', 'details' => 2 ], - [ 'name' => 'The Bat!', 'regexp' => '/The Bat! ([0-9.]*)/u', 'details' => 3 ], - - /* Feed readers */ - [ 'name' => 'Akregator', 'regexp' => '/Akregator\/([0-9.]*)/u' ], - [ 'name' => 'Blogos', 'regexp' => '/Blogos\/([0-9.]*)/u', 'type' => Constants\DeviceType::MOBILE ], - [ 'name' => 'Cococ', 'regexp' => '/cococ\/([0-9.]*)/u' ], - [ 'name' => 'FeedDemon', 'regexp' => '/FeedDemon\/([0-9.]*)/u' ], - [ 'name' => 'Feeddler', 'regexp' => '/FeeddlerRSS[ \/]([0-9.]*)/u' ], - [ 'name' => 'Feeddler Pro', 'regexp' => '/FeeddlerPro\/([0-9.]*)/u' ], - [ 'name' => 'Liferea', 'regexp' => '/Liferea\/([0-9.]*)/u' ], - [ 'name' => 'NewsBlur', 'regexp' => '/NewsBlur\/([0-9.]*)/u', 'type' => Constants\DeviceType::MOBILE ], - [ 'name' => 'Newsbeuter', 'regexp' => '/newsbeuter\/([0-9.]*)/u' ], - [ 'name' => 'JetBrains Omea Reader','regexp' => '/JetBrains Omea Reader ([0-9.]*)/u' ], - [ 'name' => 'RSS Bandit', 'regexp' => '/RssBandit\/([0-9.]*)/u' ], - [ 'name' => 'RSS Junkie', 'regexp' => '/RSS Junkie Daemon/u' ], - [ 'name' => 'RSS Owl', 'regexp' => '/RSSOwl\/([0-9.]*)/u' ], - [ 'name' => 'Reeder', 'regexp' => '/Reeder\/([0-9.]*)/u' ], - [ 'name' => 'ReedKit', 'regexp' => '/ReedKit\/([0-9.]*)/u', 'type' => Constants\DeviceType::DESKTOP ], - [ 'name' => 'Rome', 'regexp' => '/Rome Client/u' ], - [ 'name' => 'jsRSS++', 'regexp' => '/jsRSS++\/([0-9.]*)/u' ], - - /* Social apps */ - [ 'name' => 'Facebook', 'regexp' => '/FBAN\/FBIOS/u' ], - [ 'name' => 'Facebook', 'regexp' => '/FBAN\/FB4A/u' ], - [ 'name' => 'Facebook', 'regexp' => '/FB_IAB\/FB4A/u' ], - [ 'name' => 'Google+', 'regexp' => '/com.google.GooglePlus/u' ], - [ 'name' => 'WeChat', 'regexp' => '/MicroMessenger\/([0-9.]*)/u' ], - [ 'name' => 'Sina Weibo', 'regexp' => '/weibo__([0-9.]*)/u' ], - [ 'name' => 'Twitter', 'regexp' => '/TwitterAndroid/u' ], - [ 'name' => 'Kik', 'regexp' => '/Kik\/([0-9.]*)/u' ], - [ 'name' => 'WordPress', 'regexp' => '/wp-android\/([0-9.]*)/u' ], - - /* Office suite */ - [ 'name' => 'Microsoft Office', 'regexp' => '/MSOffice ([0-9.]*)/u' ], - - - /* Search */ - [ 'name' => 'NAVER', 'regexp' => '/NAVER\(inapp; search; [0-9]+; ([0-9.]*)\)/u' ], - - /* Media players */ - [ 'name' => 'CorePlayer', 'regexp' => '/CorePlayer\/([0-9.]*)/u' ], - [ 'name' => 'FlyCast', 'regexp' => '/FlyCast\/([0-9.]*)/u' ], - - /* Editors */ - [ 'name' => 'W3C Amaya', 'regexp' => '/amaya\/([0-9.]*)/u' ], - - /* Browsers */ - [ 'name' => '1Browser', 'regexp' => '/1Password\/([0-9.]*)/u' ], - [ 'name' => '2345 Browser', 'regexp' => '/Mb2345Browser\/([0-9.]*)/u' ], - [ 'name' => '3G Explorer', 'regexp' => '/3G Explorer\/([0-9.]*)/u', 'details' => 3 ], - [ 'name' => '4G Explorer', 'regexp' => '/4G Explorer\/([0-9.]*)/u', 'details' => 3 ], - [ 'name' => '360 Extreme Explorer', 'regexp' => '/QIHU 360EE/u', 'type' => Constants\DeviceType::DESKTOP ], - [ 'name' => '360 Safe Explorer', 'regexp' => '/QIHU 360SE/u', 'type' => Constants\DeviceType::DESKTOP ], - [ 'name' => 'ABrowse', 'regexp' => '/A[Bb]rowse ([0-9.]*)/u' ], - [ 'name' => 'Abrowser', 'regexp' => '/Abrowser\/([0-9.]*)/u' ], - [ 'name' => 'Acorn Browse', 'regexp' => '/Acorn Browse ([0-9.]+)/u' ], - [ 'name' => 'Acorn Browse', 'regexp' => '/Acorn Phoenix ([0-9.]+)/u' ], - [ 'name' => 'AltiBrowser', 'regexp' => '/AltiBrowser\/([0-9.]*)/i' ], - [ 'name' => 'AOL Desktop', 'regexp' => '/AOL ([0-9.]*); AOLBuild/i' ], - [ 'name' => 'AOL Browser', 'regexp' => '/America Online Browser (?:[0-9.]*); rev([0-9.]*);/i' ], - [ 'name' => 'Arachne', 'regexp' => '/Arachne\/([0-9.]*)/u', 'type' => Constants\DeviceType::DESKTOP ], - [ 'name' => 'Arora', 'regexp' => '/[Aa]rora\/([0-9.]*)/u' ], // see: www.arora-browser.org - [ 'name' => 'AvantGo', 'regexp' => '/AvantGo ([0-9.]+)/u' ], - [ 'name' => 'Avant Browser', 'regexp' => '/Avant Browser/u' ], - [ 'name' => 'Avant Browser', 'regexp' => '/Avant TriCore/u' ], - [ 'name' => 'Aviator', 'regexp' => '/Aviator\/([0-9.]*)/u', 'details' => 1 ], - [ 'name' => 'Awakening', 'regexp' => '/Awakening Browser\/([0-9.]*)/u', 'details' => 2 ], - [ 'name' => 'AWeb', 'regexp' => '/Amiga-AWeb(?:\/([0-9.]*))?/u' ], - [ 'name' => 'Baidu Browser', 'regexp' => '/bdbrowser\/([0-9.]*)/i' ], - [ 'name' => 'Baidu Browser', 'regexp' => '/bdbrowser_i18n\/([0-9.]*)/i' ], - [ 'name' => 'Baidu Browser', 'regexp' => '/M?BaiduBrowser\/([0-9.]*)/i' ], - [ 'name' => 'Baidu Browser', 'regexp' => '/BdMobile\/([0-9.]*)/i' ], - [ 'name' => 'Baidu Browser', 'regexp' => '/FlyFlow\/([0-9.]*)/u', 'details' => 2 ], - [ 'name' => 'Baidu Browser', 'regexp' => '/BIDUBrowser[ \/]([0-9.]*)/u' ], - [ 'name' => 'Baidu Browser', 'regexp' => '/BaiduHD\/([0-9.]*)/u', 'details' => 2, 'type' => Constants\DeviceType::MOBILE ], - [ 'name' => 'Baidu Spark', 'regexp' => '/BDSpark\/([0-9.]*)/u', 'details' => 2 ], - [ 'name' => 'Baidu Hao123', 'regexp' => '/hao123\/([0-9.]*)/u', 'details' => 2 ], - [ 'name' => 'Black Wren', 'regexp' => '/BlackWren\/([0-9.]*)/u', 'details' => 2 ], - [ 'name' => 'Blazer', 'regexp' => '/Blazer\/([0-9.]*)/u' ], - [ 'name' => 'Bunjalloo', 'regexp' => '/Bunjalloo\/([0-9.]*)/u' ], // Browser for the Nintento DS - [ 'name' => 'Byffox', 'regexp' => '/Byffox\/([0-9.]*)/u', 'type' => Constants\DeviceType::DESKTOP ], - [ 'name' => 'Camino', 'regexp' => '/Camino\/([0-9.]*)/u', 'type' => Constants\DeviceType::DESKTOP ], - [ 'name' => 'Canure', 'regexp' => '/Canure\/([0-9.]*)/u', 'details' => 3 ], - [ 'name' => 'CNF', 'regexp' => '/CNF\/([0-9.]*)/u' ], - [ 'name' => 'CometBird', 'regexp' => '/CometBird\/([0-9.]*)/u' ], - [ 'name' => 'Comodo Dragon', 'regexp' => '/Comodo_Dragon\/([0-9.]*)/u', 'details' => 2 ], - [ 'name' => 'Comodo Dragon', 'regexp' => '/Dragon\/([0-9.]*)/u', 'details' => 2 ], - [ 'name' => 'Conkeror', 'regexp' => '/[Cc]onkeror\/([0-9.]*)/u' ], - [ 'name' => 'CoolNovo', 'regexp' => '/(?:CoolNovo|CoolNovoChromePlus)\/([0-9.]*)/u', 'details' => 3, 'type' => Constants\DeviceType::DESKTOP ], - [ 'name' => 'Charon', 'regexp' => '/Charon/' ], - [ 'name' => 'ChromePlus', 'regexp' => '/ChromePlus(?:\/([0-9.]*))?$/u', 'details' => 3, 'type' => Constants\DeviceType::DESKTOP ], - [ 'name' => 'Cunaguaro', 'regexp' => '/Cunaguaro\/([0-9.]*)/u', 'details' => 3, 'type' => Constants\DeviceType::DESKTOP ], - [ 'name' => 'CuteBrowser', 'regexp' => '/CuteBrowser\/([0-9.]*)/u', 'details' => 2 ], - [ 'name' => 'Cyberfox', 'regexp' => '/Cyberfox\/([0-9.]*)/u', 'details' => 2 ], - [ 'name' => 'Daedalus', 'regexp' => '/Daedalus ([0-9.]*)/u', 'details' => 2 ], - [ 'name' => 'Daum', 'regexp' => '/DaumApps\/([0-9.]*)/u' ], - [ 'name' => 'Daum', 'regexp' => '/daumcafe\/([0-9.]*)/u' ], - [ 'name' => 'Digia @Web', 'regexp' => '/Digia @Web\/([0-9.]*)/u' ], - [ 'name' => 'Dillo', 'regexp' => '/Dillo\/([0-9.]*)/u' ], - [ 'name' => 'Demobrowser', 'regexp' => '/demobrowser\/([0-9.]*)/u' ], - [ 'name' => 'Doga Rhodonit', 'regexp' => '/DogaRhodonit/u' ], - [ 'name' => 'Dorado', 'regexp' => '/Browser\/Dorado([0-9.]*)/u' ], - [ 'name' => 'Dooble', 'regexp' => '/Dooble(?:\/([0-9.]*))?/u' ], - [ 'name' => 'Dorothy', 'regexp' => '/Dorothy$/u' ], - [ 'name' => 'DWB', 'regexp' => '/dwb(?:-hg)?(?:\/([0-9.]*))?/u' ], - [ 'name' => 'GNOME Web', 'regexp' => '/Epiphany\/([0-9.]*)/u', 'type' => Constants\DeviceType::DESKTOP ], - [ 'name' => 'ELinks', 'regexp' => '/ELinks\/([0-9.]*[0-9])/u', 'type' => Constants\DeviceType::DESKTOP ], - [ 'name' => 'EVM Browser', 'regexp' => '/EVMBrowser\/([0-9.]*)/u' ], - [ 'name' => 'EMOBILE Browser', 'regexp' => '/WWW Browser\/ver([0-9.]*)/u' ], - [ 'name' => 'EudoraWeb', 'regexp' => '/EudoraWeb ([0-9.]*)/u' ], - [ 'name' => 'FireWeb', 'regexp' => '/FireWeb\/([0-9.]*)/u' ], - [ 'name' => 'Flock', 'regexp' => '/Flock\/([0-9.]*)/u', 'details' => 3, 'type' => Constants\DeviceType::DESKTOP ], - [ 'name' => 'Galeon', 'regexp' => '/Galeon\/([0-9.]*)/u', 'details' => 3 ], - [ 'name' => 'Helium', 'regexp' => '/HeliumMobileBrowser\/([0-9.]*)/u' ], - [ 'name' => 'Hive Explorer', 'regexp' => '/HiveE/u' ], - [ 'name' => 'IBrowse', 'regexp' => '/IBrowse[\/ ]([0-9.]*)/u', 'type' => Constants\DeviceType::DESKTOP ], - [ 'name' => 'iCab', 'regexp' => '/iCab\/([0-9.]*)/u' ], - [ 'name' => 'Iceape', 'regexp' => '/Iceape\/([0-9.]*)/u' ], - [ 'name' => 'IceCat', 'regexp' => '/IceCat[ \/]([0-9.]*)/u', 'type' => Constants\DeviceType::DESKTOP ], - [ 'name' => 'Comodo IceDragon', 'regexp' => '/IceDragon\/([0-9.]*)/u', 'details' => 2, 'type' => Constants\DeviceType::DESKTOP ], - [ 'name' => 'Iceweasel', 'regexp' => '/Iceweasel\/([0-9.]*)/iu', 'type' => Constants\DeviceType::DESKTOP ], - [ 'name' => 'InternetSurfboard', 'regexp' => '/InternetSurfboard\/([0-9.]*)/u' ], - [ 'name' => 'Iron', 'regexp' => '/Iron\/([0-9.]*)/u', 'details' => 2 ], - [ 'name' => 'Isis', 'regexp' => '/BrowserServer/u' ], - [ 'name' => 'Isis', 'regexp' => '/ISIS\/([0-9.]*)/u', 'details' => 2 ], - [ 'name' => 'iSurf', 'regexp' => '/iSurf version \/v([0-9.]*)/u', 'details' => 2 ], - [ 'name' => 'Jumanji', 'regexp' => '/jumanji/u' ], - [ 'name' => 'Kazehakase', 'regexp' => '/Kazehakase\/([0-9.]*)/u' ], - [ 'name' => 'KChrome', 'regexp' => '/KChrome\/([0-9.]*)/u', 'details' => 3 ], - [ 'name' => 'Kiosk', 'regexp' => '/Kiosk\/([0-9.]*)/u' ], - [ 'name' => 'K-Meleon', 'regexp' => '/K-Meleon\/([0-9.]*)/u', 'type' => Constants\DeviceType::DESKTOP ], - [ 'name' => 'Lbbrowser', 'regexp' => '/LBBROWSER/u' ], - [ 'name' => 'Leechcraft', 'regexp' => '/Leechcraft(?:\/([0-9.]*))?/u', 'details' => 2 ], - [ 'name' => 'LieBaoFast', 'regexp' => '/LieBaoFast\/([0-9.]*)/u' ], - [ 'name' => 'Links', 'regexp' => '/Links \(([0-9.]*)/u' ], - [ 'name' => 'Lobo', 'regexp' => '/Lobo\/([0-9.]*)/u', 'type' => Constants\DeviceType::DESKTOP ], - [ 'name' => 'Lotus Expeditor', 'regexp' => '/Gecko Expeditor ([0-9.]*)/u', 'details' => 3 ], - [ 'name' => 'Lunascape', 'regexp' => '/Lunascape[\/| ]([0-9.]*)/u', 'details' => 3 ], - [ 'name' => 'Lynx', 'regexp' => '/Lynx\/([0-9.]*)/u' ], - [ 'name' => 'Motorola Internet Browser', 'regexp' => '/MIB\/([0-9.]*)/u' ], - [ 'name' => 'iLunascape', 'regexp' => '/iLunascape\/([0-9.]*)/u', 'details' => 3 ], - [ 'name' => 'Intermec Browser', 'regexp' => '/Intermec\/([0-9.]*)/u', 'details' => 2 ], - [ 'name' => 'Jig Browser', 'regexp' => '/jig browser(?: web| core|9i?)?;? ?([0-9.]+)?/u', 'type' => Constants\DeviceType::MOBILE ], - [ 'name' => 'MaCross Mobile', 'regexp' => '/MaCross\/([0-9.]*)/u' ], - [ 'name' => 'Mammoth', 'regexp' => '/Mammoth\/([0-9.]*)/u' ], // see: https://itunes.apple.com/cn/app/meng-ma-liu-lan-qi/id403760998?mt=8 - [ 'name' => 'Maxthon', 'regexp' => '/MxBrowser\/([0-9.]*)/u' ], - [ 'name' => 'Maxthon', 'regexp' => '/MxBrowser-iPhone\/([0-9.]*)/u' ], - [ 'name' => 'MIUI Browser', 'regexp' => '/MiuiBrowser\/([0-9.]*)/u' ], - [ 'name' => 'MixShark', 'regexp' => '/MixShark\/([0-9.]*)/u' ], - [ 'name' => 'mlbrowser', 'regexp' => '/mlbrowser/u' ], - [ 'name' => 'Motorola WebKit', 'regexp' => '/MotorolaWebKit(?:\/([0-9.]*))?/u', 'details' => 3 ], - [ 'name' => 'NetFront Life Browser', 'regexp' => '/NetFrontLifeBrowser\/([0-9.]*)/u' ], - [ 'name' => 'NetPositive', 'regexp' => '/NetPositive\/([0-9.]*)/u' ], - [ 'name' => 'Netscape Navigator', 'regexp' => '/Navigator\/([0-9.]*)/u', 'details' => 3 ], - [ 'name' => 'Odyssey', 'regexp' => '/OWB\/([0-9.]*)/u' ], - [ 'name' => 'OmniWeb', 'regexp' => '/OmniWeb/u', 'type' => Constants\DeviceType::DESKTOP ], - [ 'name' => 'OneBrowser', 'regexp' => '/OneBrowser\/([0-9.]*)/u' ], - [ 'name' => 'Openwave', 'regexp' => '/Openwave\/([0-9.]*)/u', 'details' => 2, 'type' => Constants\DeviceType::MOBILE ], - [ 'name' => 'Openwave', 'regexp' => '/Openwave Mobile Browser ([0-9.]*)/u', 'details' => 2, 'type' => Constants\DeviceType::MOBILE ], - [ 'name' => 'Openwave', 'regexp' => '/UP\.Browser\/([a-z0-9.]*)/iu', 'details' => 2, 'type' => Constants\DeviceType::MOBILE ], - [ 'name' => 'Opera Oupeng', 'regexp' => '/Oupeng\/([0-9.]*)/u', 'details' => 2 ], - [ 'name' => 'Opera Oupeng', 'regexp' => '/OupengHD-([0-9.]*)/u', 'details' => 2 ], - [ 'name' => 'Oregano', 'regexp' => '/Oregano ([0-9.]*)/u' ], - [ 'name' => 'Orca', 'regexp' => '/Orca\/([0-9.]*)/u' ], - [ 'name' => 'Origyn', 'regexp' => '/Origyn Web Browser/u' ], - [ 'name' => 'Otter', 'regexp' => '/Otter Browser\/([0-9.]*)/u' ], - [ 'name' => 'Pale Moon', 'regexp' => '/Pale[mM]oon\/([0-9.]*)/u' ], - [ 'name' => 'Phantom', 'regexp' => '/Phantom\/V([0-9.]*)/u' ], - [ 'name' => 'Polaris', 'regexp' => '/Polaris[\/ ]v?([0-9.]*)/iu', 'details' => 2 ], - [ 'name' => 'Polaris', 'regexp' => '/POLARIS([0-9.]+)/u', 'details' => 2 ], - [ 'name' => 'Qihoo 360', 'regexp' => '/QIHU THEWORLD/u' ], - [ 'name' => 'QtCreator', 'regexp' => '/QtCreator\/([0-9.]*)/u' ], - [ 'name' => 'QtQmlViewer', 'regexp' => '/QtQmlViewer/u' ], - [ 'name' => 'QtMiniBrowser', 'regexp' => '/QtMiniBrowser\/([0-9.]*)/u' ], - [ 'name' => 'QtTestBrowser', 'regexp' => '/QtTestBrowser\/([0-9.]*)/u' ], - [ 'name' => 'QtWeb', 'regexp' => '/QtWeb Internet Browser\/([0-9.]*)/u' ], - [ 'name' => 'QupZilla', 'regexp' => '/QupZilla\/([0-9.]*)/u', 'type' => Constants\DeviceType::DESKTOP ], - [ 'name' => 'Ryouko', 'regexp' => '/Ryouko\/([0-9.]*)/u', 'type' => Constants\DeviceType::DESKTOP ], // see: https://github.com/foxhead128/ryouko - [ 'name' => 'Roccat', 'regexp' => '/Roccat\/([0-9]\.[0-9.]*)/u' ], - [ 'name' => 'Raven for Mac', 'regexp' => '/Raven for Mac\/([0-9.]*)/u' ], - [ 'name' => 'rekonq', 'regexp' => '/rekonq(?:\/([0-9.]*))?/u', 'type' => Constants\DeviceType::DESKTOP ], - [ 'name' => 'RockMelt', 'regexp' => '/RockMelt\/([0-9.]*)/u', 'details' => 2 ], - [ 'name' => 'SaaYaa Explorer', 'regexp' => '/SaaYaa/u', 'type' => Constants\DeviceType::DESKTOP ], - [ 'name' => 'Scope', 'regexp' => '/Scope\/([0-9.]*)/u', 'details' => 2 ], // see: http://www.programmer.co.jp/scope.shtml - [ 'name' => 'SEMC Browser', 'regexp' => '/SEMC-Browser\/([0-9.]*)/u' ], - [ 'name' => 'Sleipnir', 'regexp' => '/Sleipnir\/([0-9.]*)/u', 'details' => 3 ], - [ 'name' => 'SlimBoat', 'regexp' => '/SlimBoat\/([0-9.]*)/u' ], - [ 'name' => 'SMBrowser', 'regexp' => '/SMBrowser/u' ], - [ 'name' => 'Sogou Explorer', 'regexp' => '/SE 2.X MetaSr/u', 'type' => Constants\DeviceType::DESKTOP ], - [ 'name' => 'Sogou Mobile', 'regexp' => '/SogouMobileBrowser\/([0-9.]*)/u', 'details' => 2 ], - [ 'name' => 'Snowshoe', 'regexp' => '/Snowshoe\/([0-9.]*)/u', 'details' => 2 ], - [ 'name' => 'Sputnik', 'regexp' => '/Sputnik\/([0-9.]*)/iu', 'details' => 3 ], - [ 'name' => 'Stainless', 'regexp' => '/Stainless\/([0-9.]*)/u' ], - [ 'name' => 'SunChrome', 'regexp' => '/SunChrome\/([0-9.]*)/u' ], - [ 'name' => 'Superbird', 'regexp' => '/Superbird\/([0-9.]*)/u', 'details' => 2 ], - [ 'name' => 'Surf', 'regexp' => '/Surf\/([0-9.]*)/u' ], - [ 'name' => 'The World', 'regexp' => '/TheWorld ([0-9.]*)/u' ], - [ 'name' => 'TaoBrowser', 'regexp' => '/TaoBrowser\/([0-9.]*)/u', 'details' => 2 ], - [ 'name' => 'TaomeeBrowser', 'regexp' => '/TaomeeBrowser\/([0-9.]*)/u', 'details' => 2 ], - [ 'name' => 'TazWeb', 'regexp' => '/TazWeb/u' ], - [ 'name' => 'Tencent Traveler', 'regexp' => '/TencentTraveler ([0-9.]*)/u', 'details' => 2 ], - [ 'name' => 'Uzbl', 'regexp' => '/^Uzbl/u' ], - [ 'name' => 'Viera Browser', 'regexp' => '/Viera\/([0-9.]*)/u' ], - [ 'name' => 'Villanova', 'regexp' => '/Villanova\/([0-9.]*)/u', 'details' => 3 ], - [ 'name' => 'Vimb', 'regexp' => '/vimb\/([0-9.]*)/u' ], - [ 'name' => 'Vivaldi', 'regexp' => '/Vivaldi\/([0-9.]*)/u', 'details' => 2 ], - [ 'name' => 'Voyager', 'regexp' => '/AmigaVoyager\/([0-9.]*)/u' ], - [ 'name' => 'WADA Browser', 'regexp' => '/WadaBrowser\/([0-9.]*)/u' ], - [ 'name' => 'Waterfox', 'regexp' => '/Waterfox\/([0-9.]*)/u', 'details' => 2, 'type' => Constants\DeviceType::DESKTOP ], - [ 'name' => 'Wavelink Velocity', 'regexp' => '/Wavelink Velocity Browser\/([0-9.]*)/u', 'details' => 2 ], - [ 'name' => 'WebLite', 'regexp' => '/WebLite\/([0-9.]*)/u', 'type' => Constants\DeviceType::MOBILE ], - [ 'name' => 'WebRender', 'regexp' => '/WebRender/u' ], - [ 'name' => 'Webster', 'regexp' => '/Webster ([0-9.]*)/u' ], - [ 'name' => 'Wear Internet Browser','regexp' => '/WIB\/([0-9.]*)/u' ], - [ 'name' => 'Wyzo', 'regexp' => '/Wyzo\/([0-9.]*)/u', 'details' => 3 ], - [ 'name' => 'Miui Browser', 'regexp' => '/XiaoMi\/MiuiBrowser\/([0-9.]*)/u' ], - [ 'name' => 'Yandex Browser', 'regexp' => '/YaBrowser\/([0-9.]*)/u', 'details' => 2 ], - [ 'name' => 'Yelang', 'regexp' => '/Yelang\/([0-9.]*)/u', 'details' => 3 ], // see: wellgo.org - [ 'name' => 'YRC Weblink', 'regexp' => '/YRCWeblink\/([0-9.]*)/u' ], - [ 'name' => 'Zetakey', 'regexp' => '/Zetakey Webkit\/([0-9.]*)/u' ], - [ 'name' => 'Zetakey', 'regexp' => '/Zetakey\/([0-9.]*)/u' ], - [ 'name' => '冲浪浏览器', 'regexp' => '/CMSurfClient-Android/u' ], - - [ 'name' => 'Nimbus', 'regexp' => '/Nimbus\/([0-9.]*)/u' ], - - [ 'name' => 'McAfee Web Gateway', 'regexp' => '/Webwasher\/([0-9.]*)/u' ], - [ 'name' => 'Android Download Manager', 'regexp' => '/AndroidDownloadManager\/([0-9.]*)/u' ], - - [ 'name' => 'Open Sankoré', 'regexp' => '/Open-Sankore\/([0-9.]*)/u', 'type' => Constants\DeviceType::WHITEBOARD ], - - [ 'name' => 'Adapi', 'regexp' => '/ ADAPI\/([0-9.]*)/u', 'hidden' => true, 'type' => Constants\DeviceType::SIGNAGE ], - [ 'name' => 'BrightSign', 'regexp' => '/BrightSign\/([0-9.]*)/u', 'type' => Constants\DeviceType::SIGNAGE ], - [ 'name' => 'Coship MMCP', 'regexp' => '/Coship_MMCP_([0-9.]*)/u', 'type' => Constants\DeviceType::SIGNAGE ], + $items = [ + + Constants\BrowserType::BROWSER => [ + + /* Desktop browsers */ + [ 'name' => '126 Browser', 'regexp' => '/126BROWSER/u' ], + [ 'name' => '360 Extreme Explorer', 'regexp' => '/QIHU 360EE/u', 'type' => Constants\DeviceType::DESKTOP ], + [ 'name' => '360 Safe Explorer', 'regexp' => '/QIHU 360SE/u', 'type' => Constants\DeviceType::DESKTOP ], + [ 'name' => '7Star', 'regexp' => '/7Star\/([0-9.]*)/u' ], // see: http://www.qixing123.com + [ 'name' => 'ABrowse', 'regexp' => '/A[Bb]rowse ([0-9.]*)/u' ], // browser for the Syllable OS + [ 'name' => 'Abrowser', 'regexp' => '/Abrowser\/([0-9.]*)/u' ], // unbranded version of Firefox + [ 'name' => 'Acorn Browse', 'regexp' => '/Acorn Browse ([0-9.]+)/u' ], + [ 'name' => 'Acorn Browse', 'regexp' => '/Acorn Phoenix ([0-9.]+)/u' ], + [ 'name' => 'AOL Desktop', 'regexp' => '/AOL ([0-9.]*); AOLBuild/i' ], + [ 'name' => 'AOL Browser', 'regexp' => '/America Online Browser (?:[0-9.]*); rev([0-9.]*);/i' ], + [ 'name' => 'Arachne', 'regexp' => '/xChaos_Arachne\/[0-9]\.([0-9.]*)/u', 'type' => Constants\DeviceType::DESKTOP ], // see: www.glennmcc.org + [ 'name' => 'Arora', 'regexp' => '/[Aa]rora\/([0-9.]*)/u' ], // see: www.arora-browser.org + [ 'name' => 'AWeb', 'regexp' => '/Amiga-AWeb(?:\/([0-9.]*))?/u' ], + [ 'name' => 'AvantGo', 'regexp' => '/AvantGo ([0-9.]+)/u' ], + [ 'name' => 'Avant Browser', 'regexp' => '/Avant Browser/u' ], + [ 'name' => 'Avant Browser', 'regexp' => '/Avant TriCore/u' ], + [ 'name' => 'Aviator', 'regexp' => '/Aviator\/([0-9.]*)/u', 'details' => 1 ], // see: https://github.com/WhiteHatSecurity/Aviator + [ 'name' => 'Baidu Browser', 'regexp' => '/bdbrowser\/([0-9.]*)/i' ], + [ 'name' => 'Baidu Browser', 'regexp' => '/bdbrowser_i18n\/([0-9.]*)/i' ], + [ 'name' => 'Baidu Spark', 'regexp' => '/BDSpark\/([0-9.]*)/u', 'details' => 2 ], + [ 'name' => 'Black Wren', 'regexp' => '/BlackWren\/([0-9.]*)/u', 'details' => 2 ], // see: https://github.com/conmarap/jetbrowser + [ 'name' => 'Byffox', 'regexp' => '/Byffox\/([0-9.]*)/u', 'type' => Constants\DeviceType::DESKTOP ], + [ 'name' => 'Camino', 'regexp' => '/Camino\/([0-9.]*)/u', 'type' => Constants\DeviceType::DESKTOP ], + [ 'name' => 'Canure', 'regexp' => '/Canure\/([0-9.]*)/u', 'details' => 3 ], // see: http://canure.weebly.com/index.html + [ 'name' => 'Charon', 'regexp' => '/Charon/' ], // see: http://www.vitanuova.com/inferno/man/1/charon.html + [ 'name' => 'ChromePlus', 'regexp' => '/ChromePlus(?:\/([0-9.]*))?$/u', 'details' => 3, 'type' => Constants\DeviceType::DESKTOP ], + [ 'name' => 'CometBird', 'regexp' => '/CometBird\/([0-9.]*)/u' ], // see: http://www.cometbird.com + [ 'name' => 'Comodo Dragon', 'regexp' => '/Comodo_Dragon\/([0-9.]*)/u', 'details' => 2 ], + [ 'name' => 'Comodo Dragon', 'regexp' => '/Dragon\/([0-9.]*)/u', 'details' => 2 ], + [ 'name' => 'Comodo IceDragon', 'regexp' => '/IceDragon\/([0-9.]*)/u', 'details' => 2, 'type' => Constants\DeviceType::DESKTOP ], + [ 'name' => 'Conkeror', 'regexp' => '/[Cc]onkeror\/([0-9.]*)/u' ], + [ 'name' => 'CoolNovo', 'regexp' => '/(?:CoolNovo|CoolNovoChromePlus)\/([0-9.]*)/u', 'details' => 3, 'type' => Constants\DeviceType::DESKTOP ], + [ 'name' => 'Cunaguaro', 'regexp' => '/Cunaguaro\/([0-9.]*)/u', 'details' => 3, 'type' => Constants\DeviceType::DESKTOP ], + [ 'name' => 'Cyberfox', 'regexp' => '/Cyberfox\/([0-9.]*)/u', 'details' => 2 ], // see: https://cyberfox.8pecxstudios.com + [ 'name' => 'Daedalus', 'regexp' => '/Daedalus ([0-9.]*)/u', 'details' => 2 ], + [ 'name' => 'Dillo', 'regexp' => '/Dillo\/([0-9.]*)/u' ], // see: http://www.dillo.org + [ 'name' => 'Doga Rhodonit', 'regexp' => '/DogaRhodonit/u' ], + [ 'name' => 'EudoraWeb', 'regexp' => '/EudoraWeb ([0-9.]*)/u' ], + [ 'name' => 'Flock', 'regexp' => '/Flock\/([0-9.]*)/u', 'details' => 3, 'type' => Constants\DeviceType::DESKTOP ], + [ 'name' => 'Galeon', 'regexp' => '/Galeon\/([0-9.]*)/u', 'details' => 3 ], + [ 'name' => 'GNOME Web', 'regexp' => '/Epiphany\/([0-9.]*)/u', 'type' => Constants\DeviceType::DESKTOP ], + [ 'name' => 'IBrowse', 'regexp' => '/IBrowse[\/ ]([0-9.]*)/u', 'type' => Constants\DeviceType::DESKTOP ], + [ 'name' => 'iCab', 'regexp' => '/iCab\/([0-9.]*)/u' ], + [ 'name' => 'Iceape', 'regexp' => '/Iceape\/([0-9.]*)/u' ], + [ 'name' => 'IceCat', 'regexp' => '/IceCat[ \/]([0-9.]*)/u', 'type' => Constants\DeviceType::DESKTOP ], // see: https://www.gnu.org/software/gnuzilla/ + [ 'name' => 'Iceweasel', 'regexp' => '/Iceweasel\/([0-9.]*)/iu', 'type' => Constants\DeviceType::DESKTOP ], + [ 'name' => 'Iron', 'regexp' => '/Iron\/([0-9.]*)/u', 'details' => 2 ], // see: http://www.srware.net/en/software_srware_iron.php + [ 'name' => 'Kazehakase', 'regexp' => '/Kazehakase\/([0-9.]*)/u' ], // see: http://kazehakase.osdn.jp + [ 'name' => 'KChrome', 'regexp' => '/KChrome\/([0-9.]*)/u', 'details' => 3 ], // see: http://www.kchrome.com + [ 'name' => 'K-Meleon', 'regexp' => '/K-Meleon\/([0-9.]*)/u', 'type' => Constants\DeviceType::DESKTOP ], // see: http://kmeleonbrowser.org + [ 'name' => 'LieBao', 'regexp' => '/LBBROWSER/u' ], // see: http://www.liebao.cn + [ 'name' => 'Lobo', 'regexp' => '/Lobo\/([0-9.]*)/u', 'type' => Constants\DeviceType::DESKTOP ], // see: http://sourceforge.net/projects/xamj/files/Lobo%20Browser/ + [ 'name' => 'Lunascape', 'regexp' => '/Lunascape[\/| ]([0-9.]*)/u', 'details' => 3 ], // see: http://www.lunascape.tv + [ 'name' => 'Maxthon', 'regexp' => '/MxBrowser\/([0-9.]*)/u' ], + [ 'name' => 'Maxthon', 'regexp' => '/MxBrowser-iPhone\/([0-9.]*)/u' ], + [ 'name' => 'MixShark', 'regexp' => '/MixShark\/([0-9.]*)/u' ], // see: http://terbaddo.free.fr/mixshark.php + [ 'name' => 'mlbrowser', 'regexp' => '/mlbrowser/u' ], // see: https://github.com/Topguy/mlbrowser + [ 'name' => 'NetPositive', 'regexp' => '/NetPositive\/([0-9.]*)/u' ], + [ 'name' => 'Odyssey', 'regexp' => '/OWB\/([0-9.]*)/u' ], + [ 'name' => 'OmniWeb', 'regexp' => '/OmniWeb/u', 'type' => Constants\DeviceType::DESKTOP ], + [ 'name' => 'Orca', 'regexp' => '/Orca\/([0-9.]*)/u' ], + [ 'name' => 'Oregano', 'regexp' => '/Oregano ([0-9.]*)/u' ], // see: http://www.xat.nl/en/riscos/sw/oregano/ + [ 'name' => 'Origyn', 'regexp' => '/Origyn Web Browser/u' ], + [ 'name' => 'Otter', 'regexp' => '/Otter Browser\/([0-9.]*)/u' ], // see: https://otter-browser.org + [ 'name' => 'Pale Moon', 'regexp' => '/Pale[mM]oon\/([0-9.]*)/u' ], // see: https://www.palemoon.org + [ 'name' => 'Qihoo 360', 'regexp' => '/QIHU THEWORLD/u' ], + [ 'name' => 'QtWeb', 'regexp' => '/QtWeb Internet Browser\/([0-9.]*)/u' ], + [ 'name' => 'QupZilla', 'regexp' => '/QupZilla\/([0-9.]*)/u', 'type' => Constants\DeviceType::DESKTOP ], + [ 'name' => 'rekonq', 'regexp' => '/rekonq(?:\/([0-9.]*))?/u', 'type' => Constants\DeviceType::DESKTOP ], + [ 'name' => 'Ryouko', 'regexp' => '/Ryouko\/([0-9.]*)/u', 'type' => Constants\DeviceType::DESKTOP ], // see: https://github.com/foxhead128/ryouko + [ 'name' => 'SaaYaa Explorer', 'regexp' => '/SaaYaa/u', 'type' => Constants\DeviceType::DESKTOP ], + [ 'name' => 'Sleipnir', 'regexp' => '/Sleipnir\/([0-9.]*)/u', 'details' => 3 ], + [ 'name' => 'Sogou Explorer', 'regexp' => '/SE 2.X MetaSr/u', 'type' => Constants\DeviceType::DESKTOP ], + [ 'name' => 'Stainless', 'regexp' => '/Stainless\/([0-9.]*)/u' ], // see: http://www.stainlessapp.com + [ 'name' => 'SunChrome', 'regexp' => '/SunChrome\/([0-9.]*)/u' ], + [ 'name' => 'Superbird', 'regexp' => '/Superbird\/([0-9.]*)/u', 'details' => 2 ], + [ 'name' => 'Tencent Traveler', 'regexp' => '/TencentTraveler ([0-9.]*)/u', 'details' => 2 ], + [ 'name' => 'TenFourFox', 'regexp' => '/TenFourFox\//u' ], + [ 'name' => 'The World', 'regexp' => '/TheWorld(?: ([0-9.]*))?/u' ], + [ 'name' => 'Vivaldi', 'regexp' => '/Vivaldi\/([0-9.]*)/u', 'details' => 2 ], + [ 'name' => 'Voyager', 'regexp' => '/AmigaVoyager\/([0-9.]*)/u' ], + [ 'name' => 'Waterfox', 'regexp' => '/Waterfox\/([0-9.]*)/u', 'details' => 2, 'type' => Constants\DeviceType::DESKTOP ], + [ 'name' => 'Yandex Browser', 'regexp' => '/YaBrowser\/([0-9.]*)/u', 'details' => 2 ], + + /* Mobile browsers */ + [ 'name' => '1Browser', 'regexp' => '/1Password\/([0-9.]*)/u' ], + [ 'name' => '2345 Browser', 'regexp' => '/Mb2345Browser\/([0-9.]*)/u' ], + [ 'name' => '3G Explorer', 'regexp' => '/3G Explorer\/([0-9.]*)/u', 'details' => 3 ], + [ 'name' => '4G Explorer', 'regexp' => '/4G Explorer\/([0-9.]*)/u', 'details' => 3 ], + [ 'name' => 'Awakening', 'regexp' => '/Awakening Browser\/([0-9.]*)/u', 'details' => 2 ], + [ 'name' => 'Baidu Browser', 'regexp' => '/M?BaiduBrowser\/([0-9.]*)/i' ], + [ 'name' => 'Baidu Browser', 'regexp' => '/BdMobile\/([0-9.]*)/i' ], + [ 'name' => 'Baidu Browser', 'regexp' => '/FlyFlow\/([0-9.]*)/u', 'details' => 2 ], + [ 'name' => 'Baidu Browser', 'regexp' => '/BIDUBrowser[ \/]([0-9.]*)/u' ], + [ 'name' => 'Baidu Browser', 'regexp' => '/BaiduHD\/([0-9.]*)/u', 'details' => 2, 'type' => Constants\DeviceType::MOBILE ], + [ 'name' => 'Blazer', 'regexp' => '/Blazer\/([0-9.]*)/u' ], + [ 'name' => 'CNF', 'regexp' => '/CNF\/([0-9.]*)/u' ], + [ 'name' => 'Cornowser', 'regexp' => '/Cornowser\/([0-9.]*)/u' ], + [ 'name' => 'CuteBrowser', 'regexp' => '/CuteBrowser\/([0-9.]*)/u', 'details' => 2 ], + [ 'name' => 'Digia @Web', 'regexp' => '/Digia @Web\/([0-9.]*)/u' ], + [ 'name' => 'Dorado', 'regexp' => '/Browser\/Dorado([0-9.]*)/u' ], + [ 'name' => 'Dorothy', 'regexp' => '/Dorothy$/u' ], + [ 'name' => 'EMOBILE Browser', 'regexp' => '/WWW Browser\/ver([0-9.]*)/u' ], + [ 'name' => 'Helium', 'regexp' => '/HeliumMobileBrowser\/([0-9.]*)/u' ], + [ 'name' => 'iLunascape', 'regexp' => '/iLunascape\/([0-9.]*)/u', 'details' => 3 ], // see: http://www.lunascape.tv + [ 'name' => 'InternetSurfboard', 'regexp' => '/InternetSurfboard\/([0-9.]*)/u' ], + [ 'name' => 'iSurf', 'regexp' => '/iSurf version \/v([0-9.]*)/u', 'details' => 2 ], + [ 'name' => 'Jig Browser', 'regexp' => '/jig browser(?: web| core|9i?)?;? ?([0-9.]+)?/u', 'type' => Constants\DeviceType::MOBILE ], + [ 'name' => 'Jumanji', 'regexp' => '/jumanji/u' ], // see: jumanji browser ubuntu + [ 'name' => 'Kiosk', 'regexp' => '/Kiosk\/([0-9.]*)/u' ], // see: http://www.kioskbrowser.net + [ 'name' => 'LieBaoFast', 'regexp' => '/LieBaoFast\/([0-9.]*)/u' ], // see: http://www.liebao.cn + [ 'name' => 'MaCross Mobile', 'regexp' => '/MaCross\/([0-9.]*)/u' ], + [ 'name' => 'Mammoth', 'regexp' => '/Mammoth\/([0-9.]*)/u' ], // see: https://itunes.apple.com/cn/app/meng-ma-liu-lan-qi/id403760998?mt=8 + [ 'name' => 'Motorola Internet Browser', 'regexp' => '/MIB\/([0-9.]*)/u' ], + [ 'name' => 'Motorola WebKit', 'regexp' => '/MotorolaWebKit(?:\/([0-9.]*))?/u', 'details' => 3 ], + [ 'name' => 'MIUI Browser', 'regexp' => '/MiuiBrowser\/([0-9.]*)/u' ], + [ 'name' => 'NetFront Life Browser', 'regexp' => '/NetFrontLifeBrowser\/([0-9.]*)/u' ], + [ 'name' => 'OneBrowser', 'regexp' => '/OneBrowser\/([0-9.]*)/u' ], + [ 'name' => 'Openwave', 'regexp' => '/Openwave\/([0-9.]*)/u', 'details' => 2, 'type' => Constants\DeviceType::MOBILE ], + [ 'name' => 'Openwave', 'regexp' => '/Openwave Mobile Browser ([0-9.]*)/u', 'details' => 2, 'type' => Constants\DeviceType::MOBILE ], + [ 'name' => 'Openwave', 'regexp' => '/UP\. ?Browser(?:\/([a-z0-9.]*))?/iu', 'details' => 2, 'type' => Constants\DeviceType::MOBILE ], + [ 'name' => 'Polaris', 'regexp' => '/Polaris[\/ ]v?([0-9.]*)/iu', 'details' => 2 ], + [ 'name' => 'Polaris', 'regexp' => '/POLARIS([0-9.]+)/u', 'details' => 2 ], + [ 'name' => 'SEMC Browser', 'regexp' => '/SEMC-Browser\/([0-9.]*)/u' ], + [ 'name' => 'Sogou Mobile', 'regexp' => '/SogouMobileBrowser\/([0-9.]*)/u', 'details' => 2 ], + [ 'name' => 'Swing Browser', 'regexp' => '/Swing\(And\)\/([0-9.]*)/u', 'details' => 3 ], + [ 'name' => 'WebLite', 'regexp' => '/WebLite\/([0-9.]*)/u', 'type' => Constants\DeviceType::MOBILE ], + + /* Television browsers */ + [ 'name' => 'AltiBrowser', 'regexp' => '/AltiBrowser\/([0-9.]*)/i' ], + [ 'name' => 'Isis', 'regexp' => '/BrowserServer/u' ], + [ 'name' => 'Isis', 'regexp' => '/ISIS\/([0-9.]*)/u', 'details' => 2 ], + [ 'name' => 'Viera Browser', 'regexp' => '/Viera\/([0-9.]*)/u' ], + [ 'name' => 'Zetakey', 'regexp' => '/Zetakey Webkit\/([0-9.]*)/u' ], + [ 'name' => 'Zetakey', 'regexp' => '/Zetakey\/([0-9.]*)/u' ], + + /* Other browsers */ + [ 'name' => 'Bunjalloo', 'regexp' => '/Bunjalloo\/([0-9.]*)/u' ], // browser for the Nintento DS + [ 'name' => 'Wear Internet Browser','regexp' => '/WIB\/([0-9.]*)/u' ], + + /* Unsorted */ + [ 'name' => 'Demobrowser', 'regexp' => '/demobrowser\/([0-9.]*)/u' ], + [ 'name' => 'Dooble', 'regexp' => '/Dooble(?:\/([0-9.]*))?/u' ], // see: http://dooble.sourceforge.net + [ 'name' => 'DWB', 'regexp' => '/dwb(?:-hg)?(?:\/([0-9.]*))?/u' ], + [ 'name' => 'EVM Browser', 'regexp' => '/EVMBrowser\/([0-9.]*)/u' ], + [ 'name' => 'FireWeb', 'regexp' => '/FireWeb\/([0-9.]*)/u' ], + [ 'name' => 'Hive Explorer', 'regexp' => '/HiveE/u' ], + [ 'name' => 'Intermec Browser', 'regexp' => '/Intermec\/([0-9.]*)/u', 'details' => 2 ], + [ 'name' => 'Phantom', 'regexp' => '/Phantom\/V([0-9.]*)/u' ], + [ 'name' => 'QtCreator', 'regexp' => '/QtCreator\/([0-9.]*)/u' ], + [ 'name' => 'QtQmlViewer', 'regexp' => '/QtQmlViewer/u' ], + [ 'name' => 'QtMiniBrowser', 'regexp' => '/QtMiniBrowser\/([0-9.]*)/u' ], + [ 'name' => 'QtTestBrowser', 'regexp' => '/QtTestBrowser\/([0-9.]*)/u' ], + [ 'name' => 'Roccat', 'regexp' => '/Roccat\/([0-9]\.[0-9.]*)/u' ], + [ 'name' => 'Raven for Mac', 'regexp' => '/Raven for Mac\/([0-9.]*)/u' ], + [ 'name' => 'RockMelt', 'regexp' => '/RockMelt\/([0-9.]*)/u', 'details' => 2 ], + [ 'name' => 'Scope', 'regexp' => '/Scope\/([0-9.]*)/u', 'details' => 2 ], // see: http://www.programmer.co.jp/scope.shtml + [ 'name' => 'SlimBoat', 'regexp' => '/SlimBoat\/([0-9.]*)/u' ], + [ 'name' => 'SlimBrowser', 'regexp' => '/SlimBrowser(?:\/([0-9.]*))?/u' ], + [ 'name' => 'SMBrowser', 'regexp' => '/SMBrowser/u' ], + [ 'name' => 'Snowshoe', 'regexp' => '/Snowshoe\/([0-9.]*)/u', 'details' => 2 ], + [ 'name' => 'Sputnik', 'regexp' => '/Sputnik\/([0-9.]*)/iu', 'details' => 3 ], + [ 'name' => 'Surf', 'regexp' => '/Surf\/([0-9.]*)/u' ], + [ 'name' => 'TaoBrowser', 'regexp' => '/TaoBrowser\/([0-9.]*)/u', 'details' => 2 ], + [ 'name' => 'TaomeeBrowser', 'regexp' => '/TaomeeBrowser\/([0-9.]*)/u', 'details' => 2 ], + [ 'name' => 'TazWeb', 'regexp' => '/TazWeb/u' ], + [ 'name' => 'Uzbl', 'regexp' => '/^Uzbl/u' ], + [ 'name' => 'Villanova', 'regexp' => '/Villanova\/([0-9.]*)/u', 'details' => 3 ], + [ 'name' => 'Vimb', 'regexp' => '/vimb\/([0-9.]*)/u' ], + [ 'name' => 'WADA Browser', 'regexp' => '/WadaBrowser\/([0-9.]*)/u' ], + [ 'name' => 'Wavelink Velocity', 'regexp' => '/Wavelink Velocity Browser\/([0-9.]*)/u', 'details' => 2 ], + [ 'name' => 'WebRender', 'regexp' => '/WebRender/u' ], + [ 'name' => 'Webster', 'regexp' => '/Webster ([0-9.]*)/u' ], + [ 'name' => 'Wyzo', 'regexp' => '/Wyzo\/([0-9.]*)/u', 'details' => 3 ], + [ 'name' => 'Yelang', 'regexp' => '/Yelang\/([0-9.]*)/u', 'details' => 3 ], // see: wellgo.org + [ 'name' => 'YRC Weblink', 'regexp' => '/YRCWeblink\/([0-9.]*)/u' ], + [ 'name' => '冲浪浏览器', 'regexp' => '/CMSurfClient-Android/u' ], + ], + + Constants\BrowserType::BROWSER_TEXT => [ + [ 'name' => 'CERN LineMode', 'regexp' => '/CERN-LineMode\/([0-9.]*)/u' ], + [ 'name' => 'Lynx', 'regexp' => '/Lynx\/([0-9.]*)/u' ], + [ 'name' => 'Links', 'regexp' => '/Links \(([0-9.]*)/u' ], + [ 'name' => 'ELinks', 'regexp' => '/E[Ll]inks(?:\/| \()([0-9.]*[0-9])/u', 'type' => Constants\DeviceType::DESKTOP ], + [ 'name' => 'w3m', 'regexp' => '/w3m\/([0-9.]*)/u' ], + ], + + Constants\BrowserType::APP_MEDIAPLAYER => [ + [ 'name' => 'iTunes', 'regexp' => '/iTunes\/(?:xaa.)?([0-9.]*)/u' ], + [ 'name' => 'iTunes', 'regexp' => '/iTunes-AppleTV\//u' ], + [ 'name' => 'QuickTime', 'regexp' => '/\(qtver=([0-9.]*);/u' ], + [ 'name' => 'Bluefish', 'regexp' => '/bluefish ([0-9.]*)/u' ], + [ 'name' => 'Songbird', 'regexp' => '/Songbird\/([0-9.]*)/u' ], + [ 'name' => 'Stagefright', 'regexp' => '/stagefright\/([0-9.]*)/u' ], + [ 'name' => 'SubStream', 'regexp' => '/SubStream\/([0-9.]*)/u', 'type' => Constants\DeviceType::MOBILE ], + [ 'name' => 'VLC', 'regexp' => '/VLC media player - version ([0-9.]*)/u' ], + [ 'name' => 'Windows Media Player', 'regexp' => '/Windows-Media-Player\/([0-9.]*)/u', 'details' => 1 ], + [ 'name' => 'CorePlayer', 'regexp' => '/CorePlayer\/([0-9.]*)/u' ], + [ 'name' => 'FlyCast', 'regexp' => '/FlyCast\/([0-9.]*)/u' ], + ], + + Constants\BrowserType::APP_EMAIL => [ + [ 'name' => 'Lightning', 'regexp' => '/Lightning\/([0-9.]*)/u' ], + [ 'name' => 'Thunderbird', 'regexp' => '/Thunderbird[\/ ]([0-9.]*)/u', 'type' => Constants\DeviceType::DESKTOP ], + [ 'name' => 'Microsoft Outlook', 'regexp' => '/Microsoft Outlook IMO, Build ([0-9.]*)/u', 'details' => 2, 'type' => Constants\DeviceType::DESKTOP ], + [ 'name' => 'Microsoft Outlook', 'regexp' => '/Microsoft Outlook ([0-9.]*)/u', 'details' => 2, 'type' => Constants\DeviceType::DESKTOP ], + [ 'name' => 'Microsoft Outlook Express', 'regexp' => '/Outlook-Express\/([0-9.]*)/u', 'details' => 2, 'type' => Constants\DeviceType::DESKTOP ], + [ 'name' => 'Lotus Notes', 'regexp' => '/Lotus-Notes\/([0-9.]*)/u', 'details' => 2, 'type' => Constants\DeviceType::DESKTOP ], + [ 'name' => 'Postbox', 'regexp' => '/Postbox[\/ ]([0-9.]*)/u', 'details' => 2 ], + [ 'name' => 'The Bat!', 'regexp' => '/The Bat! ([0-9.]*)/u', 'details' => 3 ], + ], + + Constants\BrowserType::APP_NEWS => [ + [ 'name' => 'Daum', 'regexp' => '/DaumApps\/([0-9.]*)/u' ], + [ 'name' => 'Daum', 'regexp' => '/daumcafe\/([0-9.]*)/u' ], + ], + + Constants\BrowserType::APP_FEEDREADER => [ + [ 'name' => 'Akregator', 'regexp' => '/Akregator\/([0-9.]*)/u' ], + [ 'name' => 'Blogos', 'regexp' => '/Blogos\/([0-9.]*)/u', 'type' => Constants\DeviceType::MOBILE ], + [ 'name' => 'Cococ', 'regexp' => '/cococ\/([0-9.]*)/u' ], + [ 'name' => 'FeedDemon', 'regexp' => '/FeedDemon\/([0-9.]*)/u' ], + [ 'name' => 'Feeddler', 'regexp' => '/FeeddlerRSS[ \/]([0-9.]*)/u' ], + [ 'name' => 'Feeddler Pro', 'regexp' => '/FeeddlerPro\/([0-9.]*)/u' ], + [ 'name' => 'Liferea', 'regexp' => '/Liferea\/([0-9.]*)/u' ], + [ 'name' => 'NewsBlur', 'regexp' => '/NewsBlur\/([0-9.]*)/u', 'type' => Constants\DeviceType::MOBILE ], + [ 'name' => 'Newsbeuter', 'regexp' => '/newsbeuter\/([0-9.]*)/u' ], + [ 'name' => 'JetBrains Omea Reader','regexp' => '/JetBrains Omea Reader ([0-9.]*)/u' ], + [ 'name' => 'RSS Bandit', 'regexp' => '/RssBandit\/([0-9.]*)/u' ], + [ 'name' => 'RSS Junkie', 'regexp' => '/RSS Junkie Daemon/u' ], + [ 'name' => 'RSS Owl', 'regexp' => '/RSSOwl\/([0-9.]*)/u' ], + [ 'name' => 'Reeder', 'regexp' => '/Reeder\/([0-9.]*)/u' ], + [ 'name' => 'ReedKit', 'regexp' => '/ReedKit\/([0-9.]*)/u', 'type' => Constants\DeviceType::DESKTOP ], + [ 'name' => 'Rome', 'regexp' => '/Rome Client/u' ], + [ 'name' => 'jsRSS++', 'regexp' => '/jsRSS++\/([0-9.]*)/u' ], + [ 'name' => 'Windows RSS Platorm', 'regexp' => '/Windows-RSS-Platform\/([0-9.]*)/u' ], + ], + + Constants\BrowserType::APP_PODCAST => [ + [ 'name' => 'Ziepod', 'regexp' => '/Ziepod\+? ([0-9.]*)/u' ], + ], + + Constants\BrowserType::APP_SOCIAL => [ + [ 'name' => 'Facebook', 'regexp' => '/FBAN\/FBIOS/u' ], + [ 'name' => 'Facebook', 'regexp' => '/FBAN\/FB4A/u' ], + [ 'name' => 'Facebook', 'regexp' => '/FB_IAB\/FB4A/u' ], + [ 'name' => 'Google+', 'regexp' => '/com.google.GooglePlus/u' ], + [ 'name' => 'WeChat', 'regexp' => '/MicroMessenger\/([0-9.]*)/u' ], + [ 'name' => 'Sina Weibo', 'regexp' => '/weibo__([0-9.]*)/u' ], + [ 'name' => 'Twitter', 'regexp' => '/TwitterAndroid/u' ], + [ 'name' => 'Kik', 'regexp' => '/Kik\/([0-9.]*)/u' ], + [ 'name' => 'Yammer', 'regexp' => '/Yammer\/([0-9.]*)/u', 'details' => 2 ], + [ 'name' => 'WordPress', 'regexp' => '/wp-android\/([0-9.]*)/u' ], + ], + + Constants\BrowserType::APP_OFFICE => [ + [ 'name' => 'Microsoft Office', 'regexp' => '/MSOffice ([0-9.]*)/u' ], + ], + + Constants\BrowserType::APP_SEARCH => [ + [ 'name' => 'Baidu Hao123', 'regexp' => '/hao123\/([0-9.]*)/u', 'details' => 2 ], + [ 'name' => 'Google Search', 'regexp' => '/GSA\/([0-9.]*)/u', 'details' => 3 ], + [ 'name' => 'NAVER', 'regexp' => '/NAVER\(inapp; search; [0-9]+; ([0-9.]*)\)/u' ], + ], + + Constants\BrowserType::APP_EDITOR => [ + [ 'name' => 'Microsoft FrontPage', 'regexp' => '/MS FrontPage ([0-9.]*)/u', 'details' => 2, 'type' => Constants\DeviceType::DESKTOP ], + [ 'name' => 'W3C Amaya', 'regexp' => '/amaya\/([0-9.]*)/u' ], + ], + + Constants\BrowserType::APP_DOWNLOAD => [ + [ 'name' => 'Download Manager', 'regexp' => '/AndroidDownloadManager\//u' ], + ], + + Constants\BrowserType::APP_GAME => [ + [ 'name' => 'EA Origin', 'regexp' => '/Origin\/([0-9.]*)/u' ], + [ 'name' => 'SecondLife', 'regexp' => '/SecondLife\/([0-9.]*)/u' ], + [ 'name' => 'Valve Steam', 'regexp' => '/Valve Steam/u' ], + [ 'name' => 'Raptr', 'regexp' => '/Raptr/u' ], + ], + + Constants\BrowserType::APP => [ + [ 'name' => 'Google Earth', 'regexp' => '/Google Earth\/([0-9.]*)/u' ], + [ 'name' => 'Google Desktop', 'regexp' => '/Google Desktop\/([0-9.]*)/u', 'details' => 2 ], + [ 'name' => 'Leechcraft', 'regexp' => '/Leechcraft(?:\/([0-9.]*))?/u', 'details' => 2 ], + [ 'name' => 'Lotus Expeditor', 'regexp' => '/Gecko Expeditor ([0-9.]*)/u', 'details' => 3 ], + ], + + Constants\BrowserType::UNKNOWN => [ + [ 'name' => 'PhantomJS', 'regexp' => '/PhantomJS\/([0-9.]*)/u' ], + [ 'name' => 'Nimbus', 'regexp' => '/Nimbus\/([0-9.]*)/u' ], + [ 'name' => 'McAfee Web Gateway', 'regexp' => '/Webwasher\/([0-9.]*)/u' ], + [ 'name' => 'Open Sankoré', 'regexp' => '/Open-Sankore\/([0-9.]*)/u', 'type' => Constants\DeviceType::WHITEBOARD ], + [ 'name' => 'Adapi', 'regexp' => '/ ADAPI\/([0-9.]*)/u', 'hidden' => true, 'type' => Constants\DeviceType::SIGNAGE ], + [ 'name' => 'BrightSign', 'regexp' => '/BrightSign\/([0-9.]*)/u', 'type' => Constants\DeviceType::SIGNAGE ], + [ 'name' => 'Coship MMCP', 'regexp' => '/Coship_MMCP_([0-9.]*)/u', 'type' => Constants\DeviceType::SIGNAGE ], + ] ]; - $count = count($browsers); - for ($b = 0; $b < $count; $b++) { - if (preg_match($browsers[$b]['regexp'], $ua, $match)) { - $this->data->browser->name = $browsers[$b]['name']; - $this->data->browser->channel = ''; - $this->data->browser->hidden = isset($browsers[$b]['hidden']) ? $browsers[$b]['hidden'] : false; - $this->data->browser->stock = false; + foreach ($items as $type => $browsers) { + $count = count($browsers); + for ($b = 0; $b < $count; $b++) { + if (preg_match($browsers[$b]['regexp'], $ua, $match)) { + $this->data->browser->name = $browsers[$b]['name']; + $this->data->browser->channel = ''; + $this->data->browser->hidden = isset($browsers[$b]['hidden']) ? $browsers[$b]['hidden'] : false; + $this->data->browser->stock = false; + $this->data->browser->type = $type; - if (isset($match[1]) && $match[1]) { - $this->data->browser->version = new Version([ 'value' => $match[1], 'details' => isset($browsers[$b]['details']) ? $browsers[$b]['details'] : null ]); - } else { - $this->data->browser->version = null; - } + if (isset($match[1]) && $match[1]) { + $this->data->browser->version = new Version([ 'value' => $match[1], 'details' => isset($browsers[$b]['details']) ? $browsers[$b]['details'] : null ]); + } else { + $this->data->browser->version = null; + } - if (isset($browsers[$b]['type'])) { - $this->data->device->type = $browsers[$b]['type']; + if (isset($browsers[$b]['type'])) { + $this->data->device->type = $browsers[$b]['type']; + } } } } diff --git a/src/Analyser/Header/Useragent/Device.php b/src/Analyser/Header/Useragent/Device.php index d0f9f5b..4479499 100644 --- a/src/Analyser/Header/Useragent/Device.php +++ b/src/Analyser/Header/Useragent/Device.php @@ -4,12 +4,13 @@ trait Device { - use Device\Cars, Device\Gaming, Device\Ereader, Device\Mobile, + use Device\Cars, Device\Gps, Device\Gaming, Device\Ereader, Device\Mobile, Device\Media, Device\Television, Device\Signage, Device\Pda; private function &detectDevice($ua) { $this->detectCars($ua); + $this->detectGps($ua); $this->detectEreader($ua); $this->detectGaming($ua); $this->detectTelevision($ua); diff --git a/src/Analyser/Header/Useragent/Device/Gaming.php b/src/Analyser/Header/Useragent/Device/Gaming.php index ff0b284..444ea1f 100644 --- a/src/Analyser/Header/Useragent/Device/Gaming.php +++ b/src/Analyser/Header/Useragent/Device/Gaming.php @@ -9,7 +9,7 @@ trait Gaming { private function detectGaming($ua) { - if (preg_match('/Nintendo/iu', $ua)) { + if (preg_match('/Nintendo/iu', $ua) || preg_match('/Nitro/iu', $ua)) { $this->detectNintendo($ua); } @@ -56,7 +56,7 @@ private function detectNintendo($ua) /* DS */ - if (preg_match('/Nintendo DS/u', $ua)) { + if (preg_match('/Nintendo DS/u', $ua) || preg_match('/Nitro.*Opera/u', $ua)) { $this->data->os->reset(); $this->data->device->setIdentification([ 'manufacturer' => 'Nintendo', @@ -142,6 +142,19 @@ private function detectPlaystation($ua) } } + /* PlayStation 2 */ + + if (preg_match('/Playstation2/u', $ua)) { + $this->data->os->reset(); + + $this->data->device->setIdentification([ + 'manufacturer' => 'Sony', + 'model' => 'Playstation 2', + 'type' => Constants\DeviceType::GAMING, + 'subtype' => Constants\DeviceSubType::CONSOLE + ]); + } + /* PlayStation 3 */ if (preg_match('/PlayStation 3/ui', $ua)) { diff --git a/src/Analyser/Header/Useragent/Device/Gps.php b/src/Analyser/Header/Useragent/Device/Gps.php new file mode 100644 index 0000000..bbb2a5b --- /dev/null +++ b/src/Analyser/Header/Useragent/Device/Gps.php @@ -0,0 +1,30 @@ +detectGarmin($ua); + } + + + + + + /* Garmin Nuvi */ + + private function detectGarmin($ua) + { + if (preg_match('/Nuvi/u', $ua) && preg_match('/Qtopia/u', $ua)) { + $this->data->device->setIdentification([ + 'manufacturer' => 'Garmin', + 'model' => 'Nuvi', + 'type' => Constants\DeviceType::GPS + ]); + } + } +} diff --git a/src/Analyser/Header/Useragent/Device/Media.php b/src/Analyser/Header/Useragent/Device/Media.php index faee5ee..354f0f6 100644 --- a/src/Analyser/Header/Useragent/Device/Media.php +++ b/src/Analyser/Header/Useragent/Device/Media.php @@ -8,6 +8,7 @@ trait Media { private function detectMedia($ua) { + $this->detectArchos($ua); $this->detectZune($ua); $this->detectWalkman($ua); } @@ -15,6 +16,30 @@ private function detectMedia($ua) + /* Archos Generation 4 and 5 */ + + private function detectArchos($ua) + { + if (preg_match('/Archos A([67]04)WIFI\//u', $ua, $match)) { + $this->data->os->reset(); + $this->data->device->setIdentification([ + 'manufacturer' => 'Archos', + 'model' => $match[1] . ' WiFi', + 'type' => Constants\DeviceType::MEDIA + ]); + } + + if (preg_match('/ARCHOS; GOGI; a([67]05);/u', $ua, $match)) { + $this->data->os->reset(); + $this->data->device->setIdentification([ + 'manufacturer' => 'Archos', + 'model' => $match[1] . ' WiFi', + 'type' => Constants\DeviceType::MEDIA + ]); + } + } + + /* Microsoft Zune */ private function detectZune($ua) diff --git a/src/Analyser/Header/Useragent/Device/Mobile.php b/src/Analyser/Header/Useragent/Device/Mobile.php index 330fb02..6026d1f 100644 --- a/src/Analyser/Header/Useragent/Device/Mobile.php +++ b/src/Analyser/Header/Useragent/Device/Mobile.php @@ -77,7 +77,7 @@ private function detectNokia($ua) return; } - if (preg_match('/Nokia-?([^\/\)]+)/ui', $ua, $match)) { + if (preg_match('/Nokia[- \/]?([^\/\);]+)/ui', $ua, $match)) { if ($match[1] == 'Browser') { return; @@ -385,12 +385,7 @@ private function detectGenericMobileModels($ua) 'manufacturer' => 'HTC' ]); - $this->data->device->identifyModel('/HUAWEI[\s_-]?([^\/\)\()]*)/ui', $ua, [ - 'type' => Constants\DeviceType::MOBILE, - 'manufacturer' => 'Huawei' - ]); - - $this->data->device->identifyModel('/Huawei\/1.0\/0?(?:Huawei)?([^\/]+)\//ui', $ua, [ + $this->data->device->identifyModel('/HUAWEI[\s_-]?([^\/\)\()]+)/ui', $ua, [ 'type' => Constants\DeviceType::MOBILE, 'manufacturer' => 'Huawei' ]); @@ -400,16 +395,11 @@ private function detectGenericMobileModels($ua) 'manufacturer' => 'Karbonn' ]); - $this->data->device->identifyModel('/KYOCERA\/([^\s\/]+)/ui', $ua, [ + $this->data->device->identifyModel('/KWC-([^\s\/]+)/ui', $ua, [ 'type' => Constants\DeviceType::MOBILE, 'manufacturer' => 'Kyocera' ]); - $this->data->device->identifyModel('/JRC\/([^\s\/,]+)/ui', $ua, [ - 'type' => Constants\DeviceType::MOBILE, - 'manufacturer' => 'JRC' - ]); - $this->data->device->identifyModel('/KONKA[-_]?([^\s]+)/ui', $ua, [ 'type' => Constants\DeviceType::MOBILE, 'manufacturer' => 'Konka' @@ -440,7 +430,7 @@ private function detectGenericMobileModels($ua) 'manufacturer' => 'LG' ]); - $this->data->device->identifyModel('/LGE?(?:\/|-|_)([^\s\)\-]+)/ui', $ua, [ + $this->data->device->identifyModel('/LGE?(?:\/|-|_)([^\s\)\-\[\/]+)/ui', $ua, [ 'type' => Constants\DeviceType::MOBILE, 'manufacturer' => 'LG' ]); @@ -493,6 +483,11 @@ private function detectGenericMobileModels($ua) 'manufacturer' => 'Oppo' ]); + $this->data->device->identifyModel('/Panasonic-([^\/_]+)/ui', $ua, [ + 'type' => Constants\DeviceType::MOBILE, + 'manufacturer' => 'Panasonic' + ]); + $this->data->device->identifyModel('/Pantech-?([^\/_]+)/ui', $ua, [ 'type' => Constants\DeviceType::MOBILE, 'manufacturer' => 'Pantech' @@ -521,22 +516,22 @@ private function detectGenericMobileModels($ua) 'manufacturer' => 'Samsung' ]); - $this->data->device->identifyModel('/SANYO\/([^\/]+)/ui', $ua, [ + $this->data->device->identifyModel('/(?:Siemens |SIE-)([A-Z]+[0-9]+)/ui', $ua, [ 'type' => Constants\DeviceType::MOBILE, - 'manufacturer' => 'Sanyo' + 'manufacturer' => 'Siemens' ]); - $this->data->device->identifyModel('/SIE-([A-Z]+[0-9]+)/ui', $ua, [ + $this->data->device->identifyModel('/SE([A-Z][0-9]+[a-z])/u', $ua, [ 'type' => Constants\DeviceType::MOBILE, - 'manufacturer' => 'Siemens' + 'manufacturer' => 'Sony Ericsson' ]); - $this->data->device->identifyModel('/SE([A-Z][0-9]+[a-z])/u', $ua, [ + $this->data->device->identifyModel('/sony-ericsson ([A-Z][0-9]+[a-z])/u', $ua, [ 'type' => Constants\DeviceType::MOBILE, 'manufacturer' => 'Sony Ericsson' ]); - $this->data->device->identifyModel('/SonyEricsson([^\/\)]+)/iu', $ua, [ + $this->data->device->identifyModel('/SonyEricsson ?([^\/\);]+)/iu', $ua, [ 'type' => Constants\DeviceType::MOBILE, 'manufacturer' => 'Sony Ericsson', 'model' => function ($model) { @@ -586,7 +581,7 @@ private function detectGenericMobileModels($ua) 'manufacturer' => 'TiPhone' ]); - $this->data->device->identifyModel('/Toshiba[\/-]([^\/-]*)/ui', $ua, [ + $this->data->device->identifyModel('/Toshiba[-\/]([^\/-]*)/u', $ua, [ 'type' => Constants\DeviceType::MOBILE, 'manufacturer' => 'Toshiba' ]); @@ -633,51 +628,33 @@ private function detectJapaneseMobileModels($ua) return; } - /* First identify it based on carrier */ - - $this->data->device->identifyModel('/\(([A-Z]+[0-9]+[A-Z])[^;]*; ?FOMA/ui', $ua, [ - 'type' => Constants\DeviceType::MOBILE, - 'manufacturer' => 'DoCoMo' - ]); - - $this->data->device->identifyModel('/DoCoMo\/[0-9].0[\/\s]([0-9A-Z]+)/ui', $ua, [ - 'type' => Constants\DeviceType::MOBILE, - 'manufacturer' => 'DoCoMo' - ]); - - $this->data->device->identifyModel('/NTTDoCoMo ([0-9A-Z]+)/ui', $ua, [ - 'type' => Constants\DeviceType::MOBILE, - 'manufacturer' => 'DoCoMo' - ]); - - $this->data->device->identifyModel('/J-PHONE\/[^\/]+\/([^\/_]+)/u', $ua, [ - 'type' => Constants\DeviceType::MOBILE, - 'manufacturer' => 'Softbank' - ]); - - $this->data->device->identifyModel('/SoftBank\/[^\/]+\/([^\/]+)\//u', $ua, [ - 'type' => Constants\DeviceType::MOBILE, - 'manufacturer' => 'Softbank' - ]); - - $this->data->device->identifyModel('/(KDDI-[^\s\);]+)/ui', $ua, [ - 'type' => Constants\DeviceType::MOBILE, - 'manufacturer' => 'KDDI' - ]); + if ($this->data->os->isFamily('Android')) { + return; + } - $this->data->device->identifyModel('/Vodafone\/[0-9.]+\/V([0-9]+[A-Z]+)[^\/]*\//ui', $ua, [ - 'type' => Constants\DeviceType::MOBILE, - 'manufacturer' => 'Vodafone' - ]); + /* Sometimes DoCoMo UA strings are (partially) encoded */ + if (preg_match('/^DoCoMo/u', $ua)) { + $ua = preg_replace_callback( + "#\\\x([0-9A-Fa-f]{2})#", + function ($m) { + return chr(hexdec($m[1])); + }, + $ua + ); + } - /* Then identify it based on id */ + /* First identify it based on id */ $model = null; $manufacturer = null; + $carrier = null; + $falsepositive = false; $ids = [ 'CA' => 'Casio', + 'DL' => 'Dell', + 'ER' => 'Ericsson', 'HT' => 'HTC', 'HW' => 'Huawei', 'IA' => 'Inventec', @@ -686,8 +663,11 @@ private function detectJapaneseMobileModels($ua) 'NK' => 'Nokia', 'SA' => 'Sanyo', 'SC' => 'Samsung', + 'SS' => 'Samsung', 'SH' => 'Sharp', - 'SO' => 'Sony Ericsson', + 'SE' => 'Sony Ericsson', + 'SO' => 'Sony', + 'ZT' => 'ZTE', 'F' => 'Fujitsu', 'D' => 'Mitsubishi', 'J' => 'JRC', @@ -696,38 +676,90 @@ private function detectJapaneseMobileModels($ua) 'M' => 'Motorola', 'N' => 'NEC', 'P' => 'Panasonic', - 'T' => 'Toshiba' + 'T' => 'Toshiba', + 'Z' => 'ZTE', ]; - if (preg_match('/[\s\/\-\(;]((' . implode('|', array_keys($ids)) . ')[0-9]{3,3}[a-z]+[A-Z]*)/u', $ua, $match)) { + if (preg_match('/(?:^|[\s\/\-\(;])((' . implode('|', array_keys($ids)) . ')[0-9]{3,3}[a-z]+[A-Z]*)/u', $ua, $match)) { $model = $match[1]; $manufacturer = $match[2]; + $carrier = 'DoCoMo'; } - if (preg_match('/[\s\/\-\(;](J-(' . implode('|', array_keys($ids)) . ')[0-9]{2,2})/u', $ua, $match)) { + if (preg_match('/(?:; |\()((' . implode('|', array_keys($ids)) . ')[0-9]{2,2}[A-Z][0-9]?)[\);]/u', $ua, $match)) { + $model = $match[1]; + $manufacturer = $match[2]; + $carrier = 'DoCoMo'; + } + + if (preg_match('/DoCoMo\/[0-9].0 ((' . implode('|', array_keys($ids)) . ')[0-9]{2,2}[A-Z][0-9]?)\(/u', $ua, $match)) { + $model = $match[1]; + $manufacturer = $match[2]; + $carrier = 'DoCoMo'; + } + + if (preg_match('/DoCoMo\/[0-9].0[\/\s](?:MST_v_)?((' . implode('|', array_keys($ids)) . ')[1-9][0-9]{3,3}[A-Z]?)/u', $ua, $match)) { + $model = $match[1]; + $manufacturer = $match[2]; + $carrier = 'DoCoMo'; + } + + if (preg_match('/[\/\(]([SHW][0-9]{2,2}(' . implode('|', array_keys($ids)) . '))[\/;]/u', $ua, $match)) { + $model = $match[1]; + $manufacturer = $match[2]; + $carrier = 'EMOBILE'; + } + + if (preg_match('/\) ([SHW][0-9]{2,2}(' . implode('|', array_keys($ids)) . '))$/u', $ua, $match)) { $model = $match[1]; $manufacturer = $match[2]; + $carrier = 'EMOBILE'; } - if (preg_match('/[\s\/\-\(;]((?:V|DM|WX)?[0-9]{3,3}(' . implode('|', array_keys($ids)) . '))/u', $ua, $match)) { + if (preg_match('/[\s\/\-\(;](J-(' . implode('|', array_keys($ids)) . ')[0-9]{2,2})/u', $ua, $match)) { $model = $match[1]; $manufacturer = $match[2]; + $carrier = 'Softbank'; } - if (preg_match('/[\s\/\-\(;]([SHW][0-9]{2,2}(' . implode('|', array_keys($ids)) . '))/u', $ua, $match)) { + if (preg_match('/(?:^|; |\/)([0-9]{3,3}(' . implode('|', array_keys($ids)) . '))[\/\)]/u', $ua, $match)) { $model = $match[1]; $manufacturer = $match[2]; + $carrier = 'Softbank'; + } + + if (preg_match('/(?:^|[\s\/\-\(;])((V|DM|WX)[0-9]{3,3}(' . implode('|', array_keys($ids)) . '))/u', $ua, $match)) { + $model = $match[1]; + $manufacturer = $match[3]; + + switch ($match[2]) { + case 'V': + $carrier = 'Softbank'; + break; + case 'DM': + $carrier = 'Disney Mobile'; + break; + case 'WX': + $carrier = 'Willcom'; + break; + } } - if (preg_match('/[\s\/\-\(;]((' . implode('|', array_keys($ids)) . ')[0-9]{2,2}[A-Z])/u', $ua, $match)) { + if (preg_match('/(AH-(' . implode('|', array_keys($ids)) . ')[1-9][0-9]{3,3}[A-Z]?)/u', $ua, $match)) { $model = $match[1]; $manufacturer = $match[2]; + $carrier = 'Willcom'; } - if (!empty($model) && !empty($manufacturer)) { + if (in_array($model, [ '360SE' ])) { + $falsepositive = true; + } + + if (!$falsepositive && !empty($model) && !empty($manufacturer)) { $this->data->device->reset([ 'type' => Constants\DeviceType::MOBILE, - 'model' => $model + 'model' => $model, + 'carrier' => $carrier ]); if (array_key_exists($manufacturer, $ids)) { @@ -747,44 +779,142 @@ private function detectJapaneseMobileModels($ua) $this->data->device->flag = Constants\Flag::MOAPS; break; } + + return; } - /* Then identify it based on KDDI id */ + /* Then KDDI model number */ $ids = [ 'CA' => 'Casio', - 'FJ' => 'Fujitsu', - 'HI' => 'Hitachi', - 'KC' => 'Kyocera', - 'MA' => 'Panasonic', + 'DE' => 'Denso', 'PT' => 'Pantech', 'SA' => 'Sanyo', 'ST' => 'Sanyo', 'SH' => 'Sharp', - 'SN' => 'Sony Ericsson', - 'TS' => 'Toshiba' + 'H' => 'Hitachi', + 'K' => 'Kyocera', + 'P' => 'Panasonic', + 'S' => 'Sony Ericsson', + 'T' => 'Toshiba' ]; - if (preg_match('/[\s\/\-\(;]((' . implode('|', array_keys($ids)) . ')[0-9][0-9A-Z])[;\)\s]/u', $ua, $match)) { + if (preg_match('/(?:^|KDDI-)(W[0-9]{2,2}(' . implode('|', array_keys($ids)) . '))[;\)\s\/]/u', $ua, $match)) { $model = $match[1]; $manufacturer = $match[2]; $this->data->device->reset([ 'type' => Constants\DeviceType::MOBILE, - 'model' => 'KDDI-' . $model + 'model' => $model, + 'carrier' => 'au' ]); - + if (array_key_exists($manufacturer, $ids)) { $this->data->device->manufacturer = $ids[$manufacturer]; + } - $device = Data\DeviceModels::identify('feature', 'KDDI-' . $model); - if ($device->identified) { - $device->identified |= $this->data->device->identified; - $this->data->device = $device; + $this->data->device->identified |= Constants\Id::PATTERN; + return; + } + + /* Then identify it based on KDDI id */ + + $ids = [ + 'CA' => 'Casio', + 'DN' => 'Denso', + 'ER' => 'Ericsson', + 'FJ' => 'Fujitsu', + 'HI' => 'Hitachi', + 'KC' => 'Kyocera', + 'MA' => 'Panasonic', + 'MI' => 'Mitsubishi', + 'PT' => 'Pantech', + 'SA' => 'Sanyo', + 'ST' => 'Sanyo', + 'SY' => 'Sanyo', + 'SH' => 'Sharp', + 'SN' => 'Sony Ericsson', + 'TS' => 'Toshiba' + ]; + + if (preg_match('/(?:^|KDDI-|UP\. ?Browser\/[0-9\.]+-|; )((' . implode('|', array_keys($ids)) . ')(?:[0-9][0-9]|[A-Z][0-9]|[0-9][A-Z]))($|[;\)\s])/ui', $ua, $match)) { + $model = strtoupper($match[1]); + $manufacturer = strtoupper($match[2]); + $falsepositive = false; + + if (in_array($model, [ 'MAM2', 'MAM3' ])) { + $falsepositive = true; + } + + if (!$falsepositive) { + $this->data->device->reset([ + 'type' => Constants\DeviceType::MOBILE, + 'model' => $model, + 'carrier' => 'au' + ]); + + if (array_key_exists($manufacturer, $ids)) { + $this->data->device->manufacturer = $ids[$manufacturer]; + + $device = Data\DeviceModels::identify('kddi', $model); + if ($device->identified) { + $device->identified |= $this->data->device->identified; + $device->carrier = 'au'; + $this->data->device = $device; + } } + + $this->data->device->identified |= Constants\Id::PATTERN; + return; } + } - $this->data->device->identified |= Constants\Id::PATTERN; + + /* Finally identify it based on carrier */ + + $this->data->device->identifyModel('/\(([A-Z]+[0-9]+[A-Z])[^;]*; ?FOMA/ui', $ua, [ + 'type' => Constants\DeviceType::MOBILE, + 'carrier' => 'DoCoMo' + ]); + + $this->data->device->identifyModel('/\(FOMA ([^;]+)+;/u', $ua, [ + 'type' => Constants\DeviceType::MOBILE, + 'carrier' => 'DoCoMo' + ]); + + $this->data->device->identifyModel('/DoCoMo\/[0-9].0[\/\s]([0-9A-Z]+)/ui', $ua, [ + 'type' => Constants\DeviceType::MOBILE, + 'carrier' => 'DoCoMo' + ]); + + $this->data->device->identifyModel('/NTTDoCoMo ([0-9A-Z]+)/ui', $ua, [ + 'type' => Constants\DeviceType::MOBILE, + 'carrier' => 'DoCoMo' + ]); + + $this->data->device->identifyModel('/J-PHONE\/[^\/]+\/([^\/_]+)/u', $ua, [ + 'type' => Constants\DeviceType::MOBILE, + 'carrier' => 'Softbank' + ]); + + $this->data->device->identifyModel('/SoftBank\/[^\/]+\/([^\/]+)\//u', $ua, [ + 'type' => Constants\DeviceType::MOBILE, + 'carrier' => 'Softbank' + ]); + + $this->data->device->identifyModel('/Vodafone\/[0-9.]+\/V([0-9]+[A-Z]+)[^\/]*\//ui', $ua, [ + 'type' => Constants\DeviceType::MOBILE, + 'carrier' => 'Softbank' + ]); + + $this->data->device->identifyModel('/(KDDI-[^\s\)\.;]{4,})/ui', $ua, [ + 'type' => Constants\DeviceType::MOBILE, + 'carrier' => 'au' + ]); + + + if (!empty($this->data->device->model)) { + $this->identifyBasedOnId($this->data->device->model); } } diff --git a/src/Analyser/Header/Useragent/Device/Pda.php b/src/Analyser/Header/Useragent/Device/Pda.php index 0f03cc4..141a9d2 100644 --- a/src/Analyser/Header/Useragent/Device/Pda.php +++ b/src/Analyser/Header/Useragent/Device/Pda.php @@ -11,6 +11,7 @@ trait Pda private function detectPda($ua) { $this->detectPalm($ua); + $this->detectSonyMylo($ua); $this->detectSharpZaurus($ua); $this->detectSharpShoin($ua); } @@ -79,6 +80,25 @@ private function detectPalm($ua) } + /* Sony Mylo */ + + private function detectSonyMylo($ua) + { + if (preg_match('/SONY\/COM([0-9])/ui', $ua, $match)) { + $this->data->device->manufacturer = 'Sony'; + $this->data->device->model = 'Mylo ' . $match[1]; + $this->data->device->identified |= Constants\Id::MATCH_UA; + $this->data->device->type = Constants\DeviceType::PDA; + + $this->data->os->reset(); + + if (preg_match('/Qt embedded/ui', $ua, $match)) { + $this->data->os->name = 'Qtopia'; + } + } + } + + /* Sharp Zaurus */ private function detectSharpZaurus($ua) diff --git a/src/Analyser/Header/Useragent/Os.php b/src/Analyser/Header/Useragent/Os.php index 7358519..264eafb 100644 --- a/src/Analyser/Header/Useragent/Os.php +++ b/src/Analyser/Header/Useragent/Os.php @@ -12,6 +12,8 @@ trait Os private function &detectOperatingSystem($ua) { $this->detectUnix($ua); + $this->detectLinux($ua); + $this->detectBsd($ua); $this->detectDarwin($ua); $this->detectWindows($ua); $this->detectAndroid($ua); @@ -24,6 +26,7 @@ private function &detectOperatingSystem($ua) $this->detectSailfish($ua); $this->detectBada($ua); $this->detectBrew($ua); + $this->detectQtopia($ua); $this->detectRemainingOperatingSystems($ua); return $this; @@ -103,7 +106,7 @@ private function detectDarwin($ua) /* Darwin */ if (preg_match('/Darwin\/([0-9]+).[0-9]+/u', $ua, $match)) { - if (preg_match('/\((?:x86_64|i386)\)/u', $ua)) { + if (preg_match('/\((?:x86_64|i386|Power%20Macintosh)\)/u', $ua)) { /* OS X */ $this->data->os->name = 'OS X'; @@ -202,11 +205,16 @@ private function detectAndroid($ua) } + if (preg_match('/Eclair; (?:[a-zA-Z][a-zA-Z](?:[-_][a-zA-Z][a-zA-Z])?) Build\/([^\/]*)\//u', $ua, $match)) { $this->data->device->model = $match[1]; } elseif (preg_match('/; ?([^;]*[^;\s])\s+[Bb]uild/u', $ua, $match)) { $this->data->device->model = $match[1]; - } elseif (preg_match('/^((?U)[^\/]+)(?:_TD)?\/[^s]+ (?:Linux\/[0-9.]+ )?Android\//u', $ua, $match)) { + } elseif (preg_match('/^(?U)([^\/]+)(?U)(?:(?:_CMCC_TD|_CMCC|_TD|_TDLTE|_LTE)?\/[^\/]*)? Linux\/[0-9.+]+ Android\/[0-9.]+/u', $this->removeKnownPrefixes($ua), $match)) { + $this->data->device->model = $match[1]; + } elseif (preg_match('/^(?U)([^\/]+)(?U)(?:(?:_CMCC_TD|_CMCC|_TD|_TDLTE|_LTE)?\/[^\/]*)? Android(_OS)?\/[0-9.]+/u', $this->removeKnownPrefixes($ua), $match)) { + $this->data->device->model = $match[1]; + } elseif (preg_match('/^(?U)([^\/]+)(?U)(?:(?:_CMCC_TD|_CMCC|_TD|_TDLTE|_LTE)?\/[^\/]*)? Release\/[0-9.]+/u', $this->removeKnownPrefixes($ua), $match)) { $this->data->device->model = $match[1]; } elseif (preg_match('/Linux;Android [0-9.]+,([^\)]+)\)/u', $ua, $match)) { $this->data->device->model = $match[1]; @@ -227,6 +235,11 @@ private function detectAndroid($ua) $this->data->device->model = null; } + /* Sometimes we get a model name that starts with "sprd-", in that case it delete that part */ + if (isset($this->data->device->model) && substr($this->data->device->model, 0, 5) == 'sprd-') { + $this->data->device->model = substr($this->data->device->model, 5); + } + /* Sometimes we get version and API numbers and display size too */ if (isset($this->data->device->model) && preg_match('/(.*) - [0-9\.]+ - (?:with Google Apps - )?API [0-9]+ - [0-9]+x[0-9]+/', $this->data->device->model, $matches)) { $this->data->device->model = $matches[1]; @@ -457,6 +470,7 @@ private function detectWindows($ua) $this->data->os->version = new Version([ 'value' => $match[1] ]); switch ($match[1]) { + case '10.1': case '10.0': case '6.4': $this->data->os->version = new Version([ 'value' => $match[1], 'alias' => '10' ]); @@ -515,6 +529,10 @@ private function detectWindows($ua) $this->data->os->version = new Version([ 'value' => '5.1', 'alias' => 'XP' ]); } + if (preg_match('/Windows Vista/u', $ua)) { + $this->data->os->version = new Version([ 'value' => '6.0', 'alias' => 'Vista' ]); + } + if (preg_match('/Windows (3.[0-9\.]+)/u', $ua, $match)) { $this->data->os->version = new Version([ 'value' => $match[1] ]); } @@ -534,9 +552,10 @@ private function detectWindows($ua) } if (preg_match('/Windows CE/u', $ua) || preg_match('/WinCE/u', $ua) || preg_match('/WindowsCE/u', $ua)) { + $this->data->device->type = Constants\DeviceType::MOBILE; + if (preg_match('/ IEMobile/u', $ua)) { $this->data->os->name = 'Windows Mobile'; - $this->data->device->type = Constants\DeviceType::MOBILE; if (preg_match('/ IEMobile 8/u', $ua)) { $this->data->os->version = new Version([ 'value' => '6.5', 'details' => 2 ]); @@ -551,7 +570,6 @@ private function detectWindows($ua) } } else { $this->data->os->name = 'Windows CE'; - $this->data->device->type = Constants\DeviceType::MOBILE; if (preg_match('/WindowsCEOS\/([0-9.]*)/u', $ua, $match)) { $this->data->os->version = new Version([ 'value' => $match[1], 'details' => 2 ]); @@ -562,7 +580,33 @@ private function detectWindows($ua) } } - if (preg_match('/IEMobile [0-9.]+\) (?:PPC; |Smartphone; )?(?:[0-9]+[Xx][0-9]+;? )?([^;]+)/u', $ua, $match)) { + if (preg_match('/IEMobile [0-9.]+\) (?:PPC; |Smartphone; )?(?:[0-9]+[Xx][0-9]+;? )?(?:HTC\/|Toshiba\/)?([^;]+)/u', $ua, $match)) { + $this->data->device->model = $match[1]; + $this->data->device->identified |= Constants\Id::PATTERN; + + $device = Data\DeviceModels::identify('wm', $match[1]); + if ($device->identified) { + $device->identified |= $this->data->device->identified; + $this->data->device = $device; + } + } + + if (preg_match('/MSIE [0-9.]+; Windows CE; PPC; [0-9]+x[0-9]+; (?:HTC\/|Toshiba\/)?([^;\)]+)\)$/u', $ua, $match)) { + $this->data->os->name = 'Windows Mobile'; + + $this->data->device->model = $match[1]; + $this->data->device->identified |= Constants\Id::PATTERN; + + $device = Data\DeviceModels::identify('wm', $match[1]); + if ($device->identified) { + $device->identified |= $this->data->device->identified; + $this->data->device = $device; + } + } + + if (preg_match('/MSIE [0-9.]+; Windows CE; (?:HTC\/|Toshiba\/)?([^;\)]+)(?:; PPC; [0-9]+x[0-9]+)?\)$/u', $ua, $match) && !preg_match('/Windows CE; IEMobile/', $ua)) { + $this->data->os->name = 'Windows Mobile'; + $this->data->device->model = $match[1]; $this->data->device->identified |= Constants\Id::PATTERN; @@ -574,6 +618,12 @@ private function detectWindows($ua) } } + if (preg_match('/Microsoft Windows; PPC/u', $ua)) { + $this->data->os->name = 'Windows Mobile'; + $this->data->device->type = Constants\DeviceType::MOBILE; + } + + /* Detect models in common places */ if (preg_match('/Windows ?Mobile/u', $ua)) { @@ -584,7 +634,7 @@ private function detectWindows($ua) $this->data->os->version = new Version([ 'value' => $match[1], 'details' => 2 ]); } - if (preg_match('/Windows Mobile; ([^;]+); (?:PPC|Smartphone);/u', $ua, $match)) { + if (preg_match('/Windows Mobile; (?:SHARP\/)?([^;]+); (?:PPC|Smartphone);/u', $ua, $match)) { $this->data->device->model = $match[1]; $this->data->device->identified |= Constants\Id::PATTERN; @@ -645,7 +695,7 @@ private function detectWindows($ua) } /* Windows Phone 10 */ - if (preg_match('/Windows Phone 1[0-9]\.[0-9]; Android [0-9\.]+; ([^;\s][^;]*);\s*([^;\)\s][^;\)]*)[;|\)]/u', $ua, $match)) { + if (preg_match('/Windows Phone 1[0-9]\.[0-9]; Android [0-9\.]+; (?:WebView\/[0-9\.]+; )?([^;\s][^;]*);\s*([^;\)\s][^;\)]*)[;|\)]/u', $ua, $match)) { $this->data->device->manufacturer = $match[1]; $this->data->device->model = $match[2]; $this->data->device->identified |= Constants\Id::PATTERN; @@ -1281,6 +1331,20 @@ private function detectChromeos($ua) } + /* Qtopia */ + + private function detectQtopia($ua) + { + if (preg_match('/Qtopia/u', $ua)) { + $this->data->os->name = 'Qtopia'; + + if (preg_match('/Qtopia\/([0-9.]+)/u', $ua, $match)) { + $this->data->os->version = new Version([ 'value' => $match[1] ]); + } + } + } + + /* Unix */ private function detectUnix($ua) @@ -1295,6 +1359,7 @@ private function detectUnix($ua) if (preg_match('/UNIX_System_V ([0-9.]*)/u', $ua, $match)) { $this->data->os->name = 'UNIX System V'; + $this->data->os->family = new Family([ 'name' => 'UNIX' ]); $this->data->os->version = new Version([ 'value' => $match[1] ]); $this->data->device->type = Constants\DeviceType::DESKTOP; } @@ -1303,6 +1368,7 @@ private function detectUnix($ua) if (preg_match('/OSF1?[ _]/u', $ua)) { $this->data->os->name = 'Digital Unix'; + $this->data->os->family = new Family([ 'name' => 'UNIX' ]); if (preg_match('/OSF1?[ _]V?([0-9.]*)/u', $ua, $match)) { $this->data->os->version = new Version([ 'value' => $match[1] ]); @@ -1311,28 +1377,11 @@ private function detectUnix($ua) $this->data->device->type = Constants\DeviceType::DESKTOP; } - /* FreeBSD */ - - if (preg_match('/FreeBSD/u', $ua)) { - $this->data->os->name = 'FreeBSD'; - } - - /* OpenBSD */ - - if (preg_match('/OpenBSD/u', $ua)) { - $this->data->os->name = 'OpenBSD'; - } - - /* NetBSD */ - - if (preg_match('/NetBSD/u', $ua)) { - $this->data->os->name = 'NetBSD'; - } - /* HP-UX */ if (preg_match('/HP-UX/u', $ua)) { $this->data->os->name = 'HP-UX'; + $this->data->os->family = new Family([ 'name' => 'UNIX' ]); if (preg_match('/HP-UX [A-Z].0?([1-9][0-9.]*)/u', $ua, $match)) { $this->data->os->version = new Version([ 'value' => $match[1] ]); @@ -1345,8 +1394,36 @@ private function detectUnix($ua) if (preg_match('/SunOS/u', $ua)) { $this->data->os->name = 'Solaris'; + $this->data->os->family = new Family([ 'name' => 'UNIX' ]); + + if (preg_match('/SunOS ([1234]\.[0-9\.]+)/u', $ua, $match)) { + $this->data->os->name = 'SunOS'; + $this->data->os->version = new Version([ 'value' => $match[1] ]); + $this->data->os->family = new Family([ 'name' => 'BSD' ]); + + if (preg_match('/SunOS 4\.1\.([1234])/u', $ua, $match)) { + $this->data->os->name = 'Solaris'; + + switch ($match[1]) { + case '1': + $this->data->os->version = new Version([ 'value' => '1.0' ]); + break; + case '2': + $this->data->os->version = new Version([ 'value' => '1.0.1' ]); + break; + case '3': + $this->data->os->version = new Version([ 'value' => '1.1' ]); + break; + case '4': + $this->data->os->version = new Version([ 'value' => '1.1.2' ]); + break; + } + } + } - if (preg_match('/SunOS ([0-9.]*)/u', $ua, $match)) { + if (preg_match('/SunOS 5\.([123456](?:\.[0-9\.]*)?) /u', $ua, $match)) { + $this->data->os->version = new Version([ 'value' => '2.' . $match[1] ]); + } else if (preg_match('/SunOS 5\.([0-9\.]*)/u', $ua, $match)) { $this->data->os->version = new Version([ 'value' => $match[1] ]); } @@ -1357,6 +1434,7 @@ private function detectUnix($ua) if (preg_match('/AIX/u', $ua)) { $this->data->os->name = 'AIX'; + $this->data->os->family = new Family([ 'name' => 'UNIX' ]); if (preg_match('/AIX ([0-9.]*)/u', $ua, $match)) { $this->data->os->version = new Version([ 'value' => $match[1] ]); @@ -1369,6 +1447,7 @@ private function detectUnix($ua) if (preg_match('/IRIX/u', $ua)) { $this->data->os->name = 'IRIX'; + $this->data->os->family = new Family([ 'name' => 'UNIX' ]); if (preg_match('/IRIX ([0-9.]*)/u', $ua, $match)) { $this->data->os->version = new Version([ 'value' => $match[1] ]); @@ -1381,15 +1460,88 @@ private function detectUnix($ua) $this->data->device->type = Constants\DeviceType::DESKTOP; } - /* Syllable */ + /* Sony NEWS OS */ + + if (preg_match('/NEWS-OS ([0-9\.]+)/u', $ua, $match)) { + $this->data->os->name = 'NEWS OS'; + $this->data->os->version = new Version([ 'value' => $match[1] ]); + $this->data->os->family = new Family([ 'name' => 'BSD' ]); + + + if (preg_match('/NEWS-OS 6/u', $ua)) { + $this->data->os->family = new Family([ 'name' => 'UNIX' ]); + } - if (preg_match('/Syllable/u', $ua)) { - $this->data->os->name = 'Syllable'; $this->data->device->type = Constants\DeviceType::DESKTOP; } + } + + + /* BSD */ + + private function detectBsd($ua) + { + if (preg_match('/BSD/iu', $ua)) { + if (preg_match('/X11/u', $ua)) { + $this->data->device->type = Constants\DeviceType::DESKTOP; + } + + /* BSD/OS */ + + if (preg_match('/BSD\/386/u', $ua)) { + $this->data->os->name = 'BSD/OS'; + $this->data->os->family = new Family([ 'name' => 'BSD' ]); + } + + if (preg_match('/BSD\/OS/u', $ua)) { + $this->data->os->name = 'BSD/OS'; + $this->data->os->family = new Family([ 'name' => 'BSD' ]); + + if (preg_match('/BSD\/OS ([0-9.]*)/u', $ua, $match)) { + $this->data->os->version = new Version([ 'value' => $match[1] ]); + } + } + + /* FreeBSD */ + + if (preg_match('/FreeBSD/iu', $ua)) { + $this->data->os->name = 'FreeBSD'; + $this->data->os->family = new Family([ 'name' => 'BSD' ]); + + if (preg_match('/FreeBSD[ -\/]?([0-9.]*)/iu', $ua, $match)) { + $this->data->os->version = new Version([ 'value' => $match[1] ]); + } + } - /* Linux */ + /* OpenBSD */ + if (preg_match('/OpenBSD/iu', $ua)) { + $this->data->os->name = 'OpenBSD'; + $this->data->os->family = new Family([ 'name' => 'BSD' ]); + + if (preg_match('/OpenBSD ?([0-9.]*)/iu', $ua, $match)) { + $this->data->os->version = new Version([ 'value' => $match[1] ]); + } + } + + /* NetBSD */ + + if (preg_match('/NetBSD/iu', $ua)) { + $this->data->os->name = 'NetBSD'; + $this->data->os->family = new Family([ 'name' => 'BSD' ]); + + if (preg_match('/NetBSD ?([0-9.]*)/iu', $ua, $match)) { + $this->data->os->version = new Version([ 'value' => $match[1] ]); + } + } + } + } + + + /* Linux */ + + private function detectLinux($ua) + { if (preg_match('/Linux/u', $ua)) { $this->data->os->name = 'Linux'; @@ -1408,6 +1560,10 @@ private function detectUnix($ua) if (preg_match('/Debian/u', $ua)) { $this->data->os->name = 'Debian'; + if (preg_match('/Debian\/([0-9.]*)/iu', $ua, $match)) { + $this->data->os->version = new Version([ 'value' => $match[1] ]); + } + $this->data->device->type = Constants\DeviceType::DESKTOP; } @@ -1436,6 +1592,10 @@ private function detectUnix($ua) if (preg_match('/Kubuntu/u', $ua)) { $this->data->os->name = 'Kubuntu'; + if (preg_match('/Kubuntu[ \/]([0-9.]*)/iu', $ua, $match)) { + $this->data->os->version = new Version([ 'value' => $match[1] ]); + } + $this->data->device->type = Constants\DeviceType::DESKTOP; } @@ -1466,6 +1626,15 @@ private function detectUnix($ua) $this->data->device->type = Constants\DeviceType::DESKTOP; } + if (preg_match('/moonOS/u', $ua)) { + $this->data->os->name = 'moonOS'; + if (preg_match('/moonOS\/([0-9.]+)/u', $ua, $match)) { + $this->data->os->version = new Version([ 'value' => $match[1] ]); + } + + $this->data->device->type = Constants\DeviceType::DESKTOP; + } + if (preg_match('/Red Hat/u', $ua)) { $this->data->os->name = 'Red Hat'; if (preg_match('/Red Hat[^\/]*\/[0-9\.\-]+el([0-9_]+)/u', $ua, $match)) { @@ -1477,16 +1646,28 @@ private function detectUnix($ua) if (preg_match('/Slackware/u', $ua)) { $this->data->os->name = 'Slackware'; + if (preg_match('/Slackware[ \/](1[0-9.]+)/u', $ua, $match)) { + $this->data->os->version = new Version([ 'value' => $match[1] ]); + } + $this->data->device->type = Constants\DeviceType::DESKTOP; } if (preg_match('/SUSE/u', $ua)) { $this->data->os->name = 'SUSE'; + if (preg_match('/SUSE\/([0-9]\.[0-9]+)/u', $ua, $match)) { + $this->data->os->version = new Version([ 'value' => $match[1] ]); + } + $this->data->device->type = Constants\DeviceType::DESKTOP; } if (preg_match('/Turbolinux/u', $ua)) { $this->data->os->name = 'Turbolinux'; + if (preg_match('/Turbolinux\/([0-9]\.[0-9]+)/u', $ua, $match)) { + $this->data->os->version = new Version([ 'value' => $match[1] ]); + } + $this->data->device->type = Constants\DeviceType::DESKTOP; } @@ -1503,6 +1684,12 @@ private function detectUnix($ua) $this->data->os->name = 'LiMo'; $this->data->device->type = Constants\DeviceType::MOBILE; } + + + if (preg_match('/LinuxOS\//u', $ua) && preg_match('/Software\/R5/u', $ua)) { + $this->data->os->name = 'EZX Linux'; + $this->data->device->type = Constants\DeviceType::MOBILE; + } } if (preg_match('/\(Ubuntu; (Mobile|Tablet)/u', $ua)) { @@ -1611,8 +1798,9 @@ private function detectRemainingOperatingSystems($ua) [ 'name' => 'OpenVMS', 'regexp' => [ '/OpenVMS/iu', '/OpenVMS V([0-9.]+)/iu' ], 'type' => Constants\DeviceType::DESKTOP ], [ 'name' => 'RISC OS', 'regexp' => [ '/RISC OS/iu', '/RISC OS(?:-NC)? ([0-9.]*)/iu' ], 'type' => Constants\DeviceType::DESKTOP ], [ 'name' => 'Joli OS', 'regexp' => [ '/Joli OS\/([0-9.]*)/iu' ], 'type' => Constants\DeviceType::DESKTOP ], - [ 'name' => 'OS/2 Warp', 'regexp' => [ '/OS\/2; (?:U; )?Warp ([0-9.]*)/iu' ], 'type' => Constants\DeviceType::DESKTOP ], + [ 'name' => 'OS/2', 'regexp' => [ '/OS\/2; (?:U; )?Warp ([0-9.]*)/iu' ], 'type' => Constants\DeviceType::DESKTOP ], [ 'name' => 'Inferno', 'regexp' => [ '/Inferno/iu' ], 'type' => Constants\DeviceType::DESKTOP ], + [ 'name' => 'Syllable', 'regexp' => [ '/Syllable/iu' ], 'type' => Constants\DeviceType::DESKTOP ], [ 'name' => 'Grid OS', 'regexp' => [ '/Grid OS ([0-9.]*)/iu' ], 'type' => Constants\DeviceType::TABLET ], diff --git a/src/Analyser/Header/Useragent/Using.php b/src/Analyser/Header/Useragent/Using.php new file mode 100644 index 0000000..c8bb26f --- /dev/null +++ b/src/Analyser/Header/Useragent/Using.php @@ -0,0 +1,51 @@ + 'AdobeAIR', 'regexp' => '/AdobeAIR\/([0-9.]*)/u' ], + [ 'name' => 'Awesomium', 'regexp' => '/Awesomium\/([0-9.]*)/u' ], + [ 'name' => 'Delphi Embedded Web Browser', 'regexp' => '/EmbeddedWB ([0-9.]*)/u' ], + [ 'name' => 'Delphi Embedded Web Browser', 'regexp' => '/bsalsa\.com/u' ], + [ 'name' => 'Delphi Embedded Web Browser', 'regexp' => '/Embedded Web Browser/u' ], + [ 'name' => 'Canvace', 'regexp' => '/Canvace Standalone\/([0-9.]*)/u' ], + [ 'name' => 'Ekioh', 'regexp' => '/Ekioh\/([0-9.]*)/u' ], + [ 'name' => 'JavaFX', 'regexp' => '/JavaFX\/([0-9.]*)/u' ], + [ 'name' => 'GFXe', 'regexp' => '/GFXe\/([0-9.]*)/u' ], + [ 'name' => 'LuaKit', 'regexp' => '/luakit/u' ], + [ 'name' => 'Titanium', 'regexp' => '/Titanium\/([0-9.]*)/u' ], + [ 'name' => 'OpenWebKitSharp', 'regexp' => '/OpenWebKitSharp/u' ], + [ 'name' => 'Prism', 'regexp' => '/Prism\/([0-9.]*)/u' ], + [ 'name' => 'Qt', 'regexp' => '/Qt\/([0-9.]*)/u' ], + [ 'name' => 'Qt', 'regexp' => '/QtWebEngine\/([0-9.]*)/u' ], + [ 'name' => 'Qt', 'regexp' => '/QtEmbedded/u' ], + [ 'name' => 'Qt', 'regexp' => '/QtEmbedded.*Qt\/([0-9.]*)/u' ], + [ 'name' => 'ReqwirelessWeb', 'regexp' => '/ReqwirelessWeb\/([0-9.]*)/u' ], + [ 'name' => 'RhoSimulator', 'regexp' => '/RhoSimulator/u' ], + [ 'name' => 'UWebKit', 'regexp' => '/UWebKit\/([0-9.]*)/u' ], + [ 'name' => 'Node-WebKit', 'regexp' => '/nw-tests\/([0-9.]*)/u' ], + [ 'name' => 'WebKit2.NET', 'regexp' => '/WebKit2.NET/u' ], + ]; + + $count = count($items); + for ($i = 0; $i < $count; $i++) { + if (preg_match($items[$i]['regexp'], $ua, $match)) { + $this->data->browser->using = new \WhichBrowser\Model\Using([ + 'name' => $items[$i]['name'] + ]); + + if (isset($match[1]) && $match[1]) { + $this->data->browser->using->version = new Version([ 'value' => $match[1], 'details' => isset($items[$i]['details']) ? $items[$i]['details'] : null ]); + } + } + } + + return $this; + } +} diff --git a/src/Constants/BrowserType.php b/src/Constants/BrowserType.php new file mode 100644 index 0000000..2cb469d --- /dev/null +++ b/src/Constants/BrowserType.php @@ -0,0 +1,25 @@ +flag = isset($match[3]) ? $match[3] : $match['flag']; } + + if (isset($match['carrier'])) { + $device->carrier = $match['carrier']; + } + if ($device->manufacturer == null && $device->model == null) { $device->identified = Constants\Id::PATTERN; } diff --git a/src/Model/Browser.php b/src/Model/Browser.php index 421fdd7..f6255c9 100644 --- a/src/Model/Browser.php +++ b/src/Model/Browser.php @@ -26,6 +26,9 @@ class Browser extends NameVersion /** @var string */ public $mode = ''; + /** @var string */ + public $type = ''; + /** * Set the properties to the default values @@ -46,6 +49,7 @@ public function reset($properties = null) $this->stock = true; $this->hidden = false; $this->mode = ''; + $this->type = ''; if (is_array($properties)) { $this->set($properties); @@ -160,6 +164,10 @@ public function toArray() $result['version'] = $this->version->toArray(); } + if (!empty($this->type)) { + $result['type'] = $this->type; + } + if (isset($result['version']) && !count($result['version'])) { unset($result['version']); } diff --git a/src/Model/Device.php b/src/Model/Device.php index bb29841..21057f9 100644 --- a/src/Model/Device.php +++ b/src/Model/Device.php @@ -17,6 +17,9 @@ class Device extends Base /** @var string */ public $series; + /** @var string */ + public $carrier; + /** @var int */ public $identifier; @@ -50,6 +53,7 @@ public function reset($properties = null) unset($this->manufacturer); unset($this->model); unset($this->series); + unset($this->carrier); unset($this->identifier); $this->type = ''; @@ -91,6 +95,10 @@ public function identifyModel($pattern, $subject, $defaults = []) $this->generic = false; $this->identified |= Constants\Id::PATTERN; + if (!empty($defaults['carrier'])) { + $this->carrier = $defaults['carrier']; + } + if (!empty($defaults['type'])) { $this->type = $defaults['type']; } @@ -118,6 +126,18 @@ public function setIdentification($properties) } + /** + * Get the name of the carrier in a human readable format + * + * @return string + */ + + public function getCarrier() + { + return $this->identified && !empty($this->carrier) ? $this->carrier : ''; + } + + /** * Get the name of the manufacturer in a human readable format * @@ -213,6 +233,10 @@ public function toArray() $result['series'] = $this->series; } + if (!empty($this->carrier)) { + $result['carrier'] = $this->carrier; + } + return $result; } } diff --git a/src/Model/Main.php b/src/Model/Main.php index 7b9304c..6eb01c0 100644 --- a/src/Model/Main.php +++ b/src/Model/Main.php @@ -296,6 +296,10 @@ public function toString() return 'an unknown browser based on ' . $engine; } + if ($this->device->type == 'bot') { + return 'an unknown bot'; + } + return 'an unknown browser'; }