A hint: This file contains one or more very long lines, so maybe it is better readable using the pure text view mode that shows the contents as wrapped lines within the browser window.
1 # Apache License, Version 2.0 2 # =========================== 3 # 4 # Copyright 2009 Google Inc. 5 # 6 # Licensed under the Apache License, Version 2.0 (the "License"); 7 # you may not use this file except in compliance with the License. 8 # You may obtain a copy of the License at 9 # 10 # http://www.apache.org/licenses/LICENSE-2.0 11 # 12 # Unless required by applicable law or agreed to in writing, software 13 # distributed under the License is distributed on an "AS IS" BASIS, 14 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 15 # See the License for the specific language governing permissions and 16 # limitations under the License. 17 18 user_agent_parsers: 19 #### SPECIAL CASES TOP #### 20 21 # @note: iOS / OSX Applications 22 - regex: '(CFNetwork)(?:/(\d+)\.(\d+)\.?(\d+)?)?' 23 family_replacement: 'CFNetwork' 24 25 # Pingdom 26 - regex: '(Pingdom.com_bot_version_)(\d+)\.(\d+)' 27 family_replacement: 'PingdomBot' 28 # 'Mozilla/5.0 (Unknown; Linux x86_64) AppleWebKit/534.34 (KHTML, like Gecko) PingdomTMS/0.8.5 Safari/534.34' 29 - regex: '(PingdomTMS)/(\d+)\.(\d+)\.(\d+)' 30 family_replacement: 'PingdomBot' 31 32 #StatusCake 33 - regex: '(\(StatusCake\))' 34 family_replacement: 'StatusCakeBot' 35 36 # Facebook 37 - regex: '(facebookexternalhit)/(\d+)\.(\d+)' 38 family_replacement: 'FacebookBot' 39 40 # Google Plus 41 - regex: 'Google.*/\+/web/snippet' 42 family_replacement: 'GooglePlusBot' 43 44 # Gmail 45 - regex: 'via ggpht.com GoogleImageProxy' 46 family_replacement: 'GmailImageProxy' 47 48 # Twitter 49 - regex: '(Twitterbot)/(\d+)\.(\d+)' 50 family_replacement: 'TwitterBot' 51 52 # Bots Pattern '/name-0.0' 53 - regex: '/((?:Ant-)?Nutch|[A-z]+[Bb]ot|[A-z]+[Ss]pider|Axtaris|fetchurl|Isara|ShopSalad|Tailsweep)[ \-](\d+)(?:\.(\d+)(?:\.(\d+))?)?' 54 # Bots Pattern 'name/0.0' 55 - regex: '\b(008|Altresium|Argus|BaiduMobaider|BoardReader|DNSGroup|DataparkSearch|EDI|Goodzer|Grub|INGRID|Infohelfer|LinkedInBot|LOOQ|Nutch|PathDefender|Peew|PostPost|Steeler|Twitterbot|VSE|WebCrunch|WebZIP|Y!J-BR[A-Z]|YahooSeeker|envolk|sproose|wminer)/(\d+)(?:\.(\d+)(?:\.(\d+))?)?' 56 57 # MSIECrawler 58 - regex: '(MSIE) (\d+)\.(\d+)([a-z]\d?)?;.* MSIECrawler' 59 family_replacement: 'MSIECrawler' 60 61 # Downloader ... 62 - regex: '(Google-HTTP-Java-Client|Apache-HttpClient|http%20client|Python-urllib|HttpMonitor|TLSProber|WinHTTP|JNLP|okhttp)(?:[ /](\d+)(?:\.(\d+)(?:\.(\d+))?)?)?' 63 64 # Bots 65 - regex: '(1470\.net crawler|50\.nu|8bo Crawler Bot|Aboundex|Accoona-[A-z]+-Agent|AdsBot-Google(?:-[a-z]+)?|altavista|AppEngine-Google|archive.*?\.org_bot|archiver|Ask Jeeves|[Bb]ai[Dd]u[Ss]pider(?:-[A-Za-z]+)*|bingbot|BingPreview|blitzbot|BlogBridge|Bloglovin|BoardReader(?: [A-Za-z]+)*|boitho.com-dc|BotSeer|\b\w*favicon\w*\b|\bYeti(?:-[a-z]+)?|Catchpoint(?: bot)?|[Cc]harlotte|Checklinks|clumboot|Comodo HTTP\(S\) Crawler|Comodo-Webinspector-Crawler|ConveraCrawler|CRAWL-E|CrawlConvera|Daumoa(?:-feedfetcher)?|Feed Seeker Bot|Feedbin|findlinks|Flamingo_SearchEngine|FollowSite Bot|furlbot|Genieo|gigabot|GomezAgent|gonzo1|(?:[a-zA-Z]+-)?Googlebot(?:-[a-zA-Z]+)?|Google SketchUp|grub-client|gsa-crawler|heritrix|HiddenMarket|holmes|HooWWWer|htdig|ia_archiver|ICC-Crawler|Icarus6j|ichiro(?:/mobile)?|IconSurf|IlTrovatore(?:-Setaccio)?|InfuzApp|Innovazion Crawler|InternetArchive|IP2[a-z]+Bot|jbot\b|KaloogaBot|Kraken|Kurzor|larbin|LEIA|LesnikBot|Linguee Bot|LinkAider|LinkedInBot|Lite Bot|Llaut|lycos|Mail\.RU_Bot|masscan|masidani_bot|Mediapartners-Google|Microsoft .*? Bot|mogimogi|mozDex|MJ12bot|msnbot(?:-media *)?|msrbot|Mtps Feed Aggregation System|netresearch|Netvibes|NewsGator[^/]*|^NING|Nutch[^/]*|Nymesis|ObjectsSearch|Orbiter|OOZBOT|PagePeeker|PagesInventory|PaxleFramework|Peeplo Screenshot Bot|PlantyNet_WebRobot|Pompos|Qwantify|Read%20Later|Reaper|RedCarpet|Retreiver|Riddler|Rival IQ|scooter|Scrapy|Scrubby|searchsight|seekbot|semanticdiscovery|Simpy|SimplePie|SEOstats|SimpleRSS|SiteCon|Slackbot-LinkExpanding|Slack-ImgProxy|Slurp|snappy|Speedy Spider|Squrl Java|Stringer|TheUsefulbot|ThumbShotsBot|Thumbshots\.ru|Tiny Tiny RSS|TwitterBot|WhatsApp|URL2PNG|Vagabondo|VoilaBot|^vortex|Votay bot|^voyager|WASALive.Bot|Web-sniffer|WebThumb|WeSEE:[A-z]+|WhatWeb|WIRE|WordPress|Wotbox|www\.almaden\.ibm\.com|Xenu(?:.s)? Link Sleuth|Xerka [A-z]+Bot|yacy(?:bot)?|Yahoo[a-z]*Seeker|Yahoo! Slurp|Yandex\w+|YodaoBot(?:-[A-z]+)?|YottaaMonitor|Yowedo|^Zao|^Zao-Crawler|ZeBot_www\.ze\.bz|ZooShot|ZyBorg)(?:[ /]v?(\d+)(?:\.(\d+)(?:\.(\d+))?)?)?' 66 67 # Bots General matcher 'name/0.0' 68 - regex: '(?:\/[A-Za-z0-9\.]+)? *([A-Za-z0-9 \-_\!\[\]:]*(?:[Aa]rchiver|[Ii]ndexer|[Ss]craper|[Bb]ot|[Ss]pider|[Cc]rawl[a-z]*))/(\d+)(?:\.(\d+)(?:\.(\d+))?)?' 69 # Bots General matcher 'name 0.0' 70 - regex: '(?:\/[A-Za-z0-9\.]+)? *([A-Za-z0-9 _\!\[\]:]*(?:[Aa]rchiver|[Ii]ndexer|[Ss]craper|[Bb]ot|[Ss]pider|[Cc]rawl[a-z]*)) (\d+)(?:\.(\d+)(?:\.(\d+))?)?' 71 # Bots containing spider|scrape|bot(but not CUBOT)|Crawl 72 - regex: '((?:[A-z0-9]+|[A-z\-]+ ?)?(?: the )?(?:[Ss][Pp][Ii][Dd][Ee][Rr]|[Ss]crape|[A-Za-z0-9-]*(?:[^C][^Uu])[Bb]ot|[Cc][Rr][Aa][Ww][Ll])[A-z0-9]*)(?:(?:[ /]| v)(\d+)(?:\.(\d+)(?:\.(\d+))?)?)?' 73 74 # HbbTV standard defines what features the browser should understand. 75 # but it's like targeting "HTML5 browsers", effective browser support depends on the model 76 # See os_parsers if you want to target a specific TV 77 - regex: '(HbbTV)/(\d+)\.(\d+)\.(\d+) \(' 78 79 # must go before Firefox to catch Chimera/SeaMonkey/Camino 80 - regex: '(Chimera|SeaMonkey|Camino)/(\d+)\.(\d+)\.?([ab]?\d+[a-z]*)?' 81 82 # Social Networks 83 # Facebook 84 - regex: '\[FB.*;(FBAV)/(\d+)(?:\.(\d+)(?:\.(\d)+)?)?' 85 family_replacement: 'Facebook' 86 # Pinterest 87 - regex: '\[(Pinterest)/[^\]]+\]' 88 - regex: '(Pinterest)(?: for Android(?: Tablet)?)?/(\d+)(?:\.(\d+)(?:\.(\d)+)?)?' 89 90 # Pale Moon 91 - regex: '(PaleMoon)/(\d+)\.(\d+)\.?(\d+)?' 92 family_replacement: 'Pale Moon' 93 94 # Firefox 95 - regex: '(Fennec)/(\d+)\.(\d+)\.?([ab]?\d+[a-z]*)' 96 family_replacement: 'Firefox Mobile' 97 - regex: '(Fennec)/(\d+)\.(\d+)(pre)' 98 family_replacement: 'Firefox Mobile' 99 - regex: '(Fennec)/(\d+)\.(\d+)' 100 family_replacement: 'Firefox Mobile' 101 - regex: '(?:Mobile|Tablet);.*(Firefox)/(\d+)\.(\d+)' 102 family_replacement: 'Firefox Mobile' 103 - regex: '(Namoroka|Shiretoko|Minefield)/(\d+)\.(\d+)\.(\d+(?:pre)?)' 104 family_replacement: 'Firefox ($1)' 105 - regex: '(Firefox)/(\d+)\.(\d+)(a\d+[a-z]*)' 106 family_replacement: 'Firefox Alpha' 107 - regex: '(Firefox)/(\d+)\.(\d+)(b\d+[a-z]*)' 108 family_replacement: 'Firefox Beta' 109 - regex: '(Firefox)-(?:\d+\.\d+)?/(\d+)\.(\d+)(a\d+[a-z]*)' 110 family_replacement: 'Firefox Alpha' 111 - regex: '(Firefox)-(?:\d+\.\d+)?/(\d+)\.(\d+)(b\d+[a-z]*)' 112 family_replacement: 'Firefox Beta' 113 - regex: '(Namoroka|Shiretoko|Minefield)/(\d+)\.(\d+)([ab]\d+[a-z]*)?' 114 family_replacement: 'Firefox ($1)' 115 - regex: '(Firefox).*Tablet browser (\d+)\.(\d+)\.(\d+)' 116 family_replacement: 'MicroB' 117 - regex: '(MozillaDeveloperPreview)/(\d+)\.(\d+)([ab]\d+[a-z]*)?' 118 - regex: '(FxiOS)/(\d+)\.(\d+)(\.(\d+))?(\.(\d+))?' 119 family_replacement: 'Firefox iOS' 120 121 # e.g.: Flock/2.0b2 122 - regex: '(Flock)/(\d+)\.(\d+)(b\d+?)' 123 124 # RockMelt 125 - regex: '(RockMelt)/(\d+)\.(\d+)\.(\d+)' 126 127 # e.g.: Fennec/0.9pre 128 - regex: '(Navigator)/(\d+)\.(\d+)\.(\d+)' 129 family_replacement: 'Netscape' 130 131 - regex: '(Navigator)/(\d+)\.(\d+)([ab]\d+)' 132 family_replacement: 'Netscape' 133 134 - regex: '(Netscape6)/(\d+)\.(\d+)\.?([ab]?\d+)?' 135 family_replacement: 'Netscape' 136 137 - regex: '(MyIBrow)/(\d+)\.(\d+)' 138 family_replacement: 'My Internet Browser' 139 140 # UC Browser 141 # we need check it before opera. In other case case UC Browser detected look like Opera Mini 142 - regex: '(UC? ?Browser|UCWEB|U3)[ /]?(\d+)\.(\d+)\.(\d+)' 143 family_replacement: 'UC Browser' 144 145 # Opera will stop at 9.80 and hide the real version in the Version string. 146 # see: http://dev.opera.com/articles/view/opera-ua-string-changes/ 147 - regex: '(Opera Tablet).*Version/(\d+)\.(\d+)(?:\.(\d+))?' 148 - regex: '(Opera Mini)(?:/att)?/?(\d+)?(?:\.(\d+))?(?:\.(\d+))?' 149 - regex: '(Opera)/.+Opera Mobi.+Version/(\d+)\.(\d+)' 150 family_replacement: 'Opera Mobile' 151 - regex: '(Opera)/(\d+)\.(\d+).+Opera Mobi' 152 family_replacement: 'Opera Mobile' 153 - regex: 'Opera Mobi.+(Opera)(?:/|\s+)(\d+)\.(\d+)' 154 family_replacement: 'Opera Mobile' 155 - regex: 'Opera Mobi' 156 family_replacement: 'Opera Mobile' 157 - regex: '(Opera)/9.80.*Version/(\d+)\.(\d+)(?:\.(\d+))?' 158 159 # Opera 14 for Android uses a WebKit render engine. 160 - regex: '(?:Mobile Safari).*(OPR)/(\d+)\.(\d+)\.(\d+)' 161 family_replacement: 'Opera Mobile' 162 163 # Opera >=15 for Desktop is similar to Chrome but includes an "OPR" Version string. 164 - regex: '(?:Chrome).*(OPR)/(\d+)\.(\d+)\.(\d+)' 165 family_replacement: 'Opera' 166 167 # Opera Coast 168 - regex: '(Coast)/(\d+).(\d+).(\d+)' 169 family_replacement: 'Opera Coast' 170 171 # Opera Mini for iOS (from version 8.0.0) 172 - regex: '(OPiOS)/(\d+).(\d+).(\d+)' 173 family_replacement: 'Opera Mini' 174 175 # Opera Neon 176 - regex: 'Chrome/.+( MMS)/(\d+).(\d+).(\d+)' 177 family_replacement: 'Opera Neon' 178 179 # Palm WebOS looks a lot like Safari. 180 - regex: '(hpw|web)OS/(\d+)\.(\d+)(?:\.(\d+))?' 181 family_replacement: 'webOS Browser' 182 183 # LuaKit has no version info. 184 # http://luakit.org/projects/luakit/ 185 - regex: '(luakit)' 186 family_replacement: 'LuaKit' 187 188 # Snowshoe 189 - regex: '(Snowshoe)/(\d+)\.(\d+).(\d+)' 190 191 # Lightning (for Thunderbird) 192 # http://www.mozilla.org/projects/calendar/lightning/ 193 - regex: 'Gecko/\d+ (Lightning)/(\d+)\.(\d+)\.?((?:[ab]?\d+[a-z]*)|(?:\d*))' 194 195 # Swiftfox 196 - regex: '(Firefox)/(\d+)\.(\d+)\.(\d+(?:pre)?) \(Swiftfox\)' 197 family_replacement: 'Swiftfox' 198 - regex: '(Firefox)/(\d+)\.(\d+)([ab]\d+[a-z]*)? \(Swiftfox\)' 199 family_replacement: 'Swiftfox' 200 201 # Rekonq 202 - regex: '(rekonq)/(\d+)\.(\d+)\.?(\d+)? Safari' 203 family_replacement: 'Rekonq' 204 - regex: 'rekonq' 205 family_replacement: 'Rekonq' 206 207 # Conkeror lowercase/uppercase 208 # http://conkeror.org/ 209 - regex: '(conkeror|Conkeror)/(\d+)\.(\d+)\.?(\d+)?' 210 family_replacement: 'Conkeror' 211 212 # catches lower case konqueror 213 - regex: '(konqueror)/(\d+)\.(\d+)\.(\d+)' 214 family_replacement: 'Konqueror' 215 216 - regex: '(WeTab)-Browser' 217 218 - regex: '(Comodo_Dragon)/(\d+)\.(\d+)\.(\d+)' 219 family_replacement: 'Comodo Dragon' 220 221 - regex: '(Symphony) (\d+).(\d+)' 222 223 - regex: 'PLAYSTATION 3.+WebKit' 224 family_replacement: 'NetFront NX' 225 - regex: 'PLAYSTATION 3' 226 family_replacement: 'NetFront' 227 - regex: '(PlayStation Portable)' 228 family_replacement: 'NetFront' 229 - regex: '(PlayStation Vita)' 230 family_replacement: 'NetFront NX' 231 232 - regex: 'AppleWebKit.+ (NX)/(\d+)\.(\d+)\.(\d+)' 233 family_replacement: 'NetFront NX' 234 - regex: '(Nintendo 3DS)' 235 family_replacement: 'NetFront NX' 236 237 # Amazon Silk, should go before Safari and Chrome Mobile 238 - regex: '(Silk)/(\d+)\.(\d+)(?:\.([0-9\-]+))?' 239 family_replacement: 'Amazon Silk' 240 241 # @ref: http://www.puffinbrowser.com 242 - regex: '(Puffin)/(\d+)\.(\d+)(?:\.(\d+))?' 243 244 # Edge Mobile 245 - regex: 'Windows Phone .*(Edge)/(\d+)\.(\d+)' 246 family_replacement: 'Edge Mobile' 247 248 # Samsung Internet (based on Chrome, but lacking some features) 249 - regex: '(SamsungBrowser)/(\d+)\.(\d+)' 250 family_replacement: 'Samsung Internet' 251 252 # Seznam.cz browser (based on WebKit) 253 - regex: '(SznProhlizec)/(\d+)\.(\d+)(?:\.(\d+))?' 254 family_replacement: 'Seznam.cz' 255 256 # Coc Coc browser, based on Chrome (used in Vietnam) 257 - regex: '(coc_coc_browser)/(\d+)\.(\d+)(?:\.(\d+))?' 258 family_replacement: 'Coc Coc' 259 260 # Baidu Browsers (desktop spoofs chrome & IE, explorer is mobile) 261 - regex: '(baidubrowser)[/\s](\d+)(?:\.(\d+)(?:\.(\d+))?)?' 262 family_replacement: 'Baidu Browser' 263 - regex: '(FlyFlow)/(\d+)\.(\d+)' 264 family_replacement: 'Baidu Explorer' 265 266 # MxBrowser is Maxthon. Must go before Mobile Chrome for Android 267 - regex: '(MxBrowser)/(\d+)\.(\d+)(?:\.(\d+))?' 268 family_replacement: 'Maxthon' 269 270 # Crosswalk must go before Mobile Chrome for Android 271 - regex: '(Crosswalk)/(\d+)\.(\d+)\.(\d+)\.(\d+)' 272 273 # Chrome Mobile 274 - regex: '; wv\).+(Chrome)/(\d+)\.(\d+)\.(\d+)\.(\d+)' 275 family_replacement: 'Chrome Mobile WebView' 276 - regex: '(CrMo)/(\d+)\.(\d+)\.(\d+)\.(\d+)' 277 family_replacement: 'Chrome Mobile' 278 - regex: '(CriOS)/(\d+)\.(\d+)\.(\d+)\.(\d+)' 279 family_replacement: 'Chrome Mobile iOS' 280 - regex: '(Chrome)/(\d+)\.(\d+)\.(\d+)\.(\d+) Mobile(?:[ /]|$)' 281 family_replacement: 'Chrome Mobile' 282 - regex: ' Mobile .*(Chrome)/(\d+)\.(\d+)\.(\d+)\.(\d+)' 283 family_replacement: 'Chrome Mobile' 284 285 # Chrome Frame must come before MSIE. 286 - regex: '(chromeframe)/(\d+)\.(\d+)\.(\d+)' 287 family_replacement: 'Chrome Frame' 288 289 # Tizen Browser (second case included in browser/major.minor regex) 290 - regex: '(SLP Browser)/(\d+)\.(\d+)' 291 family_replacement: 'Tizen Browser' 292 293 # Sogou Explorer 2.X 294 - regex: '(SE 2\.X) MetaSr (\d+)\.(\d+)' 295 family_replacement: 'Sogou Explorer' 296 297 # QQ Browsers 298 - regex: '(MQQBrowser/Mini)(?:(\d+)(?:\.(\d+)(?:\.(\d+))?)?)?' 299 family_replacement: 'QQ Browser Mini' 300 - regex: '(MQQBrowser)(?:/(\d+)(?:\.(\d+)(?:\.(\d+))?)?)?' 301 family_replacement: 'QQ Browser Mobile' 302 - regex: '(QQBrowser)(?:/(\d+)(?:\.(\d+)\.(\d+)(?:\.(\d+))?)?)?' 303 family_replacement: 'QQ Browser' 304 305 # Rackspace Monitoring 306 - regex: '(Rackspace Monitoring)/(\d+)\.(\d+)' 307 family_replacement: 'RackspaceBot' 308 309 # PyAMF 310 - regex: '(PyAMF)/(\d+)\.(\d+)\.(\d+)' 311 312 # Yandex Browser 313 - regex: '(YaBrowser)/(\d+)\.(\d+)\.(\d+)' 314 family_replacement: 'Yandex Browser' 315 316 # Mail.ru Amigo/Internet Browser (Chromium-based) 317 - regex: '(Chrome)/(\d+)\.(\d+)\.(\d+).* MRCHROME' 318 family_replacement: 'Mail.ru Chromium Browser' 319 320 # AOL Browser (IE-based) 321 - regex: '(AOL) (\d+)\.(\d+); AOLBuild (\d+)' 322 323 #### END SPECIAL CASES TOP #### 324 325 #### MAIN CASES - this catches > 50% of all browsers #### 326 327 328 # Slack desktop client (needs to be before Apple Mail, Electron, and Chrome as it gets wrongly detected on Mac OS otherwise) 329 - regex: '(Slack_SSB)/(\d+)\.(\d+)\.(\d+)' 330 family_replacement: 'Slack Desktop Client' 331 332 # HipChat provides a version on Mac, but not on Windows. 333 # Needs to be before Chrome on Windows, and AppleMail on Mac. 334 - regex: '(HipChat)/?(\d+)?' 335 family_replacement: 'HipChat Desktop Client' 336 337 # Browser/major_version.minor_version.beta_version 338 - regex: '\b(MobileIron|FireWeb|Jasmine|ANTGalio|Midori|Fresco|Lobo|PaleMoon|Maxthon|Lynx|OmniWeb|Dillo|Camino|Demeter|Fluid|Fennec|Epiphany|Shiira|Sunrise|Spotify|Flock|Netscape|Lunascape|WebPilot|NetFront|Netfront|Konqueror|SeaMonkey|Kazehakase|Vienna|Iceape|Iceweasel|IceWeasel|Iron|K-Meleon|Sleipnir|Galeon|GranParadiso|Opera Mini|iCab|NetNewsWire|ThunderBrowse|Iris|UP\.Browser|Bunjalloo|Google Earth|Raven for Mac|Openwave|MacOutlook|Electron)/(\d+)\.(\d+)\.(\d+)' 339 340 # Outlook 2007 341 - regex: 'Microsoft Office Outlook 12\.\d+\.\d+|MSOffice 12' 342 family_replacement: 'Outlook' 343 v1_replacement: '2007' 344 345 # Outlook 2010 346 - regex: 'Microsoft Outlook 14\.\d+\.\d+|MSOffice 14' 347 family_replacement: 'Outlook' 348 v1_replacement: '2010' 349 350 # Outlook 2013 351 - regex: 'Microsoft Outlook 15\.\d+\.\d+' 352 family_replacement: 'Outlook' 353 v1_replacement: '2013' 354 355 # Outlook 2016 356 - regex: 'Microsoft Outlook (?:Mail )?16\.\d+\.\d+' 357 family_replacement: 'Outlook' 358 v1_replacement: '2016' 359 360 # Windows Live Mail 361 - regex: 'Outlook-Express\/7\.0.*' 362 family_replacement: 'Windows Live Mail' 363 364 # Apple Air Mail 365 - regex: '(Airmail) (\d+)\.(\d+)(?:\.(\d+))?' 366 367 # Thunderbird 368 - regex: '(Thunderbird)/(\d+)\.(\d+)(?:\.(\d+(?:pre)?))?' 369 family_replacement: 'Thunderbird' 370 371 # Postbox 372 - regex: '(Postbox)/(\d+)\.(\d+)\.(\d+)' 373 family_replacement: 'Postbox' 374 375 # Barca 376 - regex: '(Barca(?:Pro)?)/(\d+)\.(\d+)(?:\.(\d+))?' 377 family_replacement: 'Barca' 378 379 # Lotus Notes 380 - regex: '(Lotus-Notes)/(\d+)\.(\d+)(?:\.(\d+))?' 381 family_replacement: 'Lotus Notes' 382 383 # Vivaldi uses "Vivaldi" 384 - regex: '(Vivaldi)/(\d+)\.(\d+)\.(\d+)' 385 386 # Edge/major_version.minor_version 387 - regex: '(Edge)/(\d+)(?:\.(\d+))?' 388 389 # Brave Browser https://brave.com/ 390 - regex: '(brave)/(\d+)\.(\d+)\.(\d+) Chrome' 391 family_replacement: 'Brave' 392 393 # Iron Browser ~since version 50 394 - regex: '(Chrome)/(\d+)\.(\d+)\.(\d+)[\d.]* Iron[^/]' 395 family_replacement: 'Iron' 396 397 # Dolphin Browser 398 # @ref: http://www.dolphin.com 399 - regex: '\b(Dolphin)(?: |HDCN/|/INT\-)(\d+)\.(\d+)\.?(\d+)?' 400 401 # Headless Chrome 402 # https://chromium.googlesource.com/chromium/src/+/lkgr/headless/README.md 403 # Currently only available on Linux 404 - regex: 'HeadlessChrome' 405 family_replacement: 'HeadlessChrome' 406 407 # Browser/major_version.minor_version 408 - regex: '(bingbot|Bolt|AdobeAIR|Jasmine|IceCat|Skyfire|Midori|Maxthon|Lynx|Arora|IBrowse|Dillo|Camino|Shiira|Fennec|Phoenix|Flock|Netscape|Lunascape|Epiphany|WebPilot|Opera Mini|Opera|NetFront|Netfront|Konqueror|Googlebot|SeaMonkey|Kazehakase|Vienna|Iceape|Iceweasel|IceWeasel|Iron|K-Meleon|Sleipnir|Galeon|GranParadiso|iCab|iTunes|MacAppStore|NetNewsWire|Space Bison|Stainless|Orca|Dolfin|BOLT|Minimo|Tizen Browser|Polaris|Abrowser|Planetweb|ICE Browser|mDolphin|qutebrowser|Otter|QupZilla|MailBar|kmail2|YahooMobileMail|ExchangeWebServices|ExchangeServicesClient|Dragon|Outlook-iOS-Android)/(\d+)\.(\d+)(?:\.(\d+))?' 409 410 # Chrome/Chromium/major_version.minor_version 411 - regex: '(Chromium|Chrome)/(\d+)\.(\d+)(?:\.(\d+))?' 412 413 ########## 414 # IE Mobile needs to happen before Android to catch cases such as: 415 # Mozilla/5.0 (Mobile; Windows Phone 8.1; Android 4.0; ARM; Trident/7.0; Touch; rv:11.0; IEMobile/11.0; NOKIA; Lumia 920)... 416 # Mozilla/5.0 (Mobile; Windows Phone 8.1; Android 4.0; ARM; Trident/7.0; Touch; rv:11.0; IEMobile/11.0; NOKIA; Lumia 920; ANZ821)... 417 # Mozilla/5.0 (Mobile; Windows Phone 8.1; Android 4.0; ARM; Trident/7.0; Touch; rv:11.0; IEMobile/11.0; NOKIA; Lumia 920; Orange)... 418 # Mozilla/5.0 (Mobile; Windows Phone 8.1; Android 4.0; ARM; Trident/7.0; Touch; rv:11.0; IEMobile/11.0; NOKIA; Lumia 920; Vodafone)... 419 ########## 420 421 # IE Mobile 422 - regex: '(IEMobile)[ /](\d+)\.(\d+)' 423 family_replacement: 'IE Mobile' 424 425 # Baca Berita App News Reader 426 - regex: '(BacaBerita App)\/(\d+)\.(\d+)\.(\d+)' 427 428 # Browser major_version.minor_version.beta_version (space instead of slash) 429 - regex: '(iRider|Crazy Browser|SkipStone|iCab|Lunascape|Sleipnir|Maemo Browser) (\d+)\.(\d+)\.(\d+)' 430 # Browser major_version.minor_version (space instead of slash) 431 - regex: '(iCab|Lunascape|Opera|Android|Jasmine|Polaris|Microsoft SkyDriveSync|The Bat!) (\d+)\.(\d+)\.?(\d+)?' 432 433 # Kindle WebKit 434 - regex: '(Kindle)/(\d+)\.(\d+)' 435 436 # weird android UAs 437 - regex: '(Android) Donut' 438 v1_replacement: '1' 439 v2_replacement: '2' 440 441 - regex: '(Android) Eclair' 442 v1_replacement: '2' 443 v2_replacement: '1' 444 445 - regex: '(Android) Froyo' 446 v1_replacement: '2' 447 v2_replacement: '2' 448 449 - regex: '(Android) Gingerbread' 450 v1_replacement: '2' 451 v2_replacement: '3' 452 453 - regex: '(Android) Honeycomb' 454 v1_replacement: '3' 455 456 # desktop mode 457 # http://www.anandtech.com/show/3982/windows-phone-7-review 458 - regex: '(MSIE) (\d+)\.(\d+).*XBLWP7' 459 family_replacement: 'IE Large Screen' 460 461 462 #### END MAIN CASES #### 463 464 #### SPECIAL CASES #### 465 - regex: '(Obigo)InternetBrowser' 466 - regex: '(Obigo)\-Browser' 467 - regex: '(Obigo|OBIGO)[^\d]*(\d+)(?:.(\d+))?' 468 family_replacement: 'Obigo' 469 470 - regex: '(MAXTHON|Maxthon) (\d+)\.(\d+)' 471 family_replacement: 'Maxthon' 472 - regex: '(Maxthon|MyIE2|Uzbl|Shiira)' 473 v1_replacement: '0' 474 475 - regex: '(BrowseX) \((\d+)\.(\d+)\.(\d+)' 476 477 - regex: '(NCSA_Mosaic)/(\d+)\.(\d+)' 478 family_replacement: 'NCSA Mosaic' 479 480 # Polaris/d.d is above 481 - regex: '(POLARIS)/(\d+)\.(\d+)' 482 family_replacement: 'Polaris' 483 - regex: '(Embider)/(\d+)\.(\d+)' 484 family_replacement: 'Polaris' 485 486 - regex: '(BonEcho)/(\d+)\.(\d+)\.?([ab]?\d+)?' 487 family_replacement: 'Bon Echo' 488 489 # @note: iOS / OSX Applications 490 - regex: '(iPod|iPhone|iPad).+Version/(\d+)\.(\d+)(?:\.(\d+))?.*[ +]Safari' 491 family_replacement: 'Mobile Safari' 492 - regex: '(iPod|iPhone|iPad).+Version/(\d+)\.(\d+)(?:\.(\d+))?' 493 family_replacement: 'Mobile Safari UI/WKWebView' 494 - regex: '(iPod|iPod touch|iPhone|iPad);.*CPU.*OS[ +](\d+)_(\d+)(?:_(\d+))?.*Mobile.*[ +]Safari' 495 family_replacement: 'Mobile Safari' 496 - regex: '(iPod|iPod touch|iPhone|iPad);.*CPU.*OS[ +](\d+)_(\d+)(?:_(\d+))?.*Mobile' 497 family_replacement: 'Mobile Safari UI/WKWebView' 498 - regex: '(iPod|iPhone|iPad).* Safari' 499 family_replacement: 'Mobile Safari' 500 - regex: '(iPod|iPhone|iPad)' 501 family_replacement: 'Mobile Safari UI/WKWebView' 502 503 - regex: '(AvantGo) (\d+).(\d+)' 504 505 - regex: '(OneBrowser)/(\d+).(\d+)' 506 family_replacement: 'ONE Browser' 507 508 - regex: '(Avant)' 509 v1_replacement: '1' 510 511 # This is the Tesla Model S (see similar entry in device parsers) 512 - regex: '(QtCarBrowser)' 513 v1_replacement: '1' 514 515 - regex: '^(iBrowser/Mini)(\d+).(\d+)' 516 family_replacement: 'iBrowser Mini' 517 - regex: '^(iBrowser|iRAPP)/(\d+).(\d+)' 518 519 # nokia browsers 520 # based on: http://www.developer.nokia.com/Community/Wiki/User-Agent_headers_for_Nokia_devices 521 - regex: '^(Nokia)' 522 family_replacement: 'Nokia Services (WAP) Browser' 523 - regex: '(NokiaBrowser)/(\d+)\.(\d+).(\d+)\.(\d+)' 524 family_replacement: 'Nokia Browser' 525 - regex: '(NokiaBrowser)/(\d+)\.(\d+).(\d+)' 526 family_replacement: 'Nokia Browser' 527 - regex: '(NokiaBrowser)/(\d+)\.(\d+)' 528 family_replacement: 'Nokia Browser' 529 - regex: '(BrowserNG)/(\d+)\.(\d+).(\d+)' 530 family_replacement: 'Nokia Browser' 531 - regex: '(Series60)/5\.0' 532 family_replacement: 'Nokia Browser' 533 v1_replacement: '7' 534 v2_replacement: '0' 535 - regex: '(Series60)/(\d+)\.(\d+)' 536 family_replacement: 'Nokia OSS Browser' 537 - regex: '(S40OviBrowser)/(\d+)\.(\d+)\.(\d+)\.(\d+)' 538 family_replacement: 'Ovi Browser' 539 - regex: '(Nokia)[EN]?(\d+)' 540 541 # BlackBerry devices 542 - regex: '(PlayBook).+RIM Tablet OS (\d+)\.(\d+)\.(\d+)' 543 family_replacement: 'BlackBerry WebKit' 544 - regex: '(Black[bB]erry|BB10).+Version/(\d+)\.(\d+)\.(\d+)' 545 family_replacement: 'BlackBerry WebKit' 546 - regex: '(Black[bB]erry)\s?(\d+)' 547 family_replacement: 'BlackBerry' 548 549 - regex: '(OmniWeb)/v(\d+)\.(\d+)' 550 551 - regex: '(Blazer)/(\d+)\.(\d+)' 552 family_replacement: 'Palm Blazer' 553 554 - regex: '(Pre)/(\d+)\.(\d+)' 555 family_replacement: 'Palm Pre' 556 557 # fork of Links 558 - regex: '(ELinks)/(\d+)\.(\d+)' 559 - regex: '(ELinks) \((\d+)\.(\d+)' 560 - regex: '(Links) \((\d+)\.(\d+)' 561 562 - regex: '(QtWeb) Internet Browser/(\d+)\.(\d+)' 563 564 #- regex: '\(iPad;.+(Version)/(\d+)\.(\d+)(?:\.(\d+))?.*Safari/' 565 # family_replacement: 'iPad' 566 567 # Phantomjs, should go before Safari 568 - regex: '(PhantomJS)/(\d+)\.(\d+)\.(\d+)' 569 570 # WebKit Nightly 571 - regex: '(AppleWebKit)/(\d+)\.?(\d+)?\+ .* Safari' 572 family_replacement: 'WebKit Nightly' 573 574 # Safari 575 - regex: '(Version)/(\d+)\.(\d+)(?:\.(\d+))?.*Safari/' 576 family_replacement: 'Safari' 577 # Safari didn't provide "Version/d.d.d" prior to 3.0 578 - regex: '(Safari)/\d+' 579 580 - regex: '(OLPC)/Update(\d+)\.(\d+)' 581 582 - regex: '(OLPC)/Update()\.(\d+)' 583 v1_replacement: '0' 584 585 - regex: '(SEMC\-Browser)/(\d+)\.(\d+)' 586 587 - regex: '(Teleca)' 588 family_replacement: 'Teleca Browser' 589 590 - regex: '(Phantom)/V(\d+)\.(\d+)' 591 family_replacement: 'Phantom Browser' 592 593 - regex: 'Trident(.*)rv.(\d+)\.(\d+)' 594 family_replacement: 'IE' 595 596 # Espial 597 - regex: '(Espial)/(\d+)(?:\.(\d+))?(?:\.(\d+))?' 598 599 # Apple Mail 600 601 # apple mail - not directly detectable, have it after Safari stuff 602 - regex: '(AppleWebKit)/(\d+)\.(\d+)\.(\d+)' 603 family_replacement: 'Apple Mail' 604 605 # AFTER THE EDGE CASES ABOVE! 606 # AFTER IE11 607 # BEFORE all other IE 608 - regex: '(Firefox)/(\d+)\.(\d+)\.(\d+)' 609 - regex: '(Firefox)/(\d+)\.(\d+)(pre|[ab]\d+[a-z]*)?' 610 611 - regex: '([MS]?IE) (\d+)\.(\d+)' 612 family_replacement: 'IE' 613 614 - regex: '(python-requests)/(\d+)\.(\d+)' 615 family_replacement: 'Python Requests' 616 617 # headless user-agents 618 - regex: '\b(Windows-Update-Agent|Microsoft-CryptoAPI|SophosUpdateManager|SophosAgent|Debian APT-HTTP|Ubuntu APT-HTTP|libcurl-agent|libwww-perl|urlgrabber|curl|Wget|OpenBSD ftp|jupdate)(?:[ /](\d+)(?:\.(\d+)(?:\.(\d+))?)?)?' 619 620 - regex: '(Java)[/ ]{0,1}\d+\.(\d+)\.(\d+)[_-]*([a-zA-Z0-9]+)*' 621 622 # Roku Digital-Video-Players https://www.roku.com/ 623 - regex: '^(Roku)/DVP-(\d+)\.(\d+)' 624 625 # Kurio App News Reader https://kurio.co.id/ 626 - regex: '(Kurio)\/(\d+)\.(\d+)\.(\d+)' 627 family_replacement: 'Kurio App' 628 629 630 os_parsers: 631 ########## 632 # HbbTV vendors 633 ########## 634 635 # starts with the easy one : Panasonic seems consistent across years, hope it will continue 636 #HbbTV/1.1.1 (;Panasonic;VIERA 2011;f.532;0071-0802 2000-0000;) 637 #HbbTV/1.1.1 (;Panasonic;VIERA 2012;1.261;0071-3103 2000-0000;) 638 #HbbTV/1.2.1 (;Panasonic;VIERA 2013;3.672;4101-0003 0002-0000;) 639 #- regex: 'HbbTV/\d+\.\d+\.\d+ \(;(Panasonic);VIERA ([0-9]{4});' 640 641 # Sony is consistent too but do not place year like the other 642 # Opera/9.80 (Linux armv7l; HbbTV/1.1.1 (; Sony; KDL32W650A; PKG3.211EUA; 2013;); ) Presto/2.12.362 Version/12.11 643 # Opera/9.80 (Linux mips; U; HbbTV/1.1.1 (; Sony; KDL40HX751; PKG1.902EUA; 2012;);; en) Presto/2.10.250 Version/11.60 644 # Opera/9.80 (Linux mips; U; HbbTV/1.1.1 (; Sony; KDL22EX320; PKG4.017EUA; 2011;);; en) Presto/2.7.61 Version/11.00 645 #- regex: 'HbbTV/\d+\.\d+\.\d+ \(; (Sony);.*;.*; ([0-9]{4});\)' 646 647 648 # LG is consistent too, but we need to add manually the year model 649 #Mozilla/5.0 (Unknown; Linux armv7l) AppleWebKit/537.1+ (KHTML, like Gecko) Safari/537.1+ HbbTV/1.1.1 ( ;LGE ;NetCast 4.0 ;03.20.30 ;1.0M ;) 650 #Mozilla/5.0 (DirectFB; Linux armv7l) AppleWebKit/534.26+ (KHTML, like Gecko) Version/5.0 Safari/534.26+ HbbTV/1.1.1 ( ;LGE ;NetCast 3.0 ;1.0 ;1.0M ;) 651 - regex: 'HbbTV/\d+\.\d+\.\d+ \( ;(LG)E ;NetCast 4.0' 652 os_v1_replacement: '2013' 653 - regex: 'HbbTV/\d+\.\d+\.\d+ \( ;(LG)E ;NetCast 3.0' 654 os_v1_replacement: '2012' 655 656 # Samsung is on its way of normalizing their user-agent 657 # HbbTV/1.1.1 (;Samsung;SmartTV2013;T-FXPDEUC-1102.2;;) WebKit 658 # HbbTV/1.1.1 (;Samsung;SmartTV2013;T-MST12DEUC-1102.1;;) WebKit 659 # HbbTV/1.1.1 (;Samsung;SmartTV2012;;;) WebKit 660 # HbbTV/1.1.1 (;;;;;) Maple_2011 661 - regex: 'HbbTV/1.1.1 \(;;;;;\) Maple_2011' 662 os_replacement: 'Samsung' 663 os_v1_replacement: '2011' 664 # manage the two models of 2013 665 - regex: 'HbbTV/\d+\.\d+\.\d+ \(;(Samsung);SmartTV([0-9]{4});.*FXPDEUC' 666 os_v2_replacement: 'UE40F7000' 667 - regex: 'HbbTV/\d+\.\d+\.\d+ \(;(Samsung);SmartTV([0-9]{4});.*MST12DEUC' 668 os_v2_replacement: 'UE32F4500' 669 # generic Samsung (works starting in 2012) 670 #- regex: 'HbbTV/\d+\.\d+\.\d+ \(;(Samsung);SmartTV([0-9]{4});' 671 672 # Philips : not found any other way than a manual mapping 673 # Opera/9.80 (Linux mips; U; HbbTV/1.1.1 (; Philips; ; ; ; ) CE-HTML/1.0 NETTV/4.1.3 PHILIPSTV/1.1.1; en) Presto/2.10.250 Version/11.60 674 # Opera/9.80 (Linux mips ; U; HbbTV/1.1.1 (; Philips; ; ; ; ) CE-HTML/1.0 NETTV/3.2.1; en) Presto/2.6.33 Version/10.70 675 - regex: 'HbbTV/1.1.1 \(; (Philips);.*NETTV/4' 676 os_v1_replacement: '2013' 677 - regex: 'HbbTV/1.1.1 \(; (Philips);.*NETTV/3' 678 os_v1_replacement: '2012' 679 - regex: 'HbbTV/1.1.1 \(; (Philips);.*NETTV/2' 680 os_v1_replacement: '2011' 681 682 # the HbbTV emulator developers use HbbTV/1.1.1 (;;;;;) firetv-firefox-plugin 1.1.20 683 - regex: 'HbbTV/\d+\.\d+\.\d+.*(firetv)-firefox-plugin (\d+).(\d+).(\d+)' 684 os_replacement: 'FireHbbTV' 685 686 # generic HbbTV, hoping to catch manufacturer name (always after 2nd comma) and the first string that looks like a 2011-2019 year 687 - regex: 'HbbTV/\d+\.\d+\.\d+ \(.*; ?([a-zA-Z]+) ?;.*(201[1-9]).*\)' 688 689 ########## 690 # @note: Windows Phone needs to come before Windows NT 6.1 *and* before Android to catch cases such as: 691 # Mozilla/5.0 (Mobile; Windows Phone 8.1; Android 4.0; ARM; Trident/7.0; Touch; rv:11.0; IEMobile/11.0; NOKIA; Lumia 920)... 692 # Mozilla/5.0 (Mobile; Windows Phone 8.1; Android 4.0; ARM; Trident/7.0; Touch; rv:11.0; IEMobile/11.0; NOKIA; Lumia 920; ANZ821)... 693 # Mozilla/5.0 (Mobile; Windows Phone 8.1; Android 4.0; ARM; Trident/7.0; Touch; rv:11.0; IEMobile/11.0; NOKIA; Lumia 920; Orange)... 694 # Mozilla/5.0 (Mobile; Windows Phone 8.1; Android 4.0; ARM; Trident/7.0; Touch; rv:11.0; IEMobile/11.0; NOKIA; Lumia 920; Vodafone)... 695 ########## 696 697 - regex: '(Windows Phone) (?:OS[ /])?(\d+)\.(\d+)' 698 699 # Again a MS-special one: iPhone.*Outlook-iOS-Android/x.x is erroneously detected as Android 700 - regex: '(CPU[ +]OS|iPhone[ +]OS|CPU[ +]iPhone)[ +]+(\d+)[_\.](\d+)(?:[_\.](\d+))?.*Outlook-iOS-Android' 701 os_replacement: 'iOS' 702 703 ########## 704 # Android 705 # can actually detect rooted android os. do we care? 706 ########## 707 - regex: '(Android)[ \-/](\d+)\.(\d+)(?:[.\-]([a-z0-9]+))?' 708 709 - regex: '(Android) Donut' 710 os_v1_replacement: '1' 711 os_v2_replacement: '2' 712 713 - regex: '(Android) Eclair' 714 os_v1_replacement: '2' 715 os_v2_replacement: '1' 716 717 - regex: '(Android) Froyo' 718 os_v1_replacement: '2' 719 os_v2_replacement: '2' 720 721 - regex: '(Android) Gingerbread' 722 os_v1_replacement: '2' 723 os_v2_replacement: '3' 724 725 - regex: '(Android) Honeycomb' 726 os_v1_replacement: '3' 727 728 # UCWEB 729 - regex: '^UCWEB.*; (Adr) (\d+)\.(\d+)(?:[.\-]([a-z0-9]+))?;' 730 os_replacement: 'Android' 731 - regex: '^UCWEB.*; (iPad|iPh|iPd) OS (\d+)_(\d+)(?:_(\d+))?;' 732 os_replacement: 'iOS' 733 - regex: '^UCWEB.*; (wds) (\d+)\.(\d+)(?:\.(\d+))?;' 734 os_replacement: 'Windows Phone' 735 # JUC 736 - regex: '^(JUC).*; ?U; ?(?:Android)?(\d+)\.(\d+)(?:[\.\-]([a-z0-9]+))?' 737 os_replacement: 'Android' 738 739 ########## 740 # Kindle Android 741 ########## 742 - regex: '(Silk-Accelerated=[a-z]{4,5})' 743 os_replacement: 'Android' 744 745 ########## 746 # Windows 747 # http://en.wikipedia.org/wiki/Windows_NT#Releases 748 # possibility of false positive when different marketing names share same NT kernel 749 # e.g. windows server 2003 and windows xp 750 # lots of ua strings have Windows NT 4.1 !?!?!?!? !?!? !? !????!?! !!! ??? !?!?! ? 751 # (very) roughly ordered in terms of frequency of occurrence of regex (win xp currently most frequent, etc) 752 ########## 753 754 # ie mobile desktop mode 755 # spoofs nt 6.1. must come before windows 7 756 - regex: '(XBLWP7)' 757 os_replacement: 'Windows Phone' 758 759 # @note: This needs to come before Windows NT 6.1 760 - regex: '(Windows ?Mobile)' 761 os_replacement: 'Windows Mobile' 762 763 - regex: '(Windows (?:NT 5\.2|NT 5\.1))' 764 os_replacement: 'Windows XP' 765 766 - regex: '(Windows NT 6\.1)' 767 os_replacement: 'Windows 7' 768 769 - regex: '(Windows NT 6\.0)' 770 os_replacement: 'Windows Vista' 771 772 - regex: '(Win 9x 4\.90)' 773 os_replacement: 'Windows ME' 774 775 - regex: '(Windows 98|Windows XP|Windows ME|Windows 95|Windows CE|Windows 7|Windows NT 4\.0|Windows Vista|Windows 2000|Windows 3.1)' 776 777 - regex: '(Windows NT 6\.2; ARM;)' 778 os_replacement: 'Windows RT' 779 - regex: '(Windows NT 6\.2)' 780 os_replacement: 'Windows 8' 781 782 - regex: '(Windows NT 6\.3; ARM;)' 783 os_replacement: 'Windows RT 8.1' 784 - regex: '(Windows NT 6\.3)' 785 os_replacement: 'Windows 8.1' 786 787 - regex: '(Windows NT 6\.4)' 788 os_replacement: 'Windows 10' 789 - regex: '(Windows NT 10\.0)' 790 os_replacement: 'Windows 10' 791 792 - regex: '(Windows NT 5\.0)' 793 os_replacement: 'Windows 2000' 794 795 - regex: '(WinNT4.0)' 796 os_replacement: 'Windows NT 4.0' 797 798 - regex: '(Windows ?CE)' 799 os_replacement: 'Windows CE' 800 801 - regex: 'Win ?(95|98|3.1|NT|ME|2000)' 802 os_replacement: 'Windows $1' 803 804 - regex: 'Win16' 805 os_replacement: 'Windows 3.1' 806 807 - regex: 'Win32' 808 os_replacement: 'Windows 95' 809 810 ########## 811 # Tizen OS from Samsung 812 # spoofs Android so pushing it above 813 ########## 814 - regex: '(Tizen)[/ ](\d+)\.(\d+)' 815 816 ########## 817 # Mac OS 818 # @ref: http://en.wikipedia.org/wiki/Mac_OS_X#Versions 819 # @ref: http://www.puredarwin.org/curious/versions 820 ########## 821 - regex: '((?:Mac[ +]?|; )OS[ +]X)[\s+/](?:(\d+)[_.](\d+)(?:[_.](\d+))?|Mach-O)' 822 os_replacement: 'Mac OS X' 823 # Leopard 824 - regex: ' (Dar)(win)/(9).(\d+).*\((?:i386|x86_64|Power Macintosh)\)' 825 os_replacement: 'Mac OS X' 826 os_v1_replacement: '10' 827 os_v2_replacement: '5' 828 # Snow Leopard 829 - regex: ' (Dar)(win)/(10).(\d+).*\((?:i386|x86_64)\)' 830 os_replacement: 'Mac OS X' 831 os_v1_replacement: '10' 832 os_v2_replacement: '6' 833 # Lion 834 - regex: ' (Dar)(win)/(11).(\d+).*\((?:i386|x86_64)\)' 835 os_replacement: 'Mac OS X' 836 os_v1_replacement: '10' 837 os_v2_replacement: '7' 838 # Mountain Lion 839 - regex: ' (Dar)(win)/(12).(\d+).*\((?:i386|x86_64)\)' 840 os_replacement: 'Mac OS X' 841 os_v1_replacement: '10' 842 os_v2_replacement: '8' 843 # Mavericks 844 - regex: ' (Dar)(win)/(13).(\d+).*\((?:i386|x86_64)\)' 845 os_replacement: 'Mac OS X' 846 os_v1_replacement: '10' 847 os_v2_replacement: '9' 848 # Yosemite is Darwin/14.x but patch versions are inconsistent in the Darwin string; 849 # more accurately covered by CFNetwork regexes downstream 850 851 # IE on Mac doesn't specify version number 852 - regex: 'Mac_PowerPC' 853 os_replacement: 'Mac OS' 854 855 # builds before tiger don't seem to specify version? 856 857 # ios devices spoof (mac os x), so including intel/ppc prefixes 858 - regex: '(?:PPC|Intel) (Mac OS X)' 859 860 ########## 861 # iOS 862 # http://en.wikipedia.org/wiki/IOS_version_history 863 ########## 864 # keep this above generic iOS, since AppleTV UAs contain 'CPU OS' 865 - regex: '(Apple\s?TV)(?:/(\d+)\.(\d+))?' 866 os_replacement: 'ATV OS X' 867 868 - regex: '(CPU[ +]OS|iPhone[ +]OS|CPU[ +]iPhone|CPU IPhone OS)[ +]+(\d+)[_\.](\d+)(?:[_\.](\d+))?' 869 os_replacement: 'iOS' 870 871 # remaining cases are mostly only opera uas, so catch opera as to not catch iphone spoofs 872 - regex: '(iPhone|iPad|iPod); Opera' 873 os_replacement: 'iOS' 874 875 # few more stragglers 876 - regex: '(iPhone|iPad|iPod).*Mac OS X.*Version/(\d+)\.(\d+)' 877 os_replacement: 'iOS' 878 879 # CFNetwork/Darwin - The specific CFNetwork or Darwin version determines 880 # whether the os maps to Mac OS, or iOS, or just Darwin. 881 # See: http://user-agents.me/cfnetwork-version-list 882 - regex: '(CFNetwork)/(5)48\.0\.3.* Darwin/11\.0\.0' 883 os_replacement: 'iOS' 884 - regex: '(CFNetwork)/(5)48\.(0)\.4.* Darwin/(1)1\.0\.0' 885 os_replacement: 'iOS' 886 - regex: '(CFNetwork)/(5)48\.(1)\.4' 887 os_replacement: 'iOS' 888 - regex: '(CFNetwork)/(4)85\.1(3)\.9' 889 os_replacement: 'iOS' 890 - regex: '(CFNetwork)/(6)09\.(1)\.4' 891 os_replacement: 'iOS' 892 - regex: '(CFNetwork)/(6)(0)9' 893 os_replacement: 'iOS' 894 - regex: '(CFNetwork)/6(7)2\.(1)\.13' 895 os_replacement: 'iOS' 896 - regex: '(CFNetwork)/6(7)2\.(1)\.(1)4' 897 os_replacement: 'iOS' 898 - regex: '(CF)(Network)/6(7)(2)\.1\.15' 899 os_replacement: 'iOS' 900 os_v1_replacement: '7' 901 os_v2_replacement: '1' 902 - regex: '(CFNetwork)/6(7)2\.(0)\.(?:2|8)' 903 os_replacement: 'iOS' 904 - regex: '(CFNetwork)/709\.1' 905 os_replacement: 'iOS' 906 os_v1_replacement: '8' 907 os_v2_replacement: '0.b5' 908 - regex: '(CF)(Network)/711\.(\d)' 909 os_replacement: 'iOS' 910 os_v1_replacement: '8' 911 - regex: '(CF)(Network)/(720)\.(\d)' 912 os_replacement: 'Mac OS X' 913 os_v1_replacement: '10' 914 os_v2_replacement: '10' 915 - regex: '(CF)(Network)/(760)\.(\d)' 916 os_replacement: 'Mac OS X' 917 os_v1_replacement: '10' 918 os_v2_replacement: '11' 919 - regex: '(CF)(Network)/758\.(\d)' 920 os_replacement: 'iOS' 921 os_v1_replacement: '9' 922 - regex: '(CF)(Network)/808\.(\d)' 923 os_replacement: 'iOS' 924 os_v1_replacement: '10' 925 926 ########## 927 # CFNetwork macOS Apps (must be before CFNetwork iOS Apps 928 # @ref: https://en.wikipedia.org/wiki/Darwin_(operating_system)#Release_history 929 ########## 930 - regex: 'CFNetwork/.* Darwin/16\.\d+.*\(x86_64\)' 931 os_replacement: 'Mac OS X' 932 os_v1_replacement: '10' 933 os_v2_replacement: '12' 934 - regex: 'CFNetwork/8.* Darwin/15\.\d+.*\(x86_64\)' 935 os_replacement: 'Mac OS X' 936 os_v1_replacement: '10' 937 os_v2_replacement: '11' 938 ########## 939 # CFNetwork iOS Apps 940 # @ref: https://en.wikipedia.org/wiki/Darwin_(operating_system)#Release_history 941 ########## 942 - regex: 'CFNetwork/.* Darwin/(9)\.\d+' 943 os_replacement: 'iOS' 944 os_v1_replacement: '1' 945 - regex: 'CFNetwork/.* Darwin/(10)\.\d+' 946 os_replacement: 'iOS' 947 os_v1_replacement: '4' 948 - regex: 'CFNetwork/.* Darwin/(11)\.\d+' 949 os_replacement: 'iOS' 950 os_v1_replacement: '5' 951 - regex: 'CFNetwork/.* Darwin/(13)\.\d+' 952 os_replacement: 'iOS' 953 os_v1_replacement: '6' 954 - regex: 'CFNetwork/6.* Darwin/(14)\.\d+' 955 os_replacement: 'iOS' 956 os_v1_replacement: '7' 957 - regex: 'CFNetwork/7.* Darwin/(14)\.\d+' 958 os_replacement: 'iOS' 959 os_v1_replacement: '8' 960 os_v2_replacement: '0' 961 - regex: 'CFNetwork/7.* Darwin/(15)\.\d+' 962 os_replacement: 'iOS' 963 os_v1_replacement: '9' 964 os_v2_replacement: '0' 965 - regex: 'CFNetwork/8.* Darwin/(16)\.\d+' 966 os_replacement: 'iOS' 967 os_v1_replacement: '10' 968 # iOS Apps 969 - regex: '\b(iOS[ /]|iOS; |iPhone(?:/| v|[ _]OS[/,]|; | OS : |\d,\d/|\d,\d; )|iPad/)(\d{1,2})[_\.](\d{1,2})(?:[_\.](\d+))?' 970 os_replacement: 'iOS' 971 - regex: '\((iOS);' 972 973 ########## 974 # Apple TV 975 ########## 976 - regex: '(tvOS)/(\d+).(\d+)' 977 os_replacement: 'tvOS' 978 979 ########## 980 # Chrome OS 981 # if version 0.0.0, probably this stuff: 982 # http://code.google.com/p/chromium-os/issues/detail?id=11573 983 # http://code.google.com/p/chromium-os/issues/detail?id=13790 984 ########## 985 - regex: '(CrOS) [a-z0-9_]+ (\d+)\.(\d+)(?:\.(\d+))?' 986 os_replacement: 'Chrome OS' 987 988 ########## 989 # Linux distros 990 ########## 991 - regex: '([Dd]ebian)' 992 os_replacement: 'Debian' 993 - regex: '(Linux Mint)(?:/(\d+))?' 994 - regex: '(Mandriva)(?: Linux)?/(?:[\d.-]+m[a-z]{2}(\d+).(\d))?' 995 996 ########## 997 # Symbian + Symbian OS 998 # http://en.wikipedia.org/wiki/History_of_Symbian 999 ########## 1000 - regex: '(Symbian[Oo][Ss])[/ ](\d+)\.(\d+)' 1001 os_replacement: 'Symbian OS' 1002 - regex: '(Symbian/3).+NokiaBrowser/7\.3' 1003 os_replacement: 'Symbian^3 Anna' 1004 - regex: '(Symbian/3).+NokiaBrowser/7\.4' 1005 os_replacement: 'Symbian^3 Belle' 1006 - regex: '(Symbian/3)' 1007 os_replacement: 'Symbian^3' 1008 - regex: '\b(Series 60|SymbOS|S60Version|S60V\d|S60\b)' 1009 os_replacement: 'Symbian OS' 1010 - regex: '(MeeGo)' 1011 - regex: 'Symbian [Oo][Ss]' 1012 os_replacement: 'Symbian OS' 1013 - regex: 'Series40;' 1014 os_replacement: 'Nokia Series 40' 1015 - regex: 'Series30Plus;' 1016 os_replacement: 'Nokia Series 30 Plus' 1017 1018 ########## 1019 # BlackBerry devices 1020 ########## 1021 - regex: '(BB10);.+Version/(\d+)\.(\d+)\.(\d+)' 1022 os_replacement: 'BlackBerry OS' 1023 - regex: '(Black[Bb]erry)[0-9a-z]+/(\d+)\.(\d+)\.(\d+)(?:\.(\d+))?' 1024 os_replacement: 'BlackBerry OS' 1025 - regex: '(Black[Bb]erry).+Version/(\d+)\.(\d+)\.(\d+)(?:\.(\d+))?' 1026 os_replacement: 'BlackBerry OS' 1027 - regex: '(RIM Tablet OS) (\d+)\.(\d+)\.(\d+)' 1028 os_replacement: 'BlackBerry Tablet OS' 1029 - regex: '(Play[Bb]ook)' 1030 os_replacement: 'BlackBerry Tablet OS' 1031 - regex: '(Black[Bb]erry)' 1032 os_replacement: 'BlackBerry OS' 1033 1034 ########## 1035 # Firefox OS 1036 ########## 1037 - regex: '\((?:Mobile|Tablet);.+Gecko/18.0 Firefox/\d+\.\d+' 1038 os_replacement: 'Firefox OS' 1039 os_v1_replacement: '1' 1040 os_v2_replacement: '0' 1041 os_v3_replacement: '1' 1042 1043 - regex: '\((?:Mobile|Tablet);.+Gecko/18.1 Firefox/\d+\.\d+' 1044 os_replacement: 'Firefox OS' 1045 os_v1_replacement: '1' 1046 os_v2_replacement: '1' 1047 1048 - regex: '\((?:Mobile|Tablet);.+Gecko/26.0 Firefox/\d+\.\d+' 1049 os_replacement: 'Firefox OS' 1050 os_v1_replacement: '1' 1051 os_v2_replacement: '2' 1052 1053 - regex: '\((?:Mobile|Tablet);.+Gecko/28.0 Firefox/\d+\.\d+' 1054 os_replacement: 'Firefox OS' 1055 os_v1_replacement: '1' 1056 os_v2_replacement: '3' 1057 1058 - regex: '\((?:Mobile|Tablet);.+Gecko/30.0 Firefox/\d+\.\d+' 1059 os_replacement: 'Firefox OS' 1060 os_v1_replacement: '1' 1061 os_v2_replacement: '4' 1062 1063 - regex: '\((?:Mobile|Tablet);.+Gecko/32.0 Firefox/\d+\.\d+' 1064 os_replacement: 'Firefox OS' 1065 os_v1_replacement: '2' 1066 os_v2_replacement: '0' 1067 1068 - regex: '\((?:Mobile|Tablet);.+Gecko/34.0 Firefox/\d+\.\d+' 1069 os_replacement: 'Firefox OS' 1070 os_v1_replacement: '2' 1071 os_v2_replacement: '1' 1072 1073 # Firefox OS Generic 1074 - regex: '\((?:Mobile|Tablet);.+Firefox/\d+\.\d+' 1075 os_replacement: 'Firefox OS' 1076 1077 1078 ########## 1079 # BREW 1080 # yes, Brew is lower-cased for Brew MP 1081 ########## 1082 - regex: '(BREW)[ /](\d+)\.(\d+)\.(\d+)' 1083 - regex: '(BREW);' 1084 - regex: '(Brew MP|BMP)[ /](\d+)\.(\d+)\.(\d+)' 1085 os_replacement: 'Brew MP' 1086 - regex: 'BMP;' 1087 os_replacement: 'Brew MP' 1088 1089 ########## 1090 # Google TV 1091 ########## 1092 - regex: '(GoogleTV)(?: (\d+)\.(\d+)(?:\.(\d+))?|/[\da-z]+)' 1093 1094 - regex: '(WebTV)/(\d+).(\d+)' 1095 1096 ########## 1097 # Chromecast 1098 ########## 1099 - regex: '(CrKey)(?:[/](\d+)\.(\d+)(?:\.(\d+))?)?' 1100 os_replacement: 'Chromecast' 1101 1102 ########## 1103 # Misc mobile 1104 ########## 1105 - regex: '(hpw|web)OS/(\d+)\.(\d+)(?:\.(\d+))?' 1106 os_replacement: 'webOS' 1107 - regex: '(VRE);' 1108 1109 ########## 1110 # Generic patterns 1111 # since the majority of os cases are very specific, these go last 1112 ########## 1113 - regex: '(Fedora|Red Hat|PCLinuxOS|Puppy|Ubuntu|Kindle|Bada|Lubuntu|BackTrack|Slackware|(?:Free|Open|Net|\b)BSD)[/ ](\d+)\.(\d+)(?:\.(\d+)(?:\.(\d+))?)?' 1114 1115 # Gentoo Linux + Kernel Version 1116 - regex: '(Linux)[ /](\d+)\.(\d+)(?:\.(\d+))?.*gentoo' 1117 os_replacement: 'Gentoo' 1118 1119 # Opera Mini Bada 1120 - regex: '\((Bada);' 1121 1122 # just os 1123 - regex: '(Windows|Android|WeTab|Maemo|Web0S)' 1124 - regex: '(Ubuntu|Kubuntu|Arch Linux|CentOS|Slackware|Gentoo|openSUSE|SUSE|Red Hat|Fedora|PCLinuxOS|Mageia|(?:Free|Open|Net|\b)BSD)' 1125 # Linux + Kernel Version 1126 - regex: '(Linux)(?:[ /](\d+)\.(\d+)(?:\.(\d+))?)?' 1127 - regex: 'SunOS' 1128 os_replacement: 'Solaris' 1129 1130 # Roku Digital-Video-Players https://www.roku.com/ 1131 - regex: '^(Roku)/DVP-(\d+)\.(\d+)' 1132 1133 device_parsers: 1134 1135 ######### 1136 # Mobile Spiders 1137 # Catch the mobile crawler before checking for iPhones / Androids. 1138 ######### 1139 - regex: '(?:(?:iPhone|Windows CE|Windows Phone|Android).*(?:(?:Bot|Yeti)-Mobile|YRSpider|BingPreview|bots?/\d|(?:bot|spider)\.html)|AdsBot-Google-Mobile.*iPhone)' 1140 regex_flag: 'i' 1141 device_replacement: 'Spider' 1142 brand_replacement: 'Spider' 1143 model_replacement: 'Smartphone' 1144 - regex: '(?:DoCoMo|\bMOT\b|\bLG\b|Nokia|Samsung|SonyEricsson).*(?:(?:Bot|Yeti)-Mobile|bots?/\d|(?:bot|crawler)\.html|(?:jump|google|Wukong)bot|ichiro/mobile|/spider|YahooSeeker)' 1145 regex_flag: 'i' 1146 device_replacement: 'Spider' 1147 brand_replacement: 'Spider' 1148 model_replacement: 'Feature Phone' 1149 1150 ######### 1151 # WebBrowser for SmartWatch 1152 # @ref: https://play.google.com/store/apps/details?id=se.vaggan.webbrowser&hl=en 1153 ######### 1154 - regex: '\bSmartWatch *\( *([^;]+) *; *([^;]+) *;' 1155 device_replacement: '$1 $2' 1156 brand_replacement: '$1' 1157 model_replacement: '$2' 1158 1159 ###################################################################### 1160 # Android parsers 1161 # 1162 # @ref: https://support.google.com/googleplay/answer/1727131?hl=en 1163 ###################################################################### 1164 1165 # Android Application 1166 - regex: 'Android Application[^\-]+ - (Sony) ?(Ericsson)? (.+) \w+ - ' 1167 device_replacement: '$1 $2' 1168 brand_replacement: '$1$2' 1169 model_replacement: '$3' 1170 - regex: 'Android Application[^\-]+ - (?:HTC|HUAWEI|LGE|LENOVO|MEDION|TCT) (HTC|HUAWEI|LG|LENOVO|MEDION|ALCATEL)[ _\-](.+) \w+ - ' 1171 regex_flag: 'i' 1172 device_replacement: '$1 $2' 1173 brand_replacement: '$1' 1174 model_replacement: '$2' 1175 - regex: 'Android Application[^\-]+ - ([^ ]+) (.+) \w+ - ' 1176 device_replacement: '$1 $2' 1177 brand_replacement: '$1' 1178 model_replacement: '$2' 1179 1180 ######### 1181 # 3Q 1182 # @ref: http://www.3q-int.com/ 1183 ######### 1184 - regex: '; *([BLRQ]C\d{4}[A-Z]+) +Build/' 1185 device_replacement: '3Q $1' 1186 brand_replacement: '3Q' 1187 model_replacement: '$1' 1188 - regex: '; *(?:3Q_)([^;/]+) +Build' 1189 device_replacement: '3Q $1' 1190 brand_replacement: '3Q' 1191 model_replacement: '$1' 1192 1193 ######### 1194 # Acer 1195 # @ref: http://us.acer.com/ac/en/US/content/group/tablets 1196 ######### 1197 - regex: 'Android [34].*; *(A100|A101|A110|A200|A210|A211|A500|A501|A510|A511|A700(?: Lite| 3G)?|A701|B1-A71|A1-\d{3}|B1-\d{3}|V360|V370|W500|W500P|W501|W501P|W510|W511|W700|Slider SL101|DA22[^;/]+) Build' 1198 device_replacement: '$1' 1199 brand_replacement: 'Acer' 1200 model_replacement: '$1' 1201 - regex: '; *Acer Iconia Tab ([^;/]+) Build' 1202 device_replacement: '$1' 1203 brand_replacement: 'Acer' 1204 model_replacement: '$1' 1205 - regex: '; *(Z1[1235]0|E320[^/]*|S500|S510|Liquid[^;/]*|Iconia A\d+) Build' 1206 device_replacement: '$1' 1207 brand_replacement: 'Acer' 1208 model_replacement: '$1' 1209 - regex: '; *(Acer |ACER )([^;/]+) Build' 1210 device_replacement: '$1$2' 1211 brand_replacement: 'Acer' 1212 model_replacement: '$2' 1213 1214 ######### 1215 # Advent 1216 # @ref: https://en.wikipedia.org/wiki/Advent_Vega 1217 # @note: VegaBean and VegaComb (names derived from jellybean, honeycomb) are 1218 # custom ROM builds for Vega 1219 ######### 1220 - regex: '; *(Advent )?(Vega(?:Bean|Comb)?).* Build' 1221 device_replacement: '$1$2' 1222 brand_replacement: 'Advent' 1223 model_replacement: '$2' 1224 1225 ######### 1226 # Ainol 1227 # @ref: http://www.ainol.com/plugin.php?identifier=ainol&module=product 1228 ######### 1229 - regex: '; *(Ainol )?((?:NOVO|[Nn]ovo)[^;/]+) Build' 1230 device_replacement: '$1$2' 1231 brand_replacement: 'Ainol' 1232 model_replacement: '$2' 1233 1234 ######### 1235 # Airis 1236 # @ref: http://airis.es/Tienda/Default.aspx?idG=001 1237 ######### 1238 - regex: '; *AIRIS[ _\-]?([^/;\)]+) *(?:;|\)|Build)' 1239 regex_flag: 'i' 1240 device_replacement: '$1' 1241 brand_replacement: 'Airis' 1242 model_replacement: '$1' 1243 - regex: '; *(OnePAD[^;/]+) Build' 1244 regex_flag: 'i' 1245 device_replacement: '$1' 1246 brand_replacement: 'Airis' 1247 model_replacement: '$1' 1248 1249 ######### 1250 # Airpad 1251 # @ref: ?? 1252 ######### 1253 - regex: '; *Airpad[ \-]([^;/]+) Build' 1254 device_replacement: 'Airpad $1' 1255 brand_replacement: 'Airpad' 1256 model_replacement: '$1' 1257 1258 ######### 1259 # Alcatel - TCT 1260 # @ref: http://www.alcatelonetouch.com/global-en/products/smartphones.html 1261 ######### 1262 - regex: '; *(one ?touch) (EVO7|T10|T20) Build' 1263 device_replacement: 'Alcatel One Touch $2' 1264 brand_replacement: 'Alcatel' 1265 model_replacement: 'One Touch $2' 1266 - regex: '; *(?:alcatel[ _])?(?:(?:one[ _]?touch[ _])|ot[ \-])([^;/]+);? Build' 1267 regex_flag: 'i' 1268 device_replacement: 'Alcatel One Touch $1' 1269 brand_replacement: 'Alcatel' 1270 model_replacement: 'One Touch $1' 1271 - regex: '; *(TCL)[ _]([^;/]+) Build' 1272 device_replacement: '$1 $2' 1273 brand_replacement: '$1' 1274 model_replacement: '$2' 1275 # operator specific models 1276 - regex: '; *(Vodafone Smart II|Optimus_Madrid) Build' 1277 device_replacement: 'Alcatel $1' 1278 brand_replacement: 'Alcatel' 1279 model_replacement: '$1' 1280 - regex: '; *BASE_Lutea_3 Build' 1281 device_replacement: 'Alcatel One Touch 998' 1282 brand_replacement: 'Alcatel' 1283 model_replacement: 'One Touch 998' 1284 - regex: '; *BASE_Varia Build' 1285 device_replacement: 'Alcatel One Touch 918D' 1286 brand_replacement: 'Alcatel' 1287 model_replacement: 'One Touch 918D' 1288 1289 ######### 1290 # Allfine 1291 # @ref: http://www.myallfine.com/Products.asp 1292 ######### 1293 - regex: '; *((?:FINE|Fine)\d[^;/]+) Build' 1294 device_replacement: '$1' 1295 brand_replacement: 'Allfine' 1296 model_replacement: '$1' 1297 1298 ######### 1299 # Allview 1300 # @ref: http://www.allview.ro/produse/droseries/lista-tablete-pc/ 1301 ######### 1302 - regex: '; *(ALLVIEW[ _]?|Allview[ _]?)((?:Speed|SPEED).*) Build/' 1303 device_replacement: '$1$2' 1304 brand_replacement: 'Allview' 1305 model_replacement: '$2' 1306 - regex: '; *(ALLVIEW[ _]?|Allview[ _]?)?(AX1_Shine|AX2_Frenzy) Build' 1307 device_replacement: '$1$2' 1308 brand_replacement: 'Allview' 1309 model_replacement: '$2' 1310 - regex: '; *(ALLVIEW[ _]?|Allview[ _]?)([^;/]*) Build' 1311 device_replacement: '$1$2' 1312 brand_replacement: 'Allview' 1313 model_replacement: '$2' 1314 1315 ######### 1316 # Allwinner 1317 # @ref: http://www.allwinner.com/ 1318 # @models: A31 (13.3"),A20,A10, 1319 ######### 1320 - regex: '; *(A13-MID) Build' 1321 device_replacement: '$1' 1322 brand_replacement: 'Allwinner' 1323 model_replacement: '$1' 1324 - regex: '; *(Allwinner)[ _\-]?([^;/]+) Build' 1325 device_replacement: '$1 $2' 1326 brand_replacement: 'Allwinner' 1327 model_replacement: '$1' 1328 1329 ######### 1330 # Amaway 1331 # @ref: http://www.amaway.cn/ 1332 ######### 1333 - regex: '; *(A651|A701B?|A702|A703|A705|A706|A707|A711|A712|A713|A717|A722|A785|A801|A802|A803|A901|A902|A1002|A1003|A1006|A1007|A9701|A9703|Q710|Q80) Build' 1334 device_replacement: '$1' 1335 brand_replacement: 'Amaway' 1336 model_replacement: '$1' 1337 1338 ######### 1339 # Amoi 1340 # @ref: http://www.amoi.com/en/prd/prd_index.jspx 1341 ######### 1342 - regex: '; *(?:AMOI|Amoi)[ _]([^;/]+) Build' 1343 device_replacement: 'Amoi $1' 1344 brand_replacement: 'Amoi' 1345 model_replacement: '$1' 1346 - regex: '^(?:AMOI|Amoi)[ _]([^;/]+) Linux' 1347 device_replacement: 'Amoi $1' 1348 brand_replacement: 'Amoi' 1349 model_replacement: '$1' 1350 1351 ######### 1352 # Aoc 1353 # @ref: http://latin.aoc.com/media_tablet 1354 ######### 1355 - regex: '; *(MW(?:0[789]|10)[^;/]+) Build' 1356 device_replacement: '$1' 1357 brand_replacement: 'Aoc' 1358 model_replacement: '$1' 1359 1360 ######### 1361 # Aoson 1362 # @ref: http://www.luckystar.com.cn/en/mid.aspx?page=1 1363 # @ref: http://www.luckystar.com.cn/en/mobiletel.aspx?page=1 1364 # @note: brand owned by luckystar 1365 ######### 1366 - regex: '; *(G7|M1013|M1015G|M11[CG]?|M-?12[B]?|M15|M19[G]?|M30[ACQ]?|M31[GQ]|M32|M33[GQ]|M36|M37|M38|M701T|M710|M712B|M713|M715G|M716G|M71(?:G|GS|T)?|M72[T]?|M73[T]?|M75[GT]?|M77G|M79T|M7L|M7LN|M81|M810|M81T|M82|M92|M92KS|M92S|M717G|M721|M722G|M723|M725G|M739|M785|M791|M92SK|M93D) Build' 1367 device_replacement: 'Aoson $1' 1368 brand_replacement: 'Aoson' 1369 model_replacement: '$1' 1370 - regex: '; *Aoson ([^;/]+) Build' 1371 regex_flag: 'i' 1372 device_replacement: 'Aoson $1' 1373 brand_replacement: 'Aoson' 1374 model_replacement: '$1' 1375 1376 ######### 1377 # Apanda 1378 # @ref: http://www.apanda.com.cn/ 1379 ######### 1380 - regex: '; *[Aa]panda[ _\-]([^;/]+) Build' 1381 device_replacement: 'Apanda $1' 1382 brand_replacement: 'Apanda' 1383 model_replacement: '$1' 1384 1385 ######### 1386 # Archos 1387 # @ref: http://www.archos.com/de/products/tablets.html 1388 # @ref: http://www.archos.com/de/products/smartphones/index.html 1389 ######### 1390 - regex: '; *(?:ARCHOS|Archos) ?(GAMEPAD.*?)(?: Build|[;/\(\)\-])' 1391 device_replacement: 'Archos $1' 1392 brand_replacement: 'Archos' 1393 model_replacement: '$1' 1394 - regex: 'ARCHOS; GOGI; ([^;]+);' 1395 device_replacement: 'Archos $1' 1396 brand_replacement: 'Archos' 1397 model_replacement: '$1' 1398 - regex: '(?:ARCHOS|Archos)[ _]?(.*?)(?: Build|[;/\(\)\-]|$)' 1399 device_replacement: 'Archos $1' 1400 brand_replacement: 'Archos' 1401 model_replacement: '$1' 1402 - regex: '; *(AN(?:7|8|9|10|13)[A-Z0-9]{1,4}) Build' 1403 device_replacement: 'Archos $1' 1404 brand_replacement: 'Archos' 1405 model_replacement: '$1' 1406 - regex: '; *(A28|A32|A43|A70(?:BHT|CHT|HB|S|X)|A101(?:B|C|IT)|A7EB|A7EB-WK|101G9|80G9) Build' 1407 device_replacement: 'Archos $1' 1408 brand_replacement: 'Archos' 1409 model_replacement: '$1' 1410 1411 ######### 1412 # A-rival 1413 # @ref: http://www.a-rival.de/de/ 1414 ######### 1415 - regex: '; *(PAD-FMD[^;/]+) Build' 1416 device_replacement: '$1' 1417 brand_replacement: 'Arival' 1418 model_replacement: '$1' 1419 - regex: '; *(BioniQ) ?([^;/]+) Build' 1420 device_replacement: '$1 $2' 1421 brand_replacement: 'Arival' 1422 model_replacement: '$1 $2' 1423 1424 ######### 1425 # Arnova 1426 # @ref: http://arnovatech.com/ 1427 ######### 1428 - regex: '; *(AN\d[^;/]+|ARCHM\d+) Build' 1429 device_replacement: 'Arnova $1' 1430 brand_replacement: 'Arnova' 1431 model_replacement: '$1' 1432 - regex: '; *(?:ARNOVA|Arnova) ?([^;/]+) Build' 1433 device_replacement: 'Arnova $1' 1434 brand_replacement: 'Arnova' 1435 model_replacement: '$1' 1436 1437 ######### 1438 # Assistant 1439 # @ref: http://www.assistant.ua 1440 ######### 1441 - regex: '; *(?:ASSISTANT )?(AP)-?([1789]\d{2}[A-Z]{0,2}|80104) Build' 1442 device_replacement: 'Assistant $1-$2' 1443 brand_replacement: 'Assistant' 1444 model_replacement: '$1-$2' 1445 1446 ######### 1447 # Asus 1448 # @ref: http://www.asus.com/uk/Tablets_Mobile/ 1449 ######### 1450 - regex: '; *(ME17\d[^;/]*|ME3\d{2}[^;/]+|K00[A-Z]|Nexus 10|Nexus 7(?: 2013)?|PadFone[^;/]*|Transformer[^;/]*|TF\d{3}[^;/]*|eeepc) Build' 1451 device_replacement: 'Asus $1' 1452 brand_replacement: 'Asus' 1453 model_replacement: '$1' 1454 - regex: '; *ASUS[ _]*([^;/]+) Build' 1455 device_replacement: 'Asus $1' 1456 brand_replacement: 'Asus' 1457 model_replacement: '$1' 1458 1459 ######### 1460 # Garmin-Asus 1461 ######### 1462 - regex: '; *Garmin-Asus ([^;/]+) Build' 1463 device_replacement: 'Garmin-Asus $1' 1464 brand_replacement: 'Garmin-Asus' 1465 model_replacement: '$1' 1466 - regex: '; *(Garminfone) Build' 1467 device_replacement: 'Garmin $1' 1468 brand_replacement: 'Garmin-Asus' 1469 model_replacement: '$1' 1470 1471 ######### 1472 # Attab 1473 # @ref: http://www.theattab.com/ 1474 ######### 1475 - regex: '; (@TAB-[^;/]+) Build' 1476 device_replacement: '$1' 1477 brand_replacement: 'Attab' 1478 model_replacement: '$1' 1479 1480 ######### 1481 # Audiosonic 1482 # @ref: ?? 1483 # @note: Take care with Docomo T-01 Toshiba 1484 ######### 1485 - regex: '; *(T-(?:07|[^0]\d)[^;/]+) Build' 1486 device_replacement: '$1' 1487 brand_replacement: 'Audiosonic' 1488 model_replacement: '$1' 1489 1490 ######### 1491 # Axioo 1492 # @ref: http://www.axiooworld.com/ww/index.php 1493 ######### 1494 - regex: '; *(?:Axioo[ _\-]([^;/]+)|(picopad)[ _\-]([^;/]+)) Build' 1495 regex_flag: 'i' 1496 device_replacement: 'Axioo $1$2 $3' 1497 brand_replacement: 'Axioo' 1498 model_replacement: '$1$2 $3' 1499 1500 ######### 1501 # Azend 1502 # @ref: http://azendcorp.com/index.php/products/portable-electronics 1503 ######### 1504 - regex: '; *(V(?:100|700|800)[^;/]*) Build' 1505 device_replacement: '$1' 1506 brand_replacement: 'Azend' 1507 model_replacement: '$1' 1508 1509 ######### 1510 # Bak 1511 # @ref: http://www.bakinternational.com/produtos.php?cat=80 1512 ######### 1513 - regex: '; *(IBAK\-[^;/]*) Build' 1514 regex_flag: 'i' 1515 device_replacement: '$1' 1516 brand_replacement: 'Bak' 1517 model_replacement: '$1' 1518 1519 ######### 1520 # Bedove 1521 # @ref: http://www.bedove.com/product.html 1522 # @models: HY6501|HY5001|X12|X21|I5 1523 ######### 1524 - regex: '; *(HY5001|HY6501|X12|X21|I5) Build' 1525 device_replacement: 'Bedove $1' 1526 brand_replacement: 'Bedove' 1527 model_replacement: '$1' 1528 1529 ######### 1530 # Benss 1531 # @ref: http://www.benss.net/ 1532 ######### 1533 - regex: '; *(JC-[^;/]*) Build' 1534 device_replacement: 'Benss $1' 1535 brand_replacement: 'Benss' 1536 model_replacement: '$1' 1537 1538 ######### 1539 # Blackberry 1540 # @ref: http://uk.blackberry.com/ 1541 # @note: Android Apps seams to be used here 1542 ######### 1543 - regex: '; *(BB) ([^;/]+) Build' 1544 device_replacement: '$1 $2' 1545 brand_replacement: 'Blackberry' 1546 model_replacement: '$2' 1547 1548 ######### 1549 # Blackbird 1550 # @ref: http://iblackbird.co.kr 1551 ######### 1552 - regex: '; *(BlackBird)[ _](I8.*) Build' 1553 device_replacement: '$1 $2' 1554 brand_replacement: '$1' 1555 model_replacement: '$2' 1556 - regex: '; *(BlackBird)[ _](.*) Build' 1557 device_replacement: '$1 $2' 1558 brand_replacement: '$1' 1559 model_replacement: '$2' 1560 1561 ######### 1562 # Blaupunkt 1563 # @ref: http://www.blaupunkt.com 1564 ######### 1565 # Endeavour 1566 - regex: '; *([0-9]+BP[EM][^;/]*|Endeavour[^;/]+) Build' 1567 device_replacement: 'Blaupunkt $1' 1568 brand_replacement: 'Blaupunkt' 1569 model_replacement: '$1' 1570 1571 ######### 1572 # Blu 1573 # @ref: http://bluproducts.com 1574 ######### 1575 - regex: '; *((?:BLU|Blu)[ _\-])([^;/]+) Build' 1576 device_replacement: '$1$2' 1577 brand_replacement: 'Blu' 1578 model_replacement: '$2' 1579 # BMOBILE = operator branded device 1580 - regex: '; *(?:BMOBILE )?(Blu|BLU|DASH [^;/]+|VIVO 4\.3|TANK 4\.5) Build' 1581 device_replacement: '$1' 1582 brand_replacement: 'Blu' 1583 model_replacement: '$1' 1584 1585 ######### 1586 # Blusens 1587 # @ref: http://www.blusens.com/es/?sg=1&sv=al&roc=1 1588 ######### 1589 # tablet 1590 - regex: '; *(TOUCH\d[^;/]+) Build' 1591 device_replacement: '$1' 1592 brand_replacement: 'Blusens' 1593 model_replacement: '$1' 1594 1595 ######### 1596 # Bmobile 1597 # @ref: http://bmobile.eu.com/?categoria=smartphones-2 1598 # @note: Might collide with Maxx as AX is used also there. 1599 ######### 1600 # smartphone 1601 - regex: '; *(AX5\d+) Build' 1602 device_replacement: '$1' 1603 brand_replacement: 'Bmobile' 1604 model_replacement: '$1' 1605 1606 ######### 1607 # bq 1608 # @ref: http://bqreaders.com 1609 ######### 1610 - regex: '; *([Bb]q) ([^;/]+);? Build' 1611 device_replacement: '$1 $2' 1612 brand_replacement: 'bq' 1613 model_replacement: '$2' 1614 - regex: '; *(Maxwell [^;/]+) Build' 1615 device_replacement: '$1' 1616 brand_replacement: 'bq' 1617 model_replacement: '$1' 1618 1619 ######### 1620 # Braun Phototechnik 1621 # @ref: http://www.braun-phototechnik.de/en/products/list/~pcat.250/Tablet-PC.html 1622 ######### 1623 - regex: '; *((?:B-Tab|B-TAB) ?\d[^;/]+) Build' 1624 device_replacement: '$1' 1625 brand_replacement: 'Braun' 1626 model_replacement: '$1' 1627 1628 ######### 1629 # Broncho 1630 # @ref: http://www.broncho.cn/ 1631 ######### 1632 - regex: '; *(Broncho) ([^;/]+) Build' 1633 device_replacement: '$1 $2' 1634 brand_replacement: '$1' 1635 model_replacement: '$2' 1636 1637 ######### 1638 # Captiva 1639 # @ref: http://www.captiva-power.de 1640 ######### 1641 - regex: '; *CAPTIVA ([^;/]+) Build' 1642 device_replacement: 'Captiva $1' 1643 brand_replacement: 'Captiva' 1644 model_replacement: '$1' 1645 1646 ######### 1647 # Casio 1648 # @ref: http://www.casiogzone.com/ 1649 ######### 1650 - regex: '; *(C771|CAL21|IS11CA) Build' 1651 device_replacement: '$1' 1652 brand_replacement: 'Casio' 1653 model_replacement: '$1' 1654 1655 ######### 1656 # Cat 1657 # @ref: http://www.cat-sound.com 1658 ######### 1659 - regex: '; *(?:Cat|CAT) ([^;/]+) Build' 1660 device_replacement: 'Cat $1' 1661 brand_replacement: 'Cat' 1662 model_replacement: '$1' 1663 - regex: '; *(?:Cat)(Nova.*) Build' 1664 device_replacement: 'Cat $1' 1665 brand_replacement: 'Cat' 1666 model_replacement: '$1' 1667 - regex: '; *(INM8002KP|ADM8000KP_[AB]) Build' 1668 device_replacement: '$1' 1669 brand_replacement: 'Cat' 1670 model_replacement: 'Tablet PHOENIX 8.1J0' 1671 1672 ######### 1673 # Celkon 1674 # @ref: http://www.celkonmobiles.com/?_a=products 1675 # @models: A10, A19Q, A101, A105, A107, A107\+, A112, A118, A119, A119Q, A15, A19, A20, A200, A220, A225, A22 Race, A27, A58, A59, A60, A62, A63, A64, A66, A67, A69, A75, A77, A79, A8\+, A83, A85, A86, A87, A89 Ultima, A9\+, A90, A900, A95, A97i, A98, AR 40, AR 45, AR 50, ML5 1676 ######### 1677 - regex: '; *(?:[Cc]elkon[ _\*]|CELKON[ _\*])([^;/\)]+) ?(?:Build|;|\))' 1678 device_replacement: '$1' 1679 brand_replacement: 'Celkon' 1680 model_replacement: '$1' 1681 - regex: 'Build/(?:[Cc]elkon)+_?([^;/_\)]+)' 1682 device_replacement: '$1' 1683 brand_replacement: 'Celkon' 1684 model_replacement: '$1' 1685 - regex: '; *(CT)-?(\d+) Build' 1686 device_replacement: '$1$2' 1687 brand_replacement: 'Celkon' 1688 model_replacement: '$1$2' 1689 # smartphones 1690 - regex: '; *(A19|A19Q|A105|A107[^;/\)]*) ?(?:Build|;|\))' 1691 device_replacement: '$1' 1692 brand_replacement: 'Celkon' 1693 model_replacement: '$1' 1694 1695 ######### 1696 # ChangJia 1697 # @ref: http://www.cjshowroom.com/eproducts.aspx?classcode=004001001 1698 # @brief: China manufacturer makes tablets for different small brands 1699 # (eg. http://www.zeepad.net/index.html) 1700 ######### 1701 - regex: '; *(TPC[0-9]{4,5}) Build' 1702 device_replacement: '$1' 1703 brand_replacement: 'ChangJia' 1704 model_replacement: '$1' 1705 1706 ######### 1707 # Cloudfone 1708 # @ref: http://www.cloudfonemobile.com/ 1709 ######### 1710 - regex: '; *(Cloudfone)[ _](Excite)([^ ][^;/]+) Build' 1711 device_replacement: '$1 $2 $3' 1712 brand_replacement: 'Cloudfone' 1713 model_replacement: '$1 $2 $3' 1714 - regex: '; *(Excite|ICE)[ _](\d+[^;/]+) Build' 1715 device_replacement: 'Cloudfone $1 $2' 1716 brand_replacement: 'Cloudfone' 1717 model_replacement: 'Cloudfone $1 $2' 1718 - regex: '; *(Cloudfone|CloudPad)[ _]([^;/]+) Build' 1719 device_replacement: '$1 $2' 1720 brand_replacement: 'Cloudfone' 1721 model_replacement: '$1 $2' 1722 1723 ######### 1724 # Cmx 1725 # @ref: http://cmx.at/de/ 1726 ######### 1727 - regex: '; *((?:Aquila|Clanga|Rapax)[^;/]+) Build' 1728 regex_flag: 'i' 1729 device_replacement: '$1' 1730 brand_replacement: 'Cmx' 1731 model_replacement: '$1' 1732 1733 ######### 1734 # CobyKyros 1735 # @ref: http://cobykyros.com 1736 # @note: Be careful with MID\d{3} from MpMan or Manta 1737 ######### 1738 - regex: '; *(?:CFW-|Kyros )?(MID[0-9]{4}(?:[ABC]|SR|TV)?)(\(3G\)-4G| GB 8K| 3G| 8K| GB)? *(?:Build|[;\)])' 1739 device_replacement: 'CobyKyros $1$2' 1740 brand_replacement: 'CobyKyros' 1741 model_replacement: '$1$2' 1742 1743 ######### 1744 # Coolpad 1745 # @ref: ?? 1746 ######### 1747 - regex: '; *([^;/]*)Coolpad[ _]([^;/]+) Build' 1748 device_replacement: '$1$2' 1749 brand_replacement: 'Coolpad' 1750 model_replacement: '$1$2' 1751 1752 ######### 1753 # Cube 1754 # @ref: http://www.cube-tablet.com/buy-products.html 1755 ######### 1756 - regex: '; *(CUBE[ _])?([KU][0-9]+ ?GT.*|A5300) Build' 1757 regex_flag: 'i' 1758 device_replacement: '$1$2' 1759 brand_replacement: 'Cube' 1760 model_replacement: '$2' 1761 1762 ######### 1763 # Cubot 1764 # @ref: http://www.cubotmall.com/ 1765 ######### 1766 - regex: '; *CUBOT ([^;/]+) Build' 1767 regex_flag: 'i' 1768 device_replacement: '$1' 1769 brand_replacement: 'Cubot' 1770 model_replacement: '$1' 1771 - regex: '; *(BOBBY) Build' 1772 regex_flag: 'i' 1773 device_replacement: '$1' 1774 brand_replacement: 'Cubot' 1775 model_replacement: '$1' 1776 1777 ######### 1778 # Danew 1779 # @ref: http://www.danew.com/produits-tablette.php 1780 ######### 1781 - regex: '; *(Dslide [^;/]+) Build' 1782 device_replacement: '$1' 1783 brand_replacement: 'Danew' 1784 model_replacement: '$1' 1785 1786 ######### 1787 # Dell 1788 # @ref: http://www.dell.com 1789 # @ref: http://www.softbank.jp/mobile/support/product/101dl/ 1790 # @ref: http://www.softbank.jp/mobile/support/product/001dl/ 1791 # @ref: http://developer.emnet.ne.jp/android.html 1792 # @ref: http://www.dell.com/in/p/mobile-xcd28/pd 1793 # @ref: http://www.dell.com/in/p/mobile-xcd35/pd 1794 ######### 1795 - regex: '; *(XCD)[ _]?(28|35) Build' 1796 device_replacement: 'Dell $1$2' 1797 brand_replacement: 'Dell' 1798 model_replacement: '$1$2' 1799 - regex: '; *(001DL) Build' 1800 device_replacement: 'Dell $1' 1801 brand_replacement: 'Dell' 1802 model_replacement: 'Streak' 1803 - regex: '; *(?:Dell|DELL) (Streak) Build' 1804 device_replacement: 'Dell $1' 1805 brand_replacement: 'Dell' 1806 model_replacement: 'Streak' 1807 - regex: '; *(101DL|GS01|Streak Pro[^;/]*) Build' 1808 device_replacement: 'Dell $1' 1809 brand_replacement: 'Dell' 1810 model_replacement: 'Streak Pro' 1811 - regex: '; *([Ss]treak ?7) Build' 1812 device_replacement: 'Dell $1' 1813 brand_replacement: 'Dell' 1814 model_replacement: 'Streak 7' 1815 - regex: '; *(Mini-3iX) Build' 1816 device_replacement: 'Dell $1' 1817 brand_replacement: 'Dell' 1818 model_replacement: '$1' 1819 - regex: '; *(?:Dell|DELL)[ _](Aero|Venue|Thunder|Mini.*|Streak[ _]Pro) Build' 1820 device_replacement: 'Dell $1' 1821 brand_replacement: 'Dell' 1822 model_replacement: '$1' 1823 - regex: '; *Dell[ _]([^;/]+) Build' 1824 device_replacement: 'Dell $1' 1825 brand_replacement: 'Dell' 1826 model_replacement: '$1' 1827 - regex: '; *Dell ([^;/]+) Build' 1828 device_replacement: 'Dell $1' 1829 brand_replacement: 'Dell' 1830 model_replacement: '$1' 1831 1832 ######### 1833 # Denver 1834 # @ref: http://www.denver-electronics.com/tablets1/ 1835 ######### 1836 - regex: '; *(TA[CD]-\d+[^;/]*) Build' 1837 device_replacement: '$1' 1838 brand_replacement: 'Denver' 1839 model_replacement: '$1' 1840 1841 ######### 1842 # Dex 1843 # @ref: http://dex.ua/ 1844 ######### 1845 - regex: '; *(iP[789]\d{2}(?:-3G)?|IP10\d{2}(?:-8GB)?) Build' 1846 device_replacement: '$1' 1847 brand_replacement: 'Dex' 1848 model_replacement: '$1' 1849 1850 ######### 1851 # DNS AirTab 1852 # @ref: http://www.dns-shop.ru/ 1853 ######### 1854 - regex: '; *(AirTab)[ _\-]([^;/]+) Build' 1855 device_replacement: '$1 $2' 1856 brand_replacement: 'DNS' 1857 model_replacement: '$1 $2' 1858 1859 ######### 1860 # Docomo (Operator Branded Device) 1861 # @ref: http://www.ipentec.com/document/document.aspx?page=android-useragent 1862 ######### 1863 - regex: '; *(F\-\d[^;/]+) Build' 1864 device_replacement: '$1' 1865 brand_replacement: 'Fujitsu' 1866 model_replacement: '$1' 1867 - regex: '; *(HT-03A) Build' 1868 device_replacement: '$1' 1869 brand_replacement: 'HTC' 1870 model_replacement: 'Magic' 1871 - regex: '; *(HT\-\d[^;/]+) Build' 1872 device_replacement: '$1' 1873 brand_replacement: 'HTC' 1874 model_replacement: '$1' 1875 - regex: '; *(L\-\d[^;/]+) Build' 1876 device_replacement: '$1' 1877 brand_replacement: 'LG' 1878 model_replacement: '$1' 1879 - regex: '; *(N\-\d[^;/]+) Build' 1880 device_replacement: '$1' 1881 brand_replacement: 'Nec' 1882 model_replacement: '$1' 1883 - regex: '; *(P\-\d[^;/]+) Build' 1884 device_replacement: '$1' 1885 brand_replacement: 'Panasonic' 1886 model_replacement: '$1' 1887 - regex: '; *(SC\-\d[^;/]+) Build' 1888 device_replacement: '$1' 1889 brand_replacement: 'Samsung' 1890 model_replacement: '$1' 1891 - regex: '; *(SH\-\d[^;/]+) Build' 1892 device_replacement: '$1' 1893 brand_replacement: 'Sharp' 1894 model_replacement: '$1' 1895 - regex: '; *(SO\-\d[^;/]+) Build' 1896 device_replacement: '$1' 1897 brand_replacement: 'SonyEricsson' 1898 model_replacement: '$1' 1899 - regex: '; *(T\-0[12][^;/]+) Build' 1900 device_replacement: '$1' 1901 brand_replacement: 'Toshiba' 1902 model_replacement: '$1' 1903 1904 ######### 1905 # DOOV 1906 # @ref: http://www.doov.com.cn/ 1907 ######### 1908 - regex: '; *(DOOV)[ _]([^;/]+) Build' 1909 device_replacement: '$1 $2' 1910 brand_replacement: 'DOOV' 1911 model_replacement: '$2' 1912 1913 ######### 1914 # Enot 1915 # @ref: http://www.enot.ua/ 1916 ######### 1917 - regex: '; *(Enot|ENOT)[ -]?([^;/]+) Build' 1918 device_replacement: '$1 $2' 1919 brand_replacement: 'Enot' 1920 model_replacement: '$2' 1921 1922 ######### 1923 # Evercoss 1924 # @ref: http://evercoss.com/android/ 1925 ######### 1926 - regex: '; *[^;/]+ Build/(?:CROSS|Cross)+[ _\-]([^\)]+)' 1927 device_replacement: 'CROSS $1' 1928 brand_replacement: 'Evercoss' 1929 model_replacement: 'Cross $1' 1930 - regex: '; *(CROSS|Cross)[ _\-]([^;/]+) Build' 1931 device_replacement: '$1 $2' 1932 brand_replacement: 'Evercoss' 1933 model_replacement: 'Cross $2' 1934 1935 ######### 1936 # Explay 1937 # @ref: http://explay.ru/ 1938 ######### 1939 - regex: '; *Explay[_ ](.+?)(?:[\)]| Build)' 1940 device_replacement: '$1' 1941 brand_replacement: 'Explay' 1942 model_replacement: '$1' 1943 1944 ######### 1945 # Fly 1946 # @ref: http://www.fly-phone.com/ 1947 ######### 1948 - regex: '; *(IQ.*) Build' 1949 device_replacement: '$1' 1950 brand_replacement: 'Fly' 1951 model_replacement: '$1' 1952 - regex: '; *(Fly|FLY)[ _](IQ[^;]+|F[34]\d+[^;]*);? Build' 1953 device_replacement: '$1 $2' 1954 brand_replacement: 'Fly' 1955 model_replacement: '$2' 1956 1957 ######### 1958 # Fujitsu 1959 # @ref: http://www.fujitsu.com/global/ 1960 ######### 1961 - regex: '; *(M532|Q572|FJL21) Build/' 1962 device_replacement: '$1' 1963 brand_replacement: 'Fujitsu' 1964 model_replacement: '$1' 1965 1966 ######### 1967 # Galapad 1968 # @ref: http://www.galapad.net/product.html 1969 ######### 1970 - regex: '; *(G1) Build' 1971 device_replacement: '$1' 1972 brand_replacement: 'Galapad' 1973 model_replacement: '$1' 1974 1975 ######### 1976 # Geeksphone 1977 # @ref: http://www.geeksphone.com/ 1978 ######### 1979 - regex: '; *(Geeksphone) ([^;/]+) Build' 1980 device_replacement: '$1 $2' 1981 brand_replacement: '$1' 1982 model_replacement: '$2' 1983 1984 ######### 1985 # Gfive 1986 # @ref: http://www.gfivemobile.com/en 1987 ######### 1988 #- regex: '; *(G\'?FIVE) ([^;/]+) Build' # there is a problem with python yaml parser here 1989 - regex: '; *(G[^F]?FIVE) ([^;/]+) Build' 1990 device_replacement: '$1 $2' 1991 brand_replacement: 'Gfive' 1992 model_replacement: '$2' 1993 1994 ######### 1995 # Gionee 1996 # @ref: http://www.gionee.com/ 1997 ######### 1998 - regex: '; *(Gionee)[ _\-]([^;/]+)(?:/[^;/]+)? Build' 1999 regex_flag: 'i' 2000 device_replacement: '$1 $2' 2001 brand_replacement: 'Gionee' 2002 model_replacement: '$2' 2003 - regex: '; *(GN\d+[A-Z]?|INFINITY_PASSION|Ctrl_V1) Build' 2004 device_replacement: 'Gionee $1' 2005 brand_replacement: 'Gionee' 2006 model_replacement: '$1' 2007 - regex: '; *(E3) Build/JOP40D' 2008 device_replacement: 'Gionee $1' 2009 brand_replacement: 'Gionee' 2010 model_replacement: '$1' 2011 2012 ######### 2013 # GoClever 2014 # @ref: http://www.goclever.com 2015 ######### 2016 - regex: '; *((?:FONE|QUANTUM|INSIGNIA) \d+[^;/]*|PLAYTAB) Build' 2017 device_replacement: 'GoClever $1' 2018 brand_replacement: 'GoClever' 2019 model_replacement: '$1' 2020 - regex: '; *GOCLEVER ([^;/]+) Build' 2021 device_replacement: 'GoClever $1' 2022 brand_replacement: 'GoClever' 2023 model_replacement: '$1' 2024 2025 ######### 2026 # Google 2027 # @ref: http://www.google.de/glass/start/ 2028 ######### 2029 - regex: '; *(Glass \d+) Build' 2030 device_replacement: '$1' 2031 brand_replacement: 'Google' 2032 model_replacement: '$1' 2033 - regex: '; *(Pixel \w+) Build' 2034 device_replacement: '$1' 2035 brand_replacement: 'Google' 2036 model_replacement: '$1' 2037 2038 ######### 2039 # Gigabyte 2040 # @ref: http://gsmart.gigabytecm.com/en/ 2041 ######### 2042 - regex: '; *(GSmart)[ -]([^/]+) Build' 2043 device_replacement: '$1 $2' 2044 brand_replacement: 'Gigabyte' 2045 model_replacement: '$1 $2' 2046 2047 ######### 2048 # Freescale development boards 2049 # @ref: http://www.freescale.com/webapp/sps/site/prod_summary.jsp?code=IMX53QSB 2050 ######### 2051 - regex: '; *(imx5[13]_[^/]+) Build' 2052 device_replacement: 'Freescale $1' 2053 brand_replacement: 'Freescale' 2054 model_replacement: '$1' 2055 2056 ######### 2057 # Haier 2058 # @ref: http://www.haier.com/ 2059 # @ref: http://www.haier.com/de/produkte/tablet/ 2060 ######### 2061 - regex: '; *Haier[ _\-]([^/]+) Build' 2062 device_replacement: 'Haier $1' 2063 brand_replacement: 'Haier' 2064 model_replacement: '$1' 2065 - regex: '; *(PAD1016) Build' 2066 device_replacement: 'Haipad $1' 2067 brand_replacement: 'Haipad' 2068 model_replacement: '$1' 2069 2070 ######### 2071 # Haipad 2072 # @ref: http://www.haipad.net/ 2073 # @models: V7P|M7SM7S|M9XM9X|M7XM7X|M9|M8|M7-M|M1002|M7|M701 2074 ######### 2075 - regex: '; *(M701|M7|M8|M9) Build' 2076 device_replacement: 'Haipad $1' 2077 brand_replacement: 'Haipad' 2078 model_replacement: '$1' 2079 2080 ######### 2081 # Hannspree 2082 # @ref: http://www.hannspree.eu/ 2083 # @models: SN10T1|SN10T2|SN70T31B|SN70T32W 2084 ######### 2085 - regex: '; *(SN\d+T[^;\)/]*)(?: Build|[;\)])' 2086 device_replacement: 'Hannspree $1' 2087 brand_replacement: 'Hannspree' 2088 model_replacement: '$1' 2089 2090 ######### 2091 # HCLme 2092 # @ref: http://www.hclmetablet.com/india/ 2093 ######### 2094 - regex: 'Build/HCL ME Tablet ([^;\)]+)[\);]' 2095 device_replacement: 'HCLme $1' 2096 brand_replacement: 'HCLme' 2097 model_replacement: '$1' 2098 - regex: '; *([^;\/]+) Build/HCL' 2099 device_replacement: 'HCLme $1' 2100 brand_replacement: 'HCLme' 2101 model_replacement: '$1' 2102 2103 ######### 2104 # Hena 2105 # @ref: http://www.henadigital.com/en/product/index.asp?id=6 2106 ######### 2107 - regex: '; *(MID-?\d{4}C[EM]) Build' 2108 device_replacement: 'Hena $1' 2109 brand_replacement: 'Hena' 2110 model_replacement: '$1' 2111 2112 ######### 2113 # Hisense 2114 # @ref: http://www.hisense.com/ 2115 ######### 2116 - regex: '; *(EG\d{2,}|HS-[^;/]+|MIRA[^;/]+) Build' 2117 device_replacement: 'Hisense $1' 2118 brand_replacement: 'Hisense' 2119 model_replacement: '$1' 2120 - regex: '; *(andromax[^;/]+) Build' 2121 regex_flag: 'i' 2122 device_replacement: 'Hisense $1' 2123 brand_replacement: 'Hisense' 2124 model_replacement: '$1' 2125 2126 ######### 2127 # hitech 2128 # @ref: http://www.hitech-mobiles.com/ 2129 ######### 2130 - regex: '; *(?:AMAZE[ _](S\d+)|(S\d+)[ _]AMAZE) Build' 2131 device_replacement: 'AMAZE $1$2' 2132 brand_replacement: 'hitech' 2133 model_replacement: 'AMAZE $1$2' 2134 2135 ######### 2136 # HP 2137 # @ref: http://www.hp.com/ 2138 ######### 2139 - regex: '; *(PlayBook) Build' 2140 device_replacement: 'HP $1' 2141 brand_replacement: 'HP' 2142 model_replacement: '$1' 2143 - regex: '; *HP ([^/]+) Build' 2144 device_replacement: 'HP $1' 2145 brand_replacement: 'HP' 2146 model_replacement: '$1' 2147 - regex: '; *([^/]+_tenderloin) Build' 2148 device_replacement: 'HP TouchPad' 2149 brand_replacement: 'HP' 2150 model_replacement: 'TouchPad' 2151 2152 ######### 2153 # Huawei 2154 # @ref: http://www.huaweidevice.com 2155 # @note: Needs to be before HTC due to Desire HD Build on U8815 2156 ######### 2157 - regex: '; *(HUAWEI |Huawei-)?([UY][^;/]+) Build/(?:Huawei|HUAWEI)([UY][^\);]+)\)' 2158 device_replacement: '$1$2' 2159 brand_replacement: 'Huawei' 2160 model_replacement: '$2' 2161 - regex: '; *([^;/]+) Build[/ ]Huawei(MT1-U06|[A-Z]+\d+[^\);]+)[^\);]*\)' 2162 device_replacement: '$1' 2163 brand_replacement: 'Huawei' 2164 model_replacement: '$2' 2165 - regex: '; *(S7|M860) Build' 2166 device_replacement: '$1' 2167 brand_replacement: 'Huawei' 2168 model_replacement: '$1' 2169 - regex: '; *((?:HUAWEI|Huawei)[ \-]?)(MediaPad) Build' 2170 device_replacement: '$1$2' 2171 brand_replacement: 'Huawei' 2172 model_replacement: '$2' 2173 - regex: '; *((?:HUAWEI[ _]?|Huawei[ _])?Ascend[ _])([^;/]+) Build' 2174 device_replacement: '$1$2' 2175 brand_replacement: 'Huawei' 2176 model_replacement: '$2' 2177 - regex: '; *((?:HUAWEI|Huawei)[ _\-]?)((?:G700-|MT-)[^;/]+) Build' 2178 device_replacement: '$1$2' 2179 brand_replacement: 'Huawei' 2180 model_replacement: '$2' 2181 - regex: '; *((?:HUAWEI|Huawei)[ _\-]?)([^;/]+) Build' 2182 device_replacement: '$1$2' 2183 brand_replacement: 'Huawei' 2184 model_replacement: '$2' 2185 - regex: '; *(MediaPad[^;]+|SpringBoard) Build/Huawei' 2186 device_replacement: '$1' 2187 brand_replacement: 'Huawei' 2188 model_replacement: '$1' 2189 - regex: '; *([^;]+) Build/(?:Huawei|HUAWEI)' 2190 device_replacement: '$1' 2191 brand_replacement: 'Huawei' 2192 model_replacement: '$1' 2193 - regex: '; *([Uu])([89]\d{3}) Build' 2194 device_replacement: '$1$2' 2195 brand_replacement: 'Huawei' 2196 model_replacement: 'U$2' 2197 - regex: '; *(?:Ideos |IDEOS )(S7) Build' 2198 device_replacement: 'Huawei Ideos$1' 2199 brand_replacement: 'Huawei' 2200 model_replacement: 'Ideos$1' 2201 - regex: '; *(?:Ideos |IDEOS )([^;/]+\s*|\s*)Build' 2202 device_replacement: 'Huawei Ideos$1' 2203 brand_replacement: 'Huawei' 2204 model_replacement: 'Ideos$1' 2205 - regex: '; *(Orange Daytona|Pulse|Pulse Mini|Vodafone 858|C8500|C8600|C8650|C8660|Nexus 6P|ATH-.+?) Build[/ ]' 2206 device_replacement: 'Huawei $1' 2207 brand_replacement: 'Huawei' 2208 model_replacement: '$1' 2209 2210 ######### 2211 # HTC 2212 # @ref: http://www.htc.com/www/products/ 2213 # @ref: http://en.wikipedia.org/wiki/List_of_HTC_phones 2214 ######### 2215 2216 - regex: '; *HTC[ _]([^;]+); Windows Phone' 2217 device_replacement: 'HTC $1' 2218 brand_replacement: 'HTC' 2219 model_replacement: '$1' 2220 2221 # Android HTC with Version Number matcher 2222 # ; HTC_0P3Z11/1.12.161.3 Build 2223 # ;HTC_A3335 V2.38.841.1 Build 2224 - regex: '; *(?:HTC[ _/])+([^ _/]+)(?:[/\\]1\.0 | V|/| +)\d+\.\d[\d\.]*(?: *Build|\))' 2225 device_replacement: 'HTC $1' 2226 brand_replacement: 'HTC' 2227 model_replacement: '$1' 2228 - regex: '; *(?:HTC[ _/])+([^ _/]+)(?:[ _/]([^ _/]+))?(?:[/\\]1\.0 | V|/| +)\d+\.\d[\d\.]*(?: *Build|\))' 2229 device_replacement: 'HTC $1 $2' 2230 brand_replacement: 'HTC' 2231 model_replacement: '$1 $2' 2232 - regex: '; *(?:HTC[ _/])+([^ _/]+)(?:[ _/]([^ _/]+)(?:[ _/]([^ _/]+))?)?(?:[/\\]1\.0 | V|/| +)\d+\.\d[\d\.]*(?: *Build|\))' 2233 device_replacement: 'HTC $1 $2 $3' 2234 brand_replacement: 'HTC' 2235 model_replacement: '$1 $2 $3' 2236 - regex: '; *(?:HTC[ _/])+([^ _/]+)(?:[ _/]([^ _/]+)(?:[ _/]([^ _/]+)(?:[ _/]([^ _/]+))?)?)?(?:[/\\]1\.0 | V|/| +)\d+\.\d[\d\.]*(?: *Build|\))' 2237 device_replacement: 'HTC $1 $2 $3 $4' 2238 brand_replacement: 'HTC' 2239 model_replacement: '$1 $2 $3 $4' 2240 2241 # Android HTC without Version Number matcher 2242 - regex: '; *(?:(?:HTC|htc)(?:_blocked)*[ _/])+([^ _/;]+)(?: *Build|[;\)]| - )' 2243 device_replacement: 'HTC $1' 2244 brand_replacement: 'HTC' 2245 model_replacement: '$1' 2246 - regex: '; *(?:(?:HTC|htc)(?:_blocked)*[ _/])+([^ _/]+)(?:[ _/]([^ _/;\)]+))?(?: *Build|[;\)]| - )' 2247 device_replacement: 'HTC $1 $2' 2248 brand_replacement: 'HTC' 2249 model_replacement: '$1 $2' 2250 - regex: '; *(?:(?:HTC|htc)(?:_blocked)*[ _/])+([^ _/]+)(?:[ _/]([^ _/]+)(?:[ _/]([^ _/;\)]+))?)?(?: *Build|[;\)]| - )' 2251 device_replacement: 'HTC $1 $2 $3' 2252 brand_replacement: 'HTC' 2253 model_replacement: '$1 $2 $3' 2254 - regex: '; *(?:(?:HTC|htc)(?:_blocked)*[ _/])+([^ _/]+)(?:[ _/]([^ _/]+)(?:[ _/]([^ _/]+)(?:[ _/]([^ /;]+))?)?)?(?: *Build|[;\)]| - )' 2255 device_replacement: 'HTC $1 $2 $3 $4' 2256 brand_replacement: 'HTC' 2257 model_replacement: '$1 $2 $3 $4' 2258 2259 # HTC Streaming Player 2260 - regex: 'HTC Streaming Player [^\/]*/[^\/]*/ htc_([^/]+) /' 2261 device_replacement: 'HTC $1' 2262 brand_replacement: 'HTC' 2263 model_replacement: '$1' 2264 # general matcher for anything else 2265 - regex: '(?:[;,] *|^)(?:htccn_chs-)?HTC[ _-]?([^;]+?)(?: *Build|clay|Android|-?Mozilla| Opera| Profile| UNTRUSTED|[;/\(\)]|$)' 2266 regex_flag: 'i' 2267 device_replacement: 'HTC $1' 2268 brand_replacement: 'HTC' 2269 model_replacement: '$1' 2270 # Android matchers without HTC 2271 - regex: '; *(A6277|ADR6200|ADR6300|ADR6350|ADR6400[A-Z]*|ADR6425[A-Z]*|APX515CKT|ARIA|Desire[^_ ]*|Dream|EndeavorU|Eris|Evo|Flyer|HD2|Hero|HERO200|Hero CDMA|HTL21|Incredible|Inspire[A-Z0-9]*|Legend|Liberty|Nexus ?(?:One|HD2)|One|One S C2|One[ _]?(?:S|V|X\+?)\w*|PC36100|PG06100|PG86100|S31HT|Sensation|Wildfire)(?: Build|[/;\(\)])' 2272 regex_flag: 'i' 2273 device_replacement: 'HTC $1' 2274 brand_replacement: 'HTC' 2275 model_replacement: '$1' 2276 - regex: '; *(ADR6200|ADR6400L|ADR6425LVW|Amaze|DesireS?|EndeavorU|Eris|EVO|Evo\d[A-Z]+|HD2|IncredibleS?|Inspire[A-Z0-9]*|Inspire[A-Z0-9]*|Sensation[A-Z0-9]*|Wildfire)[ _-](.+?)(?:[/;\)]|Build|MIUI|1\.0)' 2277 regex_flag: 'i' 2278 device_replacement: 'HTC $1 $2' 2279 brand_replacement: 'HTC' 2280 model_replacement: '$1 $2' 2281 2282 ######### 2283 # Hyundai 2284 # @ref: http://www.hyundaitechnologies.com 2285 ######### 2286 - regex: '; *HYUNDAI (T\d[^/]*) Build' 2287 device_replacement: 'Hyundai $1' 2288 brand_replacement: 'Hyundai' 2289 model_replacement: '$1' 2290 - regex: '; *HYUNDAI ([^;/]+) Build' 2291 device_replacement: 'Hyundai $1' 2292 brand_replacement: 'Hyundai' 2293 model_replacement: '$1' 2294 # X900? http://www.amazon.com/Hyundai-X900-Retina-Android-Bluetooth/dp/B00AO07H3O 2295 - regex: '; *(X700|Hold X|MB-6900) Build' 2296 device_replacement: 'Hyundai $1' 2297 brand_replacement: 'Hyundai' 2298 model_replacement: '$1' 2299 2300 ######### 2301 # iBall 2302 # @ref: http://www.iball.co.in/Category/Mobiles/22 2303 ######### 2304 - regex: '; *(?:iBall[ _\-])?(Andi)[ _]?(\d[^;/]*) Build' 2305 regex_flag: 'i' 2306 device_replacement: '$1 $2' 2307 brand_replacement: 'iBall' 2308 model_replacement: '$1 $2' 2309 - regex: '; *(IBall)(?:[ _]([^;/]+)|) Build' 2310 regex_flag: 'i' 2311 device_replacement: '$1 $2' 2312 brand_replacement: 'iBall' 2313 model_replacement: '$2' 2314 2315 ######### 2316 # IconBIT 2317 # @ref: http://www.iconbit.com/catalog/tablets/ 2318 ######### 2319 - regex: '; *(NT-\d+[^ ;/]*|Net[Tt]AB [^;/]+|Mercury [A-Z]+|iconBIT)(?: S/N:[^;/]+)? Build' 2320 device_replacement: '$1' 2321 brand_replacement: 'IconBIT' 2322 model_replacement: '$1' 2323 2324 ######### 2325 # IMO 2326 # @ref: http://www.ponselimo.com/ 2327 ######### 2328 - regex: '; *(IMO)[ _]([^;/]+) Build' 2329 regex_flag: 'i' 2330 device_replacement: '$1 $2' 2331 brand_replacement: 'IMO' 2332 model_replacement: '$2' 2333 2334 ######### 2335 # i-mobile 2336 # @ref: http://www.i-mobilephone.com/ 2337 ######### 2338 - regex: '; *i-?mobile[ _]([^/]+) Build/' 2339 regex_flag: 'i' 2340 device_replacement: 'i-mobile $1' 2341 brand_replacement: 'imobile' 2342 model_replacement: '$1' 2343 - regex: '; *(i-(?:style|note)[^/]*) Build/' 2344 regex_flag: 'i' 2345 device_replacement: 'i-mobile $1' 2346 brand_replacement: 'imobile' 2347 model_replacement: '$1' 2348 2349 ######### 2350 # Impression 2351 # @ref: http://impression.ua/planshetnye-kompyutery 2352 ######### 2353 - regex: '; *(ImPAD) ?(\d+(?:.)*) Build' 2354 device_replacement: '$1 $2' 2355 brand_replacement: 'Impression' 2356 model_replacement: '$1 $2' 2357 2358 ######### 2359 # Infinix 2360 # @ref: http://www.infinixmobility.com/index.html 2361 ######### 2362 - regex: '; *(Infinix)[ _]([^;/]+) Build' 2363 device_replacement: '$1 $2' 2364 brand_replacement: 'Infinix' 2365 model_replacement: '$2' 2366 2367 ######### 2368 # Informer 2369 # @ref: ?? 2370 ######### 2371 - regex: '; *(Informer)[ \-]([^;/]+) Build' 2372 device_replacement: '$1 $2' 2373 brand_replacement: 'Informer' 2374 model_replacement: '$2' 2375 2376 ######### 2377 # Intenso 2378 # @ref: http://www.intenso.de 2379 # @models: 7":TAB 714,TAB 724;8":TAB 814,TAB 824;10":TAB 1004 2380 ######### 2381 - regex: '; *(TAB) ?([78][12]4) Build' 2382 device_replacement: 'Intenso $1' 2383 brand_replacement: 'Intenso' 2384 model_replacement: '$1 $2' 2385 2386 ######### 2387 # Intex 2388 # @ref: http://intexmobile.in/index.aspx 2389 # @note: Zync also offers a "Cloud Z5" device 2390 ######### 2391 # smartphones 2392 - regex: '; *(?:Intex[ _])?(AQUA|Aqua)([ _\.\-])([^;/]+) *(?:Build|;)' 2393 device_replacement: '$1$2$3' 2394 brand_replacement: 'Intex' 2395 model_replacement: '$1 $3' 2396 # matches "INTEX CLOUD X1" 2397 - regex: '; *(?:INTEX|Intex)(?:[_ ]([^\ _;/]+))(?:[_ ]([^\ _;/]+))? *(?:Build|;)' 2398 device_replacement: '$1 $2' 2399 brand_replacement: 'Intex' 2400 model_replacement: '$1 $2' 2401 # tablets 2402 - regex: '; *([iI]Buddy)[ _]?(Connect)(?:_|\?_| )?([^;/]*) *(?:Build|;)' 2403 device_replacement: '$1 $2 $3' 2404 brand_replacement: 'Intex' 2405 model_replacement: 'iBuddy $2 $3' 2406 - regex: '; *(I-Buddy)[ _]([^;/]+) *(?:Build|;)' 2407 device_replacement: '$1 $2' 2408 brand_replacement: 'Intex' 2409 model_replacement: 'iBuddy $2' 2410 2411 ######### 2412 # iOCEAN 2413 # @ref: http://www.iocean.cc/ 2414 ######### 2415 - regex: '; *(iOCEAN) ([^/]+) Build' 2416 regex_flag: 'i' 2417 device_replacement: '$1 $2' 2418 brand_replacement: 'iOCEAN' 2419 model_replacement: '$2' 2420 2421 ######### 2422 # i.onik 2423 # @ref: http://www.i-onik.de/ 2424 ######### 2425 - regex: '; *(TP\d+(?:\.\d+)?\-\d[^;/]+) Build' 2426 device_replacement: 'ionik $1' 2427 brand_replacement: 'ionik' 2428 model_replacement: '$1' 2429 2430 ######### 2431 # IRU.ru 2432 # @ref: http://www.iru.ru/catalog/soho/planetable/ 2433 ######### 2434 - regex: '; *(M702pro) Build' 2435 device_replacement: '$1' 2436 brand_replacement: 'Iru' 2437 model_replacement: '$1' 2438 2439 ######### 2440 # Ivio 2441 # @ref: http://www.ivio.com/mobile.php 2442 # @models: DG80,DG20,DE38,DE88,MD70 2443 ######### 2444 - regex: '; *(DE88Plus|MD70) Build' 2445 device_replacement: '$1' 2446 brand_replacement: 'Ivio' 2447 model_replacement: '$1' 2448 - regex: '; *IVIO[_\-]([^;/]+) Build' 2449 device_replacement: '$1' 2450 brand_replacement: 'Ivio' 2451 model_replacement: '$1' 2452 2453 ######### 2454 # Jaytech 2455 # @ref: http://www.jay-tech.de/jaytech/servlet/frontend/ 2456 ######### 2457 - regex: '; *(TPC-\d+|JAY-TECH) Build' 2458 device_replacement: '$1' 2459 brand_replacement: 'Jaytech' 2460 model_replacement: '$1' 2461 2462 ######### 2463 # Jiayu 2464 # @ref: http://www.ejiayu.com/en/Product.html 2465 ######### 2466 - regex: '; *(JY-[^;/]+|G[234]S?) Build' 2467 device_replacement: '$1' 2468 brand_replacement: 'Jiayu' 2469 model_replacement: '$1' 2470 2471 ######### 2472 # JXD 2473 # @ref: http://www.jxd.hk/ 2474 ######### 2475 - regex: '; *(JXD)[ _\-]([^;/]+) Build' 2476 device_replacement: '$1 $2' 2477 brand_replacement: 'JXD' 2478 model_replacement: '$2' 2479 2480 ######### 2481 # Karbonn 2482 # @ref: http://www.karbonnmobiles.com/products_tablet.php 2483 ######### 2484 - regex: '; *Karbonn[ _]?([^;/]+) *(?:Build|;)' 2485 regex_flag: 'i' 2486 device_replacement: '$1' 2487 brand_replacement: 'Karbonn' 2488 model_replacement: '$1' 2489 - regex: '; *([^;]+) Build/Karbonn' 2490 device_replacement: '$1' 2491 brand_replacement: 'Karbonn' 2492 model_replacement: '$1' 2493 - regex: '; *(A11|A39|A37|A34|ST8|ST10|ST7|Smart Tab3|Smart Tab2|Titanium S\d) +Build' 2494 device_replacement: '$1' 2495 brand_replacement: 'Karbonn' 2496 model_replacement: '$1' 2497 2498 ######### 2499 # KDDI (Operator Branded Device) 2500 # @ref: http://www.ipentec.com/document/document.aspx?page=android-useragent 2501 ######### 2502 - regex: '; *(IS01|IS03|IS05|IS\d{2}SH) Build' 2503 device_replacement: '$1' 2504 brand_replacement: 'Sharp' 2505 model_replacement: '$1' 2506 - regex: '; *(IS04) Build' 2507 device_replacement: '$1' 2508 brand_replacement: 'Regza' 2509 model_replacement: '$1' 2510 - regex: '; *(IS06|IS\d{2}PT) Build' 2511 device_replacement: '$1' 2512 brand_replacement: 'Pantech' 2513 model_replacement: '$1' 2514 - regex: '; *(IS11S) Build' 2515 device_replacement: '$1' 2516 brand_replacement: 'SonyEricsson' 2517 model_replacement: 'Xperia Acro' 2518 - regex: '; *(IS11CA) Build' 2519 device_replacement: '$1' 2520 brand_replacement: 'Casio' 2521 model_replacement: 'GzOne $1' 2522 - regex: '; *(IS11LG) Build' 2523 device_replacement: '$1' 2524 brand_replacement: 'LG' 2525 model_replacement: 'Optimus X' 2526 - regex: '; *(IS11N) Build' 2527 device_replacement: '$1' 2528 brand_replacement: 'Medias' 2529 model_replacement: '$1' 2530 - regex: '; *(IS11PT) Build' 2531 device_replacement: '$1' 2532 brand_replacement: 'Pantech' 2533 model_replacement: 'MIRACH' 2534 - regex: '; *(IS12F) Build' 2535 device_replacement: '$1' 2536 brand_replacement: 'Fujitsu' 2537 model_replacement: 'Arrows ES' 2538 # @ref: https://ja.wikipedia.org/wiki/IS12M 2539 - regex: '; *(IS12M) Build' 2540 device_replacement: '$1' 2541 brand_replacement: 'Motorola' 2542 model_replacement: 'XT909' 2543 - regex: '; *(IS12S) Build' 2544 device_replacement: '$1' 2545 brand_replacement: 'SonyEricsson' 2546 model_replacement: 'Xperia Acro HD' 2547 - regex: '; *(ISW11F) Build' 2548 device_replacement: '$1' 2549 brand_replacement: 'Fujitsu' 2550 model_replacement: 'Arrowz Z' 2551 - regex: '; *(ISW11HT) Build' 2552 device_replacement: '$1' 2553 brand_replacement: 'HTC' 2554 model_replacement: 'EVO' 2555 - regex: '; *(ISW11K) Build' 2556 device_replacement: '$1' 2557 brand_replacement: 'Kyocera' 2558 model_replacement: 'DIGNO' 2559 - regex: '; *(ISW11M) Build' 2560 device_replacement: '$1' 2561 brand_replacement: 'Motorola' 2562 model_replacement: 'Photon' 2563 - regex: '; *(ISW11SC) Build' 2564 device_replacement: '$1' 2565 brand_replacement: 'Samsung' 2566 model_replacement: 'GALAXY S II WiMAX' 2567 - regex: '; *(ISW12HT) Build' 2568 device_replacement: '$1' 2569 brand_replacement: 'HTC' 2570 model_replacement: 'EVO 3D' 2571 - regex: '; *(ISW13HT) Build' 2572 device_replacement: '$1' 2573 brand_replacement: 'HTC' 2574 model_replacement: 'J' 2575 - regex: '; *(ISW?[0-9]{2}[A-Z]{0,2}) Build' 2576 device_replacement: '$1' 2577 brand_replacement: 'KDDI' 2578 model_replacement: '$1' 2579 - regex: '; *(INFOBAR [^;/]+) Build' 2580 device_replacement: '$1' 2581 brand_replacement: 'KDDI' 2582 model_replacement: '$1' 2583 2584 ######### 2585 # Kingcom 2586 # @ref: http://www.e-kingcom.com 2587 ######### 2588 - regex: '; *(JOYPAD|Joypad)[ _]([^;/]+) Build/' 2589 device_replacement: '$1 $2' 2590 brand_replacement: 'Kingcom' 2591 model_replacement: '$1 $2' 2592 2593 ######### 2594 # Kobo 2595 # @ref: https://en.wikipedia.org/wiki/Kobo_Inc. 2596 # @ref: http://www.kobo.com/devices#tablets 2597 ######### 2598 - regex: '; *(Vox|VOX|Arc|K080) Build/' 2599 regex_flag: 'i' 2600 device_replacement: '$1' 2601 brand_replacement: 'Kobo' 2602 model_replacement: '$1' 2603 - regex: '\b(Kobo Touch)\b' 2604 device_replacement: '$1' 2605 brand_replacement: 'Kobo' 2606 model_replacement: '$1' 2607 2608 ######### 2609 # K-Touch 2610 # @ref: ?? 2611 ######### 2612 - regex: '; *(K-Touch)[ _]([^;/]+) Build' 2613 regex_flag: 'i' 2614 device_replacement: '$1 $2' 2615 brand_replacement: 'Ktouch' 2616 model_replacement: '$2' 2617 2618 ######### 2619 # KT Tech 2620 # @ref: http://www.kttech.co.kr 2621 ######### 2622 - regex: '; *((?:EV|KM)-S\d+[A-Z]?) Build' 2623 regex_flag: 'i' 2624 device_replacement: '$1' 2625 brand_replacement: 'KTtech' 2626 model_replacement: '$1' 2627 2628 ######### 2629 # Kyocera 2630 # @ref: http://www.android.com/devices/?country=all&m=kyocera 2631 ######### 2632 - regex: '; *(Zio|Hydro|Torque|Event|EVENT|Echo|Milano|Rise|URBANO PROGRESSO|WX04K|WX06K|WX10K|KYL21|101K|C5[12]\d{2}) Build/' 2633 device_replacement: '$1' 2634 brand_replacement: 'Kyocera' 2635 model_replacement: '$1' 2636 2637 ######### 2638 # Lava 2639 # @ref: http://www.lavamobiles.com/ 2640 ######### 2641 - regex: '; *(?:LAVA[ _])?IRIS[ _\-]?([^/;\)]+) *(?:;|\)|Build)' 2642 regex_flag: 'i' 2643 device_replacement: 'Iris $1' 2644 brand_replacement: 'Lava' 2645 model_replacement: 'Iris $1' 2646 - regex: '; *LAVA[ _]([^;/]+) Build' 2647 device_replacement: '$1' 2648 brand_replacement: 'Lava' 2649 model_replacement: '$1' 2650 2651 ######### 2652 # Lemon 2653 # @ref: http://www.lemonmobiles.com/products.php?type=1 2654 ######### 2655 - regex: '; *(?:(Aspire A1)|(?:LEMON|Lemon)[ _]([^;/]+))_? Build' 2656 device_replacement: 'Lemon $1$2' 2657 brand_replacement: 'Lemon' 2658 model_replacement: '$1$2' 2659 2660 ######### 2661 # Lenco 2662 # @ref: http://www.lenco.com/c/tablets/ 2663 ######### 2664 - regex: '; *(TAB-1012) Build/' 2665 device_replacement: 'Lenco $1' 2666 brand_replacement: 'Lenco' 2667 model_replacement: '$1' 2668 - regex: '; Lenco ([^;/]+) Build/' 2669 device_replacement: 'Lenco $1' 2670 brand_replacement: 'Lenco' 2671 model_replacement: '$1' 2672 2673 ######### 2674 # Lenovo 2675 # @ref: http://support.lenovo.com/en_GB/downloads/default.page?# 2676 ######### 2677 - regex: '; *(A1_07|A2107A-H|S2005A-H|S1-37AH0) Build' 2678 device_replacement: '$1' 2679 brand_replacement: 'Lenovo' 2680 model_replacement: '$1' 2681 - regex: '; *(Idea[Tp]ab)[ _]([^;/]+);? Build' 2682 device_replacement: 'Lenovo $1 $2' 2683 brand_replacement: 'Lenovo' 2684 model_replacement: '$1 $2' 2685 - regex: '; *(Idea(?:Tab|pad)) ?([^;/]+) Build' 2686 device_replacement: 'Lenovo $1 $2' 2687 brand_replacement: 'Lenovo' 2688 model_replacement: '$1 $2' 2689 - regex: '; *(ThinkPad) ?(Tablet) Build/' 2690 device_replacement: 'Lenovo $1 $2' 2691 brand_replacement: 'Lenovo' 2692 model_replacement: '$1 $2' 2693 - regex: '; *(?:LNV-)?(?:=?[Ll]enovo[ _\-]?|LENOVO[ _])+(.+?)(?:Build|[;/\)])' 2694 device_replacement: 'Lenovo $1' 2695 brand_replacement: 'Lenovo' 2696 model_replacement: '$1' 2697 - regex: '[;,] (?:Vodafone )?(SmartTab) ?(II) ?(\d+) Build/' 2698 device_replacement: 'Lenovo $1 $2 $3' 2699 brand_replacement: 'Lenovo' 2700 model_replacement: '$1 $2 $3' 2701 - regex: '; *(?:Ideapad )?K1 Build/' 2702 device_replacement: 'Lenovo Ideapad K1' 2703 brand_replacement: 'Lenovo' 2704 model_replacement: 'Ideapad K1' 2705 - regex: '; *(3GC101|3GW10[01]|A390) Build/' 2706 device_replacement: '$1' 2707 brand_replacement: 'Lenovo' 2708 model_replacement: '$1' 2709 - regex: '\b(?:Lenovo|LENOVO)+[ _\-]?([^,;:/ ]+)' 2710 device_replacement: 'Lenovo $1' 2711 brand_replacement: 'Lenovo' 2712 model_replacement: '$1' 2713 2714 ######### 2715 # Lexibook 2716 # @ref: http://www.lexibook.com/fr 2717 ######### 2718 - regex: '; *(MFC\d+)[A-Z]{2}([^;,/]*),? Build' 2719 device_replacement: '$1$2' 2720 brand_replacement: 'Lexibook' 2721 model_replacement: '$1$2' 2722 2723 ######### 2724 # LG 2725 # @ref: http://www.lg.com/uk/mobile 2726 ######### 2727 - regex: '; *(E[34][0-9]{2}|LS[6-8][0-9]{2}|VS[6-9][0-9]+[^;/]+|Nexus 4|Nexus 5X?|GT540f?|Optimus (?:2X|G|4X HD)|OptimusX4HD) *(?:Build|;)' 2728 device_replacement: '$1' 2729 brand_replacement: 'LG' 2730 model_replacement: '$1' 2731 - regex: '[;:] *(L-\d+[A-Z]|LGL\d+[A-Z]?)(?:/V\d+)? *(?:Build|[;\)])' 2732 device_replacement: '$1' 2733 brand_replacement: 'LG' 2734 model_replacement: '$1' 2735 - regex: '; *(LG-)([A-Z]{1,2}\d{2,}[^,;/\)\(]*?)(?:Build| V\d+|[,;/\)\(]|$)' 2736 device_replacement: '$1$2' 2737 brand_replacement: 'LG' 2738 model_replacement: '$2' 2739 - regex: '; *(LG[ \-]|LG)([^;/]+)[;/]? Build' 2740 device_replacement: '$1$2' 2741 brand_replacement: 'LG' 2742 model_replacement: '$2' 2743 - regex: '^(LG)-([^;/]+)/ Mozilla/.*; Android' 2744 device_replacement: '$1 $2' 2745 brand_replacement: 'LG' 2746 model_replacement: '$2' 2747 - regex: '(Web0S); Linux/(SmartTV)' 2748 device_replacement: 'LG $1 $2' 2749 brand_replacement: 'LG' 2750 model_replacement: '$1 $2' 2751 2752 ######### 2753 # Malata 2754 # @ref: http://www.malata.com/en/products.aspx?classid=680 2755 ######### 2756 - regex: '; *((?:SMB|smb)[^;/]+) Build/' 2757 device_replacement: '$1' 2758 brand_replacement: 'Malata' 2759 model_replacement: '$1' 2760 - regex: '; *(?:Malata|MALATA) ([^;/]+) Build/' 2761 device_replacement: '$1' 2762 brand_replacement: 'Malata' 2763 model_replacement: '$1' 2764 2765 ######### 2766 # Manta 2767 # @ref: http://www.manta.com.pl/en 2768 ######### 2769 - regex: '; *(MS[45][0-9]{3}|MID0[568][NS]?|MID[1-9]|MID[78]0[1-9]|MID970[1-9]|MID100[1-9]) Build/' 2770 device_replacement: '$1' 2771 brand_replacement: 'Manta' 2772 model_replacement: '$1' 2773 2774 ######### 2775 # Match 2776 # @ref: http://www.match.net.cn/products.asp 2777 ######### 2778 - regex: '; *(M1052|M806|M9000|M9100|M9701|MID100|MID120|MID125|MID130|MID135|MID140|MID701|MID710|MID713|MID727|MID728|MID731|MID732|MID733|MID735|MID736|MID737|MID760|MID800|MID810|MID820|MID830|MID833|MID835|MID860|MID900|MID930|MID933|MID960|MID980) Build/' 2779 device_replacement: '$1' 2780 brand_replacement: 'Match' 2781 model_replacement: '$1' 2782 2783 ######### 2784 # Maxx 2785 # @ref: http://www.maxxmobile.in/ 2786 # @models: Maxx MSD7-Play, Maxx MX245+ Trance, Maxx AX8 Race, Maxx MSD7 3G- AX50, Maxx Genx Droid 7 - AX40, Maxx AX5 Duo, 2787 # Maxx AX3 Duo, Maxx AX3, Maxx AX8 Note II (Note 2), Maxx AX8 Note I, Maxx AX8, Maxx AX5 Plus, Maxx MSD7 Smarty, 2788 # Maxx AX9Z Race, 2789 # Maxx MT150, Maxx MQ601, Maxx M2020, Maxx Sleek MX463neo, Maxx MX525, Maxx MX192-Tune, Maxx Genx Droid 7 AX353, 2790 # @note: Need more User-Agents!!! 2791 ######### 2792 - regex: '; *(GenxDroid7|MSD7.*|AX\d.*|Tab 701|Tab 722) Build/' 2793 device_replacement: 'Maxx $1' 2794 brand_replacement: 'Maxx' 2795 model_replacement: '$1' 2796 2797 ######### 2798 # Mediacom 2799 # @ref: http://www.mediacomeurope.it/ 2800 ######### 2801 - regex: '; *(M-PP[^;/]+|PhonePad ?\d{2,}[^;/]+) Build' 2802 device_replacement: 'Mediacom $1' 2803 brand_replacement: 'Mediacom' 2804 model_replacement: '$1' 2805 - regex: '; *(M-MP[^;/]+|SmartPad ?\d{2,}[^;/]+) Build' 2806 device_replacement: 'Mediacom $1' 2807 brand_replacement: 'Mediacom' 2808 model_replacement: '$1' 2809 2810 ######### 2811 # Medion 2812 # @ref: http://www.medion.com/en/ 2813 ######### 2814 - regex: '; *(?:MD_)?LIFETAB[ _]([^;/]+) Build' 2815 regex_flag: 'i' 2816 device_replacement: 'Medion Lifetab $1' 2817 brand_replacement: 'Medion' 2818 model_replacement: 'Lifetab $1' 2819 - regex: '; *MEDION ([^;/]+) Build' 2820 device_replacement: 'Medion $1' 2821 brand_replacement: 'Medion' 2822 model_replacement: '$1' 2823 2824 ######### 2825 # Meizu 2826 # @ref: http://www.meizu.com 2827 ######### 2828 - regex: '; *(M030|M031|M035|M040|M065|m9) Build' 2829 device_replacement: 'Meizu $1' 2830 brand_replacement: 'Meizu' 2831 model_replacement: '$1' 2832 - regex: '; *(?:meizu_|MEIZU )(.+?) *(?:Build|[;\)])' 2833 device_replacement: 'Meizu $1' 2834 brand_replacement: 'Meizu' 2835 model_replacement: '$1' 2836 2837 ######### 2838 # Micromax 2839 # @ref: http://www.micromaxinfo.com 2840 ######### 2841 - regex: '; *(?:Micromax[ _](A111|A240)|(A111|A240)) Build' 2842 regex_flag: 'i' 2843 device_replacement: 'Micromax $1$2' 2844 brand_replacement: 'Micromax' 2845 model_replacement: '$1$2' 2846 - regex: '; *Micromax[ _](A\d{2,3}[^;/]*) Build' 2847 regex_flag: 'i' 2848 device_replacement: 'Micromax $1' 2849 brand_replacement: 'Micromax' 2850 model_replacement: '$1' 2851 # be careful here with Acer e.g. A500 2852 - regex: '; *(A\d{2}|A[12]\d{2}|A90S|A110Q) Build' 2853 regex_flag: 'i' 2854 device_replacement: 'Micromax $1' 2855 brand_replacement: 'Micromax' 2856 model_replacement: '$1' 2857 - regex: '; *Micromax[ _](P\d{3}[^;/]*) Build' 2858 regex_flag: 'i' 2859 device_replacement: 'Micromax $1' 2860 brand_replacement: 'Micromax' 2861 model_replacement: '$1' 2862 - regex: '; *(P\d{3}|P\d{3}\(Funbook\)) Build' 2863 regex_flag: 'i' 2864 device_replacement: 'Micromax $1' 2865 brand_replacement: 'Micromax' 2866 model_replacement: '$1' 2867 2868 ######### 2869 # Mito 2870 # @ref: http://new.mitomobile.com/ 2871 ######### 2872 - regex: '; *(MITO)[ _\-]?([^;/]+) Build' 2873 regex_flag: 'i' 2874 device_replacement: '$1 $2' 2875 brand_replacement: 'Mito' 2876 model_replacement: '$2' 2877 2878 ######### 2879 # Mobistel 2880 # @ref: http://www.mobistel.com/ 2881 ######### 2882 - regex: '; *(Cynus)[ _](F5|T\d|.+?) *(?:Build|[;/\)])' 2883 regex_flag: 'i' 2884 device_replacement: '$1 $2' 2885 brand_replacement: 'Mobistel' 2886 model_replacement: '$1 $2' 2887 2888 ######### 2889 # Modecom 2890 # @ref: http://www.modecom.eu/tablets/portal/ 2891 ######### 2892 - regex: '; *(MODECOM )?(FreeTab) ?([^;/]+) Build' 2893 regex_flag: 'i' 2894 device_replacement: '$1$2 $3' 2895 brand_replacement: 'Modecom' 2896 model_replacement: '$2 $3' 2897 - regex: '; *(MODECOM )([^;/]+) Build' 2898 regex_flag: 'i' 2899 device_replacement: '$1 $2' 2900 brand_replacement: 'Modecom' 2901 model_replacement: '$2' 2902 2903 ######### 2904 # Motorola 2905 # @ref: http://www.motorola.com/us/shop-all-mobile-phones/ 2906 ######### 2907 - regex: '; *(MZ\d{3}\+?|MZ\d{3} 4G|Xoom|XOOM[^;/]*) Build' 2908 device_replacement: 'Motorola $1' 2909 brand_replacement: 'Motorola' 2910 model_replacement: '$1' 2911 - regex: '; *(Milestone )(XT[^;/]*) Build' 2912 device_replacement: 'Motorola $1$2' 2913 brand_replacement: 'Motorola' 2914 model_replacement: '$2' 2915 - regex: '; *(Motoroi ?x|Droid X|DROIDX) Build' 2916 regex_flag: 'i' 2917 device_replacement: 'Motorola $1' 2918 brand_replacement: 'Motorola' 2919 model_replacement: 'DROID X' 2920 - regex: '; *(Droid[^;/]*|DROID[^;/]*|Milestone[^;/]*|Photon|Triumph|Devour|Titanium) Build' 2921 device_replacement: 'Motorola $1' 2922 brand_replacement: 'Motorola' 2923 model_replacement: '$1' 2924 - regex: '; *(A555|A85[34][^;/]*|A95[356]|ME[58]\d{2}\+?|ME600|ME632|ME722|MB\d{3}\+?|MT680|MT710|MT870|MT887|MT917|WX435|WX453|WX44[25]|XT\d{3,4}[A-Z\+]*|CL[iI]Q|CL[iI]Q XT) Build' 2925 device_replacement: '$1' 2926 brand_replacement: 'Motorola' 2927 model_replacement: '$1' 2928 - regex: '; *(Motorola MOT-|Motorola[ _\-]|MOT\-?)([^;/]+) Build' 2929 device_replacement: '$1$2' 2930 brand_replacement: 'Motorola' 2931 model_replacement: '$2' 2932 - regex: '; *(Moto[_ ]?|MOT\-)([^;/]+) Build' 2933 device_replacement: '$1$2' 2934 brand_replacement: 'Motorola' 2935 model_replacement: '$2' 2936 2937 ######### 2938 # MpMan 2939 # @ref: http://www.mpmaneurope.com 2940 ######### 2941 - regex: '; *((?:MP[DQ]C|MPG\d{1,4}|MP\d{3,4}|MID(?:(?:10[234]|114|43|7[247]|8[24]|7)C|8[01]1))[^;/]*) Build' 2942 device_replacement: '$1' 2943 brand_replacement: 'Mpman' 2944 model_replacement: '$1' 2945 2946 ######### 2947 # MSI 2948 # @ref: http://www.msi.com/product/windpad/ 2949 ######### 2950 - regex: '; *(?:MSI[ _])?(Primo\d+|Enjoy[ _\-][^;/]+) Build' 2951 regex_flag: 'i' 2952 device_replacement: '$1' 2953 brand_replacement: 'Msi' 2954 model_replacement: '$1' 2955 2956 ######### 2957 # Multilaser 2958 # http://www.multilaser.com.br/listagem_produtos.php?cat=5 2959 ######### 2960 - regex: '; *Multilaser[ _]([^;/]+) Build' 2961 device_replacement: '$1' 2962 brand_replacement: 'Multilaser' 2963 model_replacement: '$1' 2964 2965 ######### 2966 # MyPhone 2967 # @ref: http://myphone.com.ph/ 2968 ######### 2969 - regex: '; *(My)[_]?(Pad)[ _]([^;/]+) Build' 2970 device_replacement: '$1$2 $3' 2971 brand_replacement: 'MyPhone' 2972 model_replacement: '$1$2 $3' 2973 - regex: '; *(My)\|?(Phone)[ _]([^;/]+) Build' 2974 device_replacement: '$1$2 $3' 2975 brand_replacement: 'MyPhone' 2976 model_replacement: '$3' 2977 - regex: '; *(A\d+)[ _](Duo)? Build' 2978 regex_flag: 'i' 2979 device_replacement: '$1 $2' 2980 brand_replacement: 'MyPhone' 2981 model_replacement: '$1 $2' 2982 2983 ######### 2984 # Mytab 2985 # @ref: http://www.mytab.eu/en/category/mytab-products/ 2986 ######### 2987 - regex: '; *(myTab[^;/]*) Build' 2988 device_replacement: '$1' 2989 brand_replacement: 'Mytab' 2990 model_replacement: '$1' 2991 2992 ######### 2993 # Nabi 2994 # @ref: https://www.nabitablet.com 2995 ######### 2996 - regex: '; *(NABI2?-)([^;/]+) Build/' 2997 device_replacement: '$1$2' 2998 brand_replacement: 'Nabi' 2999 model_replacement: '$2' 3000 3001 ######### 3002 # Nec Medias 3003 # @ref: http://www.n-keitai.com/ 3004 ######### 3005 - regex: '; *(N-\d+[CDE]) Build/' 3006 device_replacement: '$1' 3007 brand_replacement: 'Nec' 3008 model_replacement: '$1' 3009 - regex: '; ?(NEC-)(.*) Build/' 3010 device_replacement: '$1$2' 3011 brand_replacement: 'Nec' 3012 model_replacement: '$2' 3013 - regex: '; *(LT-NA7) Build/' 3014 device_replacement: '$1' 3015 brand_replacement: 'Nec' 3016 model_replacement: 'Lifetouch Note' 3017 3018 ######### 3019 # Nextbook 3020 # @ref: http://nextbookusa.com 3021 ######### 3022 - regex: '; *(NXM\d+[A-z0-9_]*|Next\d[A-z0-9_ \-]*|NEXT\d[A-z0-9_ \-]*|Nextbook [A-z0-9_ ]*|DATAM803HC|M805)(?: Build|[\);])' 3023 device_replacement: '$1' 3024 brand_replacement: 'Nextbook' 3025 model_replacement: '$1' 3026 3027 ######### 3028 # Nokia 3029 # @ref: http://www.nokia.com 3030 ######### 3031 - regex: '; *(Nokia)([ _\-]*)([^;/]*) Build' 3032 regex_flag: 'i' 3033 device_replacement: '$1$2$3' 3034 brand_replacement: 'Nokia' 3035 model_replacement: '$3' 3036 3037 ######### 3038 # Nook 3039 # @ref: 3040 # TODO nook browser/1.0 3041 ######### 3042 - regex: '; *(Nook ?|Barnes & Noble Nook |BN )([^;/]+) Build' 3043 device_replacement: '$1$2' 3044 brand_replacement: 'Nook' 3045 model_replacement: '$2' 3046 - regex: '; *(NOOK )?(BNRV200|BNRV200A|BNTV250|BNTV250A|BNTV400|BNTV600|LogicPD Zoom2) Build' 3047 device_replacement: '$1$2' 3048 brand_replacement: 'Nook' 3049 model_replacement: '$2' 3050 - regex: '; Build/(Nook)' 3051 device_replacement: '$1' 3052 brand_replacement: 'Nook' 3053 model_replacement: 'Tablet' 3054 3055 ######### 3056 # Olivetti 3057 # @ref: http://www.olivetti.de/EN/Page/t02/view_html?idp=348 3058 ######### 3059 - regex: '; *(OP110|OliPad[^;/]+) Build' 3060 device_replacement: 'Olivetti $1' 3061 brand_replacement: 'Olivetti' 3062 model_replacement: '$1' 3063 3064 ######### 3065 # Omega 3066 # @ref: http://omega-technology.eu/en/produkty/346/tablets 3067 # @note: MID tablets might get matched by CobyKyros first 3068 # @models: (T107|MID(?:700[2-5]|7031|7108|7132|750[02]|8001|8500|9001|971[12]) 3069 ######### 3070 - regex: '; *OMEGA[ _\-](MID[^;/]+) Build' 3071 device_replacement: 'Omega $1' 3072 brand_replacement: 'Omega' 3073 model_replacement: '$1' 3074 - regex: '^(MID7500|MID\d+) Mozilla/5\.0 \(iPad;' 3075 device_replacement: 'Omega $1' 3076 brand_replacement: 'Omega' 3077 model_replacement: '$1' 3078 3079 ######### 3080 # OpenPeak 3081 # @ref: https://support.google.com/googleplay/answer/1727131?hl=en 3082 ######### 3083 - regex: '; *((?:CIUS|cius)[^;/]*) Build' 3084 device_replacement: 'Openpeak $1' 3085 brand_replacement: 'Openpeak' 3086 model_replacement: '$1' 3087 3088 ######### 3089 # Oppo 3090 # @ref: http://en.oppo.com/products/ 3091 ######### 3092 - regex: '; *(Find ?(?:5|7a)|R8[012]\d{1,2}|T703\d{0,1}|U70\d{1,2}T?|X90\d{1,2}) Build' 3093 device_replacement: 'Oppo $1' 3094 brand_replacement: 'Oppo' 3095 model_replacement: '$1' 3096 - regex: '; *OPPO ?([^;/]+) Build/' 3097 device_replacement: 'Oppo $1' 3098 brand_replacement: 'Oppo' 3099 model_replacement: '$1' 3100 3101 ######### 3102 # Odys 3103 # @ref: http://odys.de 3104 ######### 3105 - regex: '; *(?:Odys\-|ODYS\-|ODYS )([^;/]+) Build' 3106 device_replacement: 'Odys $1' 3107 brand_replacement: 'Odys' 3108 model_replacement: '$1' 3109 - regex: '; *(SELECT) ?(7) Build' 3110 device_replacement: 'Odys $1 $2' 3111 brand_replacement: 'Odys' 3112 model_replacement: '$1 $2' 3113 - regex: '; *(PEDI)_(PLUS)_(W) Build' 3114 device_replacement: 'Odys $1 $2 $3' 3115 brand_replacement: 'Odys' 3116 model_replacement: '$1 $2 $3' 3117 # Weltbild - Tablet PC 4 = Cat Phoenix = Odys Tablet PC 4? 3118 - regex: '; *(AEON|BRAVIO|FUSION|FUSION2IN1|Genio|EOS10|IEOS[^;/]*|IRON|Loox|LOOX|LOOX Plus|Motion|NOON|NOON_PRO|NEXT|OPOS|PEDI[^;/]*|PRIME[^;/]*|STUDYTAB|TABLO|Tablet-PC-4|UNO_X8|XELIO[^;/]*|Xelio ?\d+ ?[Pp]ro|XENO10|XPRESS PRO) Build' 3119 device_replacement: 'Odys $1' 3120 brand_replacement: 'Odys' 3121 model_replacement: '$1' 3122 3123 ######### 3124 # OnePlus 3125 # @ref https://oneplus.net/ 3126 ######### 3127 - regex: '; (ONE [a-zA-Z]\d+) Build/' 3128 device_replacement: 'OnePlus $1' 3129 brand_replacement: 'OnePlus' 3130 model_replacement: '$1' 3131 - regex: '; (ONEPLUS [a-zA-Z]\d+) Build/' 3132 device_replacement: 'OnePlus $1' 3133 brand_replacement: 'OnePlus' 3134 model_replacement: '$1' 3135 3136 ######### 3137 # Orion 3138 # @ref: http://www.orion.ua/en/products/computer-products/tablet-pcs.html 3139 ######### 3140 - regex: '; *(TP-\d+) Build/' 3141 device_replacement: 'Orion $1' 3142 brand_replacement: 'Orion' 3143 model_replacement: '$1' 3144 3145 ######### 3146 # PackardBell 3147 # @ref: http://www.packardbell.com/pb/en/AE/content/productgroup/tablets 3148 ######### 3149 - regex: '; *(G100W?) Build/' 3150 device_replacement: 'PackardBell $1' 3151 brand_replacement: 'PackardBell' 3152 model_replacement: '$1' 3153 3154 ######### 3155 # Panasonic 3156 # @ref: http://panasonic.jp/mobile/ 3157 # @models: T11, T21, T31, P11, P51, Eluga Power, Eluga DL1 3158 # @models: (tab) Toughpad FZ-A1, Toughpad JT-B1 3159 ######### 3160 - regex: '; *(Panasonic)[_ ]([^;/]+) Build' 3161 device_replacement: '$1 $2' 3162 brand_replacement: '$1' 3163 model_replacement: '$2' 3164 # Toughpad 3165 - regex: '; *(FZ-A1B|JT-B1) Build' 3166 device_replacement: 'Panasonic $1' 3167 brand_replacement: 'Panasonic' 3168 model_replacement: '$1' 3169 # Eluga Power 3170 - regex: '; *(dL1|DL1) Build' 3171 device_replacement: 'Panasonic $1' 3172 brand_replacement: 'Panasonic' 3173 model_replacement: '$1' 3174 3175 ######### 3176 # Pantech 3177 # @href: http://www.pantech.co.kr/en/prod/prodList.do?gbrand=PANTECH 3178 # @href: http://www.pantech.co.kr/en/prod/prodList.do?gbrand=VEGA 3179 # @models: ADR8995, ADR910L, ADR930VW, C790, CDM8992, CDM8999, IS06, IS11PT, P2000, P2020, P2030, P4100, P5000, P6010, P6020, P6030, P7000, P7040, P8000, P8010, P9020, P9050, P9060, P9070, P9090, PT001, PT002, PT003, TXT8040, TXT8045, VEGA PTL21 3180 ######### 3181 - regex: '; *(SKY[ _])?(IM\-[AT]\d{3}[^;/]+).* Build/' 3182 device_replacement: 'Pantech $1$2' 3183 brand_replacement: 'Pantech' 3184 model_replacement: '$1$2' 3185 - regex: '; *((?:ADR8995|ADR910L|ADR930L|ADR930VW|PTL21|P8000)(?: 4G)?) Build/' 3186 device_replacement: '$1' 3187 brand_replacement: 'Pantech' 3188 model_replacement: '$1' 3189 - regex: '; *Pantech([^;/]+).* Build/' 3190 device_replacement: 'Pantech $1' 3191 brand_replacement: 'Pantech' 3192 model_replacement: '$1' 3193 3194 ######### 3195 # Papayre 3196 # @ref: http://grammata.es/ 3197 ######### 3198 - regex: '; *(papyre)[ _\-]([^;/]+) Build/' 3199 regex_flag: 'i' 3200 device_replacement: '$1 $2' 3201 brand_replacement: 'Papyre' 3202 model_replacement: '$2' 3203 3204 ######### 3205 # Pearl 3206 # @ref: http://www.pearl.de/c-1540.shtml 3207 ######### 3208 - regex: '; *(?:Touchlet )?(X10\.[^;/]+) Build/' 3209 device_replacement: 'Pearl $1' 3210 brand_replacement: 'Pearl' 3211 model_replacement: '$1' 3212 3213 ######### 3214 # Phicomm 3215 # @ref: http://www.phicomm.com.cn/ 3216 ######### 3217 - regex: '; PHICOMM (i800) Build/' 3218 device_replacement: 'Phicomm $1' 3219 brand_replacement: 'Phicomm' 3220 model_replacement: '$1' 3221 - regex: '; PHICOMM ([^;/]+) Build/' 3222 device_replacement: 'Phicomm $1' 3223 brand_replacement: 'Phicomm' 3224 model_replacement: '$1' 3225 - regex: '; *(FWS\d{3}[^;/]+) Build/' 3226 device_replacement: 'Phicomm $1' 3227 brand_replacement: 'Phicomm' 3228 model_replacement: '$1' 3229 3230 ######### 3231 # Philips 3232 # @ref: http://www.support.philips.com/support/catalog/products.jsp?_dyncharset=UTF-8&country=&categoryid=MOBILE_PHONES_SMART_SU_CN_CARE&userLanguage=en&navCount=2&groupId=PC_PRODUCTS_AND_PHONES_GR_CN_CARE&catalogType=&navAction=push&userCountry=cn&title=Smartphones&cateId=MOBILE_PHONES_CA_CN_CARE 3233 # @TODO: Philips Tablets User-Agents missing! 3234 # @ref: http://www.support.philips.com/support/catalog/products.jsp?_dyncharset=UTF-8&country=&categoryid=ENTERTAINMENT_TABLETS_SU_CN_CARE&userLanguage=en&navCount=0&groupId=&catalogType=&navAction=push&userCountry=cn&title=Entertainment+Tablets&cateId=TABLETS_CA_CN_CARE 3235 ######### 3236 # @note: this a best guess according to available philips models. Need more User-Agents 3237 - regex: '; *(D633|D822|D833|T539|T939|V726|W335|W336|W337|W3568|W536|W5510|W626|W632|W6350|W6360|W6500|W732|W736|W737|W7376|W820|W832|W8355|W8500|W8510|W930) Build' 3238 device_replacement: '$1' 3239 brand_replacement: 'Philips' 3240 model_replacement: '$1' 3241 - regex: '; *(?:Philips|PHILIPS)[ _]([^;/]+) Build' 3242 device_replacement: 'Philips $1' 3243 brand_replacement: 'Philips' 3244 model_replacement: '$1' 3245 3246 ######### 3247 # Pipo 3248 # @ref: http://www.pipo.cn/En/ 3249 ######### 3250 - regex: 'Android 4\..*; *(M[12356789]|U[12368]|S[123])\ ?(pro)? Build' 3251 device_replacement: 'Pipo $1$2' 3252 brand_replacement: 'Pipo' 3253 model_replacement: '$1$2' 3254 3255 ######### 3256 # Ployer 3257 # @ref: http://en.ployer.cn/ 3258 ######### 3259 - regex: '; *(MOMO[^;/]+) Build' 3260 device_replacement: '$1' 3261 brand_replacement: 'Ployer' 3262 model_replacement: '$1' 3263 3264 ######### 3265 # Polaroid/ Acho 3266 # @ref: http://polaroidstore.com/store/start.asp?category_id=382&category_id2=0&order=title&filter1=&filter2=&filter3=&view=all 3267 ######### 3268 - regex: '; *(?:Polaroid[ _])?((?:MIDC\d{3,}|PMID\d{2,}|PTAB\d{3,})[^;/]*)(\/[^;/]*)? Build/' 3269 device_replacement: '$1' 3270 brand_replacement: 'Polaroid' 3271 model_replacement: '$1' 3272 - regex: '; *(?:Polaroid )(Tablet) Build/' 3273 device_replacement: '$1' 3274 brand_replacement: 'Polaroid' 3275 model_replacement: '$1' 3276 3277 ######### 3278 # Pomp 3279 # @ref: http://pompmobileshop.com/ 3280 ######### 3281 #~ TODO 3282 - regex: '; *(POMP)[ _\-](.+?) *(?:Build|[;/\)])' 3283 device_replacement: '$1 $2' 3284 brand_replacement: 'Pomp' 3285 model_replacement: '$2' 3286 3287 ######### 3288 # Positivo 3289 # @ref: http://www.positivoinformatica.com.br/www/pessoal/tablet-ypy/ 3290 ######### 3291 - regex: '; *(TB07STA|TB10STA|TB07FTA|TB10FTA) Build/' 3292 device_replacement: '$1' 3293 brand_replacement: 'Positivo' 3294 model_replacement: '$1' 3295 - regex: '; *(?:Positivo )?((?:YPY|Ypy)[^;/]+) Build/' 3296 device_replacement: '$1' 3297 brand_replacement: 'Positivo' 3298 model_replacement: '$1' 3299 3300 ######### 3301 # POV 3302 # @ref: http://www.pointofview-online.com/default2.php 3303 # @TODO: Smartphone Models MOB-3515, MOB-5045-B missing 3304 ######### 3305 - regex: '; *(MOB-[^;/]+) Build/' 3306 device_replacement: '$1' 3307 brand_replacement: 'POV' 3308 model_replacement: '$1' 3309 - regex: '; *POV[ _\-]([^;/]+) Build/' 3310 device_replacement: 'POV $1' 3311 brand_replacement: 'POV' 3312 model_replacement: '$1' 3313 - regex: '; *((?:TAB-PLAYTAB|TAB-PROTAB|PROTAB|PlayTabPro|Mobii[ _\-]|TAB-P)[^;/]*) Build/' 3314 device_replacement: 'POV $1' 3315 brand_replacement: 'POV' 3316 model_replacement: '$1' 3317 3318 ######### 3319 # Prestigio 3320 # @ref: http://www.prestigio.com/catalogue/MultiPhones 3321 # @ref: http://www.prestigio.com/catalogue/MultiPads 3322 ######### 3323 - regex: '; *(?:Prestigio )?((?:PAP|PMP)\d[^;/]+) Build/' 3324 device_replacement: 'Prestigio $1' 3325 brand_replacement: 'Prestigio' 3326 model_replacement: '$1' 3327 3328 ######### 3329 # Proscan 3330 # @ref: http://www.proscanvideo.com/products-search.asp?itemClass=TABLET&itemnmbr= 3331 ######### 3332 - regex: '; *(PLT[0-9]{4}.*) Build/' 3333 device_replacement: '$1' 3334 brand_replacement: 'Proscan' 3335 model_replacement: '$1' 3336 3337 ######### 3338 # QMobile 3339 # @ref: http://www.qmobile.com.pk/ 3340 ######### 3341 - regex: '; *(A2|A5|A8|A900)_?(Classic)? Build' 3342 device_replacement: '$1 $2' 3343 brand_replacement: 'Qmobile' 3344 model_replacement: '$1 $2' 3345 - regex: '; *(Q[Mm]obile)_([^_]+)_([^_]+) Build' 3346 device_replacement: 'Qmobile $2 $3' 3347 brand_replacement: 'Qmobile' 3348 model_replacement: '$2 $3' 3349 - regex: '; *(Q\-?[Mm]obile)[_ ](A[^;/]+) Build' 3350 device_replacement: 'Qmobile $2' 3351 brand_replacement: 'Qmobile' 3352 model_replacement: '$2' 3353 3354 ######### 3355 # Qmobilevn 3356 # @ref: http://qmobile.vn/san-pham.html 3357 ######### 3358 - regex: '; *(Q\-Smart)[ _]([^;/]+) Build/' 3359 device_replacement: '$1 $2' 3360 brand_replacement: 'Qmobilevn' 3361 model_replacement: '$2' 3362 - regex: '; *(Q\-?[Mm]obile)[ _\-](S[^;/]+) Build/' 3363 device_replacement: '$1 $2' 3364 brand_replacement: 'Qmobilevn' 3365 model_replacement: '$2' 3366 3367 ######### 3368 # Quanta 3369 # @ref: ? 3370 ######### 3371 - regex: '; *(TA1013) Build' 3372 device_replacement: '$1' 3373 brand_replacement: 'Quanta' 3374 model_replacement: '$1' 3375 3376 ######### 3377 # RCA 3378 # @ref: http://rcamobilephone.com/ 3379 ######### 3380 - regex: '; (RCT\w+) Build/' 3381 device_replacement: '$1' 3382 brand_replacement: 'RCA' 3383 model_replacement: '$1' 3384 3385 ######### 3386 # Rockchip 3387 # @ref: http://www.rock-chips.com/a/cn/product/index.html 3388 # @note: manufacturer sells chipsets - I assume that these UAs are dev-boards 3389 ######### 3390 - regex: '; *(RK\d+),? Build/' 3391 device_replacement: '$1' 3392 brand_replacement: 'Rockchip' 3393 model_replacement: '$1' 3394 - regex: ' Build/(RK\d+)' 3395 device_replacement: '$1' 3396 brand_replacement: 'Rockchip' 3397 model_replacement: '$1' 3398 3399 ######### 3400 # Samsung Android Devices 3401 # @ref: http://www.samsung.com/us/mobile/cell-phones/all-products 3402 ######### 3403 - regex: '; *(SAMSUNG |Samsung )?((?:Galaxy (?:Note II|S\d)|GT-I9082|GT-I9205|GT-N7\d{3}|SM-N9005)[^;/]*)\/?[^;/]* Build/' 3404 device_replacement: 'Samsung $1$2' 3405 brand_replacement: 'Samsung' 3406 model_replacement: '$2' 3407 - regex: '; *(Google )?(Nexus [Ss](?: 4G)?) Build/' 3408 device_replacement: 'Samsung $1$2' 3409 brand_replacement: 'Samsung' 3410 model_replacement: '$2' 3411 - regex: '; *(SAMSUNG |Samsung )([^\/]*)\/[^ ]* Build/' 3412 device_replacement: 'Samsung $2' 3413 brand_replacement: 'Samsung' 3414 model_replacement: '$2' 3415 - regex: '; *(Galaxy(?: Ace| Nexus| S ?II+|Nexus S| with MCR 1.2| Mini Plus 4G)?) Build/' 3416 device_replacement: 'Samsung $1' 3417 brand_replacement: 'Samsung' 3418 model_replacement: '$1' 3419 - regex: '; *(SAMSUNG[ _\-] *)+([^;/]+) Build' 3420 device_replacement: 'Samsung $2' 3421 brand_replacement: 'Samsung' 3422 model_replacement: '$2' 3423 - regex: '; *(SAMSUNG-)?(GT\-[BINPS]\d{4}[^\/]*)(\/[^ ]*) Build' 3424 device_replacement: 'Samsung $1$2$3' 3425 brand_replacement: 'Samsung' 3426 model_replacement: '$2' 3427 - regex: '(?:; *|^)((?:GT\-[BIiNPS]\d{4}|I9\d{2}0[A-Za-z\+]?\b)[^;/\)]*?)(?:Build|Linux|MIUI|[;/\)])' 3428 device_replacement: 'Samsung $1' 3429 brand_replacement: 'Samsung' 3430 model_replacement: '$1' 3431 - regex: '; (SAMSUNG-)([A-Za-z0-9\-]+).* Build/' 3432 device_replacement: 'Samsung $1$2' 3433 brand_replacement: 'Samsung' 3434 model_replacement: '$2' 3435 - regex: '; *((?:SCH|SGH|SHV|SHW|SPH|SC|SM)\-[A-Za-z0-9 ]+)(/?[^ ]*)? Build' 3436 device_replacement: 'Samsung $1' 3437 brand_replacement: 'Samsung' 3438 model_replacement: '$1' 3439 - regex: ' ((?:SCH)\-[A-Za-z0-9 ]+)(/?[^ ]*)? Build' 3440 device_replacement: 'Samsung $1' 3441 brand_replacement: 'Samsung' 3442 model_replacement: '$1' 3443 - regex: '; *(Behold ?(?:2|II)|YP\-G[^;/]+|EK-GC100|SCL21|I9300) Build' 3444 device_replacement: 'Samsung $1' 3445 brand_replacement: 'Samsung' 3446 model_replacement: '$1' 3447 3448 ######### 3449 # Sharp 3450 # @ref: http://www.sharp-phone.com/en/index.html 3451 # @ref: http://www.android.com/devices/?country=all&m=sharp 3452 ######### 3453 - regex: '; *(SH\-?\d\d[^;/]+|SBM\d[^;/]+) Build' 3454 device_replacement: '$1' 3455 brand_replacement: 'Sharp' 3456 model_replacement: '$1' 3457 - regex: '; *(SHARP[ -])([^;/]+) Build' 3458 device_replacement: '$1$2' 3459 brand_replacement: 'Sharp' 3460 model_replacement: '$2' 3461 3462 ######### 3463 # Simvalley 3464 # @ref: http://www.simvalley-mobile.de/ 3465 ######### 3466 - regex: '; *(SPX[_\-]\d[^;/]*) Build/' 3467 device_replacement: '$1' 3468 brand_replacement: 'Simvalley' 3469 model_replacement: '$1' 3470 - regex: '; *(SX7\-PEARL\.GmbH) Build/' 3471 device_replacement: '$1' 3472 brand_replacement: 'Simvalley' 3473 model_replacement: '$1' 3474 - regex: '; *(SP[T]?\-\d{2}[^;/]*) Build/' 3475 device_replacement: '$1' 3476 brand_replacement: 'Simvalley' 3477 model_replacement: '$1' 3478 3479 ######### 3480 # SK Telesys 3481 # @ref: http://www.sk-w.com/phone/phone_list.jsp 3482 # @ref: http://www.android.com/devices/?country=all&m=sk-telesys 3483 ######### 3484 - regex: '; *(SK\-.*) Build/' 3485 device_replacement: '$1' 3486 brand_replacement: 'SKtelesys' 3487 model_replacement: '$1' 3488 3489 ######### 3490 # Skytex 3491 # @ref: http://skytex.com/android 3492 ######### 3493 - regex: '; *(?:SKYTEX|SX)-([^;/]+) Build' 3494 device_replacement: '$1' 3495 brand_replacement: 'Skytex' 3496 model_replacement: '$1' 3497 - regex: '; *(IMAGINE [^;/]+) Build' 3498 device_replacement: '$1' 3499 brand_replacement: 'Skytex' 3500 model_replacement: '$1' 3501 3502 ######### 3503 # SmartQ 3504 # @ref: http://en.smartdevices.com.cn/Products/ 3505 # @models: Z8, X7, U7H, U7, T30, T20, Ten3, V5-II, T7-3G, SmartQ5, K7, S7, Q8, T19, Ten2, Ten, R10, T7, R7, V5, V7, SmartQ7 3506 ######### 3507 - regex: '; *(SmartQ) ?([^;/]+) Build/' 3508 device_replacement: '$1 $2' 3509 brand_replacement: '$1' 3510 model_replacement: '$2' 3511 3512 ######### 3513 # Smartbitt 3514 # @ref: http://www.smartbitt.com/ 3515 # @missing: SBT Useragents 3516 ######### 3517 - regex: '; *(WF7C|WF10C|SBT[^;/]+) Build' 3518 device_replacement: '$1' 3519 brand_replacement: 'Smartbitt' 3520 model_replacement: '$1' 3521 3522 ######### 3523 # Softbank (Operator Branded Devices) 3524 # @ref: http://www.ipentec.com/document/document.aspx?page=android-useragent 3525 ######### 3526 - regex: '; *(SBM(?:003SH|005SH|006SH|007SH|102SH)) Build' 3527 device_replacement: '$1' 3528 brand_replacement: 'Sharp' 3529 model_replacement: '$1' 3530 - regex: '; *(003P|101P|101P11C|102P) Build' 3531 device_replacement: '$1' 3532 brand_replacement: 'Panasonic' 3533 model_replacement: '$1' 3534 - regex: '; *(00\dZ) Build/' 3535 device_replacement: '$1' 3536 brand_replacement: 'ZTE' 3537 model_replacement: '$1' 3538 - regex: '; HTC(X06HT) Build' 3539 device_replacement: '$1' 3540 brand_replacement: 'HTC' 3541 model_replacement: '$1' 3542 - regex: '; *(001HT|X06HT) Build' 3543 device_replacement: '$1' 3544 brand_replacement: 'HTC' 3545 model_replacement: '$1' 3546 - regex: '; *(201M) Build' 3547 device_replacement: '$1' 3548 brand_replacement: 'Motorola' 3549 model_replacement: 'XT902' 3550 3551 ######### 3552 # Trekstor 3553 # @ref: http://www.trekstor.co.uk/surftabs-en.html 3554 # @note: Must come before SonyEricsson 3555 ######### 3556 - regex: '; *(ST\d{4}.*)Build/ST' 3557 device_replacement: 'Trekstor $1' 3558 brand_replacement: 'Trekstor' 3559 model_replacement: '$1' 3560 - regex: '; *(ST\d{4}.*) Build/' 3561 device_replacement: 'Trekstor $1' 3562 brand_replacement: 'Trekstor' 3563 model_replacement: '$1' 3564 3565 ######### 3566 # SonyEricsson 3567 # @note: Must come before nokia since they also use symbian 3568 # @ref: http://www.android.com/devices/?country=all&m=sony-ericssons 3569 # @TODO: type! 3570 ######### 3571 # android matchers 3572 - regex: '; *(Sony ?Ericsson ?)([^;/]+) Build' 3573 device_replacement: '$1$2' 3574 brand_replacement: 'SonyEricsson' 3575 model_replacement: '$2' 3576 - regex: '; *((?:SK|ST|E|X|LT|MK|MT|WT)\d{2}[a-z0-9]*(?:-o)?|R800i|U20i) Build' 3577 device_replacement: '$1' 3578 brand_replacement: 'SonyEricsson' 3579 model_replacement: '$1' 3580 # TODO X\d+ is wrong 3581 - regex: '; *(Xperia (?:A8|Arc|Acro|Active|Live with Walkman|Mini|Neo|Play|Pro|Ray|X\d+)[^;/]*) Build' 3582 regex_flag: 'i' 3583 device_replacement: '$1' 3584 brand_replacement: 'SonyEricsson' 3585 model_replacement: '$1' 3586 3587 ######### 3588 # Sony 3589 # @ref: http://www.sonymobile.co.jp/index.html 3590 # @ref: http://www.sonymobile.com/global-en/products/phones/ 3591 # @ref: http://www.sony.jp/tablet/ 3592 ######### 3593 - regex: '; Sony (Tablet[^;/]+) Build' 3594 device_replacement: 'Sony $1' 3595 brand_replacement: 'Sony' 3596 model_replacement: '$1' 3597 - regex: '; Sony ([^;/]+) Build' 3598 device_replacement: 'Sony $1' 3599 brand_replacement: 'Sony' 3600 model_replacement: '$1' 3601 - regex: '; *(Sony)([A-Za-z0-9\-]+) Build' 3602 device_replacement: '$1 $2' 3603 brand_replacement: '$1' 3604 model_replacement: '$2' 3605 - regex: '; *(Xperia [^;/]+) Build' 3606 device_replacement: '$1' 3607 brand_replacement: 'Sony' 3608 model_replacement: '$1' 3609 - regex: '; *(C(?:1[0-9]|2[0-9]|53|55|6[0-9])[0-9]{2}|D[25]\d{3}|D6[56]\d{2}) Build' 3610 device_replacement: '$1' 3611 brand_replacement: 'Sony' 3612 model_replacement: '$1' 3613 - regex: '; *(SGP\d{3}|SGPT\d{2}) Build' 3614 device_replacement: '$1' 3615 brand_replacement: 'Sony' 3616 model_replacement: '$1' 3617 - regex: '; *(NW-Z1000Series) Build' 3618 device_replacement: '$1' 3619 brand_replacement: 'Sony' 3620 model_replacement: '$1' 3621 3622 ########## 3623 # Sony PlayStation 3624 # @ref: http://playstation.com 3625 # The Vita spoofs the Kindle 3626 ########## 3627 - regex: 'PLAYSTATION 3' 3628 device_replacement: 'PlayStation 3' 3629 brand_replacement: 'Sony' 3630 model_replacement: 'PlayStation 3' 3631 - regex: '(PlayStation (?:Portable|Vita|\d+))' 3632 device_replacement: '$1' 3633 brand_replacement: 'Sony' 3634 model_replacement: '$1' 3635 3636 ######### 3637 # Spice 3638 # @ref: http://www.spicemobilephones.co.in/ 3639 ######### 3640 - regex: '; *((?:CSL_Spice|Spice|SPICE|CSL)[ _\-]?)?([Mm][Ii])([ _\-])?(\d{3}[^;/]*) Build/' 3641 device_replacement: '$1$2$3$4' 3642 brand_replacement: 'Spice' 3643 model_replacement: 'Mi$4' 3644 3645 ######### 3646 # Sprint (Operator Branded Devices) 3647 # @ref: 3648 ######### 3649 - regex: '; *(Sprint )(.+?) *(?:Build|[;/])' 3650 device_replacement: '$1$2' 3651 brand_replacement: 'Sprint' 3652 model_replacement: '$2' 3653 - regex: '\b(Sprint)[: ]([^;,/ ]+)' 3654 device_replacement: '$1$2' 3655 brand_replacement: 'Sprint' 3656 model_replacement: '$2' 3657 3658 ######### 3659 # Tagi 3660 # @ref: ?? 3661 ######### 3662 - regex: '; *(TAGI[ ]?)(MID) ?([^;/]+) Build/' 3663 device_replacement: '$1$2$3' 3664 brand_replacement: 'Tagi' 3665 model_replacement: '$2$3' 3666 3667 ######### 3668 # Tecmobile 3669 # @ref: http://www.tecmobile.com/ 3670 ######### 3671 - regex: '; *(Oyster500|Opal 800) Build' 3672 device_replacement: 'Tecmobile $1' 3673 brand_replacement: 'Tecmobile' 3674 model_replacement: '$1' 3675 3676 ######### 3677 # Tecno 3678 # @ref: www.tecno-mobile.com/‎ 3679 ######### 3680 - regex: '; *(TECNO[ _])([^;/]+) Build/' 3681 device_replacement: '$1$2' 3682 brand_replacement: 'Tecno' 3683 model_replacement: '$2' 3684 3685 ######### 3686 # Telechips, Techvision evaluation boards 3687 # @ref: 3688 ######### 3689 - regex: '; *Android for (Telechips|Techvision) ([^ ]+) ' 3690 regex_flag: 'i' 3691 device_replacement: '$1 $2' 3692 brand_replacement: '$1' 3693 model_replacement: '$2' 3694 3695 ######### 3696 # Telstra 3697 # @ref: http://www.telstra.com.au/home-phone/thub-2/ 3698 # @ref: https://support.google.com/googleplay/answer/1727131?hl=en 3699 ######### 3700 - regex: '; *(T-Hub2) Build/' 3701 device_replacement: '$1' 3702 brand_replacement: 'Telstra' 3703 model_replacement: '$1' 3704 3705 ######### 3706 # Terra 3707 # @ref: http://www.wortmann.de/ 3708 ######### 3709 - regex: '; *(PAD) ?(100[12]) Build/' 3710 device_replacement: 'Terra $1$2' 3711 brand_replacement: 'Terra' 3712 model_replacement: '$1$2' 3713 3714 ######### 3715 # Texet 3716 # @ref: http://www.texet.ru/tablet/ 3717 ######### 3718 - regex: '; *(T[BM]-\d{3}[^;/]+) Build/' 3719 device_replacement: '$1' 3720 brand_replacement: 'Texet' 3721 model_replacement: '$1' 3722 3723 ######### 3724 # Thalia 3725 # @ref: http://www.thalia.de/shop/tolino-shine-ereader/show/ 3726 ######### 3727 - regex: '; *(tolino [^;/]+) Build' 3728 device_replacement: '$1' 3729 brand_replacement: 'Thalia' 3730 model_replacement: '$1' 3731 - regex: '; *Build/.* (TOLINO_BROWSER)' 3732 device_replacement: '$1' 3733 brand_replacement: 'Thalia' 3734 model_replacement: 'Tolino Shine' 3735 3736 ######### 3737 # Thl 3738 # @ref: http://en.thl.com.cn/Mobile 3739 # @ref: http://thlmobilestore.com 3740 ######### 3741 - regex: '; *(?:CJ[ -])?(ThL|THL)[ -]([^;/]+) Build/' 3742 device_replacement: '$1 $2' 3743 brand_replacement: 'Thl' 3744 model_replacement: '$2' 3745 - regex: '; *(T100|T200|T5|W100|W200|W8s) Build/' 3746 device_replacement: '$1' 3747 brand_replacement: 'Thl' 3748 model_replacement: '$1' 3749 3750 ######### 3751 # T-Mobile (Operator Branded Devices) 3752 ######### 3753 # @ref: https://en.wikipedia.org/wiki/HTC_Hero 3754 - regex: '; *(T-Mobile[ _]G2[ _]Touch) Build' 3755 device_replacement: '$1' 3756 brand_replacement: 'HTC' 3757 model_replacement: 'Hero' 3758 # @ref: https://en.wikipedia.org/wiki/HTC_Desire_Z 3759 - regex: '; *(T-Mobile[ _]G2) Build' 3760 device_replacement: '$1' 3761 brand_replacement: 'HTC' 3762 model_replacement: 'Desire Z' 3763 - regex: '; *(T-Mobile myTouch Q) Build' 3764 device_replacement: '$1' 3765 brand_replacement: 'Huawei' 3766 model_replacement: 'U8730' 3767 - regex: '; *(T-Mobile myTouch) Build' 3768 device_replacement: '$1' 3769 brand_replacement: 'Huawei' 3770 model_replacement: 'U8680' 3771 - regex: '; *(T-Mobile_Espresso) Build' 3772 device_replacement: '$1' 3773 brand_replacement: 'HTC' 3774 model_replacement: 'Espresso' 3775 - regex: '; *(T-Mobile G1) Build' 3776 device_replacement: '$1' 3777 brand_replacement: 'HTC' 3778 model_replacement: 'Dream' 3779 - regex: '\b(T-Mobile ?)?(myTouch)[ _]?([34]G)[ _]?([^\/]*) (?:Mozilla|Build)' 3780 device_replacement: '$1$2 $3 $4' 3781 brand_replacement: 'HTC' 3782 model_replacement: '$2 $3 $4' 3783 - regex: '\b(T-Mobile)_([^_]+)_(.*) Build' 3784 device_replacement: '$1 $2 $3' 3785 brand_replacement: 'Tmobile' 3786 model_replacement: '$2 $3' 3787 - regex: '\b(T-Mobile)[_ ]?(.*?)Build' 3788 device_replacement: '$1 $2' 3789 brand_replacement: 'Tmobile' 3790 model_replacement: '$2' 3791 3792 ######### 3793 # Tomtec 3794 # @ref: http://www.tom-tec.eu/pages/tablets.php 3795 ######### 3796 - regex: ' (ATP[0-9]{4}) Build' 3797 device_replacement: '$1' 3798 brand_replacement: 'Tomtec' 3799 model_replacement: '$1' 3800 3801 ######### 3802 # Tooky 3803 # @ref: http://www.tookymobile.com/ 3804 ######### 3805 - regex: ' *(TOOKY)[ _\-]([^;/]+) ?(?:Build|;)' 3806 regex_flag: 'i' 3807 device_replacement: '$1 $2' 3808 brand_replacement: 'Tooky' 3809 model_replacement: '$2' 3810 3811 ######### 3812 # Toshiba 3813 # @ref: http://www.toshiba.co.jp/ 3814 # @missing: LT170, Thrive 7, TOSHIBA STB10 3815 ######### 3816 - regex: '\b(TOSHIBA_AC_AND_AZ|TOSHIBA_FOLIO_AND_A|FOLIO_AND_A)' 3817 device_replacement: '$1' 3818 brand_replacement: 'Toshiba' 3819 model_replacement: 'Folio 100' 3820 - regex: '; *([Ff]olio ?100) Build/' 3821 device_replacement: '$1' 3822 brand_replacement: 'Toshiba' 3823 model_replacement: 'Folio 100' 3824 - regex: '; *(AT[0-9]{2,3}(?:\-A|LE\-A|PE\-A|SE|a)?|AT7-A|AT1S0|Hikari-iFrame/WDPF-[^;/]+|THRiVE|Thrive) Build/' 3825 device_replacement: 'Toshiba $1' 3826 brand_replacement: 'Toshiba' 3827 model_replacement: '$1' 3828 3829 ######### 3830 # Touchmate 3831 # @ref: http://touchmatepc.com/new/ 3832 ######### 3833 - regex: '; *(TM-MID\d+[^;/]+|TOUCHMATE|MID-750) Build' 3834 device_replacement: '$1' 3835 brand_replacement: 'Touchmate' 3836 model_replacement: '$1' 3837 # @todo: needs verification user-agents missing 3838 - regex: '; *(TM-SM\d+[^;/]+) Build' 3839 device_replacement: '$1' 3840 brand_replacement: 'Touchmate' 3841 model_replacement: '$1' 3842 3843 ######### 3844 # Treq 3845 # @ref: http://www.treq.co.id/product 3846 ######### 3847 - regex: '; *(A10 [Bb]asic2?) Build/' 3848 device_replacement: '$1' 3849 brand_replacement: 'Treq' 3850 model_replacement: '$1' 3851 - regex: '; *(TREQ[ _\-])([^;/]+) Build' 3852 regex_flag: 'i' 3853 device_replacement: '$1$2' 3854 brand_replacement: 'Treq' 3855 model_replacement: '$2' 3856 3857 ######### 3858 # Umeox 3859 # @ref: http://umeox.com/ 3860 # @models: A936|A603|X-5|X-3 3861 ######### 3862 # @todo: guessed markers 3863 - regex: '; *(X-?5|X-?3) Build/' 3864 device_replacement: '$1' 3865 brand_replacement: 'Umeox' 3866 model_replacement: '$1' 3867 # @todo: guessed markers 3868 - regex: '; *(A502\+?|A936|A603|X1|X2) Build/' 3869 device_replacement: '$1' 3870 brand_replacement: 'Umeox' 3871 model_replacement: '$1' 3872 3873 ######### 3874 # Versus 3875 # @ref: http://versusuk.com/support.html 3876 ######### 3877 - regex: '(TOUCH(?:TAB|PAD).+?) Build/' 3878 regex_flag: 'i' 3879 device_replacement: 'Versus $1' 3880 brand_replacement: 'Versus' 3881 model_replacement: '$1' 3882 3883 ######### 3884 # Vertu 3885 # @ref: http://www.vertu.com/ 3886 ######### 3887 - regex: '(VERTU) ([^;/]+) Build/' 3888 device_replacement: '$1 $2' 3889 brand_replacement: 'Vertu' 3890 model_replacement: '$2' 3891 3892 ######### 3893 # Videocon 3894 # @ref: http://www.videoconmobiles.com 3895 ######### 3896 - regex: '; *(Videocon)[ _\-]([^;/]+) *(?:Build|;)' 3897 device_replacement: '$1 $2' 3898 brand_replacement: 'Videocon' 3899 model_replacement: '$2' 3900 - regex: ' (VT\d{2}[A-Za-z]*) Build' 3901 device_replacement: '$1' 3902 brand_replacement: 'Videocon' 3903 model_replacement: '$1' 3904 3905 ######### 3906 # Viewsonic 3907 # @ref: http://viewsonic.com 3908 ######### 3909 - regex: '; *((?:ViewPad|ViewPhone|VSD)[^;/]+) Build/' 3910 device_replacement: '$1' 3911 brand_replacement: 'Viewsonic' 3912 model_replacement: '$1' 3913 - regex: '; *(ViewSonic-)([^;/]+) Build/' 3914 device_replacement: '$1$2' 3915 brand_replacement: 'Viewsonic' 3916 model_replacement: '$2' 3917 - regex: '; *(GTablet.*) Build/' 3918 device_replacement: '$1' 3919 brand_replacement: 'Viewsonic' 3920 model_replacement: '$1' 3921 3922 ######### 3923 # vivo 3924 # @ref: http://vivo.cn/ 3925 ######### 3926 - regex: '; *([Vv]ivo)[ _]([^;/]+) Build' 3927 device_replacement: '$1 $2' 3928 brand_replacement: 'vivo' 3929 model_replacement: '$2' 3930 3931 ######### 3932 # Vodafone (Operator Branded Devices) 3933 # @ref: ?? 3934 ######### 3935 - regex: '(Vodafone) (.*) Build/' 3936 device_replacement: '$1 $2' 3937 brand_replacement: '$1' 3938 model_replacement: '$2' 3939 3940 ######### 3941 # Walton 3942 # @ref: http://www.waltonbd.com/ 3943 ######### 3944 - regex: '; *(?:Walton[ _\-])?(Primo[ _\-][^;/]+) Build' 3945 regex_flag: 'i' 3946 device_replacement: 'Walton $1' 3947 brand_replacement: 'Walton' 3948 model_replacement: '$1' 3949 3950 ######### 3951 # Wiko 3952 # @ref: http://fr.wikomobile.com/collection.php?s=Smartphones 3953 ######### 3954 - regex: '; *(?:WIKO[ \-])?(CINK\+?|BARRY|BLOOM|DARKFULL|DARKMOON|DARKNIGHT|DARKSIDE|FIZZ|HIGHWAY|IGGY|OZZY|RAINBOW|STAIRWAY|SUBLIM|WAX|CINK [^;/]+) Build/' 3955 regex_flag: 'i' 3956 device_replacement: 'Wiko $1' 3957 brand_replacement: 'Wiko' 3958 model_replacement: '$1' 3959 3960 ######### 3961 # WellcoM 3962 # @ref: ?? 3963 ######### 3964 - regex: '; *WellcoM-([^;/]+) Build' 3965 device_replacement: 'Wellcom $1' 3966 brand_replacement: 'Wellcom' 3967 model_replacement: '$1' 3968 3969 ########## 3970 # WeTab 3971 # @ref: http://wetab.mobi/ 3972 ########## 3973 - regex: '(?:(WeTab)-Browser|; (wetab) Build)' 3974 device_replacement: '$1' 3975 brand_replacement: 'WeTab' 3976 model_replacement: 'WeTab' 3977 3978 ######### 3979 # Wolfgang 3980 # @ref: http://wolfgangmobile.com/ 3981 ######### 3982 - regex: '; *(AT-AS[^;/]+) Build' 3983 device_replacement: 'Wolfgang $1' 3984 brand_replacement: 'Wolfgang' 3985 model_replacement: '$1' 3986 3987 ######### 3988 # Woxter 3989 # @ref: http://www.woxter.es/es-es/categories/index 3990 ######### 3991 - regex: '; *(?:Woxter|Wxt) ([^;/]+) Build' 3992 device_replacement: 'Woxter $1' 3993 brand_replacement: 'Woxter' 3994 model_replacement: '$1' 3995 3996 ######### 3997 # Yarvik Zania 3998 # @ref: http://yarvik.com 3999 ######### 4000 - regex: '; *(?:Xenta |Luna )?(TAB[234][0-9]{2}|TAB0[78]-\d{3}|TAB0?9-\d{3}|TAB1[03]-\d{3}|SMP\d{2}-\d{3}) Build/' 4001 device_replacement: 'Yarvik $1' 4002 brand_replacement: 'Yarvik' 4003 model_replacement: '$1' 4004 4005 ######### 4006 # Yifang 4007 # @note: Needs to be at the very last as manufacturer builds for other brands. 4008 # @ref: http://www.yifangdigital.com/ 4009 # @models: M1010, M1011, M1007, M1008, M1005, M899, M899LP, M909, M8000, 4010 # M8001, M8002, M8003, M849, M815, M816, M819, M805, M878, M780LPW, 4011 # M778, M7000, M7000AD, M7000NBD, M7001, M7002, M7002KBD, M777, M767, 4012 # M789, M799, M769, M757, M755, M753, M752, M739, M729, M723, M712, M727 4013 ######### 4014 - regex: '; *([A-Z]{2,4})(M\d{3,}[A-Z]{2})([^;\)\/]*)(?: Build|[;\)])' 4015 device_replacement: 'Yifang $1$2$3' 4016 brand_replacement: 'Yifang' 4017 model_replacement: '$2' 4018 4019 ######### 4020 # XiaoMi 4021 # @ref: http://www.xiaomi.com/event/buyphone 4022 ######### 4023 - regex: '; *((MI|HM|MI-ONE|Redmi)[ -](NOTE |Note )?[^;/]*) (Build|MIUI)/' 4024 device_replacement: 'XiaoMi $1' 4025 brand_replacement: 'XiaoMi' 4026 model_replacement: '$1' 4027 4028 ######### 4029 # Xolo 4030 # @ref: http://www.xolo.in/ 4031 ######### 4032 - regex: '; *XOLO[ _]([^;/]*tab.*) Build' 4033 regex_flag: 'i' 4034 device_replacement: 'Xolo $1' 4035 brand_replacement: 'Xolo' 4036 model_replacement: '$1' 4037 - regex: '; *XOLO[ _]([^;/]+) Build' 4038 regex_flag: 'i' 4039 device_replacement: 'Xolo $1' 4040 brand_replacement: 'Xolo' 4041 model_replacement: '$1' 4042 - regex: '; *(q\d0{2,3}[a-z]?) Build' 4043 regex_flag: 'i' 4044 device_replacement: 'Xolo $1' 4045 brand_replacement: 'Xolo' 4046 model_replacement: '$1' 4047 4048 ######### 4049 # Xoro 4050 # @ref: http://www.xoro.de/produkte/ 4051 ######### 4052 - regex: '; *(PAD ?[79]\d+[^;/]*|TelePAD\d+[^;/]) Build' 4053 device_replacement: 'Xoro $1' 4054 brand_replacement: 'Xoro' 4055 model_replacement: '$1' 4056 4057 ######### 4058 # Zopo 4059 # @ref: http://www.zopomobiles.com/products.html 4060 ######### 4061 - regex: '; *(?:(?:ZOPO|Zopo)[ _]([^;/]+)|(ZP ?(?:\d{2}[^;/]+|C2))|(C[2379])) Build' 4062 device_replacement: '$1$2$3' 4063 brand_replacement: 'Zopo' 4064 model_replacement: '$1$2$3' 4065 4066 ######### 4067 # ZiiLabs 4068 # @ref: http://www.ziilabs.com/products/platforms/androidreferencetablets.php 4069 ######### 4070 - regex: '; *(ZiiLABS) (Zii[^;/]*) Build' 4071 device_replacement: '$1 $2' 4072 brand_replacement: 'ZiiLabs' 4073 model_replacement: '$2' 4074 - regex: '; *(Zii)_([^;/]*) Build' 4075 device_replacement: '$1 $2' 4076 brand_replacement: 'ZiiLabs' 4077 model_replacement: '$2' 4078 4079 ######### 4080 # ZTE 4081 # @ref: http://www.ztedevices.com/ 4082 ######### 4083 - regex: '; *(ARIZONA|(?:ATLAS|Atlas) W|D930|Grand (?:[SX][^;]*|Era|Memo[^;]*)|JOE|(?:Kis|KIS)\b[^;]*|Libra|Light [^;]*|N8[056][01]|N850L|N8000|N9[15]\d{2}|N9810|NX501|Optik|(?:Vip )Racer[^;]*|RacerII|RACERII|San Francisco[^;]*|V9[AC]|V55|V881|Z[679][0-9]{2}[A-z]?) Build' 4084 device_replacement: '$1' 4085 brand_replacement: 'ZTE' 4086 model_replacement: '$1' 4087 - regex: '; *([A-Z]\d+)_USA_[^;]* Build' 4088 device_replacement: '$1' 4089 brand_replacement: 'ZTE' 4090 model_replacement: '$1' 4091 - regex: '; *(SmartTab\d+)[^;]* Build' 4092 device_replacement: '$1' 4093 brand_replacement: 'ZTE' 4094 model_replacement: '$1' 4095 - regex: '; *(?:Blade|BLADE|ZTE-BLADE)([^;/]*) Build' 4096 device_replacement: 'ZTE Blade$1' 4097 brand_replacement: 'ZTE' 4098 model_replacement: 'Blade$1' 4099 - regex: '; *(?:Skate|SKATE|ZTE-SKATE)([^;/]*) Build' 4100 device_replacement: 'ZTE Skate$1' 4101 brand_replacement: 'ZTE' 4102 model_replacement: 'Skate$1' 4103 - regex: '; *(Orange |Optimus )(Monte Carlo|San Francisco) Build' 4104 device_replacement: '$1$2' 4105 brand_replacement: 'ZTE' 4106 model_replacement: '$1$2' 4107 - regex: '; *(?:ZXY-ZTE_|ZTE\-U |ZTE[\- _]|ZTE-C[_ ])([^;/]+) Build' 4108 device_replacement: 'ZTE $1' 4109 brand_replacement: 'ZTE' 4110 model_replacement: '$1' 4111 # operator specific 4112 - regex: '; (BASE) (lutea|Lutea 2|Tab[^;]*) Build' 4113 device_replacement: '$1 $2' 4114 brand_replacement: 'ZTE' 4115 model_replacement: '$1 $2' 4116 - regex: '; (Avea inTouch 2|soft stone|tmn smart a7|Movistar[ _]Link) Build' 4117 regex_flag: 'i' 4118 device_replacement: '$1' 4119 brand_replacement: 'ZTE' 4120 model_replacement: '$1' 4121 - regex: '; *(vp9plus)\)' 4122 device_replacement: '$1' 4123 brand_replacement: 'ZTE' 4124 model_replacement: '$1' 4125 4126 ########## 4127 # Zync 4128 # @ref: http://www.zync.in/index.php/our-products/tablet-phablets 4129 ########## 4130 - regex: '; ?(Cloud[ _]Z5|z1000|Z99 2G|z99|z930|z999|z990|z909|Z919|z900) Build/' 4131 device_replacement: '$1' 4132 brand_replacement: 'Zync' 4133 model_replacement: '$1' 4134 4135 ########## 4136 # Kindle 4137 # @note: Needs to be after Sony Playstation Vita as this UA contains Silk/3.2 4138 # @ref: https://developer.amazon.com/sdk/fire/specifications.html 4139 # @ref: http://amazonsilk.wordpress.com/useful-bits/silk-user-agent/ 4140 ########## 4141 - regex: '; ?(KFOT|Kindle Fire) Build\b' 4142 device_replacement: 'Kindle Fire' 4143 brand_replacement: 'Amazon' 4144 model_replacement: 'Kindle Fire' 4145 - regex: '; ?(KFOTE|Amazon Kindle Fire2) Build\b' 4146 device_replacement: 'Kindle Fire 2' 4147 brand_replacement: 'Amazon' 4148 model_replacement: 'Kindle Fire 2' 4149 - regex: '; ?(KFTT) Build\b' 4150 device_replacement: 'Kindle Fire HD' 4151 brand_replacement: 'Amazon' 4152 model_replacement: 'Kindle Fire HD 7"' 4153 - regex: '; ?(KFJWI) Build\b' 4154 device_replacement: 'Kindle Fire HD 8.9" WiFi' 4155 brand_replacement: 'Amazon' 4156 model_replacement: 'Kindle Fire HD 8.9" WiFi' 4157 - regex: '; ?(KFJWA) Build\b' 4158 device_replacement: 'Kindle Fire HD 8.9" 4G' 4159 brand_replacement: 'Amazon' 4160 model_replacement: 'Kindle Fire HD 8.9" 4G' 4161 - regex: '; ?(KFSOWI) Build\b' 4162 device_replacement: 'Kindle Fire HD 7" WiFi' 4163 brand_replacement: 'Amazon' 4164 model_replacement: 'Kindle Fire HD 7" WiFi' 4165 - regex: '; ?(KFTHWI) Build\b' 4166 device_replacement: 'Kindle Fire HDX 7" WiFi' 4167 brand_replacement: 'Amazon' 4168 model_replacement: 'Kindle Fire HDX 7" WiFi' 4169 - regex: '; ?(KFTHWA) Build\b' 4170 device_replacement: 'Kindle Fire HDX 7" 4G' 4171 brand_replacement: 'Amazon' 4172 model_replacement: 'Kindle Fire HDX 7" 4G' 4173 - regex: '; ?(KFAPWI) Build\b' 4174 device_replacement: 'Kindle Fire HDX 8.9" WiFi' 4175 brand_replacement: 'Amazon' 4176 model_replacement: 'Kindle Fire HDX 8.9" WiFi' 4177 - regex: '; ?(KFAPWA) Build\b' 4178 device_replacement: 'Kindle Fire HDX 8.9" 4G' 4179 brand_replacement: 'Amazon' 4180 model_replacement: 'Kindle Fire HDX 8.9" 4G' 4181 - regex: '; ?Amazon ([^;/]+) Build\b' 4182 device_replacement: '$1' 4183 brand_replacement: 'Amazon' 4184 model_replacement: '$1' 4185 - regex: '; ?(Kindle) Build\b' 4186 device_replacement: 'Kindle' 4187 brand_replacement: 'Amazon' 4188 model_replacement: 'Kindle' 4189 - regex: '; ?(Silk)/(\d+)\.(\d+)(?:\.([0-9\-]+))? Build\b' 4190 device_replacement: 'Kindle Fire' 4191 brand_replacement: 'Amazon' 4192 model_replacement: 'Kindle Fire$2' 4193 - regex: ' (Kindle)/(\d+\.\d+)' 4194 device_replacement: 'Kindle' 4195 brand_replacement: 'Amazon' 4196 model_replacement: '$1 $2' 4197 - regex: ' (Silk|Kindle)/(\d+)\.' 4198 device_replacement: 'Kindle' 4199 brand_replacement: 'Amazon' 4200 model_replacement: 'Kindle' 4201 4202 ######### 4203 # Devices from chinese manufacturer(s) 4204 # @note: identified by x-wap-profile http://218.249.47.94/Xianghe/.* 4205 ######### 4206 - regex: '(sprd)\-([^/]+)/' 4207 device_replacement: '$1 $2' 4208 brand_replacement: '$1' 4209 model_replacement: '$2' 4210 # @ref: http://eshinechina.en.alibaba.com/ 4211 - regex: '; *(H\d{2}00\+?) Build' 4212 device_replacement: '$1' 4213 brand_replacement: 'Hero' 4214 model_replacement: '$1' 4215 - regex: '; *(iphone|iPhone5) Build/' 4216 device_replacement: 'Xianghe $1' 4217 brand_replacement: 'Xianghe' 4218 model_replacement: '$1' 4219 - regex: '; *(e\d{4}[a-z]?_?v\d+|v89_[^;/]+)[^;/]+ Build/' 4220 device_replacement: 'Xianghe $1' 4221 brand_replacement: 'Xianghe' 4222 model_replacement: '$1' 4223 4224 ######### 4225 # Cellular 4226 # @ref: 4227 # @note: Operator branded devices 4228 ######### 4229 - regex: '\bUSCC[_\-]?([^ ;/\)]+)' 4230 device_replacement: '$1' 4231 brand_replacement: 'Cellular' 4232 model_replacement: '$1' 4233 4234 ###################################################################### 4235 # Windows Phone Parsers 4236 ###################################################################### 4237 4238 ######### 4239 # Alcatel Windows Phones 4240 ######### 4241 - regex: 'Windows Phone [^;]+; .*?IEMobile/[^;\)]+[;\)] ?(?:ARM; ?Touch; ?|Touch; ?)?(?:ALCATEL)[^;]*; *([^;,\)]+)' 4242 device_replacement: 'Alcatel $1' 4243 brand_replacement: 'Alcatel' 4244 model_replacement: '$1' 4245 4246 ######### 4247 # Asus Windows Phones 4248 ######### 4249 #~ - regex: 'Windows Phone [^;]+; .*?IEMobile/[^;\)]+[;\)] ?(?:ARM; ?Touch; ?|Touch; ?|WpsLondonTest; ?)?(?:ASUS|Asus)[^;]*; *([^;,\)]+)' 4250 - regex: 'Windows Phone [^;]+; .*?IEMobile/[^;\)]+[;\)] ?(?:ARM; ?Touch; ?|Touch; ?|WpsLondonTest; ?)?(?:ASUS|Asus)[^;]*; *([^;,\)]+)' 4251 device_replacement: 'Asus $1' 4252 brand_replacement: 'Asus' 4253 model_replacement: '$1' 4254 4255 ######### 4256 # Dell Windows Phones 4257 ######### 4258 - regex: 'Windows Phone [^;]+; .*?IEMobile/[^;\)]+[;\)] ?(?:ARM; ?Touch; ?|Touch; ?)?(?:DELL|Dell)[^;]*; *([^;,\)]+)' 4259 device_replacement: 'Dell $1' 4260 brand_replacement: 'Dell' 4261 model_replacement: '$1' 4262 4263 ######### 4264 # HTC Windows Phones 4265 ######### 4266 - regex: 'Windows Phone [^;]+; .*?IEMobile/[^;\)]+[;\)] ?(?:ARM; ?Touch; ?|Touch; ?|WpsLondonTest; ?)?(?:HTC|Htc|HTC_blocked[^;]*)[^;]*; *(?:HTC)?([^;,\)]+)' 4267 device_replacement: 'HTC $1' 4268 brand_replacement: 'HTC' 4269 model_replacement: '$1' 4270 4271 ######### 4272 # Huawei Windows Phones 4273 ######### 4274 - regex: 'Windows Phone [^;]+; .*?IEMobile/[^;\)]+[;\)] ?(?:ARM; ?Touch; ?|Touch; ?)?(?:HUAWEI)[^;]*; *(?:HUAWEI )?([^;,\)]+)' 4275 device_replacement: 'Huawei $1' 4276 brand_replacement: 'Huawei' 4277 model_replacement: '$1' 4278 4279 ######### 4280 # LG Windows Phones 4281 ######### 4282 - regex: 'Windows Phone [^;]+; .*?IEMobile/[^;\)]+[;\)] ?(?:ARM; ?Touch; ?|Touch; ?)?(?:LG|Lg)[^;]*; *(?:LG[ \-])?([^;,\)]+)' 4283 device_replacement: 'LG $1' 4284 brand_replacement: 'LG' 4285 model_replacement: '$1' 4286 4287 ######### 4288 # Noka Windows Phones 4289 ######### 4290 - regex: 'Windows Phone [^;]+; .*?IEMobile/[^;\)]+[;\)] ?(?:ARM; ?Touch; ?|Touch; ?)?(?:rv:11; )?(?:NOKIA|Nokia)[^;]*; *(?:NOKIA ?|Nokia ?|LUMIA ?|[Ll]umia ?)*(\d{3,}[^;\)]*)' 4291 device_replacement: 'Lumia $1' 4292 brand_replacement: 'Nokia' 4293 model_replacement: 'Lumia $1' 4294 - regex: 'Windows Phone [^;]+; .*?IEMobile/[^;\)]+[;\)] ?(?:ARM; ?Touch; ?|Touch; ?)?(?:NOKIA|Nokia)[^;]*; *(RM-\d{3,})' 4295 device_replacement: 'Nokia $1' 4296 brand_replacement: 'Nokia' 4297 model_replacement: '$1' 4298 - regex: '(?:Windows Phone [^;]+; .*?IEMobile/[^;\)]+[;\)]|WPDesktop;) ?(?:ARM; ?Touch; ?|Touch; ?)?(?:NOKIA|Nokia)[^;]*; *(?:NOKIA ?|Nokia ?|LUMIA ?|[Ll]umia ?)*([^;\)]+)' 4299 device_replacement: 'Nokia $1' 4300 brand_replacement: 'Nokia' 4301 model_replacement: '$1' 4302 4303 ######### 4304 # Microsoft Windows Phones 4305 ######### 4306 - regex: 'Windows Phone [^;]+; .*?IEMobile/[^;\)]+[;\)] ?(?:ARM; ?Touch; ?|Touch; ?)?(?:Microsoft(?: Corporation)?)[^;]*; *([^;,\)]+)' 4307 device_replacement: 'Microsoft $1' 4308 brand_replacement: 'Microsoft' 4309 model_replacement: '$1' 4310 4311 ######### 4312 # Samsung Windows Phones 4313 ######### 4314 - regex: 'Windows Phone [^;]+; .*?IEMobile/[^;\)]+[;\)] ?(?:ARM; ?Touch; ?|Touch; ?|WpsLondonTest; ?)?(?:SAMSUNG)[^;]*; *(?:SAMSUNG )?([^;,\.\)]+)' 4315 device_replacement: 'Samsung $1' 4316 brand_replacement: 'Samsung' 4317 model_replacement: '$1' 4318 4319 ######### 4320 # Toshiba Windows Phones 4321 ######### 4322 - regex: 'Windows Phone [^;]+; .*?IEMobile/[^;\)]+[;\)] ?(?:ARM; ?Touch; ?|Touch; ?|WpsLondonTest; ?)?(?:TOSHIBA|FujitsuToshibaMobileCommun)[^;]*; *([^;,\)]+)' 4323 device_replacement: 'Toshiba $1' 4324 brand_replacement: 'Toshiba' 4325 model_replacement: '$1' 4326 4327 ######### 4328 # Generic Windows Phones 4329 ######### 4330 - regex: 'Windows Phone [^;]+; .*?IEMobile/[^;\)]+[;\)] ?(?:ARM; ?Touch; ?|Touch; ?|WpsLondonTest; ?)?([^;]+); *([^;,\)]+)' 4331 device_replacement: '$1 $2' 4332 brand_replacement: '$1' 4333 model_replacement: '$2' 4334 4335 ###################################################################### 4336 # Other Devices Parser 4337 ###################################################################### 4338 4339 ######### 4340 # Samsung Bada Phones 4341 ######### 4342 - regex: '(?:^|; )SAMSUNG\-([A-Za-z0-9\-]+).* Bada/' 4343 device_replacement: 'Samsung $1' 4344 brand_replacement: 'Samsung' 4345 model_replacement: '$1' 4346 4347 ######### 4348 # Firefox OS 4349 ######### 4350 - regex: '\(Mobile; ALCATEL ?(One|ONE) ?(Touch|TOUCH) ?([^;/]+)(?:/[^;]+)?; rv:[^\)]+\) Gecko/[^\/]+ Firefox/' 4351 device_replacement: 'Alcatel $1 $2 $3' 4352 brand_replacement: 'Alcatel' 4353 model_replacement: 'One Touch $3' 4354 - regex: '\(Mobile; (?:ZTE([^;]+)|(OpenC)); rv:[^\)]+\) Gecko/[^\/]+ Firefox/' 4355 device_replacement: 'ZTE $1$2' 4356 brand_replacement: 'ZTE' 4357 model_replacement: '$1$2' 4358 4359 ########## 4360 # NOKIA 4361 # @note: NokiaN8-00 comes before iphone. Sometimes spoofs iphone 4362 ########## 4363 - regex: 'Nokia(N[0-9]+)([A-z_\-][A-z0-9_\-]*)' 4364 device_replacement: 'Nokia $1' 4365 brand_replacement: 'Nokia' 4366 model_replacement: '$1$2' 4367 - regex: '(?:NOKIA|Nokia)(?:\-| *)(?:([A-Za-z0-9]+)\-[0-9a-f]{32}|([A-Za-z0-9\-]+)(?:UCBrowser)|([A-Za-z0-9\-]+))' 4368 device_replacement: 'Nokia $1$2$3' 4369 brand_replacement: 'Nokia' 4370 model_replacement: '$1$2$3' 4371 - regex: 'Lumia ([A-Za-z0-9\-]+)' 4372 device_replacement: 'Lumia $1' 4373 brand_replacement: 'Nokia' 4374 model_replacement: 'Lumia $1' 4375 # UCWEB Browser on Symbian 4376 - regex: '\(Symbian; U; S60 V5; [A-z]{2}\-[A-z]{2}; (SonyEricsson|Samsung|Nokia|LG)([^;/]+)\)' 4377 device_replacement: '$1 $2' 4378 brand_replacement: '$1' 4379 model_replacement: '$2' 4380 # Nokia Symbian 4381 - regex: '\(Symbian(?:/3)?; U; ([^;]+);' 4382 device_replacement: 'Nokia $1' 4383 brand_replacement: 'Nokia' 4384 model_replacement: '$1' 4385 4386 ########## 4387 # BlackBerry 4388 # @ref: http://www.useragentstring.com/pages/BlackBerry/ 4389 ########## 4390 - regex: 'BB10; ([A-Za-z0-9\- ]+)\)' 4391 device_replacement: 'BlackBerry $1' 4392 brand_replacement: 'BlackBerry' 4393 model_replacement: '$1' 4394 - regex: 'Play[Bb]ook.+RIM Tablet OS' 4395 device_replacement: 'BlackBerry Playbook' 4396 brand_replacement: 'BlackBerry' 4397 model_replacement: 'Playbook' 4398 - regex: 'Black[Bb]erry ([0-9]+);' 4399 device_replacement: 'BlackBerry $1' 4400 brand_replacement: 'BlackBerry' 4401 model_replacement: '$1' 4402 - regex: 'Black[Bb]erry([0-9]+)' 4403 device_replacement: 'BlackBerry $1' 4404 brand_replacement: 'BlackBerry' 4405 model_replacement: '$1' 4406 - regex: 'Black[Bb]erry;' 4407 device_replacement: 'BlackBerry' 4408 brand_replacement: 'BlackBerry' 4409 4410 ########## 4411 # PALM / HP 4412 # @note: some palm devices must come before iphone. sometimes spoofs iphone in ua 4413 ########## 4414 - regex: '(Pre|Pixi)/\d+\.\d+' 4415 device_replacement: 'Palm $1' 4416 brand_replacement: 'Palm' 4417 model_replacement: '$1' 4418 - regex: 'Palm([0-9]+)' 4419 device_replacement: 'Palm $1' 4420 brand_replacement: 'Palm' 4421 model_replacement: '$1' 4422 - regex: 'Treo([A-Za-z0-9]+)' 4423 device_replacement: 'Palm Treo $1' 4424 brand_replacement: 'Palm' 4425 model_replacement: 'Treo $1' 4426 - regex: 'webOS.*(P160U(?:NA)?)/(\d+).(\d+)' 4427 device_replacement: 'HP Veer' 4428 brand_replacement: 'HP' 4429 model_replacement: 'Veer' 4430 - regex: '(Touch[Pp]ad)/\d+\.\d+' 4431 device_replacement: 'HP TouchPad' 4432 brand_replacement: 'HP' 4433 model_replacement: 'TouchPad' 4434 - regex: 'HPiPAQ([A-Za-z0-9]+)/\d+.\d+' 4435 device_replacement: 'HP iPAQ $1' 4436 brand_replacement: 'HP' 4437 model_replacement: 'iPAQ $1' 4438 - regex: 'PDA; (PalmOS)/sony/model ([a-z]+)/Revision' 4439 device_replacement: '$1' 4440 brand_replacement: 'Sony' 4441 model_replacement: '$1 $2' 4442 4443 ########## 4444 # AppleTV 4445 # No built in browser that I can tell 4446 # Stack Overflow indicated iTunes-AppleTV/4.1 as a known UA for app available and I'm seeing it in live traffic 4447 ########## 4448 - regex: '(Apple\s?TV)' 4449 device_replacement: 'AppleTV' 4450 brand_replacement: 'Apple' 4451 model_replacement: 'AppleTV' 4452 4453 ######### 4454 # Tesla Model S 4455 ######### 4456 - regex: '(QtCarBrowser)' 4457 device_replacement: 'Tesla Model S' 4458 brand_replacement: 'Tesla' 4459 model_replacement: 'Model S' 4460 4461 ########## 4462 # iSTUFF 4463 # @note: complete but probably catches spoofs 4464 # ipad and ipod must be parsed before iphone 4465 # cannot determine specific device type from ua string. (3g, 3gs, 4, etc) 4466 ########## 4467 # @note: on some ua the device can be identified e.g. iPhone5,1 4468 - regex: '(iPhone|iPad|iPod)(\d+,\d+)' 4469 device_replacement: '$1' 4470 brand_replacement: 'Apple' 4471 model_replacement: '$1$2' 4472 # @note: iPad needs to be before iPhone 4473 - regex: '(iPad)(?:;| Simulator;)' 4474 device_replacement: '$1' 4475 brand_replacement: 'Apple' 4476 model_replacement: '$1' 4477 - regex: '(iPod)(?:;| touch;| Simulator;)' 4478 device_replacement: '$1' 4479 brand_replacement: 'Apple' 4480 model_replacement: '$1' 4481 - regex: '(iPhone)(?:;| Simulator;)' 4482 device_replacement: '$1' 4483 brand_replacement: 'Apple' 4484 model_replacement: '$1' 4485 # @note: desktop applications show device info 4486 - regex: 'CFNetwork/.* Darwin/\d.*\(((?:Mac|iMac|PowerMac|PowerBook)[^\d]*)(\d+)(?:,|%2C)(\d+)' 4487 device_replacement: '$1$2,$3' 4488 brand_replacement: 'Apple' 4489 model_replacement: '$1$2,$3' 4490 # @note: newer desktop applications don't show device info 4491 # This is here so as to not have them recorded as iOS-Device 4492 - regex: 'CFNetwork/.* Darwin/\d+\.\d+\.\d+ \(x86_64\)' 4493 device_replacement: 'Mac' 4494 brand_replacement: 'Apple' 4495 model_replacement: 'Mac' 4496 # @note: iOS applications do not show device info 4497 - regex: 'CFNetwork/.* Darwin/\d' 4498 device_replacement: 'iOS-Device' 4499 brand_replacement: 'Apple' 4500 model_replacement: 'iOS-Device' 4501 4502 ########## 4503 # Acer 4504 ########## 4505 - regex: 'acer_([A-Za-z0-9]+)_' 4506 device_replacement: 'Acer $1' 4507 brand_replacement: 'Acer' 4508 model_replacement: '$1' 4509 4510 ########## 4511 # Alcatel 4512 ########## 4513 - regex: '(?:ALCATEL|Alcatel)-([A-Za-z0-9\-]+)' 4514 device_replacement: 'Alcatel $1' 4515 brand_replacement: 'Alcatel' 4516 model_replacement: '$1' 4517 4518 ########## 4519 # Amoi 4520 ########## 4521 - regex: '(?:Amoi|AMOI)\-([A-Za-z0-9]+)' 4522 device_replacement: 'Amoi $1' 4523 brand_replacement: 'Amoi' 4524 model_replacement: '$1' 4525 4526 ########## 4527 # Asus 4528 ########## 4529 - regex: '(?:; |\/|^)((?:Transformer (?:Pad|Prime) |Transformer |PadFone[ _]?)[A-Za-z0-9]*)' 4530 device_replacement: 'Asus $1' 4531 brand_replacement: 'Asus' 4532 model_replacement: '$1' 4533 - regex: '(?:asus.*?ASUS|Asus|ASUS|asus)[\- ;]*((?:Transformer (?:Pad|Prime) |Transformer |Padfone |Nexus[ _])?[A-Za-z0-9]+)' 4534 device_replacement: 'Asus $1' 4535 brand_replacement: 'Asus' 4536 model_replacement: '$1' 4537 4538 4539 ########## 4540 # Bird 4541 ########## 4542 - regex: '\bBIRD[ \-\.]([A-Za-z0-9]+)' 4543 device_replacement: 'Bird $1' 4544 brand_replacement: 'Bird' 4545 model_replacement: '$1' 4546 4547 ########## 4548 # Dell 4549 ########## 4550 - regex: '\bDell ([A-Za-z0-9]+)' 4551 device_replacement: 'Dell $1' 4552 brand_replacement: 'Dell' 4553 model_replacement: '$1' 4554 4555 ########## 4556 # DoCoMo 4557 ########## 4558 - regex: 'DoCoMo/2\.0 ([A-Za-z0-9]+)' 4559 device_replacement: 'DoCoMo $1' 4560 brand_replacement: 'DoCoMo' 4561 model_replacement: '$1' 4562 - regex: '([A-Za-z0-9]+)_W;FOMA' 4563 device_replacement: 'DoCoMo $1' 4564 brand_replacement: 'DoCoMo' 4565 model_replacement: '$1' 4566 - regex: '([A-Za-z0-9]+);FOMA' 4567 device_replacement: 'DoCoMo $1' 4568 brand_replacement: 'DoCoMo' 4569 model_replacement: '$1' 4570 4571 ########## 4572 # htc 4573 ########## 4574 - regex: '\b(?:HTC/|HTC/[a-z0-9]+/)?HTC[ _\-;]? *(.*?)(?:-?Mozilla|fingerPrint|[;/\(\)]|$)' 4575 device_replacement: 'HTC $1' 4576 brand_replacement: 'HTC' 4577 model_replacement: '$1' 4578 4579 ########## 4580 # Huawei 4581 ########## 4582 - regex: 'Huawei([A-Za-z0-9]+)' 4583 device_replacement: 'Huawei $1' 4584 brand_replacement: 'Huawei' 4585 model_replacement: '$1' 4586 - regex: 'HUAWEI-([A-Za-z0-9]+)' 4587 device_replacement: 'Huawei $1' 4588 brand_replacement: 'Huawei' 4589 model_replacement: '$1' 4590 - regex: 'vodafone([A-Za-z0-9]+)' 4591 device_replacement: 'Huawei Vodafone $1' 4592 brand_replacement: 'Huawei' 4593 model_replacement: 'Vodafone $1' 4594 4595 ########## 4596 # i-mate 4597 ########## 4598 - regex: 'i\-mate ([A-Za-z0-9]+)' 4599 device_replacement: 'i-mate $1' 4600 brand_replacement: 'i-mate' 4601 model_replacement: '$1' 4602 4603 ########## 4604 # kyocera 4605 ########## 4606 - regex: 'Kyocera\-([A-Za-z0-9]+)' 4607 device_replacement: 'Kyocera $1' 4608 brand_replacement: 'Kyocera' 4609 model_replacement: '$1' 4610 - regex: 'KWC\-([A-Za-z0-9]+)' 4611 device_replacement: 'Kyocera $1' 4612 brand_replacement: 'Kyocera' 4613 model_replacement: '$1' 4614 4615 ########## 4616 # lenovo 4617 ########## 4618 - regex: 'Lenovo[_\-]([A-Za-z0-9]+)' 4619 device_replacement: 'Lenovo $1' 4620 brand_replacement: 'Lenovo' 4621 model_replacement: '$1' 4622 4623 ########## 4624 # HbbTV (European and Australian standard) 4625 # written before the LG regexes, as LG is making HbbTV too 4626 ########## 4627 - regex: '(HbbTV)/[0-9]+\.[0-9]+\.[0-9]+ \([^;]*; *(LG)E *; *([^;]*) *;[^;]*;[^;]*;\)' 4628 device_replacement: '$1' 4629 brand_replacement: '$2' 4630 model_replacement: '$3' 4631 - regex: '(HbbTV)/1\.1\.1.*CE-HTML/1\.\d;(Vendor/)*(THOM[^;]*?)[;\s](?:.*SW-Version/.*)*(LF[^;]+);?' 4632 device_replacement: '$1' 4633 brand_replacement: 'Thomson' 4634 model_replacement: '$4' 4635 - regex: '(HbbTV)(?:/1\.1\.1)?(?: ?\(;;;;;\))?; *CE-HTML(?:/1\.\d)?; *([^ ]+) ([^;]+);' 4636 device_replacement: '$1' 4637 brand_replacement: '$2' 4638 model_replacement: '$3' 4639 - regex: '(HbbTV)/1\.1\.1 \(;;;;;\) Maple_2011' 4640 device_replacement: '$1' 4641 brand_replacement: 'Samsung' 4642 - regex: '(HbbTV)/[0-9]+\.[0-9]+\.[0-9]+ \([^;]*; *(?:CUS:([^;]*)|([^;]+)) *; *([^;]*) *;.*;' 4643 device_replacement: '$1' 4644 brand_replacement: '$2$3' 4645 model_replacement: '$4' 4646 - regex: '(HbbTV)/[0-9]+\.[0-9]+\.[0-9]+' 4647 device_replacement: '$1' 4648 4649 ########## 4650 # LGE NetCast TV 4651 ########## 4652 - regex: 'LGE; (?:Media\/)?([^;]*);[^;]*;[^;]*;?\); "?LG NetCast(\.TV|\.Media|)-\d+' 4653 device_replacement: 'NetCast$2' 4654 brand_replacement: 'LG' 4655 model_replacement: '$1' 4656 4657 ########## 4658 # InettvBrowser 4659 ########## 4660 - regex: 'InettvBrowser/[0-9]+\.[0-9A-Z]+ \([^;]*;(Sony)([^;]*);[^;]*;[^\)]*\)' 4661 device_replacement: 'Inettv' 4662 brand_replacement: '$1' 4663 model_replacement: '$2' 4664 - regex: 'InettvBrowser/[0-9]+\.[0-9A-Z]+ \([^;]*;([^;]*);[^;]*;[^\)]*\)' 4665 device_replacement: 'Inettv' 4666 brand_replacement: 'Generic_Inettv' 4667 model_replacement: '$1' 4668 - regex: '(?:InettvBrowser|TSBNetTV|NETTV|HBBTV)' 4669 device_replacement: 'Inettv' 4670 brand_replacement: 'Generic_Inettv' 4671 4672 ########## 4673 # lg 4674 ########## 4675 # LG Symbian Phones 4676 - regex: 'Series60/\d\.\d (LG)[\-]?([A-Za-z0-9 \-]+)' 4677 device_replacement: '$1 $2' 4678 brand_replacement: '$1' 4679 model_replacement: '$2' 4680 # other LG phones 4681 - regex: '\b(?:LGE[ \-]LG\-(?:AX)?|LGE |LGE?-LG|LGE?[ \-]|LG[ /\-]|lg[\-])([A-Za-z0-9]+)\b' 4682 device_replacement: 'LG $1' 4683 brand_replacement: 'LG' 4684 model_replacement: '$1' 4685 - regex: '(?:^LG[\-]?|^LGE[\-/]?)([A-Za-z]+[0-9]+[A-Za-z]*)' 4686 device_replacement: 'LG $1' 4687 brand_replacement: 'LG' 4688 model_replacement: '$1' 4689 - regex: '^LG([0-9]+[A-Za-z]*)' 4690 device_replacement: 'LG $1' 4691 brand_replacement: 'LG' 4692 model_replacement: '$1' 4693 4694 ########## 4695 # microsoft 4696 ########## 4697 - regex: '(KIN\.[^ ]+) (\d+)\.(\d+)' 4698 device_replacement: 'Microsoft $1' 4699 brand_replacement: 'Microsoft' 4700 model_replacement: '$1' 4701 - regex: '(?:MSIE|XBMC).*\b(Xbox)\b' 4702 device_replacement: '$1' 4703 brand_replacement: 'Microsoft' 4704 model_replacement: '$1' 4705 - regex: '; ARM; Trident/6\.0; Touch[\);]' 4706 device_replacement: 'Microsoft Surface RT' 4707 brand_replacement: 'Microsoft' 4708 model_replacement: 'Surface RT' 4709 4710 ########## 4711 # motorola 4712 ########## 4713 - regex: 'Motorola\-([A-Za-z0-9]+)' 4714 device_replacement: 'Motorola $1' 4715 brand_replacement: 'Motorola' 4716 model_replacement: '$1' 4717 - regex: 'MOTO\-([A-Za-z0-9]+)' 4718 device_replacement: 'Motorola $1' 4719 brand_replacement: 'Motorola' 4720 model_replacement: '$1' 4721 - regex: 'MOT\-([A-z0-9][A-z0-9\-]*)' 4722 device_replacement: 'Motorola $1' 4723 brand_replacement: 'Motorola' 4724 model_replacement: '$1' 4725 4726 ########## 4727 # nintendo 4728 ########## 4729 - regex: 'Nintendo WiiU' 4730 device_replacement: 'Nintendo Wii U' 4731 brand_replacement: 'Nintendo' 4732 model_replacement: 'Wii U' 4733 - regex: 'Nintendo (DS|3DS|DSi|Wii);' 4734 device_replacement: 'Nintendo $1' 4735 brand_replacement: 'Nintendo' 4736 model_replacement: '$1' 4737 4738 ########## 4739 # pantech 4740 ########## 4741 - regex: '(?:Pantech|PANTECH)[ _-]?([A-Za-z0-9\-]+)' 4742 device_replacement: 'Pantech $1' 4743 brand_replacement: 'Pantech' 4744 model_replacement: '$1' 4745 4746 ########## 4747 # philips 4748 ########## 4749 - regex: 'Philips([A-Za-z0-9]+)' 4750 device_replacement: 'Philips $1' 4751 brand_replacement: 'Philips' 4752 model_replacement: '$1' 4753 - regex: 'Philips ([A-Za-z0-9]+)' 4754 device_replacement: 'Philips $1' 4755 brand_replacement: 'Philips' 4756 model_replacement: '$1' 4757 4758 ########## 4759 # Samsung 4760 ########## 4761 # Samsung Smart-TV 4762 - regex: '(SMART-TV); .* Tizen ' 4763 device_replacement: 'Samsung $1' 4764 brand_replacement: 'Samsung' 4765 model_replacement: '$1' 4766 # Samsung Symbian Devices 4767 - regex: 'SymbianOS/9\.\d.* Samsung[/\-]([A-Za-z0-9 \-]+)' 4768 device_replacement: 'Samsung $1' 4769 brand_replacement: 'Samsung' 4770 model_replacement: '$1' 4771 - regex: '(Samsung)(SGH)(i[0-9]+)' 4772 device_replacement: '$1 $2$3' 4773 brand_replacement: '$1' 4774 model_replacement: '$2-$3' 4775 - regex: 'SAMSUNG-ANDROID-MMS/([^;/]+)' 4776 device_replacement: '$1' 4777 brand_replacement: 'Samsung' 4778 model_replacement: '$1' 4779 # Other Samsung 4780 #- regex: 'SAMSUNG(?:; |-)([A-Za-z0-9\-]+)' 4781 - regex: 'SAMSUNG(?:; |[ -/])([A-Za-z0-9\-]+)' 4782 regex_flag: 'i' 4783 device_replacement: 'Samsung $1' 4784 brand_replacement: 'Samsung' 4785 model_replacement: '$1' 4786 4787 ########## 4788 # Sega 4789 ########## 4790 - regex: '(Dreamcast)' 4791 device_replacement: 'Sega $1' 4792 brand_replacement: 'Sega' 4793 model_replacement: '$1' 4794 4795 ########## 4796 # Siemens mobile 4797 ########## 4798 - regex: '^SIE-([A-Za-z0-9]+)' 4799 device_replacement: 'Siemens $1' 4800 brand_replacement: 'Siemens' 4801 model_replacement: '$1' 4802 4803 ########## 4804 # Softbank 4805 ########## 4806 - regex: 'Softbank/[12]\.0/([A-Za-z0-9]+)' 4807 device_replacement: 'Softbank $1' 4808 brand_replacement: 'Softbank' 4809 model_replacement: '$1' 4810 4811 ########## 4812 # SonyEricsson 4813 ########## 4814 - regex: 'SonyEricsson ?([A-Za-z0-9\-]+)' 4815 device_replacement: 'Ericsson $1' 4816 brand_replacement: 'SonyEricsson' 4817 model_replacement: '$1' 4818 4819 ########## 4820 # Sony 4821 ########## 4822 - regex: 'Android [^;]+; ([^ ]+) (Sony)/' 4823 device_replacement: '$2 $1' 4824 brand_replacement: '$2' 4825 model_replacement: '$1' 4826 - regex: '(Sony)(?:BDP\/|\/)?([^ /;\)]+)[ /;\)]' 4827 device_replacement: '$1 $2' 4828 brand_replacement: '$1' 4829 model_replacement: '$2' 4830 4831 ######### 4832 # Puffin Browser Device detect 4833 # A=Android, I=iOS, P=Phone, T=Tablet 4834 # AT=Android+Tablet 4835 ######### 4836 - regex: 'Puffin/[\d\.]+IT' 4837 device_replacement: 'iPad' 4838 brand_replacement: 'Apple' 4839 model_replacement: 'iPad' 4840 - regex: 'Puffin/[\d\.]+IP' 4841 device_replacement: 'iPhone' 4842 brand_replacement: 'Apple' 4843 model_replacement: 'iPhone' 4844 - regex: 'Puffin/[\d\.]+AT' 4845 device_replacement: 'Generic Tablet' 4846 brand_replacement: 'Generic' 4847 model_replacement: 'Tablet' 4848 - regex: 'Puffin/[\d\.]+AP' 4849 device_replacement: 'Generic Smartphone' 4850 brand_replacement: 'Generic' 4851 model_replacement: 'Smartphone' 4852 4853 ######### 4854 # Android General Device Matching (far from perfect) 4855 ######### 4856 - regex: 'Android[\- ][\d]+\.[\d]+; [A-Za-z]{2}\-[A-Za-z]{0,2}; WOWMobile (.+) Build[/ ]' 4857 brand_replacement: 'Generic_Android' 4858 model_replacement: '$1' 4859 - regex: 'Android[\- ][\d]+\.[\d]+\-update1; [A-Za-z]{2}\-[A-Za-z]{0,2} *; *(.+?) Build[/ ]' 4860 brand_replacement: 'Generic_Android' 4861 model_replacement: '$1' 4862 - regex: 'Android[\- ][\d]+(?:\.[\d]+){1,2}; *[A-Za-z]{2}[_\-][A-Za-z]{0,2}\-? *; *(.+?) Build[/ ]' 4863 brand_replacement: 'Generic_Android' 4864 model_replacement: '$1' 4865 - regex: 'Android[\- ][\d]+(?:\.[\d]+){1,2}; *[A-Za-z]{0,2}\- *; *(.+?) Build[/ ]' 4866 brand_replacement: 'Generic_Android' 4867 model_replacement: '$1' 4868 # No build info at all - "Build" follows locale immediately 4869 - regex: 'Android[\- ][\d]+(?:\.[\d]+){1,2}; *[a-z]{0,2}[_\-]?[A-Za-z]{0,2};? Build[/ ]' 4870 device_replacement: 'Generic Smartphone' 4871 brand_replacement: 'Generic' 4872 model_replacement: 'Smartphone' 4873 - regex: 'Android[\- ][\d]+(?:\.[\d]+){1,2}; *\-?[A-Za-z]{2}; *(.+?) Build[/ ]' 4874 brand_replacement: 'Generic_Android' 4875 model_replacement: '$1' 4876 - regex: 'Android[\- ][\d]+(?:\.[\d]+){1,2}(?:;.*)?; *(.+?) Build[/ ]' 4877 brand_replacement: 'Generic_Android' 4878 model_replacement: '$1' 4879 4880 ########## 4881 # Google TV 4882 ########## 4883 - regex: '(GoogleTV)' 4884 brand_replacement: 'Generic_Inettv' 4885 model_replacement: '$1' 4886 4887 ########## 4888 # WebTV 4889 ########## 4890 - regex: '(WebTV)/\d+.\d+' 4891 brand_replacement: 'Generic_Inettv' 4892 model_replacement: '$1' 4893 # Roku Digital-Video-Players https://www.roku.com/ 4894 - regex: '^(Roku)/DVP-\d+\.\d+' 4895 brand_replacement: 'Generic_Inettv' 4896 model_replacement: '$1' 4897 4898 ########## 4899 # Generic Tablet 4900 ########## 4901 - regex: '(Android 3\.\d|Opera Tablet|Tablet; .+Firefox/|Android.*(?:Tab|Pad))' 4902 regex_flag: 'i' 4903 device_replacement: 'Generic Tablet' 4904 brand_replacement: 'Generic' 4905 model_replacement: 'Tablet' 4906 4907 ########## 4908 # Generic Smart Phone 4909 ########## 4910 - regex: '(Symbian|\bS60(Version|V\d)|\bS60\b|\((Series 60|Windows Mobile|Palm OS|Bada); Opera Mini|Windows CE|Opera Mobi|BREW|Brew|Mobile; .+Firefox/|iPhone OS|Android|MobileSafari|Windows *Phone|\(webOS/|PalmOS)' 4911 device_replacement: 'Generic Smartphone' 4912 brand_replacement: 'Generic' 4913 model_replacement: 'Smartphone' 4914 - regex: '(hiptop|avantgo|plucker|xiino|blazer|elaine)' 4915 regex_flag: 'i' 4916 device_replacement: 'Generic Smartphone' 4917 brand_replacement: 'Generic' 4918 model_replacement: 'Smartphone' 4919 4920 ########## 4921 # Spiders (this is hack...) 4922 ########## 4923 - regex: '(bot|zao|borg|DBot|oegp|silk|Xenu|zeal|^NING|CCBot|crawl|htdig|lycos|slurp|teoma|voila|yahoo|Sogou|CiBra|Nutch|^Java/|^JNLP/|Daumoa|Genieo|ichiro|larbin|pompos|Scrapy|snappy|speedy|spider|msnbot|msrbot|vortex|^vortex|crawler|favicon|indexer|Riddler|scooter|scraper|scrubby|WhatWeb|WinHTTP|bingbot|BingPreview|openbot|gigabot|furlbot|polybot|seekbot|^voyager|archiver|Icarus6j|mogimogi|Netvibes|blitzbot|altavista|charlotte|findlinks|Retreiver|TLSProber|WordPress|SeznamBot|ProoXiBot|wsr\-agent|Squrl Java|EtaoSpider|PaperLiBot|SputnikBot|A6\-Indexer|netresearch|searchsight|baiduspider|YisouSpider|ICC\-Crawler|http%20client|Python-urllib|dataparksearch|converacrawler|Screaming Frog|AppEngine-Google|YahooCacheSystem|fast\-webcrawler|Sogou Pic Spider|semanticdiscovery|Innovazion Crawler|facebookexternalhit|Google.*/\+/web/snippet|Google-HTTP-Java-Client|BlogBridge|IlTrovatore-Setaccio|InternetArchive|GomezAgent|WebThumbnail|heritrix|NewsGator|PagePeeker|Reaper|ZooShot|holmes|NL-Crawler|Pingdom|StatusCake|WhatsApp|masscan|Google Web Preview|Qwantify)' 4924 regex_flag: 'i' 4925 device_replacement: 'Spider' 4926 brand_replacement: 'Spider' 4927 model_replacement: 'Desktop' 4928 4929 ########## 4930 # Generic Feature Phone 4931 # take care to do case insensitive matching 4932 ########## 4933 - regex: '^(1207|3gso|4thp|501i|502i|503i|504i|505i|506i|6310|6590|770s|802s|a wa|acer|acs\-|airn|alav|asus|attw|au\-m|aur |aus |abac|acoo|aiko|alco|alca|amoi|anex|anny|anyw|aptu|arch|argo|bmobile|bell|bird|bw\-n|bw\-u|beck|benq|bilb|blac|c55/|cdm\-|chtm|capi|comp|cond|dall|dbte|dc\-s|dica|ds\-d|ds12|dait|devi|dmob|doco|dopo|dorado|el(?:38|39|48|49|50|55|58|68)|el[3456]\d{2}dual|erk0|esl8|ex300|ez40|ez60|ez70|ezos|ezze|elai|emul|eric|ezwa|fake|fly\-|fly_|g\-mo|g1 u|g560|gf\-5|grun|gene|go.w|good|grad|hcit|hd\-m|hd\-p|hd\-t|hei\-|hp i|hpip|hs\-c|htc |htc\-|htca|htcg)' 4934 regex_flag: 'i' 4935 device_replacement: 'Generic Feature Phone' 4936 brand_replacement: 'Generic' 4937 model_replacement: 'Feature Phone' 4938 - regex: '^(htcp|htcs|htct|htc_|haie|hita|huaw|hutc|i\-20|i\-go|i\-ma|i\-mobile|i230|iac|iac\-|iac/|ig01|im1k|inno|iris|jata|kddi|kgt|kgt/|kpt |kwc\-|klon|lexi|lg g|lg\-a|lg\-b|lg\-c|lg\-d|lg\-f|lg\-g|lg\-k|lg\-l|lg\-m|lg\-o|lg\-p|lg\-s|lg\-t|lg\-u|lg\-w|lg/k|lg/l|lg/u|lg50|lg54|lge\-|lge/|leno|m1\-w|m3ga|m50/|maui|mc01|mc21|mcca|medi|meri|mio8|mioa|mo01|mo02|mode|modo|mot |mot\-|mt50|mtp1|mtv |mate|maxo|merc|mits|mobi|motv|mozz|n100|n101|n102|n202|n203|n300|n302|n500|n502|n505|n700|n701|n710|nec\-|nem\-|newg|neon)' 4939 regex_flag: 'i' 4940 device_replacement: 'Generic Feature Phone' 4941 brand_replacement: 'Generic' 4942 model_replacement: 'Feature Phone' 4943 - regex: '^(netf|noki|nzph|o2 x|o2\-x|opwv|owg1|opti|oran|ot\-s|p800|pand|pg\-1|pg\-2|pg\-3|pg\-6|pg\-8|pg\-c|pg13|phil|pn\-2|pt\-g|palm|pana|pire|pock|pose|psio|qa\-a|qc\-2|qc\-3|qc\-5|qc\-7|qc07|qc12|qc21|qc32|qc60|qci\-|qwap|qtek|r380|r600|raks|rim9|rove|s55/|sage|sams|sc01|sch\-|scp\-|sdk/|se47|sec\-|sec0|sec1|semc|sgh\-|shar|sie\-|sk\-0|sl45|slid|smb3|smt5|sp01|sph\-|spv |spv\-|sy01|samm|sany|sava|scoo|send|siem|smar|smit|soft|sony|t\-mo|t218|t250|t600|t610|t618|tcl\-|tdg\-|telm|tim\-|ts70|tsm\-|tsm3|tsm5|tx\-9|tagt)' 4944 regex_flag: 'i' 4945 device_replacement: 'Generic Feature Phone' 4946 brand_replacement: 'Generic' 4947 model_replacement: 'Feature Phone' 4948 - regex: '^(talk|teli|topl|tosh|up.b|upg1|utst|v400|v750|veri|vk\-v|vk40|vk50|vk52|vk53|vm40|vx98|virg|vertu|vite|voda|vulc|w3c |w3c\-|wapj|wapp|wapu|wapm|wig |wapi|wapr|wapv|wapy|wapa|waps|wapt|winc|winw|wonu|x700|xda2|xdag|yas\-|your|zte\-|zeto|aste|audi|avan|blaz|brew|brvw|bumb|ccwa|cell|cldc|cmd\-|dang|eml2|fetc|hipt|http|ibro|idea|ikom|ipaq|jbro|jemu|jigs|keji|kyoc|kyok|libw|m\-cr|midp|mmef|moto|mwbp|mywa|newt|nok6|o2im|pant|pdxg|play|pluc|port|prox|rozo|sama|seri|smal|symb|treo|upsi|vx52|vx53|vx60|vx61|vx70|vx80|vx81|vx83|vx85|wap\-|webc|whit|wmlb|xda\-|xda_)' 4949 regex_flag: 'i' 4950 device_replacement: 'Generic Feature Phone' 4951 brand_replacement: 'Generic' 4952 model_replacement: 'Feature Phone' 4953 - regex: '^(Ice)$' 4954 device_replacement: 'Generic Feature Phone' 4955 brand_replacement: 'Generic' 4956 model_replacement: 'Feature Phone' 4957 - regex: '(wap[\-\ ]browser|maui|netfront|obigo|teleca|up\.browser|midp|Opera Mini)' 4958 regex_flag: 'i' 4959 device_replacement: 'Generic Feature Phone' 4960 brand_replacement: 'Generic' 4961 model_replacement: 'Feature Phone'