WP Statistics - Version 13.2.3

Version Description

= 13.0 = IMPORTANT NOTE Welcome to WP-Statistics v13.0, our biggest update! Thank you for being part of our community. Weve been working hard for one year to develop this version and make WP-Statistics better for you. Before updating, make sure you disabled all your add-ons, then after that, try to update add-ons.

If you encounter any bug, please create an issue on GitHub where we can act upon them more efficiently. Since GitHub is not a support forum, just bugs are welcomed, and any other request will be closed.

Download this release

Release Info

Developer mostafa.s1990
Plugin Icon 128x128 WP Statistics
Version 13.2.3
Comparing to
See all releases

Code changes from version 13.2.2.1 to 13.2.3

Files changed (90) hide show
  1. assets/dev/javascript/pages/settings.js +1 -1
  2. assets/js/admin.min.js +1 -1
  3. includes/admin/pages/class-wp-statistics-admin-page-settings.php +1 -1
  4. includes/admin/templates/email.php +3 -3
  5. includes/class-wp-statistics-user-agent.php +76 -7
  6. includes/vendor/composer/ClassLoader.php +36 -2
  7. includes/vendor/composer/InstalledVersions.php +355 -0
  8. includes/vendor/composer/autoload_classmap.php +1 -0
  9. includes/vendor/composer/autoload_real.php +2 -2
  10. includes/vendor/composer/autoload_static.php +5 -0
  11. includes/vendor/composer/ca-bundle/res/cacert.pem +346 -561
  12. includes/vendor/composer/ca-bundle/src/CaBundle.php +117 -11
  13. includes/vendor/composer/installed.json +481 -467
  14. includes/vendor/composer/installed.php +96 -0
  15. includes/vendor/whichbrowser/parser/.coveralls.yml +0 -7
  16. includes/vendor/whichbrowser/parser/.travis.yml +0 -39
  17. includes/vendor/whichbrowser/parser/bin/runner.php +5 -3
  18. includes/vendor/whichbrowser/parser/data/applications-bots.php +116 -8
  19. includes/vendor/whichbrowser/parser/data/applications-browsers.php +122 -4
  20. includes/vendor/whichbrowser/parser/data/applications-others.php +10 -0
  21. includes/vendor/whichbrowser/parser/data/browsers-chrome.php +57 -0
  22. includes/vendor/whichbrowser/parser/data/indices/models-android.php +2284 -1427
  23. includes/vendor/whichbrowser/parser/data/models-android.php +1117 -47
  24. includes/vendor/whichbrowser/parser/data/models-ios.php +48 -0
  25. includes/vendor/whichbrowser/parser/data/regexes/applications-bots.php +1 -1
  26. includes/vendor/whichbrowser/parser/data/regexes/applications-browsers.php +1 -1
  27. includes/vendor/whichbrowser/parser/data/regexes/applications-others.php +1 -1
  28. includes/vendor/whichbrowser/parser/phpunit.xml +0 -32
  29. includes/vendor/whichbrowser/parser/src/Analyser/Camouflage.php +1 -7
  30. includes/vendor/whichbrowser/parser/src/Analyser/Corrections.php +1 -1
  31. includes/vendor/whichbrowser/parser/src/Analyser/Derive.php +12 -0
  32. includes/vendor/whichbrowser/parser/src/Analyser/Header.php +3 -1
  33. includes/vendor/whichbrowser/parser/src/Analyser/Header/Useragent/Browser.php +113 -28
  34. includes/vendor/whichbrowser/parser/src/Analyser/Header/Useragent/Device/Ereader.php +0 -1
  35. includes/vendor/whichbrowser/parser/src/Analyser/Header/Useragent/Device/Gaming.php +40 -23
  36. includes/vendor/whichbrowser/parser/src/Analyser/Header/Useragent/Device/Mobile.php +3 -5
  37. includes/vendor/whichbrowser/parser/src/Analyser/Header/Useragent/Device/Television.php +84 -18
  38. includes/vendor/whichbrowser/parser/src/Analyser/Header/Useragent/Engine.php +11 -0
  39. includes/vendor/whichbrowser/parser/src/Analyser/Header/Useragent/Os.php +50 -19
  40. includes/vendor/whichbrowser/parser/src/Data/Applications.php +4 -2
  41. includes/vendor/whichbrowser/parser/src/Data/DeviceModels.php +1 -1
  42. includes/vendor/whichbrowser/parser/src/Model/Primitive/Base.php +1 -1
  43. includes/vendor/whichbrowser/parser/src/Model/Primitive/NameVersion.php +8 -3
  44. includes/vendor/whichbrowser/parser/src/Model/Version.php +1 -1
  45. includes/vendor/whichbrowser/parser/tests/data/appliance/amstrad.yaml +0 -4
  46. includes/vendor/whichbrowser/parser/tests/data/appliance/familyhub.yaml +0 -4
  47. includes/vendor/whichbrowser/parser/tests/data/appliance/i-opener.yaml +0 -4
  48. includes/vendor/whichbrowser/parser/tests/data/appliance/weblight.yaml +0 -8
  49. includes/vendor/whichbrowser/parser/tests/data/bots/disabled.yaml +0 -25
  50. includes/vendor/whichbrowser/parser/tests/data/bots/false-positive.yaml +0 -8
  51. includes/vendor/whichbrowser/parser/tests/data/bots/generic.yaml +0 -508
  52. includes/vendor/whichbrowser/parser/tests/data/camera/os-android.yaml +0 -4
  53. includes/vendor/whichbrowser/parser/tests/data/camera/os-tizen.yaml +0 -8
  54. includes/vendor/whichbrowser/parser/tests/data/car/tesla.yaml +0 -8
  55. includes/vendor/whichbrowser/parser/tests/data/car/volvo.yaml +0 -9
  56. includes/vendor/whichbrowser/parser/tests/data/desktop/app-editor.yaml +0 -28
  57. includes/vendor/whichbrowser/parser/tests/data/desktop/app-mediaplayer.yaml +0 -4
  58. includes/vendor/whichbrowser/parser/tests/data/desktop/browser-arachne.yaml +0 -8
  59. includes/vendor/whichbrowser/parser/tests/data/desktop/browser-brave.yaml +0 -12
  60. includes/vendor/whichbrowser/parser/tests/data/desktop/browser-chrome.yaml +0 -64
  61. includes/vendor/whichbrowser/parser/tests/data/desktop/browser-chromium.yaml +0 -52
  62. includes/vendor/whichbrowser/parser/tests/data/desktop/browser-edge.yaml +0 -32
  63. includes/vendor/whichbrowser/parser/tests/data/desktop/browser-firefox.yaml +0 -256
  64. includes/vendor/whichbrowser/parser/tests/data/desktop/browser-icab.yaml +0 -40
  65. includes/vendor/whichbrowser/parser/tests/data/desktop/browser-ie.yaml +0 -104
  66. includes/vendor/whichbrowser/parser/tests/data/desktop/browser-konqueror.yaml +0 -80
  67. includes/vendor/whichbrowser/parser/tests/data/desktop/browser-maxthon.yaml +0 -136
  68. includes/vendor/whichbrowser/parser/tests/data/desktop/browser-midori.yaml +0 -60
  69. includes/vendor/whichbrowser/parser/tests/data/desktop/browser-mosaic.yaml +0 -96
  70. includes/vendor/whichbrowser/parser/tests/data/desktop/browser-netfront.yaml +0 -20
  71. includes/vendor/whichbrowser/parser/tests/data/desktop/browser-netscape.yaml +0 -76
  72. includes/vendor/whichbrowser/parser/tests/data/desktop/browser-omniweb.yaml +0 -92
  73. includes/vendor/whichbrowser/parser/tests/data/desktop/browser-opera.yaml +0 -431
  74. includes/vendor/whichbrowser/parser/tests/data/desktop/browser-other.yaml +0 -160
  75. includes/vendor/whichbrowser/parser/tests/data/desktop/browser-qq.yaml +0 -68
  76. includes/vendor/whichbrowser/parser/tests/data/desktop/browser-safari.yaml +0 -220
  77. includes/vendor/whichbrowser/parser/tests/data/desktop/browser-seamonkey.yaml +0 -88
  78. includes/vendor/whichbrowser/parser/tests/data/desktop/browser-text.yaml +0 -48
  79. includes/vendor/whichbrowser/parser/tests/data/desktop/browser-uc.yaml +0 -101
  80. includes/vendor/whichbrowser/parser/tests/data/desktop/engine-goanna.yaml +0 -28
  81. includes/vendor/whichbrowser/parser/tests/data/desktop/engine-servo.yaml +0 -12
  82. includes/vendor/whichbrowser/parser/tests/data/desktop/os-amigaos.yaml +0 -56
  83. includes/vendor/whichbrowser/parser/tests/data/desktop/os-aros.yaml +0 -8
  84. includes/vendor/whichbrowser/parser/tests/data/desktop/os-beos.yaml +0 -12
  85. includes/vendor/whichbrowser/parser/tests/data/desktop/os-bsd.yaml +0 -148
  86. includes/vendor/whichbrowser/parser/tests/data/desktop/os-chromeos.yaml +0 -32
  87. includes/vendor/whichbrowser/parser/tests/data/desktop/os-haiku.yaml +0 -44
  88. includes/vendor/whichbrowser/parser/tests/data/desktop/os-irix.yaml +0 -20
  89. includes/vendor/whichbrowser/parser/tests/data/desktop/os-joli.yaml +0 -8
  90. includes/vendor/whichbrowser/parser/tests/data/desktop/os-linux.yaml +0 -392
assets/dev/javascript/pages/settings.js CHANGED
@@ -11,7 +11,7 @@ if (wps_js.isset(wps_js.global, 'request_params', 'page') && wps_js.global.reque
11
  // Set Current Tab
12
  if (typeof (localStorage) != 'undefined' && wps_js.isset(wps_js.global, 'request_params', 'save_setting') && wps_js.global.request_params.save_setting === "yes") {
13
  let ActiveTab = localStorage.getItem("wp-statistics-settings-active-tab");
14
- if (ActiveTab.length > 0) {
15
  $('#wp-statistics-settings-form ul.tabs li[data-tab=' + ActiveTab + ']').click();
16
  }
17
  }
11
  // Set Current Tab
12
  if (typeof (localStorage) != 'undefined' && wps_js.isset(wps_js.global, 'request_params', 'save_setting') && wps_js.global.request_params.save_setting === "yes") {
13
  let ActiveTab = localStorage.getItem("wp-statistics-settings-active-tab");
14
+ if (ActiveTab && ActiveTab.length > 0) {
15
  $('#wp-statistics-settings-form ul.tabs li[data-tab=' + ActiveTab + ']').click();
16
  }
17
  }
assets/js/admin.min.js CHANGED
@@ -1 +1 @@
1
- "use strict";function _typeof(t){return(_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(t)}jQuery(document).ready(function(e){var t;t=function(c){var l={},d={};c.ajaxq=function(e,a){if(void 0===a)throw"AjaxQ: queue name is not provided";var o=c.Deferred(),t=o.promise();t.success=t.done,t.error=t.fail,t.complete=t.always;var r,s="function"==typeof a,n=s?null:c.extend(!0,{},a);return r=function(){var t=c.ajax.apply(window,[s?a():n]);return t.done(function(){o.resolve.apply(this,arguments)}),t.fail(function(){o.reject.apply(this,arguments)}),t.always(i),t},l[e]?l[e].push(r):(l[e]=[],r=r(),d[e]=r),t;function i(){var t;l[e]&&((t=l[e].shift())?(t=t(),d[e]=t):(delete l[e],delete d[e]))}},c.each(["getq","postq"],function(t,s){c[s]=function(t,e,a,o,r){return c.isFunction(a)&&(r=r||o,o=a,a=void 0),c.ajaxq(t,{type:"postq"===s?"post":"get",url:e,data:a,success:o,dataType:r})}});function e(t){return l.hasOwnProperty(t)&&0<l[t].length||d.hasOwnProperty(t)}c.ajaxq.isRunning=function(t){return t?e(t):function(){for(var t in l)if(e(t))return!0;return!1}()},c.ajaxq.getActiveRequest=function(t){if(!t)throw"AjaxQ: queue name is required";return d[t]},c.ajaxq.abort=function(t){if(!t)throw"AjaxQ: queue name is required";var e=c.ajaxq.getActiveRequest(t);delete l[t],delete d[t],e&&e.abort()},c.ajaxq.clear=function(t){if(t)l[t]&&(l[t]=[]);else for(var e in l)l.hasOwnProperty(e)&&(l[e]=[])}},"function"==typeof define&&define.amd?define(["jquery"],t):"object"===("undefined"==typeof module?"undefined":_typeof(module))&&module.exports?module.exports=t(require("jquery")):t(jQuery);var a,o,r,s,n,i,c,l,d,p,u,_,h={};function m(t){jQuery(".wp-statistics-settings ul.tabs li").removeClass("current"),jQuery(".wp-statistics-settings .tab-content").removeClass("current"),jQuery("[data-tab="+t+"]").addClass("current"),jQuery("#"+t).addClass("current"),jQuery("#wp-statistics-settings-form").length&&(t=jQuery(location).attr("href")+"&tab="+t,jQuery("#wp-statistics-settings-form").attr("action",t).submit())}function g(t,e){jQuery(document).on("change",t,function(t){t.preventDefault();t=jQuery(e);this.checked?t.show("slow"):(t.hide("slow"),t.find("input[type=checkbox]").prop("checked",!1))})}h.global="undefined"!=typeof wps_global?wps_global:[],h._=function(t){return t in this.global.i18n?this.global.i18n[t]:""},h.is_active=function(t){return 1===h.global.options[t]},h.ajax_queue={key:"wp-statistics",time:400},h.ajaxQ=function(o,r,e,s){var t=4<arguments.length&&void 0!==arguments[4]?arguments[4]:"GET",n=!(5<arguments.length&&void 0!==arguments[5])||arguments[5],t={url:o=!1===o||"metabox"===o?h.global.meta_box_api:o,type:t,dataType:"json",crossDomain:!0,cache:!1,data:r,success:function(t){o===h.global.meta_box_api&&!0===n?t.no_data?jQuery(h.meta_box_inner(r.name)).empty().html(h.no_meta_box_data()):(jQuery(h.meta_box_inner(r.name)).empty().html(h[e].view(t)),h[e].meta_box_init&&setTimeout(function(){h[e].meta_box_init(t)},150)):h[e](t)},error:function(t,e,a){o===h.global.meta_box_api&&!0===n?jQuery(h.meta_box_inner(r.name)).empty().html(h[s](t.responseText)):h[s](t.responseText)}};o===h.global.meta_box_api&&(t.beforeSend=function(t){t.setRequestHeader("X-WP-Nonce",h.global.rest_api_nonce),t.setRequestHeader("Access-Control-Allow-Origin","*")}),jQuery.ajaxq(h.ajax_queue.key,t)},h.placeholder=function(){var t=0<arguments.length&&void 0!==arguments[0]&&arguments[0];return'<div class="wps-ph-item"><div class="wps-ph-col-12">'.concat(h.placeholder_content("picture"),"").concat(h.placeholder_content("line"),"</div>")+(!1!==t?t:"")+"</div>"},h.line_placeholder=function(){for(var t=0<arguments.length&&void 0!==arguments[0]?arguments[0]:1,e='<div class="wps-ph-item">',a=0;a<t;a++)e+='<div class="wps-ph-col-12"> <div class="wps-ph-row"><div class="wps-ph-col-6 big"></div><div class="wps-ph-col-4 empty big"></div><div class="wps-ph-col-4"></div><div class="wps-ph-col-8 empty"></div><div class="wps-ph-col-6"></div><div class="wps-ph-col-6 empty"></div><div class="wps-ph-col-12"></div> </div></div>';return e+="</div>"},h.circle_placeholder=function(){return'<div class="wps-ph-item"> '.concat(h.placeholder_content("circle"),"</div>")},h.rectangle_placeholder=function(){var t=0<arguments.length&&void 0!==arguments[0]?arguments[0]:"";return'<div class="wps-ph-item'+(0<t.length?" "+t:"")+'"><div class="wps-ph-col-12">'.concat(h.placeholder_content("picture"),"</div></div>")},h.placeholder_content=function(){var t="";switch(0<arguments.length&&void 0!==arguments[0]?arguments[0]:"line"){case"picture":t='<div class="wps-ph-picture"></div>';break;case"line":t='<div class="wps-ph-row"><div class="wps-ph-col-6 big"></div><div class="wps-ph-col-4 empty big"></div><div class="wps-ph-col-2 big"></div><div class="wps-ph-col-4"></div><div class="wps-ph-col-8 empty"></div><div class="wps-ph-col-6"></div><div class="wps-ph-col-6 empty"></div><div class="wps-ph-col-12"></div> </div>';break;case"circle":t='<div class="wps-ph-col-2"></div><div class="wps-ph-col-8"><div class="wps-ph-avatar"></div></div>'}return t},h.exist_tag=function(t){return jQuery(t).length},h.date_picker=function(){jQuery.fn.datepicker&&"undefined"!=typeof wps_i18n_jquery_datepicker&&jQuery("input[data-wps-date-picker]").datepicker({monthNames:wps_i18n_jquery_datepicker.monthNames,monthNamesShort:wps_i18n_jquery_datepicker.monthNamesShort,dayNames:wps_i18n_jquery_datepicker.dayNames,dayNamesShort:wps_i18n_jquery_datepicker.dayNamesShort,dayNamesMin:wps_i18n_jquery_datepicker.dayNamesMin,dateFormat:wps_i18n_jquery_datepicker.dateFormat,firstDay:wps_i18n_jquery_datepicker.firstDay,isRTL:wps_i18n_jquery_datepicker.isRTL,onSelect:function(t){var e=jQuery(this).attr("data-wps-date-picker");0<t.length&&jQuery("input[id=date-"+e+"]").val(t)}})},h.select2=function(){jQuery("select[data-type-show=select2]").select2()},h.redirect=function(t){window.location.replace(t)},h.line_chart=function(t,e,a,o){t=document.getElementById(t).getContext("2d");h.is_active("rtl")&&(Chart.defaults.global={defaultFontFamily:"Tahoma"}),new Chart(t,{type:"line",data:{labels:a,datasets:o},options:{responsive:!0,legend:{position:"bottom"},animation:{duration:1500},title:{display:!0,text:e},tooltips:{mode:"index",intersect:!1},interaction:{intersect:!1},scales:{yAxes:[{ticks:{beginAtZero:!0}}]}}})},h.pie_chart=function(t,e,a){var o=3<arguments.length&&void 0!==arguments[3]&&arguments[3],t=document.getElementById(t).getContext("2d");h.is_active("rtl")&&(Chart.defaults.global={defaultFontFamily:"Tahoma"}),!1===o&&(o=function(t,e){var a=e.datasets[t.datasetIndex],o=a.data.reduce(function(t,e,a,o){return t+e}),a=a.data[t.index];return Math.floor(a/o*100+.5)+"% - "+e.labels[t.index]}),new Chart(t,{type:"pie",data:{labels:e,datasets:a},options:{responsive:!0,legend:{position:"bottom"},animation:{duration:1500},tooltips:{callbacks:{label:o}}},plugins:[{afterDraw:function(t){var e,a,o;!0===t.data.datasets[0].data.every(function(t){return 0==t})&&(e=t.chart.ctx,a=t.chart.width,o=t.chart.height,t.clear(),e.save(),e.textAlign="center",e.textBaseline="middle",e.font="14px normal 'Tahoma'",e.fillText(h._("no_data"),a/2,o/2),e.restore())}}]})},h.chart_id=function(t){return"wp-statistics-"+t+"-meta-box-chart"},h.random_color=function(){var t=0<arguments.length&&void 0!==arguments[0]&&arguments[0],e=[[243,156,18,"#f39c12"],[52,152,219,"#3498db"],[192,57,43,"#c0392b"],[155,89,182,"#9b59b6"],[39,174,96,"#27ae60"],[230,126,34,"#e67e22"],[142,68,173,"#8e44ad"],[46,204,113,"#2ecc71"],[41,128,185,"#2980b9"],[22,160,133,"#16a085"],[211,84,0,"#d35400"],[44,62,80,"#2c3e50"],[241,196,15,"#f1c40f"],[231,76,60,"#e74c3c"],[26,188,156,"#1abc9c"],[46,204,113,"#2ecc71"],[52,152,219,"#3498db"],[155,89,182,"#9b59b6"],[52,73,94,"#34495e"],[22,160,133,"#16a085"],[39,174,96,"#27ae60"],[44,62,80,"#2c3e50"],[241,196,15,"#f1c40f"],[230,126,34,"#e67e22"],[231,76,60,"#e74c3c"],[236,240,241,"#9b9e9f"],[149,165,166,"#a65d20"]];return e[!1===t?Math.floor(Math.random()*e.length):t]},h.site_icon=function(t){return'<img src="https://www.google.com/s2/favicons?domain='.concat(t,'" width="16" height="16" alt="').concat(t,'" style="vertical-align: -3px;" />')},h.wordpress_postbox_ajax=function(){var t=0<arguments.length&&void 0!==arguments[0]?arguments[0]:"enable",e=jQuery(".postbox .hndle, .postbox .handlediv");"enable"===t?e.on("click",window.postboxes.handle_click):e.off("click",window.postboxes.handle_click)},h.isset=function(t){for(var e=Array.prototype.slice.call(arguments,1),a=0;a<e.length;a++){if(!t||!t.hasOwnProperty(e[a]))return!1;t=t[e[a]]}return!0},h.number_format=function(t,e,a,o){if(null==t||!isFinite(t))throw new TypeError("number is not valid");var r;e||(e=1<(r=t.toString().split(".").length)?r:0),a=a||".",o=o||",";e=(t=(t=parseFloat(t).toFixed(e)).replace(".",a)).split(a);return e[0]=e[0].replace(/\B(?=(\d{3})+(?!\d))/g,o),t=e.join(a)},h.set_equal_height=function(t,e){var a=jQuery(t).height(),o=jQuery(e).height(),r=e,e=a;a<o&&(r=t,e=o),jQuery(r).css("height",e+"px")},h.Create_Half_PostBox=function(t,e){return'<div class="postbox-container wps-postbox-half '.concat(t,'"><div class="metabox-holder"><div class="meta-box-sortables"> <div class="postbox" id="').concat(e,'"> <div class="inside"></div></div></div></div></div>')},h.isIP=function(t){var e="(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]?|0)";return new RegExp("^".concat(e,"\\.").concat(e,"\\.").concat(e,"\\.").concat(e,"$")).test(t)},h.getLinkParams=function(t){t=(1<arguments.length&&void 0!==arguments[1]&&arguments[1]||window.location.href).match(new RegExp("(?:[?&]"+t+"=)([^&]+)"));return t?t[1]:null},h.sum=function(t){return t.reduce(function(t,e){return t+e},0)},h.sanitize_meta_box_name=function(t){return t.replace(new RegExp("-","g"),"_")},h.get_meta_box_method=function(t){return this.sanitize_meta_box_name(t)+"_meta_box"},h.getMetaBoxKey=function(t){return"wp-statistics-"+t+"-widget"},h.no_meta_box_data=function(){return h._("no_data")},h.error_meta_box_data=function(t){t=JSON.parse(t);return h.isset(t,"message")?t.message:h._("rest_connect")},h.get_meta_box_info=function(t){return t in h.global.meta_boxes?h.global.meta_boxes[t]:[]},h.meta_box_lang=function(t,e){return e in h.global.meta_boxes[t].lang?h.global.meta_boxes[t].lang[e]:""},h.meta_box_inner=function(t){return"#"+h.getMetaBoxKey(t)+" div.inside"},h.meta_box_name_by_id=function(t){return t.split("statistics-").pop().split("-widget")[0]},h.meta_box_button=function(t){var e="#"+h.getMetaBoxKey(t)+" .handle-actions button:first",a=h.get_meta_box_info(t),o="z-index: 9999;position: absolute;top: 1px;",r="right";h.is_active("rtl")&&(r="left"),jQuery("#"+h.getMetaBoxKey(t)+" button[class*=wps-refresh], #"+h.getMetaBoxKey(t)+" button[class*=wps-more]").remove(),h.is_active("more_btn")&&h.isset(a,"page_url")&&jQuery('<button class="handlediv wps-more"'+(h.is_active("gutenberg")?' style="'.concat(o).concat(r,': 3%;" '):'style="line-height: 28px;"')+' type="button" onclick="location.href = \''+h.global.admin_url+"admin.php?page="+a.page_url+'\';"><span class="screen-reader-text">'+h._("more_detail")+'</span> <span class="dashicons dashicons-external"></span></button>').insertBefore(e),h.is_active("more_btn")&&h.isset(a,"page_url")?jQuery('<button class="handlediv wps-refresh"'+(h.is_active("gutenberg")?' style="'.concat(o).concat(r,': 6%;" '):'style="line-height: 28px;"')+' type="button"><span class="screen-reader-text">'+h._("reload")+'</span> <span class="dashicons dashicons-update"></span> </button>').insertAfter("#"+h.getMetaBoxKey(t)+" button[class*=wps-more]"):jQuery('<button class="handlediv wps-refresh"'+(h.is_active("gutenberg")?' style="'.concat(o).concat(r,': 3%;" '):'style="line-height: 28px;"')+' type="button"><span class="screen-reader-text">'+h._("reload")+'</span> <span class="dashicons dashicons-update"></span> </button>').insertBefore(e)},h.run_meta_box=function(t){var e,a,o=1<arguments.length&&void 0!==arguments[1]&&arguments[1],r=!(2<arguments.length&&void 0!==arguments[2])||arguments[2];h.exist_tag("#"+h.getMetaBoxKey(t))&&(h.is_active("gutenberg")||!h.is_active("gutenberg")&&jQuery("#"+h.getMetaBoxKey(t)).is(":visible"))&&(e=jQuery(h.meta_box_inner(t)),(a=h.get_meta_box_method(t))in h&&("placeholder"in h[a]?e.html(h[a].placeholder()):e.html(h.placeholder()),!0===r&&h.meta_box_button(t),!(t={name:t})!==o&&(t=Object.assign(o,t)),"params"in h[a]&&(t=Object.assign(t,h[a].params())),h.ajaxQ("metabox",t,a,"error_meta_box_data")))},h.run_meta_boxes=function(){var t=0<arguments.length&&void 0!==arguments[0]&&arguments[0];(t=!1===t?Object.keys(h.global.meta_boxes):t).forEach(function(t){h.run_meta_box(t)})},jQuery(document).on("mouseenter mouseleave",".wps-refresh, .wps-more",function(t){"mouseenter"===t.type?h.wordpress_postbox_ajax("disable"):h.wordpress_postbox_ajax("enable")}),jQuery(document).on("click",".wps-refresh",function(t){t.preventDefault();t=jQuery(this).closest(".postbox").attr("id"),t=h.meta_box_name_by_id(t);h.run_meta_box(t)}),jQuery(document).on("click",'input[type=checkbox][id^="wp-statistics-"][id$="-widget-hide"]',function(){var t;jQuery(this).is(":checked")&&(t=jQuery(this).attr("id"),t=h.meta_box_name_by_id(t),h.run_meta_box(t))}),h.btn_group_chart=function(e){var a,t=1<arguments.length&&void 0!==arguments[1]&&arguments[1],o={7:h._("str_week"),30:h._("str_month"),365:h._("str_year")};"ago"==t.type&&(a=parseInt(t.days));var r='<div class="wps-btn-group"><div class="btn-group" role="group">';return Object.keys(o).forEach(function(t){r+='<button type="button" class="btn '+(t==a?"btn-primary":"btn-default")+'" data-chart-time="'.concat(e,'" data-time="').concat(t,'">').concat(o[t],"</button>")}),r+='<button type="button" class="btn '+("between"==t.type?"btn-primary":"btn-default")+'" data-custom-date-picker="'.concat(e,'">').concat(h._("custom"),"</button>"),r+="</div></div>",r+='<div data-chart-date-picker="'.concat(e,'"')+("ago"==t.type?' style="display:none;"':"")+'><input type="text" size="18" name="date-from" data-wps-date-picker="from" value="'.concat(t.from,'" placeholder="YYYY-MM-DD" autocomplete="off">')+h._("to")+'<input type="text" size="18" name="date-to" data-wps-date-picker="to" value="'.concat(t.to,'" placeholder="YYYY-MM-DD" autocomplete="off"><input type="submit" value="')+h._("go")+'" data-between-chart-show="'.concat(e,'" class="button-primary"><input type="hidden" name="" id="date-from" value="').concat(t.from,'"><input type="hidden" name="" id="date-to" value="').concat(t.to,'"></div>')},jQuery(document).on("click",".wps-btn-group button",function(){jQuery(".wps-btn-group button").attr("class","btn btn-default"),jQuery(this).attr("class","btn btn-primary")}),jQuery(document).on("click","button[data-custom-date-picker]",function(){jQuery("div[data-chart-date-picker= "+jQuery(this).attr("data-custom-date-picker")+"]").slideDown()}),jQuery(document).on("click","button[data-chart-time]",function(){h.run_meta_box(jQuery(this).attr("data-chart-time"),{ago:jQuery(this).attr("data-time"),"no-data":"no"})}),jQuery(document).on("click","input[data-between-chart-show]",function(){var t=jQuery(this).attr("data-between-chart-show");h.run_meta_box(t,{from:jQuery("div[data-chart-date-picker="+t+"] input[id=date-from]").val(),to:jQuery("div[data-chart-date-picker="+t+"] input[id=date-to]").val(),"no-data":"no"})}),h.browsers_meta_box={placeholder:function(){return h.circle_placeholder()},view:function(){var t=0<arguments.length&&void 0!==arguments[0]?arguments[0]:[],e="";return h.is_active("overview_page")&&(e+=h.btn_group_chart("browsers",t),setTimeout(function(){h.date_picker()},1e3)),e+='<canvas id="'+h.chart_id("browsers")+'" height="220"></canvas>'},meta_box_init:function(){for(var t,e=0<arguments.length&&void 0!==arguments[0]?arguments[0]:[],a=[],o=0;o<=10;o++)t=h.random_color(o),a.push("rgba("+t[0]+","+t[1]+","+t[2]+",0.4)");var r=[{label:h._("browsers"),data:e.browsers_value,backgroundColor:a}];if(h.pie_chart(h.chart_id("browsers"),e.browsers_name,r),h.exist_tag("#"+h.getMetaBoxKey("browsers-table"))){["browsers-table","browsers"].forEach(function(t){jQuery("#"+h.getMetaBoxKey(t)+" .inside").removeAttr("style")});for(var s='<div class="title-center">'.concat(e.title,'</div><table width="100%" class="widefat table-stats"><tr><td class="wps-text-muted">').concat(h._("browser"),'</td><td class="wps-text-muted">').concat(h._("visitor_count"),'</td><td class="wps-text-muted">').concat(h._("percentage"),"</td></tr>"),n=0;n<e.browsers_name.length;n++)s+=" <tr><td>".concat(e.browsers_name[n],"</td><td>").concat(0<parseInt(e.browsers_value[n])?"".concat("other"!==e.info.agent[n]?'<a href="'+e.info.visitor_page+"&agent="+e.info.agent[n]+"&from="+e.from+"&to="+e.to+'" target="_blank">':""," ").concat(h.number_format(e.browsers_value[n])," ").concat("other"!==e.info.agent[n]?"</a>":""):e.browsers_value[n],"</td><td>").concat(h.number_format(e.browsers_value[n]/e.total*100),"%</td> </tr>");s+=" <tr><td>".concat(h._("total"),"</td><td>").concat(h.number_format(e.total),"</td><td></td></tr>"),s+="</table>",jQuery("#"+h.getMetaBoxKey("browsers-table")+" .inside").html(s),h.set_equal_height(".postBox-table .inside",".postBox-chart .inside");for(var i="",c=0;c<e.browsers_name.length;c++)0<parseInt(e.browsers_value[c])&&e.info.agent[c]&&(i+='<div class="wps-title-group"><img src="'.concat(e.info.logo[c],'" alt="').concat(e.browsers_name[c],'" style="vertical-align: -3px;"> ').concat(e.browsers_name[c],'</div><div class="wp-clearfix"></div>'),i+=h.Create_Half_PostBox("postBox-chart-"+e.info.agent[c],"browser-"+e.info.agent[c]+"-chart"),i+=h.Create_Half_PostBox("postBox-table-"+e.info.agent[c],"browser-"+e.info.agent[c]+"-table"),i+='<div class="wp-clearfix"></div>');jQuery(i).insertAfter("#browsers-table");for(var l=0;l<e.browsers_name.length;l++)0<parseInt(e.browsers_value[l])&&e.info.agent[l]&&this.run_custom_browser(e.info.agent[l])}},run_custom_browser:function(t){["browser-"+t+"-chart","browser-"+t+"-table"].forEach(function(t){jQuery("#"+t+" .inside").css("height","430px")}),jQuery("#browser-"+t+"-table .inside").html(h.placeholder()),jQuery("#browser-"+t+"-chart .inside").html(h.circle_placeholder()),jQuery(".wps-ph-picture").attr("style","height: 310px;");var e={name:"browsers",browser:t};["from","to"].forEach(function(t){h.isset(h.global,"request_params",t)&&(e[t]=h.global.request_params[t])}),h.ajaxQ(h.global.meta_box_api,e,"show_custom_agent","error_custom_agent","GET",!1)}},h.show_custom_agent=function(n){var i=n.info.agent[0];jQuery("#browser-"+i+"-chart .inside").html('<canvas id="'+h.chart_id("browser-"+i)+'" height="220"></canvas>'),setTimeout(function(){for(var t,e=[],a=0;a<=10;a++)t=h.random_color(a),e.push("rgba("+t[0]+","+t[1]+","+t[2]+",0.4)");var o=[{label:h._("browsers"),data:n.browsers_value,backgroundColor:e}];h.pie_chart(h.chart_id("browser-"+i),n.browsers_name,o),["browser-"+i+"-chart","browser-"+i+"-table"].forEach(function(t){jQuery("#"+t+" .inside").removeAttr("style")});for(var r='<div class="title-center">'.concat(n.title,'</div><table width="100%" class="widefat table-stats"><tr><td class="wps-text-muted">').concat(h._("version_list"),'</td><td class="wps-text-muted">').concat(h._("visitor_count"),'</td><td class="wps-text-muted">').concat(h._("percentage"),"</td></tr>"),s=0;s<n.browsers_name.length;s++)r+=" <tr><td>".concat(n.browsers_name[s],"</td><td>").concat(0<parseInt(n.browsers_value[s])?h.number_format(n.browsers_value[s]):n.browsers_value[s],"</td><td>").concat(h.number_format(n.browsers_value[s]/n.total*100),"%</td></tr>");r+=" <tr><td>".concat(h._("total"),"</td><td>").concat(h.number_format(n.total),"</td><td></td></tr>"),r+="</table>";o="#browser-"+i+"-table .inside";jQuery(o).html(r),h.set_equal_height(o,"#browser-"+i+"-chart .inside")},500)},h.error_custom_agent=function(t){},h.countries_meta_box={view:function(){var t=0<arguments.length&&void 0!==arguments[0]?arguments[0]:[],e="";e+='<table width="100%" class="widefat table-stats wps-report-table"><tbody><tr><td width="10%" style=\'text-align: left\'>'.concat(h._("rank"),"</td><td width=\"10%\" style='text-align: left'>").concat(h._("flag"),"</td><td width=\"40%\" style='text-align: left'>").concat(h._("country"),"</td><td width=\"40%\" style='text-align: left'>").concat(h._("visitor_count"),"</td></tr>");var a=1;return t.forEach(function(t){e+="<tr><td style='text-align: left;'>".concat(a,"</td><td style='text-align: left;'><img src=\"").concat(t.flag,'" title="').concat(t.name,'" alt="').concat(t.name,"\"/></td><td style='text-align: left;'>").concat(t.name,"</td><td style='text-align: left;'><a href=\"").concat(t.link,'" title="').concat(t.name,'" target="_blank">').concat(h.number_format(t.number),"</a></td></tr>"),a++}),e+="</tbody></table>"}},h.exclusions_meta_box={placeholder:function(){return h.rectangle_placeholder()},view:function(){var t=h.is_active("overview_page")?110:210;h.isset(h.global,"request_params","page")&&"exclusions"===h.global.request_params.page&&(t=80);var e="";return e+='<canvas id="'+h.chart_id("exclusions")+'" height="'+t+'"></canvas>'},meta_box_init:function(){var t,e=0<arguments.length&&void 0!==arguments[0]?arguments[0]:[];this.show_chart(h.chart_id("exclusions"),e),!h.isset(h.global,"request_params","page")||"exclusions"!==h.global.request_params.page||h.exist_tag(t="span[id='number-total-chart-exclusions']")&&(e=h.sum(Object.values(e.total)),jQuery(t).html(h.number_format(e)))},show_chart:function(t){var r=1<arguments.length&&void 0!==arguments[1]?arguments[1]:[],s="",n=[],i=0;Object.keys(r.exclusions).forEach(function(t){var e,a,o=h.sum(Object.values(r.value[t]));0<o&&(e=r.exclusions[t],a=h.random_color(i),n.push({label:e,data:r.value[t],backgroundColor:"rgba("+a[0]+","+a[1]+","+a[2]+",0.3)",borderColor:"rgba("+a[0]+","+a[1]+","+a[2]+",1)",borderWidth:1,fill:!0,tension:.4}),s+="<tr><th>".concat(e,'</th> <th class="th-center"><span style="color: #9a9494 !important;">').concat(h.number_format(o),"</span></th></tr>"),i++)}),h.exist_tag("table[data-table=exclusions]")&&jQuery(s).insertAfter("table[data-table=exclusions] tr:first"),h.line_chart(t,r.title,r.date,n)}},h.hits_meta_box={placeholder:function(){return h.rectangle_placeholder()},view:function(){var t=0<arguments.length&&void 0!==arguments[0]?arguments[0]:[],e=h.is_active("overview_page")?110:210;h.isset(h.global,"request_params","page")&&"hits"===h.global.request_params.page&&(e=80);var a="";return h.is_active("overview_page")&&(a+=h.btn_group_chart("hits",t),setTimeout(function(){h.date_picker()},1e3)),a+='<canvas id="'+h.chart_id("hits")+'" height="'+e+'"></canvas>'},meta_box_init:function(){var a=0<arguments.length&&void 0!==arguments[0]?arguments[0]:[];this.hits_chart(h.chart_id("hits"),a),h.isset(h.global,"request_params","page")&&"hits"===h.global.request_params.page&&["visits","visitors"].forEach(function(t){var e="span[id^='number-total-chart-"+t+"']";h.exist_tag(e)&&jQuery(e).html(a.total[t])})},hits_chart:function(t){var e=1<arguments.length&&void 0!==arguments[1]?arguments[1]:[],a=e;"hits-chart"in e&&(a=e["hits-chart"]);e=[];h.is_active("visitors")&&e.push({label:h._("visitors"),data:a.visitors,backgroundColor:"rgba(255, 99, 132, 0.2)",borderColor:"rgba(255, 99, 132, 1)",borderWidth:1,fill:!0,tension:.4}),h.is_active("visits")&&e.push({label:h._("visits"),data:a.visits,backgroundColor:"rgba(54, 162, 235, 0.2)",borderColor:"rgba(54, 162, 235, 1)",borderWidth:1,fill:!0,tension:.4}),h.line_chart(t,a.title,a.date,e)}},h.hitsmap_meta_box={placeholder:function(){return h.rectangle_placeholder()},view:function(){return'<div id="wp-statistics-visitors-map"></div>'},meta_box_init:function(){var o=0<arguments.length&&void 0!==arguments[0]?arguments[0]:[],r=Array();o.hasOwnProperty("country")&&Object.keys(o.country).forEach(function(e){var a="<div class='map-html-marker'><img src='".concat(o.country[e].flag,"' alt=\"").concat(o.country[e].name,"\" title='").concat(o.country[e].name,"' class='log-tools'/> ").concat(o.country[e].name," [").concat(o.total_country[e],"]<hr />");Object.keys(o.visitor[e]).forEach(function(t){a+="<p><img src='".concat(o.visitor[e][t].browser.logo,"' alt=\"").concat(o.visitor[e][t].browser.name,"\" class='log-tools' title='").concat(o.visitor[e][t].browser.name,"'/> ").concat(o.visitor[e][t].ip," ")+("Unknown"!==o.visitor[e][t].city?"- "+o.visitor[e][t].city:"")+"</p>"}),a+="</div>",r[e]=a}),jQuery("#wp-statistics-visitors-map").vectorMap({map:"world_en",backgroundColor:"#fff",borderColor:"#7e7e7e",borderOpacity:.6,color:"#e6e5e2",hoverColor:"#c3403c",colors:o.color,onLabelShow:function(t,e,a){void 0!==r[a]?e.html(r[a]):e.html(e.html()+" [0]<hr />")}})}},h.pages_chart_meta_box={placeholder:function(){return h.rectangle_placeholder()},view:function(){return'<canvas id="'+h.chart_id("pages-chart")+'" height="80"></canvas>'},meta_box_init:function(){var t=0<arguments.length&&void 0!==arguments[0]?arguments[0]:[];this.show_chart(h.chart_id("pages-chart"),t),h.exist_tag("span[id=number-total-visits]")&&jQuery("span[id=number-total-visits]").html(t.total),h.exist_tag("span[id=number-total-chart-visits]")&&jQuery("span[id=number-total-chart-visits]").html(t.total_dates)},show_chart:function(t){var e=1<arguments.length&&void 0!==arguments[1]?arguments[1]:[];h.line_chart(t,e.title,e.date,[{label:h._("visits"),data:e.stat,backgroundColor:"rgba(54, 162, 235, 0.2)",borderColor:"rgba(54, 162, 235, 1)",borderWidth:1,fill:!0,tension:.4}])}},h.pages_meta_box={view:function(){var t=0<arguments.length&&void 0!==arguments[0]?arguments[0]:[],e="";e+='<table width="100%" class="widefat table-stats wps-report-table wps-table-fixed"><tbody><tr><td width=\'10%\'>'.concat(h._("id"),"</td><td width='40%'>").concat(h._("title"),"</td><td width='40%'>").concat(h._("link"),"</td><td width='10%'>").concat(h._("visits"),"</td></tr>");var a=1;return t.forEach(function(t){e+="<tr><td style='text-align: left;'>".concat(a,"</td><td style='text-align: left;'><span title='").concat(t.title,"' class='wps-cursor-default wps-text-wrap'>").concat(t.title,"</span></td><td style='text-align: left;'><a href=\"").concat(t.link,'" title="').concat(t.title,'" target="_blank">').concat(t.str_url,'</a></td><td style="text-align: left"><a href="').concat(t.hits_page,'" class="wps-text-muted">').concat(t.number,"</a></td></tr>"),a++}),e+="</tbody></table>"}},h.platforms_meta_box={placeholder:function(){return h.circle_placeholder()},view:function(){var t=0<arguments.length&&void 0!==arguments[0]?arguments[0]:[],e="";return h.is_active("overview_page")&&(e+=h.btn_group_chart("platforms",t),setTimeout(function(){h.date_picker()},1e3)),e+='<canvas id="'+h.chart_id("platforms")+'" height="220"></canvas>'},meta_box_init:function(){for(var t,e=0<arguments.length&&void 0!==arguments[0]?arguments[0]:[],a=[],o=0;o<=20;o++)t=h.random_color(),a.push("rgba("+t[0]+","+t[1]+","+t[2]+",0.4)");var r=[{label:h._("platform"),data:e.platform_value,backgroundColor:a,tension:.4}];if(h.pie_chart(h.chart_id("platforms"),e.platform_name,r),h.exist_tag("#"+h.getMetaBoxKey("platforms-table"))){["platforms-table","platforms"].forEach(function(t){jQuery("#"+h.getMetaBoxKey(t)+" .inside").removeAttr("style")});for(var s='<div class="title-center">'.concat(e.title,'</div><table width="100%" class="widefat table-stats"><tr><td class="wps-text-muted">').concat(h._("platform"),'</td><td class="wps-text-muted">').concat(h._("visitor_count"),'</td><td class="wps-text-muted">').concat(h._("percentage"),"</td></tr>"),n=0;n<e.platform_name.length;n++)s+=" <tr><td>".concat(e.platform_name[n],"</td><td>").concat(0<parseInt(e.platform_value[n])?'<a href="'+e.info.visitor_page+"&platform="+e.platform_name[n]+"&from="+e.from+"&to="+e.to+'" target="_blank"> '.concat(h.number_format(e.platform_value[n])," </a>"):h.number_format(e.platform_value[n]),"</td><td>").concat(h.number_format(e.platform_value[n]/e.total*100),"%</td> </tr>");s+=" <tr><td>".concat(h._("total"),"</td><td>").concat(h.number_format(e.total),"</td><td></td></tr>"),s+="</table>",jQuery("#"+h.getMetaBoxKey("platforms-table")+" .inside").html(s),h.set_equal_height(".postBox-table .inside",".postBox-chart .inside")}}},h.post_meta_box={params:function(){return{ID:h.global.page.ID}},view:function(){var t=0<arguments.length&&void 0!==arguments[0]?arguments[0]:[];return(t.hasOwnProperty("content")?'<div class="wps-center" style="padding: 15px;"> '+t.content+"</div>":'<canvas id="'+h.chart_id("post")+'" height="85"></canvas>')+'<div class="wps-wrap wps-meta-box-footer">'+t.visitors+"</div>"},meta_box_init:function(){var t=0<arguments.length&&void 0!==arguments[0]?arguments[0]:[];t.hasOwnProperty("content")?jQuery("#"+h.getMetaBoxKey("post")+" button[onclick]").remove():this.post_hits_chart(h.chart_id("post"),t)},post_hits_chart:function(t){var e=1<arguments.length&&void 0!==arguments[1]?arguments[1]:[];h.line_chart(t,e.title,e.date,[{label:e.post_title,data:e.state,backgroundColor:"rgba(255, 99, 132, 0.2)",borderColor:"rgba(255, 99, 132, 1)",borderWidth:1,fill:!0,tension:.4}])}},h.quickstats_meta_box={view:function(){var t="";return t+='<table width="100%" class="widefat table-stats wps-summary-stats"><tbody>',t+=h.summary_meta_box.summary_statistics(0<arguments.length&&void 0!==arguments[0]?arguments[0]:[]),t+="</tbody></table>",t+='<br><hr width="80%"/><br>',t+='<canvas id="'+h.chart_id("quickstats")+'" height="210"></canvas>'},meta_box_init:function(){var t=0<arguments.length&&void 0!==arguments[0]?arguments[0]:[];h.hits_meta_box.hits_chart(h.chart_id("quickstats"),t)}},h.recent_meta_box={view:function(){var t=0<arguments.length&&void 0!==arguments[0]?arguments[0]:[],e="";return e+='<div class="wp-statistics-responsive-table">',e+='<table width="100%" class="widefat table-stats wps-report-table"><tbody><tr><td>'.concat(h._("browser"),"</td>")+(h.is_active("geo_ip")?"<td>".concat(h._("country"),"</td>"):"")+""+(h.is_active("geo_city")?"<td>".concat(h._("city"),"</td>"):"")+"<td>".concat(h._("date"),"</td><td>").concat(h._("hits"),"</td><td>").concat(h._("ip"),"</td><td>").concat(h._("referrer"),"</td></tr>"),t.forEach(function(t){e+='<tr><td style="text-align: left"><a href="'.concat(t.browser.link,'" title="').concat(t.browser.name,'"><img src="').concat(t.browser.logo,'" alt="').concat(t.browser.name,"\" class='log-tools' title='").concat(t.browser.name,"'/></a></td>")+(h.is_active("geo_ip")?'<td style="text-align: left"><img src=\''.concat(t.country.flag,"' alt='").concat(t.country.name,"' title='").concat(t.country.name,"' class='log-tools'/></td>"):"")+""+(h.is_active("geo_city")?"<td>".concat(t.city,"</td>"):"")+'<td style="text-align: left">'.concat(t.date,'</td><td style="text-align: left">').concat(t.hits,'</td><td style="text-align: left">')+(t.hash_ip||"<a href='".concat(t.ip.link,"'>").concat(t.ip.value,"</a>"))+'</td><td style="text-align: left">'.concat(t.referred,"</td></tr>")}),e+="</tbody></table>",e+="</div>"}},h.referring_meta_box={view:function(){var t=0<arguments.length&&void 0!==arguments[0]?arguments[0]:[],e="";return e+='<table width="100%" class="widefat table-stats wps-report-table"><tbody><tr><td width="80%">'.concat(h._("address"),'</td><td width="20%">').concat(h.meta_box_lang("referring","references"),"</td></tr>"),t.forEach(function(t){e+="<tr><td>"+h.site_icon(t.domain)+" <a href='//".concat(t.domain,"' title='").concat(t.title,'\' target="_blank">').concat(t.domain,"</a><span class='wps-cursor-default wps-referring-widget-ip'")+(2<t.country.length?' title="'.concat(t.country,'"'):"")+">".concat(t.ip,'</span></td><td class="wps-middle-vertical"><a href="').concat(t.page_link,'">').concat(t.number,"</a></td></tr>")}),e+="</tbody></table>"}},h.search_meta_box={placeholder:function(){return h.rectangle_placeholder()},view:function(){var t=0<arguments.length&&void 0!==arguments[0]?arguments[0]:[],e=h.is_active("overview_page")?110:210;h.isset(h.global,"request_params","page")&&"searches"===h.global.request_params.page&&(e=80);var a="";return h.is_active("overview_page")&&(a+=h.btn_group_chart("search",t),setTimeout(function(){h.date_picker()},1e3)),a+='<canvas id="'+h.chart_id("search")+'" height="'+e+'"></canvas>'},meta_box_init:function(){var a=0<arguments.length&&void 0!==arguments[0]?arguments[0]:[],o=[],r=0;Object.keys(a["search-engine"]).forEach(function(t){var e=a["search-engine"][t].name,t=h.random_color(r);o.push({label:e,data:a.stat[e],backgroundColor:"rgba("+t[0]+","+t[1]+","+t[2]+",0.3)",borderColor:"rgba("+t[0]+","+t[1]+","+t[2]+",1)",borderWidth:1,fill:!0,tension:.4}),r++}),1===a.total.active&&o.push({label:h._("total"),data:a.total.stat,backgroundColor:"rgba("+a.total.color+", 0.2)",borderColor:"rgba("+a.total.color+", 1)",borderWidth:1,fill:!0,tension:.4}),h.line_chart(h.chart_id("search"),a.title,a.date,o)}},h.summary_meta_box={summary_statistics:function(){var o=0<arguments.length&&void 0!==arguments[0]?arguments[0]:[],r="";return o.user_online&&(r="<tr><th>".concat(h._("online_users"),':</th><th colspan="2" id="th-colspan"><span><a href="').concat(o.user_online.link,'">').concat(o.user_online.value,"</a></span></th></tr>")),(h.is_active("visitors")||h.is_active("visits"))&&function(){r+='<tr><th width="60%"></th>',["visitors","visits"].forEach(function(t){r+='<th class="th-center">'+(h.is_active(t)?h._(t):"")+"</th>"}),r+="</tr>";for(var a=["today","yesterday","week","month","year","total"],t=0;t<a.length;t++)!function(e){r+="<tr><th>".concat(h._(a[e]),": </th>"),["visitors","visits"].forEach(function(t){r+='<th class="th-center">'+(h.is_active(t)?'<a href="'.concat(o[t][a[e]].link,'"><span>').concat(o[t][a[e]].value,"</span></a>"):"")+"</th>"}),r+="</tr>"}(t)}(),r},view:function(){var e=0<arguments.length&&void 0!==arguments[0]?arguments[0]:[],a="";return a+='<table width="100%" class="widefat table-stats wps-summary-stats"><tbody>',a+=this.summary_statistics(e),h.is_active("visitors")&&(a+='<tr><th colspan="3"><br><hr></th></tr>',a+='<tr><th colspan="3" style="text-align: center;">'.concat(h.meta_box_lang("summary","search_engine"),'</th></tr><tr><th width="60%"></th><th class="th-center">').concat(h._("today"),'</th><th class="th-center">').concat(h._("yesterday"),"</th></tr>"),Object.keys(e["search-engine"]).forEach(function(t){a+='<tr><th><img src="'.concat(e["search-engine"][t].logo,'" alt="').concat(e["search-engine"][t].name,'" class="wps-engine-logo"> ').concat(e["search-engine"][t].name,':</th><th class="th-center"><span>').concat(e["search-engine"][t].today,'</span></th><th class="th-center"><span>').concat(e["search-engine"][t].yesterday,"</span></th></tr>")}),a+="<tr><th>".concat(h._("daily_total"),':</th><td id="th-colspan" class="th-center"><span>').concat(e["search-engine-total"].today,'</span></td><td id="th-colspan" class="th-center"><span>').concat(e["search-engine-total"].yesterday,"</span></td></tr><tr><th>").concat(h._("total"),':</th><th colspan="2" id="th-colspan"><span>').concat(e["search-engine-total"].total,"</span></th></tr>")),a+=' <tr><th colspan="3"><br><hr></th></tr><tr><th colspan="3" style="text-align: center;">'.concat(h.meta_box_lang("summary","current_time_date"),'<span id="time_zone"><a href="').concat(e.timezone["option-link"],'"> ').concat(h.meta_box_lang("summary","adjustment"),'</a></span></th></tr><tr><th colspan="3">').concat(h._("date"),': <code dir="ltr">').concat(e.timezone.date,'</code></th></tr><tr> <th colspan="3">').concat(h._("time"),': <code dir="ltr">').concat(e.timezone.time,"</code></th></tr>"),a+="</tbody></table>"}},h.top_pages_chart_meta_box={placeholder:function(){return h.rectangle_placeholder()},view:function(){var t="";return setTimeout(function(){h.date_picker()},1e3),t+='<canvas id="'+h.chart_id("top-pages-chart")+'" height="80"></canvas>'},meta_box_init:function(){var t=0<arguments.length&&void 0!==arguments[0]?arguments[0]:[];this.top_pages_chart(h.chart_id("top-pages-chart"),t)},top_pages_chart:function(t){var a=1<arguments.length&&void 0!==arguments[1]?arguments[1]:[],o=[],r=0;Object.keys(a.stat).forEach(function(t){var e=h.random_color(r);o.push({label:t,data:a.stat[t],backgroundColor:"rgba("+e[0]+","+e[1]+","+e[2]+",0.3)",borderColor:"rgba("+e[0]+","+e[1]+","+e[2]+",1)",borderWidth:1,fill:!0,tension:.4}),r++}),h.line_chart(t,a.title,a.date,o)}},h.top_visitors_meta_box={view:function(){var t=0<arguments.length&&void 0!==arguments[0]?arguments[0]:[],e="";e+='<div class="wp-statistics-responsive-table">',e+='<table width="100%" class="widefat table-stats wps-report-table"><tbody><tr><td>'.concat(h._("rank"),"</td><td>").concat(h._("hits"),"</td>")+(h.is_active("geo_ip")?"<td>".concat(h._("flag"),"</td><td>").concat(h._("country"),"</td>"):"")+""+(h.is_active("geo_city")?"<td>".concat(h._("city"),"</td>"):"")+"<td>".concat(h._("ip"),"</td><td>").concat(h._("agent"),"</td><td>").concat(h._("platform"),"</td><td>").concat(h._("version"),"</td></tr>");var a=1;return t.forEach(function(t){e+="<tr><td>".concat(a,"</td><td>").concat(t.hits,"</td>")+(h.is_active("geo_ip")?"<td><img src='".concat(t.country.flag,"' alt='").concat(t.country.name,"' title='").concat(t.country.name,"' class='log-tools'/></td><td>").concat(t.country.name,"</td>"):"")+""+(h.is_active("geo_city")?"<td>".concat(t.city,"</td>"):"")+"<td>"+(t.hash_ip||"<a href='".concat(t.ip.link,"'>").concat(t.ip.value,"</a>"))+"</td><td>".concat(t.agent,"</td><td>").concat(t.platform,"</td><td>").concat(t.version,"</td></tr>"),a++}),e+="</tbody></table>",e+="</div>"}},h.useronline_meta_box={view:function(){var t=0<arguments.length&&void 0!==arguments[0]?arguments[0]:[],e="";return e+='<table class="widefat table-stats wps-report-table wps-table-fixed"><tr>'+(h.is_active("geo_ip")?"<td style='text-align: left;'>".concat(h._("country"),"</td>"):"")+"<td style='text-align: left;'>".concat(h._("ip"),"</td><td width=\"35%\" style='text-align: left;'>").concat(h._("page"),"</td><td style='text-align: left;'>").concat(h._("referrer"),"</td></tr>"),t.forEach(function(t){e+="<tr>"+(h.is_active("geo_ip")?'<td style="text-align: left"><img src=\''.concat(t.country.flag,"' alt='").concat(t.country.name,"' title='").concat(t.country.name,"' class='log-tools'/></td>"):"")+"<td style='text-align: left !important'>"+(t.hash_ip||t.ip.value)+"</td><td style='text-align: left !important;'><span class=\"wps-text-wrap\">"+(2<t.page.link.length?'<a href="'.concat(t.page.link,'" title="').concat(t.page.title,'" target="_blank" class="wps-text-muted">'):"")+t.page.title+(2<t.page.link.length?"</a>":"")+'</span></td><td style="text-align: left !important">'.concat(t.referred,"</td></tr>")}),e+="</table>"}},h.words_meta_box={view:function(){var t=0<arguments.length&&void 0!==arguments[0]?arguments[0]:[],e="";e+='<div class="wp-statistics-responsive-table">',e+='<table width="100%" class="widefat table-stats wps-report-table"><tbody><tr><td>'.concat(h._("word"),"</td><td>").concat(h._("browser"),"</td>")+(h.is_active("geo_ip")?"<td>".concat(h._("country"),"</td>"):"")+""+(h.is_active("geo_city")?"<td>".concat(h._("city"),"</td>"):"")+"<td>".concat(h._("date"),"</td><td>").concat(h._("ip"),"</td><td>").concat(h._("referrer"),"</td></tr>");return t.forEach(function(t){e+='<tr><td style="text-align: left"><span title=\''.concat(t.word,"' class='wps-cursor-default wps-text-wrap")+(h.is_active("overview_page")?" wps-200-px":"")+"'>".concat(t.word,'</span></td><td style="text-align: left"><a href="').concat(t.browser.link,'" title="').concat(t.browser.name,'"><img src="').concat(t.browser.logo,'" alt="').concat(t.browser.name,"\" class='log-tools' title='").concat(t.browser.name,"'/></a></td>")+(h.is_active("geo_ip")?'<td style="text-align: left"><img src=\''.concat(t.country.flag,"' alt='").concat(t.country.name,"' title='").concat(t.country.name,"' class='log-tools'/></td>"):"")+(h.is_active("geo_city")?'<td style="text-align: left">'.concat(t.city,"</td>"):"")+'<td style="text-align: left">'.concat(t.date,'</td><td style="text-align: left">')+(t.hash_ip||"<a href='".concat(t.ip.link,"'>").concat(t.ip.value,"</a>"))+'</td><td style="text-align: left">'.concat(t.referred,"</td></tr>"),0}),e+="</tbody></table>",e+="</div>"}},h.isset(h.global,"request_params","page")&&"authors"===h.global.request_params.page&&(a={ago:30,type:"author",ID:0},["from","to","ID"].forEach(function(t){h.isset(h.global,"request_params",t)&&(a[t]=h.global.request_params[t])}),jQuery("span[id^='number-total-']").html(h.rectangle_placeholder("wps-text-placeholder")),h.run_meta_box("pages-chart",a,!1)),h.isset(h.global,"request_params","page")&&"browser"===h.global.request_params.page&&(o={},["from","to"].forEach(function(t){h.isset(h.global,"request_params",t)&&(o[t]=h.global.request_params[t])}),["browsers-table","browsers"].forEach(function(t){jQuery("#"+h.getMetaBoxKey(t)+" .inside").css("height","430px")}),jQuery("#wp-statistics-browsers-table-widget .inside").html(h.placeholder()),jQuery(".wps-ph-picture").attr("style","height: 310px;"),h.run_meta_box("browsers",o,!1)),h.isset(h.global,"request_params","page")&&"categories"===h.global.request_params.page&&(r={ago:30,type:"category",ID:0},["from","to","ID"].forEach(function(t){h.isset(h.global,"request_params",t)&&(r[t]=h.global.request_params[t])}),jQuery("span[id^='number-total-']").html(h.rectangle_placeholder("wps-text-placeholder")),h.run_meta_box("pages-chart",r,!1)),h.isset(h.global,"request_params","page")&&"countries"===h.global.request_params.page&&(s={limit:0},["from","to"].forEach(function(t){h.isset(h.global,"request_params",t)&&(s[t]=h.global.request_params[t])}),h.run_meta_box("countries",s,!1)),h.isset(h.global,"request_params","page")&&"exclusions"===h.global.request_params.page&&(n=h.isset(h.global,"request_params","from")&&h.isset(h.global,"request_params","to")?{from:h.global.request_params.from,to:h.global.request_params.to}:{ago:30},jQuery("span[id^='number-total-chart-']").html(h.rectangle_placeholder("wps-text-placeholder")),h.run_meta_box("exclusions",n,!1)),h.isset(h.global,"request_params","page")&&"hits"===h.global.request_params.page&&(n={},n=h.isset(h.global,"request_params","from")&&h.isset(h.global,"request_params","to")?{from:h.global.request_params.from,to:h.global.request_params.to}:{ago:30},jQuery("span[id^='number-total-chart-']").html(h.rectangle_placeholder("wps-text-placeholder")),h.run_meta_box("hits",n,!1)),h.isset(h.global,"request_params","page")&&"overview"===h.global.request_params.page&&h.isset(h.global,"overview","ads")&&h.is_active("overview_ads")&&(i='<div id="wps_overview_ads_postbox" class="postbox"><div class="inside"><div class="close-overview-ads"><span class="dashicons dashicons-dismiss"></span></div><a href="'.concat(h.global.overview.ads.link,'" title="').concat(h.global.overview.ads.title,'" ').concat("yes"==h.global.overview.ads._target?' target="_blank"':"",'><img src="').concat(h.global.overview.ads.image,'" id="wps_overview_ads_image" alt="').concat(h.global.overview.ads.title,'"></a></div></div>'),jQuery(i).insertAfter("#wps-postbox-container-2 #normal-sortables div.postbox:first"),jQuery(document).on("click",".close-overview-ads",function(){jQuery("#wps_overview_ads_postbox").fadeOut("normal"),jQuery.ajax({url:h.global.admin_url+"admin-ajax.php",type:"get",data:{action:"wp_statistics_close_overview_ads",ads_id:""+h.global.overview.ads.ID,wps_nonce:""+h.global.rest_api_nonce},datatype:"json"})}),jQuery("#wps-donate-notice").on("click",".notice-dismiss",function(){jQuery.ajax({url:h.global.admin_url+"admin-ajax.php",type:"get",data:{action:"wp_statistics_close_notice",notice:"donate",wps_nonce:""+h.global.rest_api_nonce},datatype:"json"})}),jQuery("#wps_overview_ads_image").on("error",function(){jQuery("#wps_overview_ads_postbox").remove()})),h.isset(h.global,"request_params","page")&&"pages"===h.global.request_params.page&&(h.isset(h.global,"request_params","ID")&&h.isset(h.global,"request_params","type")?(i=h.isset(h.global,"request_params","from")&&h.isset(h.global,"request_params","to")?{from:h.global.request_params.from,to:h.global.request_params.to}:{ago:30},i=Object.assign(i,{ID:h.global.request_params.ID,type:h.global.request_params.type}),h.run_meta_box("pages-chart",i,!1),h.exist_tag("form#wp-statistics-select-pages")&&h.select2(),jQuery(document).on("change","select[name=ID]",function(){jQuery("span.submit-form").html(h._("please_wait")),jQuery(this).closest("form").trigger("submit")})):(l={},h.isset(h.global,"request_params","pagination-page")&&(l.paged=h.global.request_params["pagination-page"]),h.isset(h.global,"request_params","from")&&h.isset(h.global,"request_params","to")?(l.from=h.global.request_params.from,l.to=h.global.request_params.to):l.ago=30,h.run_meta_box("top-pages-chart",l,!1))),h.isset(h.global,"request_params","page")&&"platform"===h.global.request_params.page&&(c={},["from","to"].forEach(function(t){h.isset(h.global,"request_params",t)&&(c[t]=h.global.request_params[t])}),["platforms-table","platforms"].forEach(function(t){jQuery("#"+h.getMetaBoxKey(t)+" .inside").css("height","430px")}),jQuery("#wp-statistics-platforms-table-widget .inside").html(h.placeholder()),jQuery(".wps-ph-picture").attr("style","height: 310px;"),h.run_meta_box("platforms",c,!1)),h.isset(h.global,"request_params","page")&&"searches"===h.global.request_params.page&&(l=h.isset(h.global,"request_params","from")&&h.isset(h.global,"request_params","to")?{from:h.global.request_params.from,to:h.global.request_params.to}:{ago:30},h.run_meta_box("search",l,!1)),jQuery(".wp-statistics-settings").length&&((d=function(t){if(t=new RegExp("[?&]"+t+"=([^&#]*)").exec(window.location.href))return t[1]}("tab"))&&m(d),jQuery(".wp-statistics-settings ul.tabs li").click(function(){m(jQuery(this).attr("data-tab"))})),g("input[name=wps_visitors]","tr[data-view=visitors_log_tr]"),g("input[name=wps_referrerspam]","tr.referrerspam_field"),h.isset(h.global,"request_params","page")&&"settings"===h.global.request_params.page&&(jQuery("#wp-statistics-settings-form ul.tabs li").click(function(t){t.preventDefault();t=e(this).attr("data-tab");"undefined"!=typeof localStorage&&localStorage.setItem("wp-statistics-settings-active-tab",t)}),"undefined"==typeof localStorage||!h.isset(h.global,"request_params","save_setting")||"yes"!==h.global.request_params.save_setting||0<(d=localStorage.getItem("wp-statistics-settings-active-tab")).length&&e("#wp-statistics-settings-form ul.tabs li[data-tab="+d+"]").click()),h.isset(h.global,"request_params","page")&&"tags"===h.global.request_params.page&&(p={ago:30,type:"post_tag",ID:0},["from","to","ID"].forEach(function(t){h.isset(h.global,"request_params",t)&&(p[t]=h.global.request_params[t])}),jQuery("span[id^='number-total-']").html(h.rectangle_placeholder("wps-text-placeholder")),h.run_meta_box("pages-chart",p,!1)),h.isset(h.global,"request_params","page")&&"visitors"===h.global.request_params.page&&(u=function(t,o){var r='<table class="widefat">',s={browsers:["agent","browsers"],country:["location","location"],platform:["platform","platform"],referrer:["referrer","referrer"],user:["user_id","users"]};Object.keys(s).forEach(function(e){r+="<tr><td>".concat(h._(e),"</td></tr>"),r+='<tr><td><select name="'.concat(s[e][0],'" class="select2 wps-width-100" data-type-show="select2">'),r+="<option value=''>".concat(h._("all"),"</option>");var a=h.getLinkParams(s[e][0]);Object.keys(o[s[e][1]]).forEach(function(t){r+="<option value='".concat(t,"' ").concat(null!=a&&a==t?"selected":"",">").concat(o[s[e][1]][t],"</option>")}),r+="</select></td></tr>"}),r+="<tr><td>".concat(h._("ip"),"</td></tr>"),r+='<tr><td><input name="ip" value="'.concat(null!=h.getLinkParams("ip")?h.getLinkParams("ip"):"",'" class="wps-width-100" placeholder=\'xxx.xxx.xxx.xxx\' autocomplete="off"></td></tr>'),r+="<tr><td>".concat(h._("date"),"</td></tr>");var e="width: calc(50% - 5px);display: inline-block;";r+='<tr><td><div style="'.concat(e,'">').concat(h._("from"),': <input name="date-from" data-wps-date-picker="from" value="').concat(null!=h.getLinkParams("from")?h.getLinkParams("from"):"",'" style="width: calc(100% - 5px);" placeholder="YYYY-MM-DD" autocomplete="off"></div><div style="').concat(e,'">').concat(h._("to"),': <input name="date-to" data-wps-date-picker="to" value="').concat(null!=h.getLinkParams("to")?h.getLinkParams("to"):"",'" style="width: 100%;" placeholder="YYYY-MM-DD" autocomplete="off"></div><input type="hidden" name="from" id="date-from" value="').concat(null!=h.getLinkParams("from")?h.getLinkParams("from"):"",'"><input type="hidden" name="to" id="date-to" value="').concat(null!=h.getLinkParams("to")?h.getLinkParams("to"):"",'"></td></tr>'),r+="<tr><td></td></tr>",r+='<tr><td><input type="submit" value="'.concat(h._("filter"),'" class="button-primary"> &nbsp; <span class="filter-loading"></span></td></tr>'),r+="</table>",jQuery(t).html(r),setTimeout(function(){h.date_picker(),h.select2()},200)},jQuery(document).on("click","div#visitors-filter",function(t){t.preventDefault(),tb_show("","#TB_inline?&width=430&height=668&inlineId=visitors-filter-popup"),setTimeout(function(){var t,e,a="#wps-visitors-filter-form";h.exist_tag(a+" input[type=submit]")||(jQuery(a).html('<div style="height: 50px;"></div>'+h.line_placeholder(5)),t=localStorage.getItem("wp-statistics-visitors-filter")?JSON.parse(localStorage.getItem("wp-statistics-visitors-filter")):{},!h.isset(t,"timestamp")||!h.isset(t,"value")||h.isset(t,"timestamp")&&h.isset(t,"value")&&(new Date).getTime().toString()>parseInt(t.timestamp)?(e={wps_nonce:h.global.rest_api_nonce,action:"wp_statistics_visitors_page_filters"},e=Object.assign(e,h.global.request_params),jQuery.ajax({url:h.global.admin_url+"admin-ajax.php",type:"GET",dataType:"json",data:e,timeout:3e4,success:function(t){localStorage.setItem("wp-statistics-visitors-filter",JSON.stringify({value:t,timestamp:(new Date).getTime()+216e5})),u(a,t)},error:function(t,e,a){jQuery("span.tb-close-icon").click()}})):u(a,t.value))},500)}),_="#wp_statistics_visitors_filter_form",jQuery(document).on("submit",_,function(){var t=jQuery(_+" input[name=date-from]"),e=jQuery(_+" input[name=date-to]");if(0<t.val().length&&e.val().length<1||t.val().length<1&&1<e.val().length)return alert(h._("er_datepicker")),!1;e=jQuery(_+" input[name=ip]").val();if(0<e.length&&!1===h.isIP(e))return alert(h._("er_valid_ip")),!1;jQuery("input[data-wps-date-picker]").prop("disabled",!0);var o={input:["date-from","date-to","ip"],select:["agent","platform","location","referrer","user_id"]};Object.keys(o).forEach(function(a){o[a].forEach(function(e){var t=jQuery(_+" "+a+"[name="+e+"]");t.val().length<1&&(t.prop("disabled",!0),["from","to"].forEach(function(t){e=="date-"+t&&jQuery(_+" input[name="+t+"]").prop("disabled",!0)}))})});e=h.getLinkParams("order");return null!=e&&jQuery(this).append('<input type="hidden" name="order" value="'+e+'" /> '),jQuery("span.filter-loading").html(h._("please_wait")),!0})),h.date_picker(),("index.php"===h.global.page.file||h.is_active("overview_page")||"post-new.php"===h.global.page.file||"post.php"===h.global.page.file&&h.isset(h.global,"page","ID"))&&h.run_meta_boxes()});
1
+ "use strict";function _typeof(t){return(_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(t)}jQuery(document).ready(function(e){var t;t=function(c){var l={},d={};c.ajaxq=function(e,a){if(void 0===a)throw"AjaxQ: queue name is not provided";var o=c.Deferred(),t=o.promise();t.success=t.done,t.error=t.fail,t.complete=t.always;var r,s="function"==typeof a,n=s?null:c.extend(!0,{},a);return r=function(){var t=c.ajax.apply(window,[s?a():n]);return t.done(function(){o.resolve.apply(this,arguments)}),t.fail(function(){o.reject.apply(this,arguments)}),t.always(i),t},l[e]?l[e].push(r):(l[e]=[],r=r(),d[e]=r),t;function i(){var t;l[e]&&((t=l[e].shift())?(t=t(),d[e]=t):(delete l[e],delete d[e]))}},c.each(["getq","postq"],function(t,s){c[s]=function(t,e,a,o,r){return c.isFunction(a)&&(r=r||o,o=a,a=void 0),c.ajaxq(t,{type:"postq"===s?"post":"get",url:e,data:a,success:o,dataType:r})}});function e(t){return l.hasOwnProperty(t)&&0<l[t].length||d.hasOwnProperty(t)}c.ajaxq.isRunning=function(t){return t?e(t):function(){for(var t in l)if(e(t))return!0;return!1}()},c.ajaxq.getActiveRequest=function(t){if(!t)throw"AjaxQ: queue name is required";return d[t]},c.ajaxq.abort=function(t){if(!t)throw"AjaxQ: queue name is required";var e=c.ajaxq.getActiveRequest(t);delete l[t],delete d[t],e&&e.abort()},c.ajaxq.clear=function(t){if(t)l[t]&&(l[t]=[]);else for(var e in l)l.hasOwnProperty(e)&&(l[e]=[])}},"function"==typeof define&&define.amd?define(["jquery"],t):"object"===("undefined"==typeof module?"undefined":_typeof(module))&&module.exports?module.exports=t(require("jquery")):t(jQuery);var a,o,r,s,n,i,c,l,d,p,u,_,h={};function m(t){jQuery(".wp-statistics-settings ul.tabs li").removeClass("current"),jQuery(".wp-statistics-settings .tab-content").removeClass("current"),jQuery("[data-tab="+t+"]").addClass("current"),jQuery("#"+t).addClass("current"),jQuery("#wp-statistics-settings-form").length&&(t=jQuery(location).attr("href")+"&tab="+t,jQuery("#wp-statistics-settings-form").attr("action",t).submit())}function g(t,e){jQuery(document).on("change",t,function(t){t.preventDefault();t=jQuery(e);this.checked?t.show("slow"):(t.hide("slow"),t.find("input[type=checkbox]").prop("checked",!1))})}h.global="undefined"!=typeof wps_global?wps_global:[],h._=function(t){return t in this.global.i18n?this.global.i18n[t]:""},h.is_active=function(t){return 1===h.global.options[t]},h.ajax_queue={key:"wp-statistics",time:400},h.ajaxQ=function(o,r,e,s){var t=4<arguments.length&&void 0!==arguments[4]?arguments[4]:"GET",n=!(5<arguments.length&&void 0!==arguments[5])||arguments[5],t={url:o=!1===o||"metabox"===o?h.global.meta_box_api:o,type:t,dataType:"json",crossDomain:!0,cache:!1,data:r,success:function(t){o===h.global.meta_box_api&&!0===n?t.no_data?jQuery(h.meta_box_inner(r.name)).empty().html(h.no_meta_box_data()):(jQuery(h.meta_box_inner(r.name)).empty().html(h[e].view(t)),h[e].meta_box_init&&setTimeout(function(){h[e].meta_box_init(t)},150)):h[e](t)},error:function(t,e,a){o===h.global.meta_box_api&&!0===n?jQuery(h.meta_box_inner(r.name)).empty().html(h[s](t.responseText)):h[s](t.responseText)}};o===h.global.meta_box_api&&(t.beforeSend=function(t){t.setRequestHeader("X-WP-Nonce",h.global.rest_api_nonce),t.setRequestHeader("Access-Control-Allow-Origin","*")}),jQuery.ajaxq(h.ajax_queue.key,t)},h.placeholder=function(){var t=0<arguments.length&&void 0!==arguments[0]&&arguments[0];return'<div class="wps-ph-item"><div class="wps-ph-col-12">'.concat(h.placeholder_content("picture"),"").concat(h.placeholder_content("line"),"</div>")+(!1!==t?t:"")+"</div>"},h.line_placeholder=function(){for(var t=0<arguments.length&&void 0!==arguments[0]?arguments[0]:1,e='<div class="wps-ph-item">',a=0;a<t;a++)e+='<div class="wps-ph-col-12"> <div class="wps-ph-row"><div class="wps-ph-col-6 big"></div><div class="wps-ph-col-4 empty big"></div><div class="wps-ph-col-4"></div><div class="wps-ph-col-8 empty"></div><div class="wps-ph-col-6"></div><div class="wps-ph-col-6 empty"></div><div class="wps-ph-col-12"></div> </div></div>';return e+="</div>"},h.circle_placeholder=function(){return'<div class="wps-ph-item"> '.concat(h.placeholder_content("circle"),"</div>")},h.rectangle_placeholder=function(){var t=0<arguments.length&&void 0!==arguments[0]?arguments[0]:"";return'<div class="wps-ph-item'+(0<t.length?" "+t:"")+'"><div class="wps-ph-col-12">'.concat(h.placeholder_content("picture"),"</div></div>")},h.placeholder_content=function(){var t="";switch(0<arguments.length&&void 0!==arguments[0]?arguments[0]:"line"){case"picture":t='<div class="wps-ph-picture"></div>';break;case"line":t='<div class="wps-ph-row"><div class="wps-ph-col-6 big"></div><div class="wps-ph-col-4 empty big"></div><div class="wps-ph-col-2 big"></div><div class="wps-ph-col-4"></div><div class="wps-ph-col-8 empty"></div><div class="wps-ph-col-6"></div><div class="wps-ph-col-6 empty"></div><div class="wps-ph-col-12"></div> </div>';break;case"circle":t='<div class="wps-ph-col-2"></div><div class="wps-ph-col-8"><div class="wps-ph-avatar"></div></div>'}return t},h.exist_tag=function(t){return jQuery(t).length},h.date_picker=function(){jQuery.fn.datepicker&&"undefined"!=typeof wps_i18n_jquery_datepicker&&jQuery("input[data-wps-date-picker]").datepicker({monthNames:wps_i18n_jquery_datepicker.monthNames,monthNamesShort:wps_i18n_jquery_datepicker.monthNamesShort,dayNames:wps_i18n_jquery_datepicker.dayNames,dayNamesShort:wps_i18n_jquery_datepicker.dayNamesShort,dayNamesMin:wps_i18n_jquery_datepicker.dayNamesMin,dateFormat:wps_i18n_jquery_datepicker.dateFormat,firstDay:wps_i18n_jquery_datepicker.firstDay,isRTL:wps_i18n_jquery_datepicker.isRTL,onSelect:function(t){var e=jQuery(this).attr("data-wps-date-picker");0<t.length&&jQuery("input[id=date-"+e+"]").val(t)}})},h.select2=function(){jQuery("select[data-type-show=select2]").select2()},h.redirect=function(t){window.location.replace(t)},h.line_chart=function(t,e,a,o){t=document.getElementById(t).getContext("2d");h.is_active("rtl")&&(Chart.defaults.global={defaultFontFamily:"Tahoma"}),new Chart(t,{type:"line",data:{labels:a,datasets:o},options:{responsive:!0,legend:{position:"bottom"},animation:{duration:1500},title:{display:!0,text:e},tooltips:{mode:"index",intersect:!1},interaction:{intersect:!1},scales:{yAxes:[{ticks:{beginAtZero:!0}}]}}})},h.pie_chart=function(t,e,a){var o=3<arguments.length&&void 0!==arguments[3]&&arguments[3],t=document.getElementById(t).getContext("2d");h.is_active("rtl")&&(Chart.defaults.global={defaultFontFamily:"Tahoma"}),!1===o&&(o=function(t,e){var a=e.datasets[t.datasetIndex],o=a.data.reduce(function(t,e,a,o){return t+e}),a=a.data[t.index];return Math.floor(a/o*100+.5)+"% - "+e.labels[t.index]}),new Chart(t,{type:"pie",data:{labels:e,datasets:a},options:{responsive:!0,legend:{position:"bottom"},animation:{duration:1500},tooltips:{callbacks:{label:o}}},plugins:[{afterDraw:function(t){var e,a,o;!0===t.data.datasets[0].data.every(function(t){return 0==t})&&(e=t.chart.ctx,a=t.chart.width,o=t.chart.height,t.clear(),e.save(),e.textAlign="center",e.textBaseline="middle",e.font="14px normal 'Tahoma'",e.fillText(h._("no_data"),a/2,o/2),e.restore())}}]})},h.chart_id=function(t){return"wp-statistics-"+t+"-meta-box-chart"},h.random_color=function(){var t=0<arguments.length&&void 0!==arguments[0]&&arguments[0],e=[[243,156,18,"#f39c12"],[52,152,219,"#3498db"],[192,57,43,"#c0392b"],[155,89,182,"#9b59b6"],[39,174,96,"#27ae60"],[230,126,34,"#e67e22"],[142,68,173,"#8e44ad"],[46,204,113,"#2ecc71"],[41,128,185,"#2980b9"],[22,160,133,"#16a085"],[211,84,0,"#d35400"],[44,62,80,"#2c3e50"],[241,196,15,"#f1c40f"],[231,76,60,"#e74c3c"],[26,188,156,"#1abc9c"],[46,204,113,"#2ecc71"],[52,152,219,"#3498db"],[155,89,182,"#9b59b6"],[52,73,94,"#34495e"],[22,160,133,"#16a085"],[39,174,96,"#27ae60"],[44,62,80,"#2c3e50"],[241,196,15,"#f1c40f"],[230,126,34,"#e67e22"],[231,76,60,"#e74c3c"],[236,240,241,"#9b9e9f"],[149,165,166,"#a65d20"]];return e[!1===t?Math.floor(Math.random()*e.length):t]},h.site_icon=function(t){return'<img src="https://www.google.com/s2/favicons?domain='.concat(t,'" width="16" height="16" alt="').concat(t,'" style="vertical-align: -3px;" />')},h.wordpress_postbox_ajax=function(){var t=0<arguments.length&&void 0!==arguments[0]?arguments[0]:"enable",e=jQuery(".postbox .hndle, .postbox .handlediv");"enable"===t?e.on("click",window.postboxes.handle_click):e.off("click",window.postboxes.handle_click)},h.isset=function(t){for(var e=Array.prototype.slice.call(arguments,1),a=0;a<e.length;a++){if(!t||!t.hasOwnProperty(e[a]))return!1;t=t[e[a]]}return!0},h.number_format=function(t,e,a,o){if(null==t||!isFinite(t))throw new TypeError("number is not valid");var r;e||(e=1<(r=t.toString().split(".").length)?r:0),a=a||".",o=o||",";e=(t=(t=parseFloat(t).toFixed(e)).replace(".",a)).split(a);return e[0]=e[0].replace(/\B(?=(\d{3})+(?!\d))/g,o),t=e.join(a)},h.set_equal_height=function(t,e){var a=jQuery(t).height(),o=jQuery(e).height(),r=e,e=a;a<o&&(r=t,e=o),jQuery(r).css("height",e+"px")},h.Create_Half_PostBox=function(t,e){return'<div class="postbox-container wps-postbox-half '.concat(t,'"><div class="metabox-holder"><div class="meta-box-sortables"> <div class="postbox" id="').concat(e,'"> <div class="inside"></div></div></div></div></div>')},h.isIP=function(t){var e="(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]?|0)";return new RegExp("^".concat(e,"\\.").concat(e,"\\.").concat(e,"\\.").concat(e,"$")).test(t)},h.getLinkParams=function(t){t=(1<arguments.length&&void 0!==arguments[1]&&arguments[1]||window.location.href).match(new RegExp("(?:[?&]"+t+"=)([^&]+)"));return t?t[1]:null},h.sum=function(t){return t.reduce(function(t,e){return t+e},0)},h.sanitize_meta_box_name=function(t){return t.replace(new RegExp("-","g"),"_")},h.get_meta_box_method=function(t){return this.sanitize_meta_box_name(t)+"_meta_box"},h.getMetaBoxKey=function(t){return"wp-statistics-"+t+"-widget"},h.no_meta_box_data=function(){return h._("no_data")},h.error_meta_box_data=function(t){t=JSON.parse(t);return h.isset(t,"message")?t.message:h._("rest_connect")},h.get_meta_box_info=function(t){return t in h.global.meta_boxes?h.global.meta_boxes[t]:[]},h.meta_box_lang=function(t,e){return e in h.global.meta_boxes[t].lang?h.global.meta_boxes[t].lang[e]:""},h.meta_box_inner=function(t){return"#"+h.getMetaBoxKey(t)+" div.inside"},h.meta_box_name_by_id=function(t){return t.split("statistics-").pop().split("-widget")[0]},h.meta_box_button=function(t){var e="#"+h.getMetaBoxKey(t)+" .handle-actions button:first",a=h.get_meta_box_info(t),o="z-index: 9999;position: absolute;top: 1px;",r="right";h.is_active("rtl")&&(r="left"),jQuery("#"+h.getMetaBoxKey(t)+" button[class*=wps-refresh], #"+h.getMetaBoxKey(t)+" button[class*=wps-more]").remove(),h.is_active("more_btn")&&h.isset(a,"page_url")&&jQuery('<button class="handlediv wps-more"'+(h.is_active("gutenberg")?' style="'.concat(o).concat(r,': 3%;" '):'style="line-height: 28px;"')+' type="button" onclick="location.href = \''+h.global.admin_url+"admin.php?page="+a.page_url+'\';"><span class="screen-reader-text">'+h._("more_detail")+'</span> <span class="dashicons dashicons-external"></span></button>').insertBefore(e),h.is_active("more_btn")&&h.isset(a,"page_url")?jQuery('<button class="handlediv wps-refresh"'+(h.is_active("gutenberg")?' style="'.concat(o).concat(r,': 6%;" '):'style="line-height: 28px;"')+' type="button"><span class="screen-reader-text">'+h._("reload")+'</span> <span class="dashicons dashicons-update"></span> </button>').insertAfter("#"+h.getMetaBoxKey(t)+" button[class*=wps-more]"):jQuery('<button class="handlediv wps-refresh"'+(h.is_active("gutenberg")?' style="'.concat(o).concat(r,': 3%;" '):'style="line-height: 28px;"')+' type="button"><span class="screen-reader-text">'+h._("reload")+'</span> <span class="dashicons dashicons-update"></span> </button>').insertBefore(e)},h.run_meta_box=function(t){var e,a,o=1<arguments.length&&void 0!==arguments[1]&&arguments[1],r=!(2<arguments.length&&void 0!==arguments[2])||arguments[2];h.exist_tag("#"+h.getMetaBoxKey(t))&&(h.is_active("gutenberg")||!h.is_active("gutenberg")&&jQuery("#"+h.getMetaBoxKey(t)).is(":visible"))&&(e=jQuery(h.meta_box_inner(t)),(a=h.get_meta_box_method(t))in h&&("placeholder"in h[a]?e.html(h[a].placeholder()):e.html(h.placeholder()),!0===r&&h.meta_box_button(t),!(t={name:t})!==o&&(t=Object.assign(o,t)),"params"in h[a]&&(t=Object.assign(t,h[a].params())),h.ajaxQ("metabox",t,a,"error_meta_box_data")))},h.run_meta_boxes=function(){var t=0<arguments.length&&void 0!==arguments[0]&&arguments[0];(t=!1===t?Object.keys(h.global.meta_boxes):t).forEach(function(t){h.run_meta_box(t)})},jQuery(document).on("mouseenter mouseleave",".wps-refresh, .wps-more",function(t){"mouseenter"===t.type?h.wordpress_postbox_ajax("disable"):h.wordpress_postbox_ajax("enable")}),jQuery(document).on("click",".wps-refresh",function(t){t.preventDefault();t=jQuery(this).closest(".postbox").attr("id"),t=h.meta_box_name_by_id(t);h.run_meta_box(t)}),jQuery(document).on("click",'input[type=checkbox][id^="wp-statistics-"][id$="-widget-hide"]',function(){var t;jQuery(this).is(":checked")&&(t=jQuery(this).attr("id"),t=h.meta_box_name_by_id(t),h.run_meta_box(t))}),h.btn_group_chart=function(e){var a,t=1<arguments.length&&void 0!==arguments[1]&&arguments[1],o={7:h._("str_week"),30:h._("str_month"),365:h._("str_year")};"ago"==t.type&&(a=parseInt(t.days));var r='<div class="wps-btn-group"><div class="btn-group" role="group">';return Object.keys(o).forEach(function(t){r+='<button type="button" class="btn '+(t==a?"btn-primary":"btn-default")+'" data-chart-time="'.concat(e,'" data-time="').concat(t,'">').concat(o[t],"</button>")}),r+='<button type="button" class="btn '+("between"==t.type?"btn-primary":"btn-default")+'" data-custom-date-picker="'.concat(e,'">').concat(h._("custom"),"</button>"),r+="</div></div>",r+='<div data-chart-date-picker="'.concat(e,'"')+("ago"==t.type?' style="display:none;"':"")+'><input type="text" size="18" name="date-from" data-wps-date-picker="from" value="'.concat(t.from,'" placeholder="YYYY-MM-DD" autocomplete="off">')+h._("to")+'<input type="text" size="18" name="date-to" data-wps-date-picker="to" value="'.concat(t.to,'" placeholder="YYYY-MM-DD" autocomplete="off"><input type="submit" value="')+h._("go")+'" data-between-chart-show="'.concat(e,'" class="button-primary"><input type="hidden" name="" id="date-from" value="').concat(t.from,'"><input type="hidden" name="" id="date-to" value="').concat(t.to,'"></div>')},jQuery(document).on("click",".wps-btn-group button",function(){jQuery(".wps-btn-group button").attr("class","btn btn-default"),jQuery(this).attr("class","btn btn-primary")}),jQuery(document).on("click","button[data-custom-date-picker]",function(){jQuery("div[data-chart-date-picker= "+jQuery(this).attr("data-custom-date-picker")+"]").slideDown()}),jQuery(document).on("click","button[data-chart-time]",function(){h.run_meta_box(jQuery(this).attr("data-chart-time"),{ago:jQuery(this).attr("data-time"),"no-data":"no"})}),jQuery(document).on("click","input[data-between-chart-show]",function(){var t=jQuery(this).attr("data-between-chart-show");h.run_meta_box(t,{from:jQuery("div[data-chart-date-picker="+t+"] input[id=date-from]").val(),to:jQuery("div[data-chart-date-picker="+t+"] input[id=date-to]").val(),"no-data":"no"})}),h.browsers_meta_box={placeholder:function(){return h.circle_placeholder()},view:function(){var t=0<arguments.length&&void 0!==arguments[0]?arguments[0]:[],e="";return h.is_active("overview_page")&&(e+=h.btn_group_chart("browsers",t),setTimeout(function(){h.date_picker()},1e3)),e+='<canvas id="'+h.chart_id("browsers")+'" height="220"></canvas>'},meta_box_init:function(){for(var t,e=0<arguments.length&&void 0!==arguments[0]?arguments[0]:[],a=[],o=0;o<=10;o++)t=h.random_color(o),a.push("rgba("+t[0]+","+t[1]+","+t[2]+",0.4)");var r=[{label:h._("browsers"),data:e.browsers_value,backgroundColor:a}];if(h.pie_chart(h.chart_id("browsers"),e.browsers_name,r),h.exist_tag("#"+h.getMetaBoxKey("browsers-table"))){["browsers-table","browsers"].forEach(function(t){jQuery("#"+h.getMetaBoxKey(t)+" .inside").removeAttr("style")});for(var s='<div class="title-center">'.concat(e.title,'</div><table width="100%" class="widefat table-stats"><tr><td class="wps-text-muted">').concat(h._("browser"),'</td><td class="wps-text-muted">').concat(h._("visitor_count"),'</td><td class="wps-text-muted">').concat(h._("percentage"),"</td></tr>"),n=0;n<e.browsers_name.length;n++)s+=" <tr><td>".concat(e.browsers_name[n],"</td><td>").concat(0<parseInt(e.browsers_value[n])?"".concat("other"!==e.info.agent[n]?'<a href="'+e.info.visitor_page+"&agent="+e.info.agent[n]+"&from="+e.from+"&to="+e.to+'" target="_blank">':""," ").concat(h.number_format(e.browsers_value[n])," ").concat("other"!==e.info.agent[n]?"</a>":""):e.browsers_value[n],"</td><td>").concat(h.number_format(e.browsers_value[n]/e.total*100),"%</td> </tr>");s+=" <tr><td>".concat(h._("total"),"</td><td>").concat(h.number_format(e.total),"</td><td></td></tr>"),s+="</table>",jQuery("#"+h.getMetaBoxKey("browsers-table")+" .inside").html(s),h.set_equal_height(".postBox-table .inside",".postBox-chart .inside");for(var i="",c=0;c<e.browsers_name.length;c++)0<parseInt(e.browsers_value[c])&&e.info.agent[c]&&(i+='<div class="wps-title-group"><img src="'.concat(e.info.logo[c],'" alt="').concat(e.browsers_name[c],'" style="vertical-align: -3px;"> ').concat(e.browsers_name[c],'</div><div class="wp-clearfix"></div>'),i+=h.Create_Half_PostBox("postBox-chart-"+e.info.agent[c],"browser-"+e.info.agent[c]+"-chart"),i+=h.Create_Half_PostBox("postBox-table-"+e.info.agent[c],"browser-"+e.info.agent[c]+"-table"),i+='<div class="wp-clearfix"></div>');jQuery(i).insertAfter("#browsers-table");for(var l=0;l<e.browsers_name.length;l++)0<parseInt(e.browsers_value[l])&&e.info.agent[l]&&this.run_custom_browser(e.info.agent[l])}},run_custom_browser:function(t){["browser-"+t+"-chart","browser-"+t+"-table"].forEach(function(t){jQuery("#"+t+" .inside").css("height","430px")}),jQuery("#browser-"+t+"-table .inside").html(h.placeholder()),jQuery("#browser-"+t+"-chart .inside").html(h.circle_placeholder()),jQuery(".wps-ph-picture").attr("style","height: 310px;");var e={name:"browsers",browser:t};["from","to"].forEach(function(t){h.isset(h.global,"request_params",t)&&(e[t]=h.global.request_params[t])}),h.ajaxQ(h.global.meta_box_api,e,"show_custom_agent","error_custom_agent","GET",!1)}},h.show_custom_agent=function(n){var i=n.info.agent[0];jQuery("#browser-"+i+"-chart .inside").html('<canvas id="'+h.chart_id("browser-"+i)+'" height="220"></canvas>'),setTimeout(function(){for(var t,e=[],a=0;a<=10;a++)t=h.random_color(a),e.push("rgba("+t[0]+","+t[1]+","+t[2]+",0.4)");var o=[{label:h._("browsers"),data:n.browsers_value,backgroundColor:e}];h.pie_chart(h.chart_id("browser-"+i),n.browsers_name,o),["browser-"+i+"-chart","browser-"+i+"-table"].forEach(function(t){jQuery("#"+t+" .inside").removeAttr("style")});for(var r='<div class="title-center">'.concat(n.title,'</div><table width="100%" class="widefat table-stats"><tr><td class="wps-text-muted">').concat(h._("version_list"),'</td><td class="wps-text-muted">').concat(h._("visitor_count"),'</td><td class="wps-text-muted">').concat(h._("percentage"),"</td></tr>"),s=0;s<n.browsers_name.length;s++)r+=" <tr><td>".concat(n.browsers_name[s],"</td><td>").concat(0<parseInt(n.browsers_value[s])?h.number_format(n.browsers_value[s]):n.browsers_value[s],"</td><td>").concat(h.number_format(n.browsers_value[s]/n.total*100),"%</td></tr>");r+=" <tr><td>".concat(h._("total"),"</td><td>").concat(h.number_format(n.total),"</td><td></td></tr>"),r+="</table>";o="#browser-"+i+"-table .inside";jQuery(o).html(r),h.set_equal_height(o,"#browser-"+i+"-chart .inside")},500)},h.error_custom_agent=function(t){},h.countries_meta_box={view:function(){var t=0<arguments.length&&void 0!==arguments[0]?arguments[0]:[],e="";e+='<table width="100%" class="widefat table-stats wps-report-table"><tbody><tr><td width="10%" style=\'text-align: left\'>'.concat(h._("rank"),"</td><td width=\"10%\" style='text-align: left'>").concat(h._("flag"),"</td><td width=\"40%\" style='text-align: left'>").concat(h._("country"),"</td><td width=\"40%\" style='text-align: left'>").concat(h._("visitor_count"),"</td></tr>");var a=1;return t.forEach(function(t){e+="<tr><td style='text-align: left;'>".concat(a,"</td><td style='text-align: left;'><img src=\"").concat(t.flag,'" title="').concat(t.name,'" alt="').concat(t.name,"\"/></td><td style='text-align: left;'>").concat(t.name,"</td><td style='text-align: left;'><a href=\"").concat(t.link,'" title="').concat(t.name,'" target="_blank">').concat(h.number_format(t.number),"</a></td></tr>"),a++}),e+="</tbody></table>"}},h.exclusions_meta_box={placeholder:function(){return h.rectangle_placeholder()},view:function(){var t=h.is_active("overview_page")?110:210;h.isset(h.global,"request_params","page")&&"exclusions"===h.global.request_params.page&&(t=80);var e="";return e+='<canvas id="'+h.chart_id("exclusions")+'" height="'+t+'"></canvas>'},meta_box_init:function(){var t,e=0<arguments.length&&void 0!==arguments[0]?arguments[0]:[];this.show_chart(h.chart_id("exclusions"),e),!h.isset(h.global,"request_params","page")||"exclusions"!==h.global.request_params.page||h.exist_tag(t="span[id='number-total-chart-exclusions']")&&(e=h.sum(Object.values(e.total)),jQuery(t).html(h.number_format(e)))},show_chart:function(t){var r=1<arguments.length&&void 0!==arguments[1]?arguments[1]:[],s="",n=[],i=0;Object.keys(r.exclusions).forEach(function(t){var e,a,o=h.sum(Object.values(r.value[t]));0<o&&(e=r.exclusions[t],a=h.random_color(i),n.push({label:e,data:r.value[t],backgroundColor:"rgba("+a[0]+","+a[1]+","+a[2]+",0.3)",borderColor:"rgba("+a[0]+","+a[1]+","+a[2]+",1)",borderWidth:1,fill:!0,tension:.4}),s+="<tr><th>".concat(e,'</th> <th class="th-center"><span style="color: #9a9494 !important;">').concat(h.number_format(o),"</span></th></tr>"),i++)}),h.exist_tag("table[data-table=exclusions]")&&jQuery(s).insertAfter("table[data-table=exclusions] tr:first"),h.line_chart(t,r.title,r.date,n)}},h.hits_meta_box={placeholder:function(){return h.rectangle_placeholder()},view:function(){var t=0<arguments.length&&void 0!==arguments[0]?arguments[0]:[],e=h.is_active("overview_page")?110:210;h.isset(h.global,"request_params","page")&&"hits"===h.global.request_params.page&&(e=80);var a="";return h.is_active("overview_page")&&(a+=h.btn_group_chart("hits",t),setTimeout(function(){h.date_picker()},1e3)),a+='<canvas id="'+h.chart_id("hits")+'" height="'+e+'"></canvas>'},meta_box_init:function(){var a=0<arguments.length&&void 0!==arguments[0]?arguments[0]:[];this.hits_chart(h.chart_id("hits"),a),h.isset(h.global,"request_params","page")&&"hits"===h.global.request_params.page&&["visits","visitors"].forEach(function(t){var e="span[id^='number-total-chart-"+t+"']";h.exist_tag(e)&&jQuery(e).html(a.total[t])})},hits_chart:function(t){var e=1<arguments.length&&void 0!==arguments[1]?arguments[1]:[],a=e;"hits-chart"in e&&(a=e["hits-chart"]);e=[];h.is_active("visitors")&&e.push({label:h._("visitors"),data:a.visitors,backgroundColor:"rgba(255, 99, 132, 0.2)",borderColor:"rgba(255, 99, 132, 1)",borderWidth:1,fill:!0,tension:.4}),h.is_active("visits")&&e.push({label:h._("visits"),data:a.visits,backgroundColor:"rgba(54, 162, 235, 0.2)",borderColor:"rgba(54, 162, 235, 1)",borderWidth:1,fill:!0,tension:.4}),h.line_chart(t,a.title,a.date,e)}},h.hitsmap_meta_box={placeholder:function(){return h.rectangle_placeholder()},view:function(){return'<div id="wp-statistics-visitors-map"></div>'},meta_box_init:function(){var o=0<arguments.length&&void 0!==arguments[0]?arguments[0]:[],r=Array();o.hasOwnProperty("country")&&Object.keys(o.country).forEach(function(e){var a="<div class='map-html-marker'><img src='".concat(o.country[e].flag,"' alt=\"").concat(o.country[e].name,"\" title='").concat(o.country[e].name,"' class='log-tools'/> ").concat(o.country[e].name," [").concat(o.total_country[e],"]<hr />");Object.keys(o.visitor[e]).forEach(function(t){a+="<p><img src='".concat(o.visitor[e][t].browser.logo,"' alt=\"").concat(o.visitor[e][t].browser.name,"\" class='log-tools' title='").concat(o.visitor[e][t].browser.name,"'/> ").concat(o.visitor[e][t].ip," ")+("Unknown"!==o.visitor[e][t].city?"- "+o.visitor[e][t].city:"")+"</p>"}),a+="</div>",r[e]=a}),jQuery("#wp-statistics-visitors-map").vectorMap({map:"world_en",backgroundColor:"#fff",borderColor:"#7e7e7e",borderOpacity:.6,color:"#e6e5e2",hoverColor:"#c3403c",colors:o.color,onLabelShow:function(t,e,a){void 0!==r[a]?e.html(r[a]):e.html(e.html()+" [0]<hr />")}})}},h.pages_chart_meta_box={placeholder:function(){return h.rectangle_placeholder()},view:function(){return'<canvas id="'+h.chart_id("pages-chart")+'" height="80"></canvas>'},meta_box_init:function(){var t=0<arguments.length&&void 0!==arguments[0]?arguments[0]:[];this.show_chart(h.chart_id("pages-chart"),t),h.exist_tag("span[id=number-total-visits]")&&jQuery("span[id=number-total-visits]").html(t.total),h.exist_tag("span[id=number-total-chart-visits]")&&jQuery("span[id=number-total-chart-visits]").html(t.total_dates)},show_chart:function(t){var e=1<arguments.length&&void 0!==arguments[1]?arguments[1]:[];h.line_chart(t,e.title,e.date,[{label:h._("visits"),data:e.stat,backgroundColor:"rgba(54, 162, 235, 0.2)",borderColor:"rgba(54, 162, 235, 1)",borderWidth:1,fill:!0,tension:.4}])}},h.pages_meta_box={view:function(){var t=0<arguments.length&&void 0!==arguments[0]?arguments[0]:[],e="";e+='<table width="100%" class="widefat table-stats wps-report-table wps-table-fixed"><tbody><tr><td width=\'10%\'>'.concat(h._("id"),"</td><td width='40%'>").concat(h._("title"),"</td><td width='40%'>").concat(h._("link"),"</td><td width='10%'>").concat(h._("visits"),"</td></tr>");var a=1;return t.forEach(function(t){e+="<tr><td style='text-align: left;'>".concat(a,"</td><td style='text-align: left;'><span title='").concat(t.title,"' class='wps-cursor-default wps-text-wrap'>").concat(t.title,"</span></td><td style='text-align: left;'><a href=\"").concat(t.link,'" title="').concat(t.title,'" target="_blank">').concat(t.str_url,'</a></td><td style="text-align: left"><a href="').concat(t.hits_page,'" class="wps-text-muted">').concat(t.number,"</a></td></tr>"),a++}),e+="</tbody></table>"}},h.platforms_meta_box={placeholder:function(){return h.circle_placeholder()},view:function(){var t=0<arguments.length&&void 0!==arguments[0]?arguments[0]:[],e="";return h.is_active("overview_page")&&(e+=h.btn_group_chart("platforms",t),setTimeout(function(){h.date_picker()},1e3)),e+='<canvas id="'+h.chart_id("platforms")+'" height="220"></canvas>'},meta_box_init:function(){for(var t,e=0<arguments.length&&void 0!==arguments[0]?arguments[0]:[],a=[],o=0;o<=20;o++)t=h.random_color(),a.push("rgba("+t[0]+","+t[1]+","+t[2]+",0.4)");var r=[{label:h._("platform"),data:e.platform_value,backgroundColor:a,tension:.4}];if(h.pie_chart(h.chart_id("platforms"),e.platform_name,r),h.exist_tag("#"+h.getMetaBoxKey("platforms-table"))){["platforms-table","platforms"].forEach(function(t){jQuery("#"+h.getMetaBoxKey(t)+" .inside").removeAttr("style")});for(var s='<div class="title-center">'.concat(e.title,'</div><table width="100%" class="widefat table-stats"><tr><td class="wps-text-muted">').concat(h._("platform"),'</td><td class="wps-text-muted">').concat(h._("visitor_count"),'</td><td class="wps-text-muted">').concat(h._("percentage"),"</td></tr>"),n=0;n<e.platform_name.length;n++)s+=" <tr><td>".concat(e.platform_name[n],"</td><td>").concat(0<parseInt(e.platform_value[n])?'<a href="'+e.info.visitor_page+"&platform="+e.platform_name[n]+"&from="+e.from+"&to="+e.to+'" target="_blank"> '.concat(h.number_format(e.platform_value[n])," </a>"):h.number_format(e.platform_value[n]),"</td><td>").concat(h.number_format(e.platform_value[n]/e.total*100),"%</td> </tr>");s+=" <tr><td>".concat(h._("total"),"</td><td>").concat(h.number_format(e.total),"</td><td></td></tr>"),s+="</table>",jQuery("#"+h.getMetaBoxKey("platforms-table")+" .inside").html(s),h.set_equal_height(".postBox-table .inside",".postBox-chart .inside")}}},h.post_meta_box={params:function(){return{ID:h.global.page.ID}},view:function(){var t=0<arguments.length&&void 0!==arguments[0]?arguments[0]:[];return(t.hasOwnProperty("content")?'<div class="wps-center" style="padding: 15px;"> '+t.content+"</div>":'<canvas id="'+h.chart_id("post")+'" height="85"></canvas>')+'<div class="wps-wrap wps-meta-box-footer">'+t.visitors+"</div>"},meta_box_init:function(){var t=0<arguments.length&&void 0!==arguments[0]?arguments[0]:[];t.hasOwnProperty("content")?jQuery("#"+h.getMetaBoxKey("post")+" button[onclick]").remove():this.post_hits_chart(h.chart_id("post"),t)},post_hits_chart:function(t){var e=1<arguments.length&&void 0!==arguments[1]?arguments[1]:[];h.line_chart(t,e.title,e.date,[{label:e.post_title,data:e.state,backgroundColor:"rgba(255, 99, 132, 0.2)",borderColor:"rgba(255, 99, 132, 1)",borderWidth:1,fill:!0,tension:.4}])}},h.quickstats_meta_box={view:function(){var t="";return t+='<table width="100%" class="widefat table-stats wps-summary-stats"><tbody>',t+=h.summary_meta_box.summary_statistics(0<arguments.length&&void 0!==arguments[0]?arguments[0]:[]),t+="</tbody></table>",t+='<br><hr width="80%"/><br>',t+='<canvas id="'+h.chart_id("quickstats")+'" height="210"></canvas>'},meta_box_init:function(){var t=0<arguments.length&&void 0!==arguments[0]?arguments[0]:[];h.hits_meta_box.hits_chart(h.chart_id("quickstats"),t)}},h.recent_meta_box={view:function(){var t=0<arguments.length&&void 0!==arguments[0]?arguments[0]:[],e="";return e+='<div class="wp-statistics-responsive-table">',e+='<table width="100%" class="widefat table-stats wps-report-table"><tbody><tr><td>'.concat(h._("browser"),"</td>")+(h.is_active("geo_ip")?"<td>".concat(h._("country"),"</td>"):"")+""+(h.is_active("geo_city")?"<td>".concat(h._("city"),"</td>"):"")+"<td>".concat(h._("date"),"</td><td>").concat(h._("hits"),"</td><td>").concat(h._("ip"),"</td><td>").concat(h._("referrer"),"</td></tr>"),t.forEach(function(t){e+='<tr><td style="text-align: left"><a href="'.concat(t.browser.link,'" title="').concat(t.browser.name,'"><img src="').concat(t.browser.logo,'" alt="').concat(t.browser.name,"\" class='log-tools' title='").concat(t.browser.name,"'/></a></td>")+(h.is_active("geo_ip")?'<td style="text-align: left"><img src=\''.concat(t.country.flag,"' alt='").concat(t.country.name,"' title='").concat(t.country.name,"' class='log-tools'/></td>"):"")+""+(h.is_active("geo_city")?"<td>".concat(t.city,"</td>"):"")+'<td style="text-align: left">'.concat(t.date,'</td><td style="text-align: left">').concat(t.hits,'</td><td style="text-align: left">')+(t.hash_ip||"<a href='".concat(t.ip.link,"'>").concat(t.ip.value,"</a>"))+'</td><td style="text-align: left">'.concat(t.referred,"</td></tr>")}),e+="</tbody></table>",e+="</div>"}},h.referring_meta_box={view:function(){var t=0<arguments.length&&void 0!==arguments[0]?arguments[0]:[],e="";return e+='<table width="100%" class="widefat table-stats wps-report-table"><tbody><tr><td width="80%">'.concat(h._("address"),'</td><td width="20%">').concat(h.meta_box_lang("referring","references"),"</td></tr>"),t.forEach(function(t){e+="<tr><td>"+h.site_icon(t.domain)+" <a href='//".concat(t.domain,"' title='").concat(t.title,'\' target="_blank">').concat(t.domain,"</a><span class='wps-cursor-default wps-referring-widget-ip'")+(2<t.country.length?' title="'.concat(t.country,'"'):"")+">".concat(t.ip,'</span></td><td class="wps-middle-vertical"><a href="').concat(t.page_link,'">').concat(t.number,"</a></td></tr>")}),e+="</tbody></table>"}},h.search_meta_box={placeholder:function(){return h.rectangle_placeholder()},view:function(){var t=0<arguments.length&&void 0!==arguments[0]?arguments[0]:[],e=h.is_active("overview_page")?110:210;h.isset(h.global,"request_params","page")&&"searches"===h.global.request_params.page&&(e=80);var a="";return h.is_active("overview_page")&&(a+=h.btn_group_chart("search",t),setTimeout(function(){h.date_picker()},1e3)),a+='<canvas id="'+h.chart_id("search")+'" height="'+e+'"></canvas>'},meta_box_init:function(){var a=0<arguments.length&&void 0!==arguments[0]?arguments[0]:[],o=[],r=0;Object.keys(a["search-engine"]).forEach(function(t){var e=a["search-engine"][t].name,t=h.random_color(r);o.push({label:e,data:a.stat[e],backgroundColor:"rgba("+t[0]+","+t[1]+","+t[2]+",0.3)",borderColor:"rgba("+t[0]+","+t[1]+","+t[2]+",1)",borderWidth:1,fill:!0,tension:.4}),r++}),1===a.total.active&&o.push({label:h._("total"),data:a.total.stat,backgroundColor:"rgba("+a.total.color+", 0.2)",borderColor:"rgba("+a.total.color+", 1)",borderWidth:1,fill:!0,tension:.4}),h.line_chart(h.chart_id("search"),a.title,a.date,o)}},h.summary_meta_box={summary_statistics:function(){var o=0<arguments.length&&void 0!==arguments[0]?arguments[0]:[],r="";return o.user_online&&(r="<tr><th>".concat(h._("online_users"),':</th><th colspan="2" id="th-colspan"><span><a href="').concat(o.user_online.link,'">').concat(o.user_online.value,"</a></span></th></tr>")),(h.is_active("visitors")||h.is_active("visits"))&&function(){r+='<tr><th width="60%"></th>',["visitors","visits"].forEach(function(t){r+='<th class="th-center">'+(h.is_active(t)?h._(t):"")+"</th>"}),r+="</tr>";for(var a=["today","yesterday","week","month","year","total"],t=0;t<a.length;t++)!function(e){r+="<tr><th>".concat(h._(a[e]),": </th>"),["visitors","visits"].forEach(function(t){r+='<th class="th-center">'+(h.is_active(t)?'<a href="'.concat(o[t][a[e]].link,'"><span>').concat(o[t][a[e]].value,"</span></a>"):"")+"</th>"}),r+="</tr>"}(t)}(),r},view:function(){var e=0<arguments.length&&void 0!==arguments[0]?arguments[0]:[],a="";return a+='<table width="100%" class="widefat table-stats wps-summary-stats"><tbody>',a+=this.summary_statistics(e),h.is_active("visitors")&&(a+='<tr><th colspan="3"><br><hr></th></tr>',a+='<tr><th colspan="3" style="text-align: center;">'.concat(h.meta_box_lang("summary","search_engine"),'</th></tr><tr><th width="60%"></th><th class="th-center">').concat(h._("today"),'</th><th class="th-center">').concat(h._("yesterday"),"</th></tr>"),Object.keys(e["search-engine"]).forEach(function(t){a+='<tr><th><img src="'.concat(e["search-engine"][t].logo,'" alt="').concat(e["search-engine"][t].name,'" class="wps-engine-logo"> ').concat(e["search-engine"][t].name,':</th><th class="th-center"><span>').concat(e["search-engine"][t].today,'</span></th><th class="th-center"><span>').concat(e["search-engine"][t].yesterday,"</span></th></tr>")}),a+="<tr><th>".concat(h._("daily_total"),':</th><td id="th-colspan" class="th-center"><span>').concat(e["search-engine-total"].today,'</span></td><td id="th-colspan" class="th-center"><span>').concat(e["search-engine-total"].yesterday,"</span></td></tr><tr><th>").concat(h._("total"),':</th><th colspan="2" id="th-colspan"><span>').concat(e["search-engine-total"].total,"</span></th></tr>")),a+=' <tr><th colspan="3"><br><hr></th></tr><tr><th colspan="3" style="text-align: center;">'.concat(h.meta_box_lang("summary","current_time_date"),'<span id="time_zone"><a href="').concat(e.timezone["option-link"],'"> ').concat(h.meta_box_lang("summary","adjustment"),'</a></span></th></tr><tr><th colspan="3">').concat(h._("date"),': <code dir="ltr">').concat(e.timezone.date,'</code></th></tr><tr> <th colspan="3">').concat(h._("time"),': <code dir="ltr">').concat(e.timezone.time,"</code></th></tr>"),a+="</tbody></table>"}},h.top_pages_chart_meta_box={placeholder:function(){return h.rectangle_placeholder()},view:function(){var t="";return setTimeout(function(){h.date_picker()},1e3),t+='<canvas id="'+h.chart_id("top-pages-chart")+'" height="80"></canvas>'},meta_box_init:function(){var t=0<arguments.length&&void 0!==arguments[0]?arguments[0]:[];this.top_pages_chart(h.chart_id("top-pages-chart"),t)},top_pages_chart:function(t){var a=1<arguments.length&&void 0!==arguments[1]?arguments[1]:[],o=[],r=0;Object.keys(a.stat).forEach(function(t){var e=h.random_color(r);o.push({label:t,data:a.stat[t],backgroundColor:"rgba("+e[0]+","+e[1]+","+e[2]+",0.3)",borderColor:"rgba("+e[0]+","+e[1]+","+e[2]+",1)",borderWidth:1,fill:!0,tension:.4}),r++}),h.line_chart(t,a.title,a.date,o)}},h.top_visitors_meta_box={view:function(){var t=0<arguments.length&&void 0!==arguments[0]?arguments[0]:[],e="";e+='<div class="wp-statistics-responsive-table">',e+='<table width="100%" class="widefat table-stats wps-report-table"><tbody><tr><td>'.concat(h._("rank"),"</td><td>").concat(h._("hits"),"</td>")+(h.is_active("geo_ip")?"<td>".concat(h._("flag"),"</td><td>").concat(h._("country"),"</td>"):"")+""+(h.is_active("geo_city")?"<td>".concat(h._("city"),"</td>"):"")+"<td>".concat(h._("ip"),"</td><td>").concat(h._("agent"),"</td><td>").concat(h._("platform"),"</td><td>").concat(h._("version"),"</td></tr>");var a=1;return t.forEach(function(t){e+="<tr><td>".concat(a,"</td><td>").concat(t.hits,"</td>")+(h.is_active("geo_ip")?"<td><img src='".concat(t.country.flag,"' alt='").concat(t.country.name,"' title='").concat(t.country.name,"' class='log-tools'/></td><td>").concat(t.country.name,"</td>"):"")+""+(h.is_active("geo_city")?"<td>".concat(t.city,"</td>"):"")+"<td>"+(t.hash_ip||"<a href='".concat(t.ip.link,"'>").concat(t.ip.value,"</a>"))+"</td><td>".concat(t.agent,"</td><td>").concat(t.platform,"</td><td>").concat(t.version,"</td></tr>"),a++}),e+="</tbody></table>",e+="</div>"}},h.useronline_meta_box={view:function(){var t=0<arguments.length&&void 0!==arguments[0]?arguments[0]:[],e="";return e+='<table class="widefat table-stats wps-report-table wps-table-fixed"><tr>'+(h.is_active("geo_ip")?"<td style='text-align: left;'>".concat(h._("country"),"</td>"):"")+"<td style='text-align: left;'>".concat(h._("ip"),"</td><td width=\"35%\" style='text-align: left;'>").concat(h._("page"),"</td><td style='text-align: left;'>").concat(h._("referrer"),"</td></tr>"),t.forEach(function(t){e+="<tr>"+(h.is_active("geo_ip")?'<td style="text-align: left"><img src=\''.concat(t.country.flag,"' alt='").concat(t.country.name,"' title='").concat(t.country.name,"' class='log-tools'/></td>"):"")+"<td style='text-align: left !important'>"+(t.hash_ip||t.ip.value)+"</td><td style='text-align: left !important;'><span class=\"wps-text-wrap\">"+(2<t.page.link.length?'<a href="'.concat(t.page.link,'" title="').concat(t.page.title,'" target="_blank" class="wps-text-muted">'):"")+t.page.title+(2<t.page.link.length?"</a>":"")+'</span></td><td style="text-align: left !important">'.concat(t.referred,"</td></tr>")}),e+="</table>"}},h.words_meta_box={view:function(){var t=0<arguments.length&&void 0!==arguments[0]?arguments[0]:[],e="";e+='<div class="wp-statistics-responsive-table">',e+='<table width="100%" class="widefat table-stats wps-report-table"><tbody><tr><td>'.concat(h._("word"),"</td><td>").concat(h._("browser"),"</td>")+(h.is_active("geo_ip")?"<td>".concat(h._("country"),"</td>"):"")+""+(h.is_active("geo_city")?"<td>".concat(h._("city"),"</td>"):"")+"<td>".concat(h._("date"),"</td><td>").concat(h._("ip"),"</td><td>").concat(h._("referrer"),"</td></tr>");return t.forEach(function(t){e+='<tr><td style="text-align: left"><span title=\''.concat(t.word,"' class='wps-cursor-default wps-text-wrap")+(h.is_active("overview_page")?" wps-200-px":"")+"'>".concat(t.word,'</span></td><td style="text-align: left"><a href="').concat(t.browser.link,'" title="').concat(t.browser.name,'"><img src="').concat(t.browser.logo,'" alt="').concat(t.browser.name,"\" class='log-tools' title='").concat(t.browser.name,"'/></a></td>")+(h.is_active("geo_ip")?'<td style="text-align: left"><img src=\''.concat(t.country.flag,"' alt='").concat(t.country.name,"' title='").concat(t.country.name,"' class='log-tools'/></td>"):"")+(h.is_active("geo_city")?'<td style="text-align: left">'.concat(t.city,"</td>"):"")+'<td style="text-align: left">'.concat(t.date,'</td><td style="text-align: left">')+(t.hash_ip||"<a href='".concat(t.ip.link,"'>").concat(t.ip.value,"</a>"))+'</td><td style="text-align: left">'.concat(t.referred,"</td></tr>"),0}),e+="</tbody></table>",e+="</div>"}},h.isset(h.global,"request_params","page")&&"authors"===h.global.request_params.page&&(a={ago:30,type:"author",ID:0},["from","to","ID"].forEach(function(t){h.isset(h.global,"request_params",t)&&(a[t]=h.global.request_params[t])}),jQuery("span[id^='number-total-']").html(h.rectangle_placeholder("wps-text-placeholder")),h.run_meta_box("pages-chart",a,!1)),h.isset(h.global,"request_params","page")&&"browser"===h.global.request_params.page&&(o={},["from","to"].forEach(function(t){h.isset(h.global,"request_params",t)&&(o[t]=h.global.request_params[t])}),["browsers-table","browsers"].forEach(function(t){jQuery("#"+h.getMetaBoxKey(t)+" .inside").css("height","430px")}),jQuery("#wp-statistics-browsers-table-widget .inside").html(h.placeholder()),jQuery(".wps-ph-picture").attr("style","height: 310px;"),h.run_meta_box("browsers",o,!1)),h.isset(h.global,"request_params","page")&&"categories"===h.global.request_params.page&&(r={ago:30,type:"category",ID:0},["from","to","ID"].forEach(function(t){h.isset(h.global,"request_params",t)&&(r[t]=h.global.request_params[t])}),jQuery("span[id^='number-total-']").html(h.rectangle_placeholder("wps-text-placeholder")),h.run_meta_box("pages-chart",r,!1)),h.isset(h.global,"request_params","page")&&"countries"===h.global.request_params.page&&(s={limit:0},["from","to"].forEach(function(t){h.isset(h.global,"request_params",t)&&(s[t]=h.global.request_params[t])}),h.run_meta_box("countries",s,!1)),h.isset(h.global,"request_params","page")&&"exclusions"===h.global.request_params.page&&(n=h.isset(h.global,"request_params","from")&&h.isset(h.global,"request_params","to")?{from:h.global.request_params.from,to:h.global.request_params.to}:{ago:30},jQuery("span[id^='number-total-chart-']").html(h.rectangle_placeholder("wps-text-placeholder")),h.run_meta_box("exclusions",n,!1)),h.isset(h.global,"request_params","page")&&"hits"===h.global.request_params.page&&(n={},n=h.isset(h.global,"request_params","from")&&h.isset(h.global,"request_params","to")?{from:h.global.request_params.from,to:h.global.request_params.to}:{ago:30},jQuery("span[id^='number-total-chart-']").html(h.rectangle_placeholder("wps-text-placeholder")),h.run_meta_box("hits",n,!1)),h.isset(h.global,"request_params","page")&&"overview"===h.global.request_params.page&&h.isset(h.global,"overview","ads")&&h.is_active("overview_ads")&&(i='<div id="wps_overview_ads_postbox" class="postbox"><div class="inside"><div class="close-overview-ads"><span class="dashicons dashicons-dismiss"></span></div><a href="'.concat(h.global.overview.ads.link,'" title="').concat(h.global.overview.ads.title,'" ').concat("yes"==h.global.overview.ads._target?' target="_blank"':"",'><img src="').concat(h.global.overview.ads.image,'" id="wps_overview_ads_image" alt="').concat(h.global.overview.ads.title,'"></a></div></div>'),jQuery(i).insertAfter("#wps-postbox-container-2 #normal-sortables div.postbox:first"),jQuery(document).on("click",".close-overview-ads",function(){jQuery("#wps_overview_ads_postbox").fadeOut("normal"),jQuery.ajax({url:h.global.admin_url+"admin-ajax.php",type:"get",data:{action:"wp_statistics_close_overview_ads",ads_id:""+h.global.overview.ads.ID,wps_nonce:""+h.global.rest_api_nonce},datatype:"json"})}),jQuery("#wps-donate-notice").on("click",".notice-dismiss",function(){jQuery.ajax({url:h.global.admin_url+"admin-ajax.php",type:"get",data:{action:"wp_statistics_close_notice",notice:"donate",wps_nonce:""+h.global.rest_api_nonce},datatype:"json"})}),jQuery("#wps_overview_ads_image").on("error",function(){jQuery("#wps_overview_ads_postbox").remove()})),h.isset(h.global,"request_params","page")&&"pages"===h.global.request_params.page&&(h.isset(h.global,"request_params","ID")&&h.isset(h.global,"request_params","type")?(i=h.isset(h.global,"request_params","from")&&h.isset(h.global,"request_params","to")?{from:h.global.request_params.from,to:h.global.request_params.to}:{ago:30},i=Object.assign(i,{ID:h.global.request_params.ID,type:h.global.request_params.type}),h.run_meta_box("pages-chart",i,!1),h.exist_tag("form#wp-statistics-select-pages")&&h.select2(),jQuery(document).on("change","select[name=ID]",function(){jQuery("span.submit-form").html(h._("please_wait")),jQuery(this).closest("form").trigger("submit")})):(l={},h.isset(h.global,"request_params","pagination-page")&&(l.paged=h.global.request_params["pagination-page"]),h.isset(h.global,"request_params","from")&&h.isset(h.global,"request_params","to")?(l.from=h.global.request_params.from,l.to=h.global.request_params.to):l.ago=30,h.run_meta_box("top-pages-chart",l,!1))),h.isset(h.global,"request_params","page")&&"platform"===h.global.request_params.page&&(c={},["from","to"].forEach(function(t){h.isset(h.global,"request_params",t)&&(c[t]=h.global.request_params[t])}),["platforms-table","platforms"].forEach(function(t){jQuery("#"+h.getMetaBoxKey(t)+" .inside").css("height","430px")}),jQuery("#wp-statistics-platforms-table-widget .inside").html(h.placeholder()),jQuery(".wps-ph-picture").attr("style","height: 310px;"),h.run_meta_box("platforms",c,!1)),h.isset(h.global,"request_params","page")&&"searches"===h.global.request_params.page&&(l=h.isset(h.global,"request_params","from")&&h.isset(h.global,"request_params","to")?{from:h.global.request_params.from,to:h.global.request_params.to}:{ago:30},h.run_meta_box("search",l,!1)),jQuery(".wp-statistics-settings").length&&((d=function(t){if(t=new RegExp("[?&]"+t+"=([^&#]*)").exec(window.location.href))return t[1]}("tab"))&&m(d),jQuery(".wp-statistics-settings ul.tabs li").click(function(){m(jQuery(this).attr("data-tab"))})),g("input[name=wps_visitors]","tr[data-view=visitors_log_tr]"),g("input[name=wps_referrerspam]","tr.referrerspam_field"),h.isset(h.global,"request_params","page")&&"settings"===h.global.request_params.page&&(jQuery("#wp-statistics-settings-form ul.tabs li").click(function(t){t.preventDefault();t=e(this).attr("data-tab");"undefined"!=typeof localStorage&&localStorage.setItem("wp-statistics-settings-active-tab",t)}),"undefined"==typeof localStorage||!h.isset(h.global,"request_params","save_setting")||"yes"!==h.global.request_params.save_setting||(d=localStorage.getItem("wp-statistics-settings-active-tab"))&&0<d.length&&e("#wp-statistics-settings-form ul.tabs li[data-tab="+d+"]").click()),h.isset(h.global,"request_params","page")&&"tags"===h.global.request_params.page&&(p={ago:30,type:"post_tag",ID:0},["from","to","ID"].forEach(function(t){h.isset(h.global,"request_params",t)&&(p[t]=h.global.request_params[t])}),jQuery("span[id^='number-total-']").html(h.rectangle_placeholder("wps-text-placeholder")),h.run_meta_box("pages-chart",p,!1)),h.isset(h.global,"request_params","page")&&"visitors"===h.global.request_params.page&&(u=function(t,o){var r='<table class="widefat">',s={browsers:["agent","browsers"],country:["location","location"],platform:["platform","platform"],referrer:["referrer","referrer"],user:["user_id","users"]};Object.keys(s).forEach(function(e){r+="<tr><td>".concat(h._(e),"</td></tr>"),r+='<tr><td><select name="'.concat(s[e][0],'" class="select2 wps-width-100" data-type-show="select2">'),r+="<option value=''>".concat(h._("all"),"</option>");var a=h.getLinkParams(s[e][0]);Object.keys(o[s[e][1]]).forEach(function(t){r+="<option value='".concat(t,"' ").concat(null!=a&&a==t?"selected":"",">").concat(o[s[e][1]][t],"</option>")}),r+="</select></td></tr>"}),r+="<tr><td>".concat(h._("ip"),"</td></tr>"),r+='<tr><td><input name="ip" value="'.concat(null!=h.getLinkParams("ip")?h.getLinkParams("ip"):"",'" class="wps-width-100" placeholder=\'xxx.xxx.xxx.xxx\' autocomplete="off"></td></tr>'),r+="<tr><td>".concat(h._("date"),"</td></tr>");var e="width: calc(50% - 5px);display: inline-block;";r+='<tr><td><div style="'.concat(e,'">').concat(h._("from"),': <input name="date-from" data-wps-date-picker="from" value="').concat(null!=h.getLinkParams("from")?h.getLinkParams("from"):"",'" style="width: calc(100% - 5px);" placeholder="YYYY-MM-DD" autocomplete="off"></div><div style="').concat(e,'">').concat(h._("to"),': <input name="date-to" data-wps-date-picker="to" value="').concat(null!=h.getLinkParams("to")?h.getLinkParams("to"):"",'" style="width: 100%;" placeholder="YYYY-MM-DD" autocomplete="off"></div><input type="hidden" name="from" id="date-from" value="').concat(null!=h.getLinkParams("from")?h.getLinkParams("from"):"",'"><input type="hidden" name="to" id="date-to" value="').concat(null!=h.getLinkParams("to")?h.getLinkParams("to"):"",'"></td></tr>'),r+="<tr><td></td></tr>",r+='<tr><td><input type="submit" value="'.concat(h._("filter"),'" class="button-primary"> &nbsp; <span class="filter-loading"></span></td></tr>'),r+="</table>",jQuery(t).html(r),setTimeout(function(){h.date_picker(),h.select2()},200)},jQuery(document).on("click","div#visitors-filter",function(t){t.preventDefault(),tb_show("","#TB_inline?&width=430&height=668&inlineId=visitors-filter-popup"),setTimeout(function(){var t,e,a="#wps-visitors-filter-form";h.exist_tag(a+" input[type=submit]")||(jQuery(a).html('<div style="height: 50px;"></div>'+h.line_placeholder(5)),t=localStorage.getItem("wp-statistics-visitors-filter")?JSON.parse(localStorage.getItem("wp-statistics-visitors-filter")):{},!h.isset(t,"timestamp")||!h.isset(t,"value")||h.isset(t,"timestamp")&&h.isset(t,"value")&&(new Date).getTime().toString()>parseInt(t.timestamp)?(e={wps_nonce:h.global.rest_api_nonce,action:"wp_statistics_visitors_page_filters"},e=Object.assign(e,h.global.request_params),jQuery.ajax({url:h.global.admin_url+"admin-ajax.php",type:"GET",dataType:"json",data:e,timeout:3e4,success:function(t){localStorage.setItem("wp-statistics-visitors-filter",JSON.stringify({value:t,timestamp:(new Date).getTime()+216e5})),u(a,t)},error:function(t,e,a){jQuery("span.tb-close-icon").click()}})):u(a,t.value))},500)}),_="#wp_statistics_visitors_filter_form",jQuery(document).on("submit",_,function(){var t=jQuery(_+" input[name=date-from]"),e=jQuery(_+" input[name=date-to]");if(0<t.val().length&&e.val().length<1||t.val().length<1&&1<e.val().length)return alert(h._("er_datepicker")),!1;e=jQuery(_+" input[name=ip]").val();if(0<e.length&&!1===h.isIP(e))return alert(h._("er_valid_ip")),!1;jQuery("input[data-wps-date-picker]").prop("disabled",!0);var o={input:["date-from","date-to","ip"],select:["agent","platform","location","referrer","user_id"]};Object.keys(o).forEach(function(a){o[a].forEach(function(e){var t=jQuery(_+" "+a+"[name="+e+"]");t.val().length<1&&(t.prop("disabled",!0),["from","to"].forEach(function(t){e=="date-"+t&&jQuery(_+" input[name="+t+"]").prop("disabled",!0)}))})});e=h.getLinkParams("order");return null!=e&&jQuery(this).append('<input type="hidden" name="order" value="'+e+'" /> '),jQuery("span.filter-loading").html(h._("please_wait")),!0})),h.date_picker(),("index.php"===h.global.page.file||h.is_active("overview_page")||"post-new.php"===h.global.page.file||"post.php"===h.global.page.file&&h.isset(h.global,"page","ID"))&&h.run_meta_boxes()});
includes/admin/pages/class-wp-statistics-admin-page-settings.php CHANGED
@@ -186,7 +186,7 @@ class settings_page
186
 
187
  if (isset($_POST[$option])) {
188
  if ($option == 'wps_content_report') {
189
- $value = wp_kses_post($_POST[$option]);
190
  } else {
191
  $value = stripslashes(sanitize_textarea_field($_POST[$option]));
192
  }
186
 
187
  if (isset($_POST[$option])) {
188
  if ($option == 'wps_content_report') {
189
+ $value = stripslashes(wp_kses_post($_POST[$option]));
190
  } else {
191
  $value = stripslashes(sanitize_textarea_field($_POST[$option]));
192
  }
includes/admin/templates/email.php CHANGED
@@ -397,12 +397,12 @@
397
  if (trim($logo) != "") {
398
  ?>
399
  <p align="center">
400
- <img src="<?php echo esc_attr($logo); ?>" style="display: block;margin: 20px auto">
401
  </p> <br/>
402
  <?php
403
  }
404
  ?>
405
- <?php echo esc_attr($content); ?>
406
  </td>
407
  </tr>
408
  </table>
@@ -417,7 +417,7 @@
417
  <table role="presentation" border="0" cellpadding="0" cellspacing="0">
418
  <tr>
419
  <td class="content-block" style="padding-bottom:0px;">
420
- <span class="apple-link"><?php echo esc_attr($footer_text); ?></span>
421
  </td>
422
  </tr>
423
  <tr>
397
  if (trim($logo) != "") {
398
  ?>
399
  <p align="center">
400
+ <img src="<?php echo esc_url($logo); ?>" style="display: block;margin: 20px auto">
401
  </p> <br/>
402
  <?php
403
  }
404
  ?>
405
+ <?php echo wp_kses_post($content); ?>
406
  </td>
407
  </tr>
408
  </table>
417
  <table role="presentation" border="0" cellpadding="0" cellspacing="0">
418
  <tr>
419
  <td class="content-block" style="padding-bottom:0px;">
420
+ <span class="apple-link"><?php echo wp_kses_post($footer_text); ?></span>
421
  </td>
422
  </tr>
423
  <tr>
includes/class-wp-statistics-user-agent.php CHANGED
@@ -25,13 +25,17 @@ class UserAgent
25
  // Get Http User Agent
26
  $user_agent = self::getHttpUserAgent();
27
 
28
- // Get WhichBrowser Browser
29
- $result = new \WhichBrowser\Parser($user_agent);
30
- $agent = array(
31
- 'browser' => (isset($result->browser->name)) ? $result->browser->name : _x('Unknown', 'Browser', 'wp-statistics'),
32
- 'platform' => (isset($result->os->name)) ? $result->os->name : _x('Unknown', 'Platform', 'wp-statistics'),
33
- 'version' => (isset($result->os->version->value)) ? $result->os->version->value : _x('Unknown', 'Version', 'wp-statistics'),
34
- );
 
 
 
 
35
 
36
  return apply_filters('wp_statistics_user_agent', $agent);
37
  }
@@ -89,5 +93,70 @@ class UserAgent
89
  return WP_STATISTICS_URL . 'assets/images/browser/' . $name . '.png';
90
  }
91
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
92
 
93
  }
25
  // Get Http User Agent
26
  $user_agent = self::getHttpUserAgent();
27
 
28
+ if (version_compare(phpversion(), '7', ">=") && class_exists('\WhichBrowser\Parser')) {
29
+ // Get WhichBrowser Browser
30
+ $result = new \WhichBrowser\Parser($user_agent);
31
+ $agent = array(
32
+ 'browser' => (isset($result->browser->name)) ? $result->browser->name : _x('Unknown', 'Browser', 'wp-statistics'),
33
+ 'platform' => (isset($result->os->name)) ? $result->os->name : _x('Unknown', 'Platform', 'wp-statistics'),
34
+ 'version' => (isset($result->browser->version->value)) ? $result->browser->version->value : _x('Unknown', 'Version', 'wp-statistics'),
35
+ );
36
+ } else {
37
+ $agent = self::getBrowserInfo($user_agent);
38
+ }
39
 
40
  return apply_filters('wp_statistics_user_agent', $agent);
41
  }
93
  return WP_STATISTICS_URL . 'assets/images/browser/' . $name . '.png';
94
  }
95
 
96
+ public static function getBrowserInfo($userAgent = null)
97
+ {
98
+ $version = '';
99
+
100
+ if (preg_match('/linux|ubuntu/i', $userAgent)) {
101
+ $platform = 'linux';
102
+ } elseif (preg_match('/macintosh|mac os x/i', $userAgent)) {
103
+ $platform = 'mac';
104
+ } elseif (preg_match('/windows|win32/i', $userAgent)) {
105
+ $platform = 'windows';
106
+ } elseif (preg_match('/iphone/i', $userAgent)) {
107
+ $platform = 'iPhone';
108
+ } elseif (preg_match('/android/i', $userAgent)) {
109
+ $platform = 'Android';
110
+ } elseif (preg_match('/webos/i', $userAgent)) {
111
+ $platform = 'Mobile';
112
+ } else {
113
+ $platform = _x('Unknown', 'Platform', 'wp-statistics');
114
+ }
115
+
116
+ if (preg_match('/MSIE\/([0-9.]*)/i', $userAgent, $match) && !preg_match('/Opera/i', $userAgent)) {
117
+ $browser = 'Internet Explorer';
118
+ $version = end($match);
119
+ } elseif (preg_match('/Edg\/([0-9.]*)/i', $userAgent, $match)) {
120
+ $browser = 'Edge';
121
+ $version = end($match);
122
+ } elseif (preg_match('/Firefox\/([0-9.]*)/i', $userAgent, $match)) {
123
+ $browser = 'Firefox';
124
+ $version = end($match);
125
+ } elseif (preg_match('/OPR\/([0-9.]*)/i', $userAgent, $match)) {
126
+ $browser = 'Opera';
127
+ $version = end($match);
128
+ } elseif (preg_match('/Chromium\/([0-9.]*)/i', $userAgent, $match)) {
129
+ $browser = 'Chromium';
130
+ $version = end($match);
131
+ } elseif (preg_match('/Chrome\/([0-9.]*)/i', $userAgent, $match)) {
132
+ $browser = 'Chrome';
133
+ $version = end($match);
134
+ } elseif (preg_match('/Safari\/([0-9.]*)/i', $userAgent, $match)) {
135
+ $browser = 'Safari';
136
+ $version = end($match);
137
+ } elseif (preg_match('/Netscape[0-9]?\/([0-9.]*)/i', $userAgent, $match)) {
138
+ $browser = 'Netscape';
139
+ $version = end($match);
140
+ } elseif (preg_match('/Trident\/([0-9.]*)/i', $userAgent, $match)) {
141
+ $browser = 'Internet Explorer';
142
+ } else {
143
+ $browser = _x('Unknown', 'Browser', 'wp-statistics');
144
+ }
145
+
146
+ $pattern = '#(?<browser>)[/ ]+(?<version>[0-9.|a-zA-Z.]*)#';
147
+ if (!preg_match_all($pattern, $userAgent, $matches)) {
148
+ $version = _x('Unknown', 'Version', 'wp-statistics');
149
+ }
150
+
151
+ if (empty($version) && !empty($matches['version']) && count($matches['version'])) {
152
+ $version = end($matches['version']);
153
+ }
154
+
155
+ return array(
156
+ 'browser' => $browser,
157
+ 'version' => $version,
158
+ 'platform' => $platform
159
+ );
160
+ }
161
 
162
  }
includes/vendor/composer/ClassLoader.php CHANGED
@@ -37,11 +37,13 @@ namespace Composer\Autoload;
37
  *
38
  * @author Fabien Potencier <fabien@symfony.com>
39
  * @author Jordi Boggiano <j.boggiano@seld.be>
40
- * @see http://www.php-fig.org/psr/psr-0/
41
- * @see http://www.php-fig.org/psr/psr-4/
42
  */
43
  class ClassLoader
44
  {
 
 
45
  // PSR-4
46
  private $prefixLengthsPsr4 = array();
47
  private $prefixDirsPsr4 = array();
@@ -57,6 +59,13 @@ class ClassLoader
57
  private $missingClasses = array();
58
  private $apcuPrefix;
59
 
 
 
 
 
 
 
 
60
  public function getPrefixes()
61
  {
62
  if (!empty($this->prefixesPsr0)) {
@@ -300,6 +309,17 @@ class ClassLoader
300
  public function register($prepend = false)
301
  {
302
  spl_autoload_register(array($this, 'loadClass'), true, $prepend);
 
 
 
 
 
 
 
 
 
 
 
303
  }
304
 
305
  /**
@@ -308,6 +328,10 @@ class ClassLoader
308
  public function unregister()
309
  {
310
  spl_autoload_unregister(array($this, 'loadClass'));
 
 
 
 
311
  }
312
 
313
  /**
@@ -367,6 +391,16 @@ class ClassLoader
367
  return $file;
368
  }
369
 
 
 
 
 
 
 
 
 
 
 
370
  private function findFileWithExtension($class, $ext)
371
  {
372
  // PSR-4 lookup
37
  *
38
  * @author Fabien Potencier <fabien@symfony.com>
39
  * @author Jordi Boggiano <j.boggiano@seld.be>
40
+ * @see https://www.php-fig.org/psr/psr-0/
41
+ * @see https://www.php-fig.org/psr/psr-4/
42
  */
43
  class ClassLoader
44
  {
45
+ private $vendorDir;
46
+
47
  // PSR-4
48
  private $prefixLengthsPsr4 = array();
49
  private $prefixDirsPsr4 = array();
59
  private $missingClasses = array();
60
  private $apcuPrefix;
61
 
62
+ private static $registeredLoaders = array();
63
+
64
+ public function __construct($vendorDir = null)
65
+ {
66
+ $this->vendorDir = $vendorDir;
67
+ }
68
+
69
  public function getPrefixes()
70
  {
71
  if (!empty($this->prefixesPsr0)) {
309
  public function register($prepend = false)
310
  {
311
  spl_autoload_register(array($this, 'loadClass'), true, $prepend);
312
+
313
+ if (null === $this->vendorDir) {
314
+ return;
315
+ }
316
+
317
+ if ($prepend) {
318
+ self::$registeredLoaders = array($this->vendorDir => $this) + self::$registeredLoaders;
319
+ } else {
320
+ unset(self::$registeredLoaders[$this->vendorDir]);
321
+ self::$registeredLoaders[$this->vendorDir] = $this;
322
+ }
323
  }
324
 
325
  /**
328
  public function unregister()
329
  {
330
  spl_autoload_unregister(array($this, 'loadClass'));
331
+
332
+ if (null !== $this->vendorDir) {
333
+ unset(self::$registeredLoaders[$this->vendorDir]);
334
+ }
335
  }
336
 
337
  /**
391
  return $file;
392
  }
393
 
394
+ /**
395
+ * Returns the currently registered loaders indexed by their corresponding vendor directories.
396
+ *
397
+ * @return self[]
398
+ */
399
+ public static function getRegisteredLoaders()
400
+ {
401
+ return self::$registeredLoaders;
402
+ }
403
+
404
  private function findFileWithExtension($class, $ext)
405
  {
406
  // PSR-4 lookup
includes/vendor/composer/InstalledVersions.php ADDED
@@ -0,0 +1,355 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+
4
+
5
+
6
+
7
+
8
+
9
+
10
+
11
+
12
+
13
+ namespace Composer;
14
+
15
+ use Composer\Autoload\ClassLoader;
16
+ use Composer\Semver\VersionParser;
17
+
18
+
19
+
20
+
21
+
22
+
23
+ class InstalledVersions
24
+ {
25
+ private static $installed = array (
26
+ 'root' =>
27
+ array (
28
+ 'pretty_version' => 'dev-master',
29
+ 'version' => 'dev-master',
30
+ 'aliases' =>
31
+ array (
32
+ ),
33
+ 'reference' => '85b3271b377541bca11a7812fe8372944174812b',
34
+ 'name' => '__root__',
35
+ ),
36
+ 'versions' =>
37
+ array (
38
+ '__root__' =>
39
+ array (
40
+ 'pretty_version' => 'dev-master',
41
+ 'version' => 'dev-master',
42
+ 'aliases' =>
43
+ array (
44
+ ),
45
+ 'reference' => '85b3271b377541bca11a7812fe8372944174812b',
46
+ ),
47
+ 'composer/ca-bundle' =>
48
+ array (
49
+ 'pretty_version' => '1.3.1',
50
+ 'version' => '1.3.1.0',
51
+ 'aliases' =>
52
+ array (
53
+ ),
54
+ 'reference' => '4c679186f2aca4ab6a0f1b0b9cf9252decb44d0b',
55
+ ),
56
+ 'geoip2/geoip2' =>
57
+ array (
58
+ 'pretty_version' => 'v2.10.0',
59
+ 'version' => '2.10.0.0',
60
+ 'aliases' =>
61
+ array (
62
+ ),
63
+ 'reference' => '419557cd21d9fe039721a83490701a58c8ce784a',
64
+ ),
65
+ 'jaybizzle/crawler-detect' =>
66
+ array (
67
+ 'pretty_version' => 'v1.2.102',
68
+ 'version' => '1.2.102.0',
69
+ 'aliases' =>
70
+ array (
71
+ ),
72
+ 'reference' => '346cfd72d11bb41f15e82654e532dc55360612ac',
73
+ ),
74
+ 'maxmind-db/reader' =>
75
+ array (
76
+ 'pretty_version' => 'v1.6.0',
77
+ 'version' => '1.6.0.0',
78
+ 'aliases' =>
79
+ array (
80
+ ),
81
+ 'reference' => 'febd4920bf17c1da84cef58e56a8227dfb37fbe4',
82
+ ),
83
+ 'maxmind/web-service-common' =>
84
+ array (
85
+ 'pretty_version' => 'v0.7.0',
86
+ 'version' => '0.7.0.0',
87
+ 'aliases' =>
88
+ array (
89
+ ),
90
+ 'reference' => '74c996c218ada5c639c8c2f076756e059f5552fc',
91
+ ),
92
+ 'psr/cache' =>
93
+ array (
94
+ 'pretty_version' => '1.0.1',
95
+ 'version' => '1.0.1.0',
96
+ 'aliases' =>
97
+ array (
98
+ ),
99
+ 'reference' => 'd11b50ad223250cf17b86e38383413f5a6764bf8',
100
+ ),
101
+ 's1lentium/iptools' =>
102
+ array (
103
+ 'pretty_version' => 'v1.1.1',
104
+ 'version' => '1.1.1.0',
105
+ 'aliases' =>
106
+ array (
107
+ ),
108
+ 'reference' => 'f6f8ab6132ca7443bd7cced1681f5066d725fd5f',
109
+ ),
110
+ 'whichbrowser/parser' =>
111
+ array (
112
+ 'pretty_version' => 'v2.1.7',
113
+ 'version' => '2.1.7.0',
114
+ 'aliases' =>
115
+ array (
116
+ ),
117
+ 'reference' => '1044880bc792dbce5948fbff22ae731c43c280d9',
118
+ ),
119
+ ),
120
+ );
121
+ private static $canGetVendors;
122
+ private static $installedByVendor = array();
123
+
124
+
125
+
126
+
127
+
128
+
129
+
130
+ public static function getInstalledPackages()
131
+ {
132
+ $packages = array();
133
+ foreach (self::getInstalled() as $installed) {
134
+ $packages[] = array_keys($installed['versions']);
135
+ }
136
+
137
+
138
+ if (1 === \count($packages)) {
139
+ return $packages[0];
140
+ }
141
+
142
+ return array_keys(array_flip(\call_user_func_array('array_merge', $packages)));
143
+ }
144
+
145
+
146
+
147
+
148
+
149
+
150
+
151
+
152
+
153
+ public static function isInstalled($packageName)
154
+ {
155
+ foreach (self::getInstalled() as $installed) {
156
+ if (isset($installed['versions'][$packageName])) {
157
+ return true;
158
+ }
159
+ }
160
+
161
+ return false;
162
+ }
163
+
164
+
165
+
166
+
167
+
168
+
169
+
170
+
171
+
172
+
173
+
174
+
175
+
176
+
177
+ public static function satisfies(VersionParser $parser, $packageName, $constraint)
178
+ {
179
+ $constraint = $parser->parseConstraints($constraint);
180
+ $provided = $parser->parseConstraints(self::getVersionRanges($packageName));
181
+
182
+ return $provided->matches($constraint);
183
+ }
184
+
185
+
186
+
187
+
188
+
189
+
190
+
191
+
192
+
193
+
194
+ public static function getVersionRanges($packageName)
195
+ {
196
+ foreach (self::getInstalled() as $installed) {
197
+ if (!isset($installed['versions'][$packageName])) {
198
+ continue;
199
+ }
200
+
201
+ $ranges = array();
202
+ if (isset($installed['versions'][$packageName]['pretty_version'])) {
203
+ $ranges[] = $installed['versions'][$packageName]['pretty_version'];
204
+ }
205
+ if (array_key_exists('aliases', $installed['versions'][$packageName])) {
206
+ $ranges = array_merge($ranges, $installed['versions'][$packageName]['aliases']);
207
+ }
208
+ if (array_key_exists('replaced', $installed['versions'][$packageName])) {
209
+ $ranges = array_merge($ranges, $installed['versions'][$packageName]['replaced']);
210
+ }
211
+ if (array_key_exists('provided', $installed['versions'][$packageName])) {
212
+ $ranges = array_merge($ranges, $installed['versions'][$packageName]['provided']);
213
+ }
214
+
215
+ return implode(' || ', $ranges);
216
+ }
217
+
218
+ throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed');
219
+ }
220
+
221
+
222
+
223
+
224
+
225
+ public static function getVersion($packageName)
226
+ {
227
+ foreach (self::getInstalled() as $installed) {
228
+ if (!isset($installed['versions'][$packageName])) {
229
+ continue;
230
+ }
231
+
232
+ if (!isset($installed['versions'][$packageName]['version'])) {
233
+ return null;
234
+ }
235
+
236
+ return $installed['versions'][$packageName]['version'];
237
+ }
238
+
239
+ throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed');
240
+ }
241
+
242
+
243
+
244
+
245
+
246
+ public static function getPrettyVersion($packageName)
247
+ {
248
+ foreach (self::getInstalled() as $installed) {
249
+ if (!isset($installed['versions'][$packageName])) {
250
+ continue;
251
+ }
252
+
253
+ if (!isset($installed['versions'][$packageName]['pretty_version'])) {
254
+ return null;
255
+ }
256
+
257
+ return $installed['versions'][$packageName]['pretty_version'];
258
+ }
259
+
260
+ throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed');
261
+ }
262
+
263
+
264
+
265
+
266
+
267
+ public static function getReference($packageName)
268
+ {
269
+ foreach (self::getInstalled() as $installed) {
270
+ if (!isset($installed['versions'][$packageName])) {
271
+ continue;
272
+ }
273
+
274
+ if (!isset($installed['versions'][$packageName]['reference'])) {
275
+ return null;
276
+ }
277
+
278
+ return $installed['versions'][$packageName]['reference'];
279
+ }
280
+
281
+ throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed');
282
+ }
283
+
284
+
285
+
286
+
287
+
288
+ public static function getRootPackage()
289
+ {
290
+ $installed = self::getInstalled();
291
+
292
+ return $installed[0]['root'];
293
+ }
294
+
295
+
296
+
297
+
298
+
299
+
300
+
301
+ public static function getRawData()
302
+ {
303
+ return self::$installed;
304
+ }
305
+
306
+
307
+
308
+
309
+
310
+
311
+
312
+
313
+
314
+
315
+
316
+
317
+
318
+
319
+
320
+
321
+
322
+
323
+
324
+ public static function reload($data)
325
+ {
326
+ self::$installed = $data;
327
+ self::$installedByVendor = array();
328
+ }
329
+
330
+
331
+
332
+
333
+ private static function getInstalled()
334
+ {
335
+ if (null === self::$canGetVendors) {
336
+ self::$canGetVendors = method_exists('Composer\Autoload\ClassLoader', 'getRegisteredLoaders');
337
+ }
338
+
339
+ $installed = array();
340
+
341
+ if (self::$canGetVendors) {
342
+ foreach (ClassLoader::getRegisteredLoaders() as $vendorDir => $loader) {
343
+ if (isset(self::$installedByVendor[$vendorDir])) {
344
+ $installed[] = self::$installedByVendor[$vendorDir];
345
+ } elseif (is_file($vendorDir.'/composer/installed.php')) {
346
+ $installed[] = self::$installedByVendor[$vendorDir] = require $vendorDir.'/composer/installed.php';
347
+ }
348
+ }
349
+ }
350
+
351
+ $installed[] = self::$installed;
352
+
353
+ return $installed;
354
+ }
355
+ }
includes/vendor/composer/autoload_classmap.php CHANGED
@@ -6,4 +6,5 @@ $vendorDir = dirname(dirname(__FILE__));
6
  $baseDir = dirname(dirname($vendorDir));
7
 
8
  return array(
 
9
  );
6
  $baseDir = dirname(dirname($vendorDir));
7
 
8
  return array(
9
+ 'Composer\\InstalledVersions' => $vendorDir . '/composer/InstalledVersions.php',
10
  );
includes/vendor/composer/autoload_real.php CHANGED
@@ -23,12 +23,12 @@ class ComposerAutoloaderInit2ac516f03a394ec3d1721352b7f43359
23
  }
24
 
25
  spl_autoload_register(array('ComposerAutoloaderInit2ac516f03a394ec3d1721352b7f43359', 'loadClassLoader'), true, true);
26
- self::$loader = $loader = new \Composer\Autoload\ClassLoader();
27
  spl_autoload_unregister(array('ComposerAutoloaderInit2ac516f03a394ec3d1721352b7f43359', 'loadClassLoader'));
28
 
29
  $useStaticLoader = PHP_VERSION_ID >= 50600 && !defined('HHVM_VERSION') && (!function_exists('zend_loader_file_encoded') || !zend_loader_file_encoded());
30
  if ($useStaticLoader) {
31
- require_once __DIR__ . '/autoload_static.php';
32
 
33
  call_user_func(\Composer\Autoload\ComposerStaticInit2ac516f03a394ec3d1721352b7f43359::getInitializer($loader));
34
  } else {
23
  }
24
 
25
  spl_autoload_register(array('ComposerAutoloaderInit2ac516f03a394ec3d1721352b7f43359', 'loadClassLoader'), true, true);
26
+ self::$loader = $loader = new \Composer\Autoload\ClassLoader(\dirname(\dirname(__FILE__)));
27
  spl_autoload_unregister(array('ComposerAutoloaderInit2ac516f03a394ec3d1721352b7f43359', 'loadClassLoader'));
28
 
29
  $useStaticLoader = PHP_VERSION_ID >= 50600 && !defined('HHVM_VERSION') && (!function_exists('zend_loader_file_encoded') || !zend_loader_file_encoded());
30
  if ($useStaticLoader) {
31
+ require __DIR__ . '/autoload_static.php';
32
 
33
  call_user_func(\Composer\Autoload\ComposerStaticInit2ac516f03a394ec3d1721352b7f43359::getInitializer($loader));
34
  } else {
includes/vendor/composer/autoload_static.php CHANGED
@@ -79,11 +79,16 @@ class ComposerStaticInit2ac516f03a394ec3d1721352b7f43359
79
  ),
80
  );
81
 
 
 
 
 
82
  public static function getInitializer(ClassLoader $loader)
83
  {
84
  return \Closure::bind(function () use ($loader) {
85
  $loader->prefixLengthsPsr4 = ComposerStaticInit2ac516f03a394ec3d1721352b7f43359::$prefixLengthsPsr4;
86
  $loader->prefixDirsPsr4 = ComposerStaticInit2ac516f03a394ec3d1721352b7f43359::$prefixDirsPsr4;
 
87
 
88
  }, null, ClassLoader::class);
89
  }
79
  ),
80
  );
81
 
82
+ public static $classMap = array (
83
+ 'Composer\\InstalledVersions' => __DIR__ . '/..' . '/composer/InstalledVersions.php',
84
+ );
85
+
86
  public static function getInitializer(ClassLoader $loader)
87
  {
88
  return \Closure::bind(function () use ($loader) {
89
  $loader->prefixLengthsPsr4 = ComposerStaticInit2ac516f03a394ec3d1721352b7f43359::$prefixLengthsPsr4;
90
  $loader->prefixDirsPsr4 = ComposerStaticInit2ac516f03a394ec3d1721352b7f43359::$prefixDirsPsr4;
91
+ $loader->classMap = ComposerStaticInit2ac516f03a394ec3d1721352b7f43359::$classMap;
92
 
93
  }, null, ClassLoader::class);
94
  }
includes/vendor/composer/ca-bundle/res/cacert.pem CHANGED
@@ -1,7 +1,7 @@
1
  ##
2
  ## Bundle of CA Root Certificates
3
  ##
4
- ## Certificate data from Mozilla as of: Wed Jul 22 03:12:14 2020 GMT
5
  ##
6
  ## This is a bundle of X.509 certificates of public Certificate Authorities
7
  ## (CA). These were automatically extracted from Mozilla's root certificates
@@ -14,7 +14,7 @@
14
  ## Just configure this file as the SSLCACertificateFile.
15
  ##
16
  ## Conversion done with mk-ca-bundle.pl version 1.28.
17
- ## SHA256: cc6408bd4be7fbfb8699bdb40ccb7f6de5780d681d87785ea362646e4dad5e8e
18
  ##
19
 
20
 
@@ -132,87 +132,6 @@ W3iDVuycNsMm4hH2Z0kdkquM++v/eu6FSqdQgPCnXEqULl8FmTxSQeDNtGPPAUO6nIPcj2A781q0
132
  tHuu2guQOHXvgR1m0vdXcDazv/wor3ElhVsT/h5/WrQ8
133
  -----END CERTIFICATE-----
134
 
135
- GeoTrust Global CA
136
- ==================
137
- -----BEGIN CERTIFICATE-----
138
- MIIDVDCCAjygAwIBAgIDAjRWMA0GCSqGSIb3DQEBBQUAMEIxCzAJBgNVBAYTAlVTMRYwFAYDVQQK
139
- Ew1HZW9UcnVzdCBJbmMuMRswGQYDVQQDExJHZW9UcnVzdCBHbG9iYWwgQ0EwHhcNMDIwNTIxMDQw
140
- MDAwWhcNMjIwNTIxMDQwMDAwWjBCMQswCQYDVQQGEwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5j
141
- LjEbMBkGA1UEAxMSR2VvVHJ1c3QgR2xvYmFsIENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB
142
- CgKCAQEA2swYYzD99BcjGlZ+W988bDjkcbd4kdS8odhM+KhDtgPpTSEHCIjaWC9mOSm9BXiLnTjo
143
- BbdqfnGk5sRgprDvgOSJKA+eJdbtg/OtppHHmMlCGDUUna2YRpIuT8rxh0PBFpVXLVDviS2Aelet
144
- 8u5fa9IAjbkU+BQVNdnARqN7csiRv8lVK83Qlz6cJmTM386DGXHKTubU1XupGc1V3sjs0l44U+Vc
145
- T4wt/lAjNvxm5suOpDkZALeVAjmRCw7+OC7RHQWa9k0+bw8HHa8sHo9gOeL6NlMTOdReJivbPagU
146
- vTLrGAMoUgRx5aszPeE4uwc2hGKceeoWMPRfwCvocWvk+QIDAQABo1MwUTAPBgNVHRMBAf8EBTAD
147
- AQH/MB0GA1UdDgQWBBTAephojYn7qwVkDBF9qn1luMrMTjAfBgNVHSMEGDAWgBTAephojYn7qwVk
148
- DBF9qn1luMrMTjANBgkqhkiG9w0BAQUFAAOCAQEANeMpauUvXVSOKVCUn5kaFOSPeCpilKInZ57Q
149
- zxpeR+nBsqTP3UEaBU6bS+5Kb1VSsyShNwrrZHYqLizz/Tt1kL/6cdjHPTfStQWVYrmm3ok9Nns4
150
- d0iXrKYgjy6myQzCsplFAMfOEVEiIuCl6rYVSAlk6l5PdPcFPseKUgzbFbS9bZvlxrFUaKnjaZC2
151
- mqUPuLk/IH2uSrW4nOQdtqvmlKXBx4Ot2/Unhw4EbNX/3aBd7YdStysVAq45pmp06drE57xNNB6p
152
- XE0zX5IJL4hmXXeXxx12E6nV5fEWCRE11azbJHFwLJhWC9kXtNHjUStedejV0NxPNO3CBWaAocvm
153
- Mw==
154
- -----END CERTIFICATE-----
155
-
156
- GeoTrust Universal CA
157
- =====================
158
- -----BEGIN CERTIFICATE-----
159
- MIIFaDCCA1CgAwIBAgIBATANBgkqhkiG9w0BAQUFADBFMQswCQYDVQQGEwJVUzEWMBQGA1UEChMN
160
- R2VvVHJ1c3QgSW5jLjEeMBwGA1UEAxMVR2VvVHJ1c3QgVW5pdmVyc2FsIENBMB4XDTA0MDMwNDA1
161
- MDAwMFoXDTI5MDMwNDA1MDAwMFowRTELMAkGA1UEBhMCVVMxFjAUBgNVBAoTDUdlb1RydXN0IElu
162
- Yy4xHjAcBgNVBAMTFUdlb1RydXN0IFVuaXZlcnNhbCBDQTCCAiIwDQYJKoZIhvcNAQEBBQADggIP
163
- ADCCAgoCggIBAKYVVaCjxuAfjJ0hUNfBvitbtaSeodlyWL0AG0y/YckUHUWCq8YdgNY96xCcOq9t
164
- JPi8cQGeBvV8Xx7BDlXKg5pZMK4ZyzBIle0iN430SppyZj6tlcDgFgDgEB8rMQ7XlFTTQjOgNB0e
165
- RXbdT8oYN+yFFXoZCPzVx5zw8qkuEKmS5j1YPakWaDwvdSEYfyh3peFhF7em6fgemdtzbvQKoiFs
166
- 7tqqhZJmr/Z6a4LauiIINQ/PQvE1+mrufislzDoR5G2vc7J2Ha3QsnhnGqQ5HFELZ1aD/ThdDc7d
167
- 8Lsrlh/eezJS/R27tQahsiFepdaVaH/wmZ7cRQg+59IJDTWU3YBOU5fXtQlEIGQWFwMCTFMNaN7V
168
- qnJNk22CDtucvc+081xdVHppCZbW2xHBjXWotM85yM48vCR85mLK4b19p71XZQvk/iXttmkQ3Cga
169
- Rr0BHdCXteGYO8A3ZNY9lO4L4fUorgtWv3GLIylBjobFS1J72HGrH4oVpjuDWtdYAVHGTEHZf9hB
170
- Z3KiKN9gg6meyHv8U3NyWfWTehd2Ds735VzZC1U0oqpbtWpU5xPKV+yXbfReBi9Fi1jUIxaS5BZu
171
- KGNZMN9QAZxjiRqf2xeUgnA3wySemkfWWspOqGmJch+RbNt+nhutxx9z3SxPGWX9f5NAEC7S8O08
172
- ni4oPmkmM8V7AgMBAAGjYzBhMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFNq7LqqwDLiIJlF0
173
- XG0D08DYj3rWMB8GA1UdIwQYMBaAFNq7LqqwDLiIJlF0XG0D08DYj3rWMA4GA1UdDwEB/wQEAwIB
174
- hjANBgkqhkiG9w0BAQUFAAOCAgEAMXjmx7XfuJRAyXHEqDXsRh3ChfMoWIawC/yOsjmPRFWrZIRc
175
- aanQmjg8+uUfNeVE44B5lGiku8SfPeE0zTBGi1QrlaXv9z+ZhP015s8xxtxqv6fXIwjhmF7DWgh2
176
- qaavdy+3YL1ERmrvl/9zlcGO6JP7/TG37FcREUWbMPEaiDnBTzynANXH/KttgCJwpQzgXQQpAvvL
177
- oJHRfNbDflDVnVi+QTjruXU8FdmbyUqDWcDaU/0zuzYYm4UPFd3uLax2k7nZAY1IEKj79TiG8dsK
178
- xr2EoyNB3tZ3b4XUhRxQ4K5RirqNPnbiucon8l+f725ZDQbYKxek0nxru18UGkiPGkzns0ccjkxF
179
- KyDuSN/n3QmOGKjaQI2SJhFTYXNd673nxE0pN2HrrDktZy4W1vUAg4WhzH92xH3kt0tm7wNFYGm2
180
- DFKWkoRepqO1pD4r2czYG0eq8kTaT/kD6PAUyz/zg97QwVTjt+gKN02LIFkDMBmhLMi9ER/frslK
181
- xfMnZmaGrGiR/9nmUxwPi1xpZQomyB40w11Re9epnAahNt3ViZS82eQtDF4JbAiXfKM9fJP/P6EU
182
- p8+1Xevb2xzEdt+Iub1FBZUbrvxGakyvSOPOrg/SfuvmbJxPgWp6ZKy7PtXny3YuxadIwVyQD8vI
183
- P/rmMuGNG2+k5o7Y+SlIis5z/iw=
184
- -----END CERTIFICATE-----
185
-
186
- GeoTrust Universal CA 2
187
- =======================
188
- -----BEGIN CERTIFICATE-----
189
- MIIFbDCCA1SgAwIBAgIBATANBgkqhkiG9w0BAQUFADBHMQswCQYDVQQGEwJVUzEWMBQGA1UEChMN
190
- R2VvVHJ1c3QgSW5jLjEgMB4GA1UEAxMXR2VvVHJ1c3QgVW5pdmVyc2FsIENBIDIwHhcNMDQwMzA0
191
- MDUwMDAwWhcNMjkwMzA0MDUwMDAwWjBHMQswCQYDVQQGEwJVUzEWMBQGA1UEChMNR2VvVHJ1c3Qg
192
- SW5jLjEgMB4GA1UEAxMXR2VvVHJ1c3QgVW5pdmVyc2FsIENBIDIwggIiMA0GCSqGSIb3DQEBAQUA
193
- A4ICDwAwggIKAoICAQCzVFLByT7y2dyxUxpZKeexw0Uo5dfR7cXFS6GqdHtXr0om/Nj1XqduGdt0
194
- DE81WzILAePb63p3NeqqWuDW6KFXlPCQo3RWlEQwAx5cTiuFJnSCegx2oG9NzkEtoBUGFF+3Qs17
195
- j1hhNNwqCPkuwwGmIkQcTAeC5lvO0Ep8BNMZcyfwqph/Lq9O64ceJHdqXbboW0W63MOhBW9Wjo8Q
196
- JqVJwy7XQYci4E+GymC16qFjwAGXEHm9ADwSbSsVsaxLse4YuU6W3Nx2/zu+z18DwPw76L5GG//a
197
- QMJS9/7jOvdqdzXQ2o3rXhhqMcceujwbKNZrVMaqW9eiLBsZzKIC9ptZvTdrhrVtgrrY6slWvKk2
198
- WP0+GfPtDCapkzj4T8FdIgbQl+rhrcZV4IErKIM6+vR7IVEAvlI4zs1meaj0gVbi0IMJR1FbUGrP
199
- 20gaXT73y/Zl92zxlfgCOzJWgjl6W70viRu/obTo/3+NjN8D8WBOWBFM66M/ECuDmgFz2ZRthAAn
200
- ZqzwcEAJQpKtT5MNYQlRJNiS1QuUYbKHsu3/mjX/hVTK7URDrBs8FmtISgocQIgfksILAAX/8sgC
201
- SqSqqcyZlpwvWOB94b67B9xfBHJcMTTD7F8t4D1kkCLm0ey4Lt1ZrtmhN79UNdxzMk+MBB4zsslG
202
- 8dhcyFVQyWi9qLo2CQIDAQABo2MwYTAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBR281Xh+qQ2
203
- +/CfXGJx7Tz0RzgQKzAfBgNVHSMEGDAWgBR281Xh+qQ2+/CfXGJx7Tz0RzgQKzAOBgNVHQ8BAf8E
204
- BAMCAYYwDQYJKoZIhvcNAQEFBQADggIBAGbBxiPz2eAubl/oz66wsCVNK/g7WJtAJDday6sWSf+z
205
- dXkzoS9tcBc0kf5nfo/sm+VegqlVHy/c1FEHEv6sFj4sNcZj/NwQ6w2jqtB8zNHQL1EuxBRa3ugZ
206
- 4T7GzKQp5y6EqgYweHZUcyiYWTjgAA1i00J9IZ+uPTqM1fp3DRgrFg5fNuH8KrUwJM/gYwx7WBr+
207
- mbpCErGR9Hxo4sjoryzqyX6uuyo9DRXcNJW2GHSoag/HtPQTxORb7QrSpJdMKu0vbBKJPfEncKpq
208
- A1Ihn0CoZ1Dy81of398j9tx4TuaYT1U6U+Pv8vSfx3zYWK8pIpe44L2RLrB27FcRz+8pRPPphXpg
209
- Y+RdM4kX2TGq2tbzGDVyz4crL2MjhF2EjD9XoIj8mZEoJmmZ1I+XRL6O1UixpCgp8RW04eWe3fiP
210
- pm8m1wk8OhwRDqZsN/etRIcsKMfYdIKz0G9KV7s1KSegi+ghp4dkNl3M2Basx7InQJJVOCiNUW7d
211
- FGdTbHFcJoRNdVq2fmBWqU2t+5sel/MN2dKXVHfaPRK34B7vCAas+YWH6aLcr34YEoP9VhdBLtUp
212
- gn2Z9DH2canPLAEnpQW5qrJITirvn5NSUZU8UnOOVkwXQMAJKOSLakhT2+zNVVXxxvjpoixMptEm
213
- X36vWkzaH6byHCx+rgIW0lbQL1dTR+iS
214
- -----END CERTIFICATE-----
215
-
216
  Comodo AAA Services root
217
  ========================
218
  -----BEGIN CERTIFICATE-----
@@ -237,38 +156,6 @@ Rt0vxuBqw8M0Ayx9lt1awg6nCpnBBYurDC/zXDrPbDdVCYfeU0BsWO/8tqtlbgT2G9w84FoVxp7Z
237
  12yxow+ev+to51byrvLjKzg6CYG1a4XXvi3tPxq3smPi9WIsgtRqAEFQ8TmDn5XpNpaYbg==
238
  -----END CERTIFICATE-----
239
 
240
- QuoVadis Root CA
241
- ================
242
- -----BEGIN CERTIFICATE-----
243
- MIIF0DCCBLigAwIBAgIEOrZQizANBgkqhkiG9w0BAQUFADB/MQswCQYDVQQGEwJCTTEZMBcGA1UE
244
- ChMQUXVvVmFkaXMgTGltaXRlZDElMCMGA1UECxMcUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0
245
- eTEuMCwGA1UEAxMlUXVvVmFkaXMgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wMTAz
246
- MTkxODMzMzNaFw0yMTAzMTcxODMzMzNaMH8xCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRp
247
- cyBMaW1pdGVkMSUwIwYDVQQLExxSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MS4wLAYDVQQD
248
- EyVRdW9WYWRpcyBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIIBIjANBgkqhkiG9w0BAQEF
249
- AAOCAQ8AMIIBCgKCAQEAv2G1lVO6V/z68mcLOhrfEYBklbTRvM16z/Ypli4kVEAkOPcahdxYTMuk
250
- J0KX0J+DisPkBgNbAKVRHnAEdOLB1Dqr1607BxgFjv2DrOpm2RgbaIr1VxqYuvXtdj182d6UajtL
251
- F8HVj71lODqV0D1VNk7feVcxKh7YWWVJWCCYfqtffp/p1k3sg3Spx2zY7ilKhSoGFPlU5tPaZQeL
252
- YzcS19Dsw3sgQUSj7cugF+FxZc4dZjH3dgEZyH0DWLaVSR2mEiboxgx24ONmy+pdpibu5cxfvWen
253
- AScOospUxbF6lR1xHkopigPcakXBpBlebzbNw6Kwt/5cOOJSvPhEQ+aQuwIDAQABo4ICUjCCAk4w
254
- PQYIKwYBBQUHAQEEMTAvMC0GCCsGAQUFBzABhiFodHRwczovL29jc3AucXVvdmFkaXNvZmZzaG9y
255
- ZS5jb20wDwYDVR0TAQH/BAUwAwEB/zCCARoGA1UdIASCAREwggENMIIBCQYJKwYBBAG+WAABMIH7
256
- MIHUBggrBgEFBQcCAjCBxxqBxFJlbGlhbmNlIG9uIHRoZSBRdW9WYWRpcyBSb290IENlcnRpZmlj
257
- YXRlIGJ5IGFueSBwYXJ0eSBhc3N1bWVzIGFjY2VwdGFuY2Ugb2YgdGhlIHRoZW4gYXBwbGljYWJs
258
- ZSBzdGFuZGFyZCB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB1c2UsIGNlcnRpZmljYXRpb24gcHJh
259
- Y3RpY2VzLCBhbmQgdGhlIFF1b1ZhZGlzIENlcnRpZmljYXRlIFBvbGljeS4wIgYIKwYBBQUHAgEW
260
- Fmh0dHA6Ly93d3cucXVvdmFkaXMuYm0wHQYDVR0OBBYEFItLbe3TKbkGGew5Oanwl4Rqy+/fMIGu
261
- BgNVHSMEgaYwgaOAFItLbe3TKbkGGew5Oanwl4Rqy+/foYGEpIGBMH8xCzAJBgNVBAYTAkJNMRkw
262
- FwYDVQQKExBRdW9WYWRpcyBMaW1pdGVkMSUwIwYDVQQLExxSb290IENlcnRpZmljYXRpb24gQXV0
263
- aG9yaXR5MS4wLAYDVQQDEyVRdW9WYWRpcyBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5ggQ6
264
- tlCLMA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQUFAAOCAQEAitQUtf70mpKnGdSkfnIYj9lo
265
- fFIk3WdvOXrEql494liwTXCYhGHoG+NpGA7O+0dQoE7/8CQfvbLO9Sf87C9TqnN7Az10buYWnuul
266
- LsS/VidQK2K6vkscPFVcQR0kvoIgR13VRH56FmjffU1RcHhXHTMe/QKZnAzNCgVPx7uOpHX6Sm2x
267
- gI4JVrmcGmD+XcHXetwReNDWXcG31a0ymQM6isxUJTkxgXsTIlG6Rmyhu576BGxJJnSP0nPrzDCi
268
- 5upZIof4l/UO/erMkqQWxFIY6iHOsfHmhIHluqmGKPJDWl0Snawe2ajlCmqnf6CHKc/yiU3U7MXi
269
- 5nrQNiOKSnQ2+Q==
270
- -----END CERTIFICATE-----
271
-
272
  QuoVadis Root CA 2
273
  ==================
274
  -----BEGIN CERTIFICATE-----
@@ -356,26 +243,6 @@ s58+OmJYxUmtYg5xpTKqL8aJdkNAExNnPaJUJRDL8Try2frbSVa7pv6nQTXD4IhhyYjH3zYQIphZ
356
  FL39vmwLAw==
357
  -----END CERTIFICATE-----
358
 
359
- Sonera Class 2 Root CA
360
- ======================
361
- -----BEGIN CERTIFICATE-----
362
- MIIDIDCCAgigAwIBAgIBHTANBgkqhkiG9w0BAQUFADA5MQswCQYDVQQGEwJGSTEPMA0GA1UEChMG
363
- U29uZXJhMRkwFwYDVQQDExBTb25lcmEgQ2xhc3MyIENBMB4XDTAxMDQwNjA3Mjk0MFoXDTIxMDQw
364
- NjA3Mjk0MFowOTELMAkGA1UEBhMCRkkxDzANBgNVBAoTBlNvbmVyYTEZMBcGA1UEAxMQU29uZXJh
365
- IENsYXNzMiBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJAXSjWdyvANlsdE+hY3
366
- /Ei9vX+ALTU74W+oZ6m/AxxNjG8yR9VBaKQTBME1DJqEQ/xcHf+Js+gXGM2RX/uJ4+q/Tl18GybT
367
- dXnt5oTjV+WtKcT0OijnpXuENmmz/V52vaMtmdOQTiMofRhj8VQ7Jp12W5dCsv+u8E7s3TmVToMG
368
- f+dJQMjFAbJUWmYdPfz56TwKnoG4cPABi+QjVHzIrviQHgCWctRUz2EjvOr7nQKV0ba5cTppCD8P
369
- tOFCx4j1P5iop7oc4HFx71hXgVB6XGt0Rg6DA5jDjqhu8nYybieDwnPz3BjotJPqdURrBGAgcVeH
370
- nfO+oJAjPYok4doh28MCAwEAAaMzMDEwDwYDVR0TAQH/BAUwAwEB/zARBgNVHQ4ECgQISqCqWITT
371
- XjwwCwYDVR0PBAQDAgEGMA0GCSqGSIb3DQEBBQUAA4IBAQBazof5FnIVV0sd2ZvnoiYw7JNn39Yt
372
- 0jSv9zilzqsWuasvfDXLrNAPtEwr/IDva4yRXzZ299uzGxnq9LIR/WFxRL8oszodv7ND6J+/3DEI
373
- cbCdjdY0RzKQxmUk96BKfARzjzlvF4xytb1LyHr4e4PDKE6cCepnP7JnBBvDFNr450kkkdAdavph
374
- Oe9r5yF1BgfYErQhIHBCcYHaPJo2vqZbDWpsmh+Re/n570K6Tk6ezAyNlNzZRZxe7EJQY670XcSx
375
- EtzKO6gunRRaBXW37Ndj4ro1tgQIkejanZz2ZrUYrAqmVCY0M9IbwdR/GjqOC6oybtv8TyWf2TLH
376
- llpwrN9M
377
- -----END CERTIFICATE-----
378
-
379
  XRamp Global CA Root
380
  ====================
381
  -----BEGIN CERTIFICATE-----
@@ -448,36 +315,6 @@ KVtHCN2MQWplBqjlIapBtJUhlbl90TSrE9atvNziPTnNvT51cKEYWQPJIrSPnNVeKtelttQKbfi3
448
  QBFGmh95DmK/D5fs4C8fF5Q=
449
  -----END CERTIFICATE-----
450
 
451
- Taiwan GRCA
452
- ===========
453
- -----BEGIN CERTIFICATE-----
454
- MIIFcjCCA1qgAwIBAgIQH51ZWtcvwgZEpYAIaeNe9jANBgkqhkiG9w0BAQUFADA/MQswCQYDVQQG
455
- EwJUVzEwMC4GA1UECgwnR292ZXJubWVudCBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4X
456
- DTAyMTIwNTEzMjMzM1oXDTMyMTIwNTEzMjMzM1owPzELMAkGA1UEBhMCVFcxMDAuBgNVBAoMJ0dv
457
- dmVybm1lbnQgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTCCAiIwDQYJKoZIhvcNAQEBBQAD
458
- ggIPADCCAgoCggIBAJoluOzMonWoe/fOW1mKydGGEghU7Jzy50b2iPN86aXfTEc2pBsBHH8eV4qN
459
- w8XRIePaJD9IK/ufLqGU5ywck9G/GwGHU5nOp/UKIXZ3/6m3xnOUT0b3EEk3+qhZSV1qgQdW8or5
460
- BtD3cCJNtLdBuTK4sfCxw5w/cP1T3YGq2GN49thTbqGsaoQkclSGxtKyyhwOeYHWtXBiCAEuTk8O
461
- 1RGvqa/lmr/czIdtJuTJV6L7lvnM4T9TjGxMfptTCAtsF/tnyMKtsc2AtJfcdgEWFelq16TheEfO
462
- htX7MfP6Mb40qij7cEwdScevLJ1tZqa2jWR+tSBqnTuBto9AAGdLiYa4zGX+FVPpBMHWXx1E1wov
463
- J5pGfaENda1UhhXcSTvxls4Pm6Dso3pdvtUqdULle96ltqqvKKyskKw4t9VoNSZ63Pc78/1Fm9G7
464
- Q3hub/FCVGqY8A2tl+lSXunVanLeavcbYBT0peS2cWeqH+riTcFCQP5nRhc4L0c/cZyu5SHKYS1t
465
- B6iEfC3uUSXxY5Ce/eFXiGvviiNtsea9P63RPZYLhY3Naye7twWb7LuRqQoHEgKXTiCQ8P8NHuJB
466
- O9NAOueNXdpm5AKwB1KYXA6OM5zCppX7VRluTI6uSw+9wThNXo+EHWbNxWCWtFJaBYmOlXqYwZE8
467
- lSOyDvR5tMl8wUohAgMBAAGjajBoMB0GA1UdDgQWBBTMzO/MKWCkO7GStjz6MmKPrCUVOzAMBgNV
468
- HRMEBTADAQH/MDkGBGcqBwAEMTAvMC0CAQAwCQYFKw4DAhoFADAHBgVnKgMAAAQUA5vwIhP/lSg2
469
- 09yewDL7MTqKUWUwDQYJKoZIhvcNAQEFBQADggIBAECASvomyc5eMN1PhnR2WPWus4MzeKR6dBcZ
470
- TulStbngCnRiqmjKeKBMmo4sIy7VahIkv9Ro04rQ2JyftB8M3jh+Vzj8jeJPXgyfqzvS/3WXy6Tj
471
- Zwj/5cAWtUgBfen5Cv8b5Wppv3ghqMKnI6mGq3ZW6A4M9hPdKmaKZEk9GhiHkASfQlK3T8v+R0F2
472
- Ne//AHY2RTKbxkaFXeIksB7jSJaYV0eUVXoPQbFEJPPB/hprv4j9wabak2BegUqZIJxIZhm1AHlU
473
- D7gsL0u8qV1bYH+Mh6XgUmMqvtg7hUAV/h62ZT/FS9p+tXo1KaMuephgIqP0fSdOLeq0dDzpD6Qz
474
- DxARvBMB1uUO07+1EqLhRSPAzAhuYbeJq4PjJB7mXQfnHyA+z2fI56wwbSdLaG5LKlwCCDTb+Hbk
475
- Z6MmnD+iMsJKxYEYMRBWqoTvLQr/uB930r+lWKBi5NdLkXWNiYCYfm3LU05er/ayl4WXudpVBrkk
476
- 7tfGOB5jGxI7leFYrPLfhNVfmS8NVVvmONsuP3LpSIXLuykTjx44VbnzssQwmSNOXfJIoRIM3BKQ
477
- CZBUkQM8R+XVyWXgt0t97EfTsws+rZ7QdAAO671RrcDeLMDDav7v3Aun+kbfYNucpllQdSNpc5Oy
478
- +fwC00fmcc4QAu4njIT/rEUNE1yDMuAlpYYsfPQS
479
- -----END CERTIFICATE-----
480
-
481
  DigiCert Assured ID Root CA
482
  ===========================
483
  -----BEGIN CERTIFICATE-----
@@ -544,26 +381,6 @@ mNEVX58Svnw2Yzi9RKR/5CYrCsSXaQ3pjOLAEFe4yHYSkVXySGnYvCoCWw9E1CAx2/S6cCZdkGCe
544
  vEsXCS+0yx5DaMkHJ8HSXPfqIbloEpw8nL+e/IBcm2PN7EeqJSdnoDfzAIJ9VNep+OkuE6N36B9K
545
  -----END CERTIFICATE-----
546
 
547
- DST Root CA X3
548
- ==============
549
- -----BEGIN CERTIFICATE-----
550
- MIIDSjCCAjKgAwIBAgIQRK+wgNajJ7qJMDmGLvhAazANBgkqhkiG9w0BAQUFADA/MSQwIgYDVQQK
551
- ExtEaWdpdGFsIFNpZ25hdHVyZSBUcnVzdCBDby4xFzAVBgNVBAMTDkRTVCBSb290IENBIFgzMB4X
552
- DTAwMDkzMDIxMTIxOVoXDTIxMDkzMDE0MDExNVowPzEkMCIGA1UEChMbRGlnaXRhbCBTaWduYXR1
553
- cmUgVHJ1c3QgQ28uMRcwFQYDVQQDEw5EU1QgUm9vdCBDQSBYMzCCASIwDQYJKoZIhvcNAQEBBQAD
554
- ggEPADCCAQoCggEBAN+v6ZdQCINXtMxiZfaQguzH0yxrMMpb7NnDfcdAwRgUi+DoM3ZJKuM/IUmT
555
- rE4Orz5Iy2Xu/NMhD2XSKtkyj4zl93ewEnu1lcCJo6m67XMuegwGMoOifooUMM0RoOEqOLl5CjH9
556
- UL2AZd+3UWODyOKIYepLYYHsUmu5ouJLGiifSKOeDNoJjj4XLh7dIN9bxiqKqy69cK3FCxolkHRy
557
- xXtqqzTWMIn/5WgTe1QLyNau7Fqckh49ZLOMxt+/yUFw7BZy1SbsOFU5Q9D8/RhcQPGX69Wam40d
558
- utolucbY38EVAjqr2m7xPi71XAicPNaDaeQQmxkqtilX4+U9m5/wAl0CAwEAAaNCMEAwDwYDVR0T
559
- AQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFMSnsaR7LHH62+FLkHX/xBVghYkQ
560
- MA0GCSqGSIb3DQEBBQUAA4IBAQCjGiybFwBcqR7uKGY3Or+Dxz9LwwmglSBd49lZRNI+DT69ikug
561
- dB/OEIKcdBodfpga3csTS7MgROSR6cz8faXbauX+5v3gTt23ADq1cEmv8uXrAvHRAosZy5Q6XkjE
562
- GB5YGV8eAlrwDPGxrancWYaLbumR9YbK+rlmM6pZW87ipxZzR8srzJmwN0jP41ZL9c8PDHIyh8bw
563
- RLtTcm1D9SZImlJnt1ir/md2cXjbDaJWFBM5JDGFoqgCWjBH4d1QB7wCCZAA62RjYJsWvIjJEubS
564
- fZGL+T0yjWW06XyxV3bqxbYoOb8VZRzI9neWagqNdwvYkQsEjgfbKbYK7p2CNTUQ
565
- -----END CERTIFICATE-----
566
-
567
  SwissSign Gold CA - G2
568
  ======================
569
  -----BEGIN CERTIFICATE-----
@@ -626,78 +443,6 @@ DIm6uNO5wJOKMPqN5ZprFQFOZ6raYlY+hAhm0sQ2fac+EPyI4NSA5QC9qvNOBqN6avlicuMJT+ub
626
  DgEj8Z+7fNzcbBGXJbLytGMU0gYqZ4yD9c7qB9iaah7s5Aq7KkzrCWA5zspi2C5u
627
  -----END CERTIFICATE-----
628
 
629
- GeoTrust Primary Certification Authority
630
- ========================================
631
- -----BEGIN CERTIFICATE-----
632
- MIIDfDCCAmSgAwIBAgIQGKy1av1pthU6Y2yv2vrEoTANBgkqhkiG9w0BAQUFADBYMQswCQYDVQQG
633
- EwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5jLjExMC8GA1UEAxMoR2VvVHJ1c3QgUHJpbWFyeSBD
634
- ZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wNjExMjcwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMFgx
635
- CzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMTEwLwYDVQQDEyhHZW9UcnVzdCBQ
636
- cmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB
637
- CgKCAQEAvrgVe//UfH1nrYNke8hCUy3f9oQIIGHWAVlqnEQRr+92/ZV+zmEwu3qDXwK9AWbK7hWN
638
- b6EwnL2hhZ6UOvNWiAAxz9juapYC2e0DjPt1befquFUWBRaa9OBesYjAZIVcFU2Ix7e64HXprQU9
639
- nceJSOC7KMgD4TCTZF5SwFlwIjVXiIrxlQqD17wxcwE07e9GceBrAqg1cmuXm2bgyxx5X9gaBGge
640
- RwLmnWDiNpcB3841kt++Z8dtd1k7j53WkBWUvEI0EME5+bEnPn7WinXFsq+W06Lem+SYvn3h6YGt
641
- tm/81w7a4DSwDRp35+MImO9Y+pyEtzavwt+s0vQQBnBxNQIDAQABo0IwQDAPBgNVHRMBAf8EBTAD
642
- AQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQULNVQQZcVi/CPNmFbSvtr2ZnJM5IwDQYJKoZI
643
- hvcNAQEFBQADggEBAFpwfyzdtzRP9YZRqSa+S7iq8XEN3GHHoOo0Hnp3DwQ16CePbJC/kRYkRj5K
644
- Ts4rFtULUh38H2eiAkUxT87z+gOneZ1TatnaYzr4gNfTmeGl4b7UVXGYNTq+k+qurUKykG/g/CFN
645
- NWMziUnWm07Kx+dOCQD32sfvmWKZd7aVIl6KoKv0uHiYyjgZmclynnjNS6yvGaBzEi38wkG6gZHa
646
- Floxt/m0cYASSJlyc1pZU8FjUjPtp8nSOQJw+uCxQmYpqptR7TBUIhRf2asdweSU8Pj1K/fqynhG
647
- 1riR/aYNKxoUAT6A8EKglQdebc3MS6RFjasS6LPeWuWgfOgPIh1a6Vk=
648
- -----END CERTIFICATE-----
649
-
650
- thawte Primary Root CA
651
- ======================
652
- -----BEGIN CERTIFICATE-----
653
- MIIEIDCCAwigAwIBAgIQNE7VVyDV7exJ9C/ON9srbTANBgkqhkiG9w0BAQUFADCBqTELMAkGA1UE
654
- BhMCVVMxFTATBgNVBAoTDHRoYXd0ZSwgSW5jLjEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2
655
- aWNlcyBEaXZpc2lvbjE4MDYGA1UECxMvKGMpIDIwMDYgdGhhd3RlLCBJbmMuIC0gRm9yIGF1dGhv
656
- cml6ZWQgdXNlIG9ubHkxHzAdBgNVBAMTFnRoYXd0ZSBQcmltYXJ5IFJvb3QgQ0EwHhcNMDYxMTE3
657
- MDAwMDAwWhcNMzYwNzE2MjM1OTU5WjCBqTELMAkGA1UEBhMCVVMxFTATBgNVBAoTDHRoYXd0ZSwg
658
- SW5jLjEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjE4MDYGA1UECxMv
659
- KGMpIDIwMDYgdGhhd3RlLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxHzAdBgNVBAMT
660
- FnRoYXd0ZSBQcmltYXJ5IFJvb3QgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCs
661
- oPD7gFnUnMekz52hWXMJEEUMDSxuaPFsW0hoSVk3/AszGcJ3f8wQLZU0HObrTQmnHNK4yZc2AreJ
662
- 1CRfBsDMRJSUjQJib+ta3RGNKJpchJAQeg29dGYvajig4tVUROsdB58Hum/u6f1OCyn1PoSgAfGc
663
- q/gcfomk6KHYcWUNo1F77rzSImANuVud37r8UVsLr5iy6S7pBOhih94ryNdOwUxkHt3Ph1i6Sk/K
664
- aAcdHJ1KxtUvkcx8cXIcxcBn6zL9yZJclNqFwJu/U30rCfSMnZEfl2pSy94JNqR32HuHUETVPm4p
665
- afs5SSYeCaWAe0At6+gnhcn+Yf1+5nyXHdWdAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYD
666
- VR0PAQH/BAQDAgEGMB0GA1UdDgQWBBR7W0XPr87Lev0xkhpqtvNG61dIUDANBgkqhkiG9w0BAQUF
667
- AAOCAQEAeRHAS7ORtvzw6WfUDW5FvlXok9LOAz/t2iWwHVfLHjp2oEzsUHboZHIMpKnxuIvW1oeE
668
- uzLlQRHAd9mzYJ3rG9XRbkREqaYB7FViHXe4XI5ISXycO1cRrK1zN44veFyQaEfZYGDm/Ac9IiAX
669
- xPcW6cTYcvnIc3zfFi8VqT79aie2oetaupgf1eNNZAqdE8hhuvU5HIe6uL17In/2/qxAeeWsEG89
670
- jxt5dovEN7MhGITlNgDrYyCZuen+MwS7QcjBAvlEYyCegc5C09Y/LHbTY5xZ3Y+m4Q6gLkH3LpVH
671
- z7z9M/P2C2F+fpErgUfCJzDupxBdN49cOSvkBPB7jVaMaA==
672
- -----END CERTIFICATE-----
673
-
674
- VeriSign Class 3 Public Primary Certification Authority - G5
675
- ============================================================
676
- -----BEGIN CERTIFICATE-----
677
- MIIE0zCCA7ugAwIBAgIQGNrRniZ96LtKIVjNzGs7SjANBgkqhkiG9w0BAQUFADCByjELMAkGA1UE
678
- BhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBO
679
- ZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNiBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVk
680
- IHVzZSBvbmx5MUUwQwYDVQQDEzxWZXJpU2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRp
681
- ZmljYXRpb24gQXV0aG9yaXR5IC0gRzUwHhcNMDYxMTA4MDAwMDAwWhcNMzYwNzE2MjM1OTU5WjCB
682
- yjELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZWZXJpU2ln
683
- biBUcnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNiBWZXJpU2lnbiwgSW5jLiAtIEZvciBh
684
- dXRob3JpemVkIHVzZSBvbmx5MUUwQwYDVQQDEzxWZXJpU2lnbiBDbGFzcyAzIFB1YmxpYyBQcmlt
685
- YXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IC0gRzUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAw
686
- ggEKAoIBAQCvJAgIKXo1nmAMqudLO07cfLw8RRy7K+D+KQL5VwijZIUVJ/XxrcgxiV0i6CqqpkKz
687
- j/i5Vbext0uz/o9+B1fs70PbZmIVYc9gDaTY3vjgw2IIPVQT60nKWVSFJuUrjxuf6/WhkcIzSdhD
688
- Y2pSS9KP6HBRTdGJaXvHcPaz3BJ023tdS1bTlr8Vd6Gw9KIl8q8ckmcY5fQGBO+QueQA5N06tRn/
689
- Arr0PO7gi+s3i+z016zy9vA9r911kTMZHRxAy3QkGSGT2RT+rCpSx4/VBEnkjWNHiDxpg8v+R70r
690
- fk/Fla4OndTRQ8Bnc+MUCH7lP59zuDMKz10/NIeWiu5T6CUVAgMBAAGjgbIwga8wDwYDVR0TAQH/
691
- BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwbQYIKwYBBQUHAQwEYTBfoV2gWzBZMFcwVRYJaW1hZ2Uv
692
- Z2lmMCEwHzAHBgUrDgMCGgQUj+XTGoasjY5rw8+AatRIGCx7GS4wJRYjaHR0cDovL2xvZ28udmVy
693
- aXNpZ24uY29tL3ZzbG9nby5naWYwHQYDVR0OBBYEFH/TZafC3ey78DAJ80M5+gKvMzEzMA0GCSqG
694
- SIb3DQEBBQUAA4IBAQCTJEowX2LP2BqYLz3q3JktvXf2pXkiOOzEp6B4Eq1iDkVwZMXnl2YtmAl+
695
- X6/WzChl8gGqCBpH3vn5fJJaCGkgDdk+bW48DW7Y5gaRQBi5+MHt39tBquCWIMnNZBU4gcmU7qKE
696
- KQsTb47bDN0lAtukixlE0kF6BWlKWE9gyn6CagsCqiUXObXbf+eEZSqVir2G3l6BFoMtEMze/aiC
697
- Km0oHw0LxOXnGiYZ4fQRbxC1lfznQgUy286dUV4otp6F01vvpX1FQHKOtw5rDgb7MzVIcbidJ4vE
698
- ZV8NhnacRHr2lVz2XTIIM6RUthg/aFzyQkqFOFSDX9HoLPKsEdao7WNq
699
- -----END CERTIFICATE-----
700
-
701
  SecureTrust CA
702
  ==============
703
  -----BEGIN CERTIFICATE-----
@@ -806,29 +551,6 @@ FAkK+qDmfQjGGoe9GKhzvSbKYAydzpmfz1wPMOG+FDHqAjAU9JM8SaczepBGR7NjfRObTrdvGDeA
806
  U/7dIOA1mjbRxwG55tzd8/8dLDoWV9mSOdY=
807
  -----END CERTIFICATE-----
808
 
809
- OISTE WISeKey Global Root GA CA
810
- ===============================
811
- -----BEGIN CERTIFICATE-----
812
- MIID8TCCAtmgAwIBAgIQQT1yx/RrH4FDffHSKFTfmjANBgkqhkiG9w0BAQUFADCBijELMAkGA1UE
813
- BhMCQ0gxEDAOBgNVBAoTB1dJU2VLZXkxGzAZBgNVBAsTEkNvcHlyaWdodCAoYykgMjAwNTEiMCAG
814
- A1UECxMZT0lTVEUgRm91bmRhdGlvbiBFbmRvcnNlZDEoMCYGA1UEAxMfT0lTVEUgV0lTZUtleSBH
815
- bG9iYWwgUm9vdCBHQSBDQTAeFw0wNTEyMTExNjAzNDRaFw0zNzEyMTExNjA5NTFaMIGKMQswCQYD
816
- VQQGEwJDSDEQMA4GA1UEChMHV0lTZUtleTEbMBkGA1UECxMSQ29weXJpZ2h0IChjKSAyMDA1MSIw
817
- IAYDVQQLExlPSVNURSBGb3VuZGF0aW9uIEVuZG9yc2VkMSgwJgYDVQQDEx9PSVNURSBXSVNlS2V5
818
- IEdsb2JhbCBSb290IEdBIENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAy0+zAJs9
819
- Nt350UlqaxBJH+zYK7LG+DKBKUOVTJoZIyEVRd7jyBxRVVuuk+g3/ytr6dTqvirdqFEr12bDYVxg
820
- Asj1znJ7O7jyTmUIms2kahnBAbtzptf2w93NvKSLtZlhuAGio9RN1AU9ka34tAhxZK9w8RxrfvbD
821
- d50kc3vkDIzh2TbhmYsFmQvtRTEJysIA2/dyoJaqlYfQjse2YXMNdmaM3Bu0Y6Kff5MTMPGhJ9vZ
822
- /yxViJGg4E8HsChWjBgbl0SOid3gF27nKu+POQoxhILYQBRJLnpB5Kf+42TMwVlxSywhp1t94B3R
823
- LoGbw9ho972WG6xwsRYUC9tguSYBBQIDAQABo1EwTzALBgNVHQ8EBAMCAYYwDwYDVR0TAQH/BAUw
824
- AwEB/zAdBgNVHQ4EFgQUswN+rja8sHnR3JQmthG+IbJphpQwEAYJKwYBBAGCNxUBBAMCAQAwDQYJ
825
- KoZIhvcNAQEFBQADggEBAEuh/wuHbrP5wUOxSPMowB0uyQlB+pQAHKSkq0lPjz0e701vvbyk9vIm
826
- MMkQyh2I+3QZH4VFvbBsUfk2ftv1TDI6QU9bR8/oCy22xBmddMVHxjtqD6wU2zz0c5ypBd8A3HR4
827
- +vg1YFkCExh8vPtNsCBtQ7tgMHpnM1zFmdH4LTlSc/uMqpclXHLZCB6rTjzjgTGfA6b7wP4piFXa
828
- hNVQA7bihKOmNqoROgHhGEvWRGizPflTdISzRpFGlgC3gCy24eMQ4tui5yiPAZZiFj4A4xylNoEY
829
- okxSdsARo27mHbrjWr42U8U+dY+GaSlYU7Wcu2+fXMUY7N0v4ZjJ/L7fCg0=
830
- -----END CERTIFICATE-----
831
-
832
  Certigna
833
  ========
834
  -----BEGIN CERTIFICATE-----
@@ -924,136 +646,6 @@ vBTjD4au8as+x6AJzKNI0eDbZOeStc+vckNwi/nDhDwTqn6Sm1dTk/pwwpEOMfmbZ13pljheX7Nz
924
  TogVZ96edhBiIL5VaZVDADlN9u6wWk5JRFRYX0KD
925
  -----END CERTIFICATE-----
926
 
927
- GeoTrust Primary Certification Authority - G3
928
- =============================================
929
- -----BEGIN CERTIFICATE-----
930
- MIID/jCCAuagAwIBAgIQFaxulBmyeUtB9iepwxgPHzANBgkqhkiG9w0BAQsFADCBmDELMAkGA1UE
931
- BhMCVVMxFjAUBgNVBAoTDUdlb1RydXN0IEluYy4xOTA3BgNVBAsTMChjKSAyMDA4IEdlb1RydXN0
932
- IEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25seTE2MDQGA1UEAxMtR2VvVHJ1c3QgUHJpbWFy
933
- eSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEczMB4XDTA4MDQwMjAwMDAwMFoXDTM3MTIwMTIz
934
- NTk1OVowgZgxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMTkwNwYDVQQLEzAo
935
- YykgMjAwOCBHZW9UcnVzdCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxNjA0BgNVBAMT
936
- LUdlb1RydXN0IFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMzCCASIwDQYJKoZI
937
- hvcNAQEBBQADggEPADCCAQoCggEBANziXmJYHTNXOTIz+uvLh4yn1ErdBojqZI4xmKU4kB6Yzy5j
938
- K/BGvESyiaHAKAxJcCGVn2TAppMSAmUmhsalifD614SgcK9PGpc/BkTVyetyEH3kMSj7HGHmKAdE
939
- c5IiaacDiGydY8hS2pgn5whMcD60yRLBxWeDXTPzAxHsatBT4tG6NmCUgLthY2xbF37fQJQeqw3C
940
- IShwiP/WJmxsYAQlTlV+fe+/lEjetx3dcI0FX4ilm/LC7urRQEFtYjgdVgbFA0dRIBn8exALDmKu
941
- dlW/X3e+PkkBUz2YJQN2JFodtNuJ6nnltrM7P7pMKEF/BqxqjsHQ9gUdfeZChuOl1UcCAwEAAaNC
942
- MEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFMR5yo6hTgMdHNxr
943
- 2zFblD4/MH8tMA0GCSqGSIb3DQEBCwUAA4IBAQAtxRPPVoB7eni9n64smefv2t+UXglpp+duaIy9
944
- cr5HqQ6XErhK8WTTOd8lNNTBzU6B8A8ExCSzNJbGpqow32hhc9f5joWJ7w5elShKKiePEI4ufIbE
945
- Ap7aDHdlDkQNkv39sxY2+hENHYwOB4lqKVb3cvTdFZx3NWZXqxNT2I7BQMXXExZacse3aQHEerGD
946
- AWh9jUGhlBjBJVz88P6DAod8DQ3PLghcSkANPuyBYeYk28rgDi0Hsj5W3I31QYUHSJsMC8tJP33s
947
- t/3LjWeJGqvtux6jAAgIFyqCXDFdRootD4abdNlF+9RAsXqqaC2Gspki4cErx5z481+oghLrGREt
948
- -----END CERTIFICATE-----
949
-
950
- thawte Primary Root CA - G2
951
- ===========================
952
- -----BEGIN CERTIFICATE-----
953
- MIICiDCCAg2gAwIBAgIQNfwmXNmET8k9Jj1Xm67XVjAKBggqhkjOPQQDAzCBhDELMAkGA1UEBhMC
954
- VVMxFTATBgNVBAoTDHRoYXd0ZSwgSW5jLjE4MDYGA1UECxMvKGMpIDIwMDcgdGhhd3RlLCBJbmMu
955
- IC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxJDAiBgNVBAMTG3RoYXd0ZSBQcmltYXJ5IFJvb3Qg
956
- Q0EgLSBHMjAeFw0wNzExMDUwMDAwMDBaFw0zODAxMTgyMzU5NTlaMIGEMQswCQYDVQQGEwJVUzEV
957
- MBMGA1UEChMMdGhhd3RlLCBJbmMuMTgwNgYDVQQLEy8oYykgMjAwNyB0aGF3dGUsIEluYy4gLSBG
958
- b3IgYXV0aG9yaXplZCB1c2Ugb25seTEkMCIGA1UEAxMbdGhhd3RlIFByaW1hcnkgUm9vdCBDQSAt
959
- IEcyMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEotWcgnuVnfFSeIf+iha/BebfowJPDQfGAFG6DAJS
960
- LSKkQjnE/o/qycG+1E3/n3qe4rF8mq2nhglzh9HnmuN6papu+7qzcMBniKI11KOasf2twu8x+qi5
961
- 8/sIxpHR+ymVo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQU
962
- mtgAMADna3+FGO6Lts6KDPgR4bswCgYIKoZIzj0EAwMDaQAwZgIxAN344FdHW6fmCsO99YCKlzUN
963
- G4k8VIZ3KMqh9HneteY4sPBlcIx/AlTCv//YoT7ZzwIxAMSNlPzcU9LcnXgWHxUzI1NS41oxXZ3K
964
- rr0TKUQNJ1uo52icEvdYPy5yAlejj6EULg==
965
- -----END CERTIFICATE-----
966
-
967
- thawte Primary Root CA - G3
968
- ===========================
969
- -----BEGIN CERTIFICATE-----
970
- MIIEKjCCAxKgAwIBAgIQYAGXt0an6rS0mtZLL/eQ+zANBgkqhkiG9w0BAQsFADCBrjELMAkGA1UE
971
- BhMCVVMxFTATBgNVBAoTDHRoYXd0ZSwgSW5jLjEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2
972
- aWNlcyBEaXZpc2lvbjE4MDYGA1UECxMvKGMpIDIwMDggdGhhd3RlLCBJbmMuIC0gRm9yIGF1dGhv
973
- cml6ZWQgdXNlIG9ubHkxJDAiBgNVBAMTG3RoYXd0ZSBQcmltYXJ5IFJvb3QgQ0EgLSBHMzAeFw0w
974
- ODA0MDIwMDAwMDBaFw0zNzEyMDEyMzU5NTlaMIGuMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMdGhh
975
- d3RlLCBJbmMuMSgwJgYDVQQLEx9DZXJ0aWZpY2F0aW9uIFNlcnZpY2VzIERpdmlzaW9uMTgwNgYD
976
- VQQLEy8oYykgMjAwOCB0aGF3dGUsIEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25seTEkMCIG
977
- A1UEAxMbdGhhd3RlIFByaW1hcnkgUm9vdCBDQSAtIEczMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A
978
- MIIBCgKCAQEAsr8nLPvb2FvdeHsbnndmgcs+vHyu86YnmjSjaDFxODNi5PNxZnmxqWWjpYvVj2At
979
- P0LMqmsywCPLLEHd5N/8YZzic7IilRFDGF/Eth9XbAoFWCLINkw6fKXRz4aviKdEAhN0cXMKQlkC
980
- +BsUa0Lfb1+6a4KinVvnSr0eAXLbS3ToO39/fR8EtCab4LRarEc9VbjXsCZSKAExQGbY2SS99irY
981
- 7CFJXJv2eul/VTV+lmuNk5Mny5K76qxAwJ/C+IDPXfRa3M50hqY+bAtTyr2SzhkGcuYMXDhpxwTW
982
- vGzOW/b3aJzcJRVIiKHpqfiYnODz1TEoYRFsZ5aNOZnLwkUkOQIDAQABo0IwQDAPBgNVHRMBAf8E
983
- BTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUrWyqlGCc7eT/+j4KdCtjA/e2Wb8wDQYJ
984
- KoZIhvcNAQELBQADggEBABpA2JVlrAmSicY59BDlqQ5mU1143vokkbvnRFHfxhY0Cu9qRFHqKweK
985
- A3rD6z8KLFIWoCtDuSWQP3CpMyVtRRooOyfPqsMpQhvfO0zAMzRbQYi/aytlryjvsvXDqmbOe1bu
986
- t8jLZ8HJnBoYuMTDSQPxYA5QzUbF83d597YV4Djbxy8ooAw/dyZ02SUS2jHaGh7cKUGRIjxpp7sC
987
- 8rZcJwOJ9Abqm+RyguOhCcHpABnTPtRwa7pxpqpYrvS76Wy274fMm7v/OeZWYdMKp8RcTGB7BXcm
988
- er/YB1IsYvdwY9k5vG8cwnncdimvzsUsZAReiDZuMdRAGmI0Nj81Aa6sY6A=
989
- -----END CERTIFICATE-----
990
-
991
- GeoTrust Primary Certification Authority - G2
992
- =============================================
993
- -----BEGIN CERTIFICATE-----
994
- MIICrjCCAjWgAwIBAgIQPLL0SAoA4v7rJDteYD7DazAKBggqhkjOPQQDAzCBmDELMAkGA1UEBhMC
995
- VVMxFjAUBgNVBAoTDUdlb1RydXN0IEluYy4xOTA3BgNVBAsTMChjKSAyMDA3IEdlb1RydXN0IElu
996
- Yy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25seTE2MDQGA1UEAxMtR2VvVHJ1c3QgUHJpbWFyeSBD
997
- ZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcyMB4XDTA3MTEwNTAwMDAwMFoXDTM4MDExODIzNTk1
998
- OVowgZgxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMTkwNwYDVQQLEzAoYykg
999
- MjAwNyBHZW9UcnVzdCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxNjA0BgNVBAMTLUdl
1000
- b1RydXN0IFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMjB2MBAGByqGSM49AgEG
1001
- BSuBBAAiA2IABBWx6P0DFUPlrOuHNxFi79KDNlJ9RVcLSo17VDs6bl8VAsBQps8lL33KSLjHUGMc
1002
- KiEIfJo22Av+0SbFWDEwKCXzXV2juLaltJLtbCyf691DiaI8S0iRHVDsJt/WYC69IaNCMEAwDwYD
1003
- VR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFBVfNVdRVfslsq0DafwBo/q+
1004
- EVXVMAoGCCqGSM49BAMDA2cAMGQCMGSWWaboCd6LuvpaiIjwH5HTRqjySkwCY/tsXzjbLkGTqQ7m
1005
- ndwxHLKgpxgceeHHNgIwOlavmnRs9vuD4DPTCF+hnMJbn0bWtsuRBmOiBuczrD6ogRLQy7rQkgu2
1006
- npaqBA+K
1007
- -----END CERTIFICATE-----
1008
-
1009
- VeriSign Universal Root Certification Authority
1010
- ===============================================
1011
- -----BEGIN CERTIFICATE-----
1012
- MIIEuTCCA6GgAwIBAgIQQBrEZCGzEyEDDrvkEhrFHTANBgkqhkiG9w0BAQsFADCBvTELMAkGA1UE
1013
- BhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBO
1014
- ZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwOCBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVk
1015
- IHVzZSBvbmx5MTgwNgYDVQQDEy9WZXJpU2lnbiBVbml2ZXJzYWwgUm9vdCBDZXJ0aWZpY2F0aW9u
1016
- IEF1dGhvcml0eTAeFw0wODA0MDIwMDAwMDBaFw0zNzEyMDEyMzU5NTlaMIG9MQswCQYDVQQGEwJV
1017
- UzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRydXN0IE5ldHdv
1018
- cmsxOjA4BgNVBAsTMShjKSAyMDA4IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNl
1019
- IG9ubHkxODA2BgNVBAMTL1ZlcmlTaWduIFVuaXZlcnNhbCBSb290IENlcnRpZmljYXRpb24gQXV0
1020
- aG9yaXR5MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAx2E3XrEBNNti1xWb/1hajCMj
1021
- 1mCOkdeQmIN65lgZOIzF9uVkhbSicfvtvbnazU0AtMgtc6XHaXGVHzk8skQHnOgO+k1KxCHfKWGP
1022
- MiJhgsWHH26MfF8WIFFE0XBPV+rjHOPMee5Y2A7Cs0WTwCznmhcrewA3ekEzeOEz4vMQGn+HLL72
1023
- 9fdC4uW/h2KJXwBL38Xd5HVEMkE6HnFuacsLdUYI0crSK5XQz/u5QGtkjFdN/BMReYTtXlT2NJ8I
1024
- AfMQJQYXStrxHXpma5hgZqTZ79IugvHw7wnqRMkVauIDbjPTrJ9VAMf2CGqUuV/c4DPxhGD5WycR
1025
- tPwW8rtWaoAljQIDAQABo4GyMIGvMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMG0G
1026
- CCsGAQUFBwEMBGEwX6FdoFswWTBXMFUWCWltYWdlL2dpZjAhMB8wBwYFKw4DAhoEFI/l0xqGrI2O
1027
- a8PPgGrUSBgsexkuMCUWI2h0dHA6Ly9sb2dvLnZlcmlzaWduLmNvbS92c2xvZ28uZ2lmMB0GA1Ud
1028
- DgQWBBS2d/ppSEefUxLVwuoHMnYH0ZcHGTANBgkqhkiG9w0BAQsFAAOCAQEASvj4sAPmLGd75JR3
1029
- Y8xuTPl9Dg3cyLk1uXBPY/ok+myDjEedO2Pzmvl2MpWRsXe8rJq+seQxIcaBlVZaDrHC1LGmWazx
1030
- Y8u4TB1ZkErvkBYoH1quEPuBUDgMbMzxPcP1Y+Oz4yHJJDnp/RVmRvQbEdBNc6N9Rvk97ahfYtTx
1031
- P/jgdFcrGJ2BtMQo2pSXpXDrrB2+BxHw1dvd5Yzw1TKwg+ZX4o+/vqGqvz0dtdQ46tewXDpPaj+P
1032
- wGZsY6rp2aQW9IHRlRQOfc2VNNnSj3BzgXucfr2YYdhFh5iQxeuGMMY1v/D/w1WIg0vvBZIGcfK4
1033
- mJO37M2CYfE45k+XmCpajQ==
1034
- -----END CERTIFICATE-----
1035
-
1036
- VeriSign Class 3 Public Primary Certification Authority - G4
1037
- ============================================================
1038
- -----BEGIN CERTIFICATE-----
1039
- MIIDhDCCAwqgAwIBAgIQL4D+I4wOIg9IZxIokYesszAKBggqhkjOPQQDAzCByjELMAkGA1UEBhMC
1040
- VVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBOZXR3
1041
- b3JrMTowOAYDVQQLEzEoYykgMjAwNyBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVz
1042
- ZSBvbmx5MUUwQwYDVQQDEzxWZXJpU2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmlj
1043
- YXRpb24gQXV0aG9yaXR5IC0gRzQwHhcNMDcxMTA1MDAwMDAwWhcNMzgwMTE4MjM1OTU5WjCByjEL
1044
- MAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZWZXJpU2lnbiBU
1045
- cnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNyBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRo
1046
- b3JpemVkIHVzZSBvbmx5MUUwQwYDVQQDEzxWZXJpU2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5
1047
- IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IC0gRzQwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAASnVnp8
1048
- Utpkmw4tXNherJI9/gHmGUo9FANL+mAnINmDiWn6VMaaGF5VKmTeBvaNSjutEDxlPZCIBIngMGGz
1049
- rl0Bp3vefLK+ymVhAIau2o970ImtTR1ZmkGxvEeA3J5iw/mjgbIwga8wDwYDVR0TAQH/BAUwAwEB
1050
- /zAOBgNVHQ8BAf8EBAMCAQYwbQYIKwYBBQUHAQwEYTBfoV2gWzBZMFcwVRYJaW1hZ2UvZ2lmMCEw
1051
- HzAHBgUrDgMCGgQUj+XTGoasjY5rw8+AatRIGCx7GS4wJRYjaHR0cDovL2xvZ28udmVyaXNpZ24u
1052
- Y29tL3ZzbG9nby5naWYwHQYDVR0OBBYEFLMWkf3upm7ktS5Jj4d4gYDs5bG1MAoGCCqGSM49BAMD
1053
- A2gAMGUCMGYhDBgmYFo4e1ZC4Kf8NoRRkSAsdk1DPcQdhCPQrNZ8NQbOzWm9kA3bbEhCHQ6qQgIx
1054
- AJw9SDkjOVgaFRJZap7v1VmyHVIsmXHNxynfGyphe3HR3vPA5Q06Sqotp9iGKt0uEA==
1055
- -----END CERTIFICATE-----
1056
-
1057
  NetLock Arany (Class Gold) Főtanúsítvány
1058
  ========================================
1059
  -----BEGIN CERTIFICATE-----
@@ -1229,82 +821,6 @@ Q0iy2+tzJOeRf1SktoA+naM8THLCV8Sg1Mw4J87VBp6iSNnpn86CcDaTmjvfliHjWbcM2pE38P1Z
1229
  WrOZyGlsQyYBNWNgVYkDOnXYukrZVP/u3oDYLdE41V4tC5h9Pmzb/CaIxw==
1230
  -----END CERTIFICATE-----
1231
 
1232
- Chambers of Commerce Root - 2008
1233
- ================================
1234
- -----BEGIN CERTIFICATE-----
1235
- MIIHTzCCBTegAwIBAgIJAKPaQn6ksa7aMA0GCSqGSIb3DQEBBQUAMIGuMQswCQYDVQQGEwJFVTFD
1236
- MEEGA1UEBxM6TWFkcmlkIChzZWUgY3VycmVudCBhZGRyZXNzIGF0IHd3dy5jYW1lcmZpcm1hLmNv
1237
- bS9hZGRyZXNzKTESMBAGA1UEBRMJQTgyNzQzMjg3MRswGQYDVQQKExJBQyBDYW1lcmZpcm1hIFMu
1238
- QS4xKTAnBgNVBAMTIENoYW1iZXJzIG9mIENvbW1lcmNlIFJvb3QgLSAyMDA4MB4XDTA4MDgwMTEy
1239
- Mjk1MFoXDTM4MDczMTEyMjk1MFowga4xCzAJBgNVBAYTAkVVMUMwQQYDVQQHEzpNYWRyaWQgKHNl
1240
- ZSBjdXJyZW50IGFkZHJlc3MgYXQgd3d3LmNhbWVyZmlybWEuY29tL2FkZHJlc3MpMRIwEAYDVQQF
1241
- EwlBODI3NDMyODcxGzAZBgNVBAoTEkFDIENhbWVyZmlybWEgUy5BLjEpMCcGA1UEAxMgQ2hhbWJl
1242
- cnMgb2YgQ29tbWVyY2UgUm9vdCAtIDIwMDgwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoIC
1243
- AQCvAMtwNyuAWko6bHiUfaN/Gh/2NdW928sNRHI+JrKQUrpjOyhYb6WzbZSm891kDFX29ufyIiKA
1244
- XuFixrYp4YFs8r/lfTJqVKAyGVn+H4vXPWCGhSRv4xGzdz4gljUha7MI2XAuZPeEklPWDrCQiorj
1245
- h40G072QDuKZoRuGDtqaCrsLYVAGUvGef3bsyw/QHg3PmTA9HMRFEFis1tPo1+XqxQEHd9ZR5gN/
1246
- ikilTWh1uem8nk4ZcfUyS5xtYBkL+8ydddy/Js2Pk3g5eXNeJQ7KXOt3EgfLZEFHcpOrUMPrCXZk
1247
- NNI5t3YRCQ12RcSprj1qr7V9ZS+UWBDsXHyvfuK2GNnQm05aSd+pZgvMPMZ4fKecHePOjlO+Bd5g
1248
- D2vlGts/4+EhySnB8esHnFIbAURRPHsl18TlUlRdJQfKFiC4reRB7noI/plvg6aRArBsNlVq5331
1249
- lubKgdaX8ZSD6e2wsWsSaR6s+12pxZjptFtYer49okQ6Y1nUCyXeG0+95QGezdIp1Z8XGQpvvwyQ
1250
- 0wlf2eOKNcx5Wk0ZN5K3xMGtr/R5JJqyAQuxr1yW84Ay+1w9mPGgP0revq+ULtlVmhduYJ1jbLhj
1251
- ya6BXBg14JC7vjxPNyK5fuvPnnchpj04gftI2jE9K+OJ9dC1vX7gUMQSibMjmhAxhduub+84Mxh2
1252
- EQIDAQABo4IBbDCCAWgwEgYDVR0TAQH/BAgwBgEB/wIBDDAdBgNVHQ4EFgQU+SSsD7K1+HnA+mCI
1253
- G8TZTQKeFxkwgeMGA1UdIwSB2zCB2IAU+SSsD7K1+HnA+mCIG8TZTQKeFxmhgbSkgbEwga4xCzAJ
1254
- BgNVBAYTAkVVMUMwQQYDVQQHEzpNYWRyaWQgKHNlZSBjdXJyZW50IGFkZHJlc3MgYXQgd3d3LmNh
1255
- bWVyZmlybWEuY29tL2FkZHJlc3MpMRIwEAYDVQQFEwlBODI3NDMyODcxGzAZBgNVBAoTEkFDIENh
1256
- bWVyZmlybWEgUy5BLjEpMCcGA1UEAxMgQ2hhbWJlcnMgb2YgQ29tbWVyY2UgUm9vdCAtIDIwMDiC
1257
- CQCj2kJ+pLGu2jAOBgNVHQ8BAf8EBAMCAQYwPQYDVR0gBDYwNDAyBgRVHSAAMCowKAYIKwYBBQUH
1258
- AgEWHGh0dHA6Ly9wb2xpY3kuY2FtZXJmaXJtYS5jb20wDQYJKoZIhvcNAQEFBQADggIBAJASryI1
1259
- wqM58C7e6bXpeHxIvj99RZJe6dqxGfwWPJ+0W2aeaufDuV2I6A+tzyMP3iU6XsxPpcG1Lawk0lgH
1260
- 3qLPaYRgM+gQDROpI9CF5Y57pp49chNyM/WqfcZjHwj0/gF/JM8rLFQJ3uIrbZLGOU8W6jx+ekbU
1261
- RWpGqOt1glanq6B8aBMz9p0w8G8nOSQjKpD9kCk18pPfNKXG9/jvjA9iSnyu0/VU+I22mlaHFoI6
1262
- M6taIgj3grrqLuBHmrS1RaMFO9ncLkVAO+rcf+g769HsJtg1pDDFOqxXnrN2pSB7+R5KBWIBpih1
1263
- YJeSDW4+TTdDDZIVnBgizVGZoCkaPF+KMjNbMMeJL0eYD6MDxvbxrN8y8NmBGuScvfaAFPDRLLmF
1264
- 9dijscilIeUcE5fuDr3fKanvNFNb0+RqE4QGtjICxFKuItLcsiFCGtpA8CnJ7AoMXOLQusxI0zcK
1265
- zBIKinmwPQN/aUv0NCB9szTqjktk9T79syNnFQ0EuPAtwQlRPLJsFfClI9eDdOTlLsn+mCdCxqvG
1266
- nrDQWzilm1DefhiYtUU79nm06PcaewaD+9CL2rvHvRirCG88gGtAPxkZumWK5r7VXNM21+9AUiRg
1267
- OGcEMeyP84LG3rlV8zsxkVrctQgVrXYlCg17LofiDKYGvCYQbTed7N14jHyAxfDZd0jQ
1268
- -----END CERTIFICATE-----
1269
-
1270
- Global Chambersign Root - 2008
1271
- ==============================
1272
- -----BEGIN CERTIFICATE-----
1273
- MIIHSTCCBTGgAwIBAgIJAMnN0+nVfSPOMA0GCSqGSIb3DQEBBQUAMIGsMQswCQYDVQQGEwJFVTFD
1274
- MEEGA1UEBxM6TWFkcmlkIChzZWUgY3VycmVudCBhZGRyZXNzIGF0IHd3dy5jYW1lcmZpcm1hLmNv
1275
- bS9hZGRyZXNzKTESMBAGA1UEBRMJQTgyNzQzMjg3MRswGQYDVQQKExJBQyBDYW1lcmZpcm1hIFMu
1276
- QS4xJzAlBgNVBAMTHkdsb2JhbCBDaGFtYmVyc2lnbiBSb290IC0gMjAwODAeFw0wODA4MDExMjMx
1277
- NDBaFw0zODA3MzExMjMxNDBaMIGsMQswCQYDVQQGEwJFVTFDMEEGA1UEBxM6TWFkcmlkIChzZWUg
1278
- Y3VycmVudCBhZGRyZXNzIGF0IHd3dy5jYW1lcmZpcm1hLmNvbS9hZGRyZXNzKTESMBAGA1UEBRMJ
1279
- QTgyNzQzMjg3MRswGQYDVQQKExJBQyBDYW1lcmZpcm1hIFMuQS4xJzAlBgNVBAMTHkdsb2JhbCBD
1280
- aGFtYmVyc2lnbiBSb290IC0gMjAwODCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMDf
1281
- VtPkOpt2RbQT2//BthmLN0EYlVJH6xedKYiONWwGMi5HYvNJBL99RDaxccy9Wglz1dmFRP+RVyXf
1282
- XjaOcNFccUMd2drvXNL7G706tcuto8xEpw2uIRU/uXpbknXYpBI4iRmKt4DS4jJvVpyR1ogQC7N0
1283
- ZJJ0YPP2zxhPYLIj0Mc7zmFLmY/CDNBAspjcDahOo7kKrmCgrUVSY7pmvWjg+b4aqIG7HkF4ddPB
1284
- /gBVsIdU6CeQNR1MM62X/JcumIS/LMmjv9GYERTtY/jKmIhYF5ntRQOXfjyGHoiMvvKRhI9lNNgA
1285
- TH23MRdaKXoKGCQwoze1eqkBfSbW+Q6OWfH9GzO1KTsXO0G2Id3UwD2ln58fQ1DJu7xsepeY7s2M
1286
- H/ucUa6LcL0nn3HAa6x9kGbo1106DbDVwo3VyJ2dwW3Q0L9R5OP4wzg2rtandeavhENdk5IMagfe
1287
- Ox2YItaswTXbo6Al/3K1dh3ebeksZixShNBFks4c5eUzHdwHU1SjqoI7mjcv3N2gZOnm3b2u/GSF
1288
- HTynyQbehP9r6GsaPMWis0L7iwk+XwhSx2LE1AVxv8Rk5Pihg+g+EpuoHtQ2TS9x9o0o9oOpE9Jh
1289
- wZG7SMA0j0GMS0zbaRL/UJScIINZc+18ofLx/d33SdNDWKBWY8o9PeU1VlnpDsogzCtLkykPAgMB
1290
- AAGjggFqMIIBZjASBgNVHRMBAf8ECDAGAQH/AgEMMB0GA1UdDgQWBBS5CcqcHtvTbDprru1U8VuT
1291
- BjUuXjCB4QYDVR0jBIHZMIHWgBS5CcqcHtvTbDprru1U8VuTBjUuXqGBsqSBrzCBrDELMAkGA1UE
1292
- BhMCRVUxQzBBBgNVBAcTOk1hZHJpZCAoc2VlIGN1cnJlbnQgYWRkcmVzcyBhdCB3d3cuY2FtZXJm
1293
- aXJtYS5jb20vYWRkcmVzcykxEjAQBgNVBAUTCUE4Mjc0MzI4NzEbMBkGA1UEChMSQUMgQ2FtZXJm
1294
- aXJtYSBTLkEuMScwJQYDVQQDEx5HbG9iYWwgQ2hhbWJlcnNpZ24gUm9vdCAtIDIwMDiCCQDJzdPp
1295
- 1X0jzjAOBgNVHQ8BAf8EBAMCAQYwPQYDVR0gBDYwNDAyBgRVHSAAMCowKAYIKwYBBQUHAgEWHGh0
1296
- dHA6Ly9wb2xpY3kuY2FtZXJmaXJtYS5jb20wDQYJKoZIhvcNAQEFBQADggIBAICIf3DekijZBZRG
1297
- /5BXqfEv3xoNa/p8DhxJJHkn2EaqbylZUohwEurdPfWbU1Rv4WCiqAm57OtZfMY18dwY6fFn5a+6
1298
- ReAJ3spED8IXDneRRXozX1+WLGiLwUePmJs9wOzL9dWCkoQ10b42OFZyMVtHLaoXpGNR6woBrX/s
1299
- dZ7LoR/xfxKxueRkf2fWIyr0uDldmOghp+G9PUIadJpwr2hsUF1Jz//7Dl3mLEfXgTpZALVza2Mg
1300
- 9jFFCDkO9HB+QHBaP9BrQql0PSgvAm11cpUJjUhjxsYjV5KTXjXBjfkK9yydYhz2rXzdpjEetrHH
1301
- foUm+qRqtdpjMNHvkzeyZi99Bffnt0uYlDXA2TopwZ2yUDMdSqlapskD7+3056huirRXhOukP9Du
1302
- qqqHW2Pok+JrqNS4cnhrG+055F3Lm6qH1U9OAP7Zap88MQ8oAgF9mOinsKJknnn4SPIVqczmyETr
1303
- P3iZ8ntxPjzxmKfFGBI/5rsoM0LpRQp8bfKGeS/Fghl9CYl8slR2iK7ewfPM4W7bMdaTrpmg7yVq
1304
- c5iJWzouE4gev8CSlDQb4ye3ix5vQv/n6TebUB0tovkC7stYWDpxvGjjqsGvHCgfotwjZT+B6q6Z
1305
- 09gwzxMNTxXJhLynSC34MCN32EZLeW32jO06f2ARePTpm67VVMB0gNELQp/B
1306
- -----END CERTIFICATE-----
1307
-
1308
  Go Daddy Root Certificate Authority - G2
1309
  ========================================
1310
  -----BEGIN CERTIFICATE-----
@@ -1606,27 +1122,6 @@ OR/qnuOf0GZvBeyqdn6/axag67XH/JJULysRJyU3eExRarDzzFhdFPFqSBX/wge2sY0PjlxQRrM9
1606
  vwGYT7JZVEc+NHt4bVaTLnPqZih4zR0Uv6CPLy64Lo7yFIrM6bV8+2ydDKXhlg==
1607
  -----END CERTIFICATE-----
1608
 
1609
- Trustis FPS Root CA
1610
- ===================
1611
- -----BEGIN CERTIFICATE-----
1612
- MIIDZzCCAk+gAwIBAgIQGx+ttiD5JNM2a/fH8YygWTANBgkqhkiG9w0BAQUFADBFMQswCQYDVQQG
1613
- EwJHQjEYMBYGA1UEChMPVHJ1c3RpcyBMaW1pdGVkMRwwGgYDVQQLExNUcnVzdGlzIEZQUyBSb290
1614
- IENBMB4XDTAzMTIyMzEyMTQwNloXDTI0MDEyMTExMzY1NFowRTELMAkGA1UEBhMCR0IxGDAWBgNV
1615
- BAoTD1RydXN0aXMgTGltaXRlZDEcMBoGA1UECxMTVHJ1c3RpcyBGUFMgUm9vdCBDQTCCASIwDQYJ
1616
- KoZIhvcNAQEBBQADggEPADCCAQoCggEBAMVQe547NdDfxIzNjpvto8A2mfRC6qc+gIMPpqdZh8mQ
1617
- RUN+AOqGeSoDvT03mYlmt+WKVoaTnGhLaASMk5MCPjDSNzoiYYkchU59j9WvezX2fihHiTHcDnlk
1618
- H5nSW7r+f2C/revnPDgpai/lkQtV/+xvWNUtyd5MZnGPDNcE2gfmHhjjvSkCqPoc4Vu5g6hBSLwa
1619
- cY3nYuUtsuvffM/bq1rKMfFMIvMFE/eC+XN5DL7XSxzA0RU8k0Fk0ea+IxciAIleH2ulrG6nS4zt
1620
- o3Lmr2NNL4XSFDWaLk6M6jKYKIahkQlBOrTh4/L68MkKokHdqeMDx4gVOxzUGpTXn2RZEm0CAwEA
1621
- AaNTMFEwDwYDVR0TAQH/BAUwAwEB/zAfBgNVHSMEGDAWgBS6+nEleYtXQSUhhgtx67JkDoshZzAd
1622
- BgNVHQ4EFgQUuvpxJXmLV0ElIYYLceuyZA6LIWcwDQYJKoZIhvcNAQEFBQADggEBAH5Y//01GX2c
1623
- GE+esCu8jowU/yyg2kdbw++BLa8F6nRIW/M+TgfHbcWzk88iNVy2P3UnXwmWzaD+vkAMXBJV+JOC
1624
- yinpXj9WV4s4NvdFGkwozZ5BuO1WTISkQMi4sKUraXAEasP41BIy+Q7DsdwyhEQsb8tGD+pmQQ9P
1625
- 8Vilpg0ND2HepZ5dfWWhPBfnqFVO76DH7cZEf1T1o+CP8HxVIo8ptoGj4W1OLBuAZ+ytIJ8MYmHV
1626
- l/9D7S3B2l0pKoU/rGXuhg8FjZBf3+6f9L/uHfuY5H+QK4R4EA5sSVPvFVtlRkpdr7r7OnIdzfYl
1627
- iB6XzCGcKQENZetX2fNXlrtIzYE=
1628
- -----END CERTIFICATE-----
1629
-
1630
  Buypass Class 2 Root CA
1631
  =======================
1632
  -----BEGIN CERTIFICATE-----
@@ -1709,30 +1204,6 @@ P0HHRwA11fXT91Q+gT3aSWqas+8QPebrb9HIIkfLzM8BMZLZGOMivgkeGj5asuRrDFR6fUNOuIml
1709
  e9eiPZaGzPImNC1qkp2aGtAw4l1OBLBfiyB+d8E9lYLRRpo7PHi4b6HQDWSieB4pTpPDpFQUWw==
1710
  -----END CERTIFICATE-----
1711
 
1712
- EE Certification Centre Root CA
1713
- ===============================
1714
- -----BEGIN CERTIFICATE-----
1715
- MIIEAzCCAuugAwIBAgIQVID5oHPtPwBMyonY43HmSjANBgkqhkiG9w0BAQUFADB1MQswCQYDVQQG
1716
- EwJFRTEiMCAGA1UECgwZQVMgU2VydGlmaXRzZWVyaW1pc2tlc2t1czEoMCYGA1UEAwwfRUUgQ2Vy
1717
- dGlmaWNhdGlvbiBDZW50cmUgUm9vdCBDQTEYMBYGCSqGSIb3DQEJARYJcGtpQHNrLmVlMCIYDzIw
1718
- MTAxMDMwMTAxMDMwWhgPMjAzMDEyMTcyMzU5NTlaMHUxCzAJBgNVBAYTAkVFMSIwIAYDVQQKDBlB
1719
- UyBTZXJ0aWZpdHNlZXJpbWlza2Vza3VzMSgwJgYDVQQDDB9FRSBDZXJ0aWZpY2F0aW9uIENlbnRy
1720
- ZSBSb290IENBMRgwFgYJKoZIhvcNAQkBFglwa2lAc2suZWUwggEiMA0GCSqGSIb3DQEBAQUAA4IB
1721
- DwAwggEKAoIBAQDIIMDs4MVLqwd4lfNE7vsLDP90jmG7sWLqI9iroWUyeuuOF0+W2Ap7kaJjbMeM
1722
- TC55v6kF/GlclY1i+blw7cNRfdCT5mzrMEvhvH2/UpvObntl8jixwKIy72KyaOBhU8E2lf/slLo2
1723
- rpwcpzIP5Xy0xm90/XsY6KxX7QYgSzIwWFv9zajmofxwvI6Sc9uXp3whrj3B9UiHbCe9nyV0gVWw
1724
- 93X2PaRka9ZP585ArQ/dMtO8ihJTmMmJ+xAdTX7Nfh9WDSFwhfYggx/2uh8Ej+p3iDXE/+pOoYtN
1725
- P2MbRMNE1CV2yreN1x5KZmTNXMWcg+HCCIia7E6j8T4cLNlsHaFLAgMBAAGjgYowgYcwDwYDVR0T
1726
- AQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFBLyWj7qVhy/zQas8fElyalL1BSZ
1727
- MEUGA1UdJQQ+MDwGCCsGAQUFBwMCBggrBgEFBQcDAQYIKwYBBQUHAwMGCCsGAQUFBwMEBggrBgEF
1728
- BQcDCAYIKwYBBQUHAwkwDQYJKoZIhvcNAQEFBQADggEBAHv25MANqhlHt01Xo/6tu7Fq1Q+e2+Rj
1729
- xY6hUFaTlrg4wCQiZrxTFGGVv9DHKpY5P30osxBAIWrEr7BSdxjhlthWXePdNl4dp1BUoMUq5KqM
1730
- lIpPnTX/dqQGE5Gion0ARD9V04I8GtVbvFZMIi5GQ4okQC3zErg7cBqklrkar4dBGmoYDQZPxz5u
1731
- uSlNDUmJEYcyW+ZLBMjkXOZ0c5RdFpgTlf7727FE5TpwrDdr5rMzcijJs1eg9gIWiAYLtqZLICjU
1732
- 3j2LrTcFU3T+bsy8QxdxXvnFzBqpYe73dgzzcvRyrc9yAjYHR8/vGVCJYMzpJJUPwssd8m92kMfM
1733
- dcGWxZ0=
1734
- -----END CERTIFICATE-----
1735
-
1736
  D-TRUST Root Class 3 CA 2 2009
1737
  ==============================
1738
  -----BEGIN CERTIFICATE-----
@@ -2295,36 +1766,6 @@ uglB4Zf4+/2a4n0Sye18ZNPLBSWLVtmg515dTguDnFt2KaAJJiFqYgIwcdK1j1zqO+F4CYWodZI7
2295
  yFz9SO8NdCKoCOJuxUnOxwy8p2Fp8fc74SrL+SvzZpA3
2296
  -----END CERTIFICATE-----
2297
 
2298
- Staat der Nederlanden Root CA - G3
2299
- ==================================
2300
- -----BEGIN CERTIFICATE-----
2301
- MIIFdDCCA1ygAwIBAgIEAJiiOTANBgkqhkiG9w0BAQsFADBaMQswCQYDVQQGEwJOTDEeMBwGA1UE
2302
- CgwVU3RhYXQgZGVyIE5lZGVybGFuZGVuMSswKQYDVQQDDCJTdGFhdCBkZXIgTmVkZXJsYW5kZW4g
2303
- Um9vdCBDQSAtIEczMB4XDTEzMTExNDExMjg0MloXDTI4MTExMzIzMDAwMFowWjELMAkGA1UEBhMC
2304
- TkwxHjAcBgNVBAoMFVN0YWF0IGRlciBOZWRlcmxhbmRlbjErMCkGA1UEAwwiU3RhYXQgZGVyIE5l
2305
- ZGVybGFuZGVuIFJvb3QgQ0EgLSBHMzCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAL4y
2306
- olQPcPssXFnrbMSkUeiFKrPMSjTysF/zDsccPVMeiAho2G89rcKezIJnByeHaHE6n3WWIkYFsO2t
2307
- x1ueKt6c/DrGlaf1F2cY5y9JCAxcz+bMNO14+1Cx3Gsy8KL+tjzk7FqXxz8ecAgwoNzFs21v0IJy
2308
- EavSgWhZghe3eJJg+szeP4TrjTgzkApyI/o1zCZxMdFyKJLZWyNtZrVtB0LrpjPOktvA9mxjeM3K
2309
- Tj215VKb8b475lRgsGYeCasH/lSJEULR9yS6YHgamPfJEf0WwTUaVHXvQ9Plrk7O53vDxk5hUUur
2310
- mkVLoR9BvUhTFXFkC4az5S6+zqQbwSmEorXLCCN2QyIkHxcE1G6cxvx/K2Ya7Irl1s9N9WMJtxU5
2311
- 1nus6+N86U78dULI7ViVDAZCopz35HCz33JvWjdAidiFpNfxC95DGdRKWCyMijmev4SH8RY7Ngzp
2312
- 07TKbBlBUgmhHbBqv4LvcFEhMtwFdozL92TkA1CvjJFnq8Xy7ljY3r735zHPbMk7ccHViLVlvMDo
2313
- FxcHErVc0qsgk7TmgoNwNsXNo42ti+yjwUOH5kPiNL6VizXtBznaqB16nzaeErAMZRKQFWDZJkBE
2314
- 41ZgpRDUajz9QdwOWke275dhdU/Z/seyHdTtXUmzqWrLZoQT1Vyg3N9udwbRcXXIV2+vD3dbAgMB
2315
- AAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBRUrfrHkleu
2316
- yjWcLhL75LpdINyUVzANBgkqhkiG9w0BAQsFAAOCAgEAMJmdBTLIXg47mAE6iqTnB/d6+Oea31BD
2317
- U5cqPco8R5gu4RV78ZLzYdqQJRZlwJ9UXQ4DO1t3ApyEtg2YXzTdO2PCwyiBwpwpLiniyMMB8jPq
2318
- KqrMCQj3ZWfGzd/TtiunvczRDnBfuCPRy5FOCvTIeuXZYzbB1N/8Ipf3YF3qKS9Ysr1YvY2WTxB1
2319
- v0h7PVGHoTx0IsL8B3+A3MSs/mrBcDCw6Y5p4ixpgZQJut3+TcCDjJRYwEYgr5wfAvg1VUkvRtTA
2320
- 8KCWAg8zxXHzniN9lLf9OtMJgwYh/WA9rjLA0u6NpvDntIJ8CsxwyXmA+P5M9zWEGYox+wrZ13+b
2321
- 8KKaa8MFSu1BYBQw0aoRQm7TIwIEC8Zl3d1Sd9qBa7Ko+gE4uZbqKmxnl4mUnrzhVNXkanjvSr0r
2322
- mj1AfsbAddJu+2gw7OyLnflJNZoaLNmzlTnVHpL3prllL+U9bTpITAjc5CgSKL59NVzq4BZ+Extq
2323
- 1z7XnvwtdbLBFNUjA9tbbws+eC8N3jONFrdI54OagQ97wUNNVQQXOEpR1VmiiXTTn74eS9fGbbeI
2324
- JG9gkaSChVtWQbzQRKtqE77RLFi3EjNYsjdj3BP1lB0/QFH1T/U67cjF68IeHRaVesd+QnGTbksV
2325
- tzDfqu1XhUisHWrdOWnk4Xl4vs4Fv6EM94B7IWcnMFk=
2326
- -----END CERTIFICATE-----
2327
-
2328
  Staat der Nederlanden EV Root CA
2329
  ================================
2330
  -----BEGIN CERTIFICATE-----
@@ -3445,3 +2886,347 @@ Sxfj03k9bWtJySgOLnRQvwzZRjoQhsmnP+mg7H/rpXdYaXHmgwo38oZJar55CJD2AhZkPuXaTH4M
3445
  NMn5X7azKFGnpyuqSfqNZSlO42sTp5SjLVFteAxEy9/eCG/Oo2Sr05WE1LlSVHJ7liXMvGnjSG4N
3446
  0MedJ5qq+BOS3R7fY581qRY27Iy4g/Q9iY/NtBde17MXQRBdJ3NghVdJIgc=
3447
  -----END CERTIFICATE-----
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
  ##
2
  ## Bundle of CA Root Certificates
3
  ##
4
+ ## Certificate data from Mozilla as of: Tue Oct 26 03:12:05 2021 GMT
5
  ##
6
  ## This is a bundle of X.509 certificates of public Certificate Authorities
7
  ## (CA). These were automatically extracted from Mozilla's root certificates
14
  ## Just configure this file as the SSLCACertificateFile.
15
  ##
16
  ## Conversion done with mk-ca-bundle.pl version 1.28.
17
+ ## SHA256: bb36818a81feaa4cca61101e6d6276cd09e972efcb08112dfed846918ca41d7f
18
  ##
19
 
20
 
132
  tHuu2guQOHXvgR1m0vdXcDazv/wor3ElhVsT/h5/WrQ8
133
  -----END CERTIFICATE-----
134
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
135
  Comodo AAA Services root
136
  ========================
137
  -----BEGIN CERTIFICATE-----
156
  12yxow+ev+to51byrvLjKzg6CYG1a4XXvi3tPxq3smPi9WIsgtRqAEFQ8TmDn5XpNpaYbg==
157
  -----END CERTIFICATE-----
158
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
159
  QuoVadis Root CA 2
160
  ==================
161
  -----BEGIN CERTIFICATE-----
243
  FL39vmwLAw==
244
  -----END CERTIFICATE-----
245
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
246
  XRamp Global CA Root
247
  ====================
248
  -----BEGIN CERTIFICATE-----
315
  QBFGmh95DmK/D5fs4C8fF5Q=
316
  -----END CERTIFICATE-----
317
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
318
  DigiCert Assured ID Root CA
319
  ===========================
320
  -----BEGIN CERTIFICATE-----
381
  vEsXCS+0yx5DaMkHJ8HSXPfqIbloEpw8nL+e/IBcm2PN7EeqJSdnoDfzAIJ9VNep+OkuE6N36B9K
382
  -----END CERTIFICATE-----
383
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
384
  SwissSign Gold CA - G2
385
  ======================
386
  -----BEGIN CERTIFICATE-----
443
  DgEj8Z+7fNzcbBGXJbLytGMU0gYqZ4yD9c7qB9iaah7s5Aq7KkzrCWA5zspi2C5u
444
  -----END CERTIFICATE-----
445
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
446
  SecureTrust CA
447
  ==============
448
  -----BEGIN CERTIFICATE-----
551
  U/7dIOA1mjbRxwG55tzd8/8dLDoWV9mSOdY=
552
  -----END CERTIFICATE-----
553
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
554
  Certigna
555
  ========
556
  -----BEGIN CERTIFICATE-----
646
  TogVZ96edhBiIL5VaZVDADlN9u6wWk5JRFRYX0KD
647
  -----END CERTIFICATE-----
648
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
649
  NetLock Arany (Class Gold) Főtanúsítvány
650
  ========================================
651
  -----BEGIN CERTIFICATE-----
821
  WrOZyGlsQyYBNWNgVYkDOnXYukrZVP/u3oDYLdE41V4tC5h9Pmzb/CaIxw==
822
  -----END CERTIFICATE-----
823
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
824
  Go Daddy Root Certificate Authority - G2
825
  ========================================
826
  -----BEGIN CERTIFICATE-----
1122
  vwGYT7JZVEc+NHt4bVaTLnPqZih4zR0Uv6CPLy64Lo7yFIrM6bV8+2ydDKXhlg==
1123
  -----END CERTIFICATE-----
1124
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1125
  Buypass Class 2 Root CA
1126
  =======================
1127
  -----BEGIN CERTIFICATE-----
1204
  e9eiPZaGzPImNC1qkp2aGtAw4l1OBLBfiyB+d8E9lYLRRpo7PHi4b6HQDWSieB4pTpPDpFQUWw==
1205
  -----END CERTIFICATE-----
1206
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1207
  D-TRUST Root Class 3 CA 2 2009
1208
  ==============================
1209
  -----BEGIN CERTIFICATE-----
1766
  yFz9SO8NdCKoCOJuxUnOxwy8p2Fp8fc74SrL+SvzZpA3
1767
  -----END CERTIFICATE-----
1768
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1769
  Staat der Nederlanden EV Root CA
1770
  ================================
1771
  -----BEGIN CERTIFICATE-----
2886
  NMn5X7azKFGnpyuqSfqNZSlO42sTp5SjLVFteAxEy9/eCG/Oo2Sr05WE1LlSVHJ7liXMvGnjSG4N
2887
  0MedJ5qq+BOS3R7fY581qRY27Iy4g/Q9iY/NtBde17MXQRBdJ3NghVdJIgc=
2888
  -----END CERTIFICATE-----
2889
+
2890
+ Trustwave Global Certification Authority
2891
+ ========================================
2892
+ -----BEGIN CERTIFICATE-----
2893
+ MIIF2jCCA8KgAwIBAgIMBfcOhtpJ80Y1LrqyMA0GCSqGSIb3DQEBCwUAMIGIMQswCQYDVQQGEwJV
2894
+ UzERMA8GA1UECAwISWxsaW5vaXMxEDAOBgNVBAcMB0NoaWNhZ28xITAfBgNVBAoMGFRydXN0d2F2
2895
+ ZSBIb2xkaW5ncywgSW5jLjExMC8GA1UEAwwoVHJ1c3R3YXZlIEdsb2JhbCBDZXJ0aWZpY2F0aW9u
2896
+ IEF1dGhvcml0eTAeFw0xNzA4MjMxOTM0MTJaFw00MjA4MjMxOTM0MTJaMIGIMQswCQYDVQQGEwJV
2897
+ UzERMA8GA1UECAwISWxsaW5vaXMxEDAOBgNVBAcMB0NoaWNhZ28xITAfBgNVBAoMGFRydXN0d2F2
2898
+ ZSBIb2xkaW5ncywgSW5jLjExMC8GA1UEAwwoVHJ1c3R3YXZlIEdsb2JhbCBDZXJ0aWZpY2F0aW9u
2899
+ IEF1dGhvcml0eTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBALldUShLPDeS0YLOvR29
2900
+ zd24q88KPuFd5dyqCblXAj7mY2Hf8g+CY66j96xz0XznswuvCAAJWX/NKSqIk4cXGIDtiLK0thAf
2901
+ LdZfVaITXdHG6wZWiYj+rDKd/VzDBcdu7oaJuogDnXIhhpCujwOl3J+IKMujkkkP7NAP4m1ET4Bq
2902
+ stTnoApTAbqOl5F2brz81Ws25kCI1nsvXwXoLG0R8+eyvpJETNKXpP7ScoFDB5zpET71ixpZfR9o
2903
+ WN0EACyW80OzfpgZdNmcc9kYvkHHNHnZ9GLCQ7mzJ7Aiy/k9UscwR7PJPrhq4ufogXBeQotPJqX+
2904
+ OsIgbrv4Fo7NDKm0G2x2EOFYeUY+VM6AqFcJNykbmROPDMjWLBz7BegIlT1lRtzuzWniTY+HKE40
2905
+ Cz7PFNm73bZQmq131BnW2hqIyE4bJ3XYsgjxroMwuREOzYfwhI0Vcnyh78zyiGG69Gm7DIwLdVcE
2906
+ uE4qFC49DxweMqZiNu5m4iK4BUBjECLzMx10coos9TkpoNPnG4CELcU9402x/RpvumUHO1jsQkUm
2907
+ +9jaJXLE9gCxInm943xZYkqcBW89zubWR2OZxiRvchLIrH+QtAuRcOi35hYQcRfO3gZPSEF9NUqj
2908
+ ifLJS3tBEW1ntwiYTOURGa5CgNz7kAXU+FDKvuStx8KU1xad5hePrzb7AgMBAAGjQjBAMA8GA1Ud
2909
+ EwEB/wQFMAMBAf8wHQYDVR0OBBYEFJngGWcNYtt2s9o9uFvo/ULSMQ6HMA4GA1UdDwEB/wQEAwIB
2910
+ BjANBgkqhkiG9w0BAQsFAAOCAgEAmHNw4rDT7TnsTGDZqRKGFx6W0OhUKDtkLSGm+J1WE2pIPU/H
2911
+ PinbbViDVD2HfSMF1OQc3Og4ZYbFdada2zUFvXfeuyk3QAUHw5RSn8pk3fEbK9xGChACMf1KaA0H
2912
+ ZJDmHvUqoai7PF35owgLEQzxPy0QlG/+4jSHg9bP5Rs1bdID4bANqKCqRieCNqcVtgimQlRXtpla
2913
+ 4gt5kNdXElE1GYhBaCXUNxeEFfsBctyV3lImIJgm4nb1J2/6ADtKYdkNy1GTKv0WBpanI5ojSP5R
2914
+ vbbEsLFUzt5sQa0WZ37b/TjNuThOssFgy50X31ieemKyJo90lZvkWx3SD92YHJtZuSPTMaCm/zjd
2915
+ zyBP6VhWOmfD0faZmZ26NraAL4hHT4a/RDqA5Dccprrql5gR0IRiR2Qequ5AvzSxnI9O4fKSTx+O
2916
+ 856X3vOmeWqJcU9LJxdI/uz0UA9PSX3MReO9ekDFQdxhVicGaeVyQYHTtgGJoC86cnn+OjC/QezH
2917
+ Yj6RS8fZMXZC+fc8Y+wmjHMMfRod6qh8h6jCJ3zhM0EPz8/8AKAigJ5Kp28AsEFFtyLKaEjFQqKu
2918
+ 3R3y4G5OBVixwJAWKqQ9EEC+j2Jjg6mcgn0tAumDMHzLJ8n9HmYAsC7TIS+OMxZsmO0QqAfWzJPP
2919
+ 29FpHOTKyeC2nOnOcXHebD8WpHk=
2920
+ -----END CERTIFICATE-----
2921
+
2922
+ Trustwave Global ECC P256 Certification Authority
2923
+ =================================================
2924
+ -----BEGIN CERTIFICATE-----
2925
+ MIICYDCCAgegAwIBAgIMDWpfCD8oXD5Rld9dMAoGCCqGSM49BAMCMIGRMQswCQYDVQQGEwJVUzER
2926
+ MA8GA1UECBMISWxsaW5vaXMxEDAOBgNVBAcTB0NoaWNhZ28xITAfBgNVBAoTGFRydXN0d2F2ZSBI
2927
+ b2xkaW5ncywgSW5jLjE6MDgGA1UEAxMxVHJ1c3R3YXZlIEdsb2JhbCBFQ0MgUDI1NiBDZXJ0aWZp
2928
+ Y2F0aW9uIEF1dGhvcml0eTAeFw0xNzA4MjMxOTM1MTBaFw00MjA4MjMxOTM1MTBaMIGRMQswCQYD
2929
+ VQQGEwJVUzERMA8GA1UECBMISWxsaW5vaXMxEDAOBgNVBAcTB0NoaWNhZ28xITAfBgNVBAoTGFRy
2930
+ dXN0d2F2ZSBIb2xkaW5ncywgSW5jLjE6MDgGA1UEAxMxVHJ1c3R3YXZlIEdsb2JhbCBFQ0MgUDI1
2931
+ NiBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABH77bOYj
2932
+ 43MyCMpg5lOcunSNGLB4kFKA3TjASh3RqMyTpJcGOMoNFWLGjgEqZZ2q3zSRLoHB5DOSMcT9CTqm
2933
+ P62jQzBBMA8GA1UdEwEB/wQFMAMBAf8wDwYDVR0PAQH/BAUDAwcGADAdBgNVHQ4EFgQUo0EGrJBt
2934
+ 0UrrdaVKEJmzsaGLSvcwCgYIKoZIzj0EAwIDRwAwRAIgB+ZU2g6gWrKuEZ+Hxbb/ad4lvvigtwjz
2935
+ RM4q3wghDDcCIC0mA6AFvWvR9lz4ZcyGbbOcNEhjhAnFjXca4syc4XR7
2936
+ -----END CERTIFICATE-----
2937
+
2938
+ Trustwave Global ECC P384 Certification Authority
2939
+ =================================================
2940
+ -----BEGIN CERTIFICATE-----
2941
+ MIICnTCCAiSgAwIBAgIMCL2Fl2yZJ6SAaEc7MAoGCCqGSM49BAMDMIGRMQswCQYDVQQGEwJVUzER
2942
+ MA8GA1UECBMISWxsaW5vaXMxEDAOBgNVBAcTB0NoaWNhZ28xITAfBgNVBAoTGFRydXN0d2F2ZSBI
2943
+ b2xkaW5ncywgSW5jLjE6MDgGA1UEAxMxVHJ1c3R3YXZlIEdsb2JhbCBFQ0MgUDM4NCBDZXJ0aWZp
2944
+ Y2F0aW9uIEF1dGhvcml0eTAeFw0xNzA4MjMxOTM2NDNaFw00MjA4MjMxOTM2NDNaMIGRMQswCQYD
2945
+ VQQGEwJVUzERMA8GA1UECBMISWxsaW5vaXMxEDAOBgNVBAcTB0NoaWNhZ28xITAfBgNVBAoTGFRy
2946
+ dXN0d2F2ZSBIb2xkaW5ncywgSW5jLjE6MDgGA1UEAxMxVHJ1c3R3YXZlIEdsb2JhbCBFQ0MgUDM4
2947
+ NCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTB2MBAGByqGSM49AgEGBSuBBAAiA2IABGvaDXU1CDFH
2948
+ Ba5FmVXxERMuSvgQMSOjfoPTfygIOiYaOs+Xgh+AtycJj9GOMMQKmw6sWASr9zZ9lCOkmwqKi6vr
2949
+ /TklZvFe/oyujUF5nQlgziip04pt89ZF1PKYhDhloKNDMEEwDwYDVR0TAQH/BAUwAwEB/zAPBgNV
2950
+ HQ8BAf8EBQMDBwYAMB0GA1UdDgQWBBRVqYSJ0sEyvRjLbKYHTsjnnb6CkDAKBggqhkjOPQQDAwNn
2951
+ ADBkAjA3AZKXRRJ+oPM+rRk6ct30UJMDEr5E0k9BpIycnR+j9sKS50gU/k6bpZFXrsY3crsCMGcl
2952
+ CrEMXu6pY5Jv5ZAL/mYiykf9ijH3g/56vxC+GCsej/YpHpRZ744hN8tRmKVuSw==
2953
+ -----END CERTIFICATE-----
2954
+
2955
+ NAVER Global Root Certification Authority
2956
+ =========================================
2957
+ -----BEGIN CERTIFICATE-----
2958
+ MIIFojCCA4qgAwIBAgIUAZQwHqIL3fXFMyqxQ0Rx+NZQTQ0wDQYJKoZIhvcNAQEMBQAwaTELMAkG
2959
+ A1UEBhMCS1IxJjAkBgNVBAoMHU5BVkVSIEJVU0lORVNTIFBMQVRGT1JNIENvcnAuMTIwMAYDVQQD
2960
+ DClOQVZFUiBHbG9iYWwgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0xNzA4MTgwODU4
2961
+ NDJaFw0zNzA4MTgyMzU5NTlaMGkxCzAJBgNVBAYTAktSMSYwJAYDVQQKDB1OQVZFUiBCVVNJTkVT
2962
+ UyBQTEFURk9STSBDb3JwLjEyMDAGA1UEAwwpTkFWRVIgR2xvYmFsIFJvb3QgQ2VydGlmaWNhdGlv
2963
+ biBBdXRob3JpdHkwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQC21PGTXLVAiQqrDZBb
2964
+ UGOukJR0F0Vy1ntlWilLp1agS7gvQnXp2XskWjFlqxcX0TM62RHcQDaH38dq6SZeWYp34+hInDEW
2965
+ +j6RscrJo+KfziFTowI2MMtSAuXaMl3Dxeb57hHHi8lEHoSTGEq0n+USZGnQJoViAbbJAh2+g1G7
2966
+ XNr4rRVqmfeSVPc0W+m/6imBEtRTkZazkVrd/pBzKPswRrXKCAfHcXLJZtM0l/aM9BhK4dA9WkW2
2967
+ aacp+yPOiNgSnABIqKYPszuSjXEOdMWLyEz59JuOuDxp7W87UC9Y7cSw0BwbagzivESq2M0UXZR4
2968
+ Yb8ObtoqvC8MC3GmsxY/nOb5zJ9TNeIDoKAYv7vxvvTWjIcNQvcGufFt7QSUqP620wbGQGHfnZ3z
2969
+ VHbOUzoBppJB7ASjjw2i1QnK1sua8e9DXcCrpUHPXFNwcMmIpi3Ua2FzUCaGYQ5fG8Ir4ozVu53B
2970
+ A0K6lNpfqbDKzE0K70dpAy8i+/Eozr9dUGWokG2zdLAIx6yo0es+nPxdGoMuK8u180SdOqcXYZai
2971
+ cdNwlhVNt0xz7hlcxVs+Qf6sdWA7G2POAN3aCJBitOUt7kinaxeZVL6HSuOpXgRM6xBtVNbv8ejy
2972
+ YhbLgGvtPe31HzClrkvJE+2KAQHJuFFYwGY6sWZLxNUxAmLpdIQM201GLQIDAQABo0IwQDAdBgNV
2973
+ HQ4EFgQU0p+I36HNLL3s9TsBAZMzJ7LrYEswDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMB
2974
+ Af8wDQYJKoZIhvcNAQEMBQADggIBADLKgLOdPVQG3dLSLvCkASELZ0jKbY7gyKoNqo0hV4/GPnrK
2975
+ 21HUUrPUloSlWGB/5QuOH/XcChWB5Tu2tyIvCZwTFrFsDDUIbatjcu3cvuzHV+YwIHHW1xDBE1UB
2976
+ jCpD5EHxzzp6U5LOogMFDTjfArsQLtk70pt6wKGm+LUx5vR1yblTmXVHIloUFcd4G7ad6Qz4G3bx
2977
+ hYTeodoS76TiEJd6eN4MUZeoIUCLhr0N8F5OSza7OyAfikJW4Qsav3vQIkMsRIz75Sq0bBwcupTg
2978
+ E34h5prCy8VCZLQelHsIJchxzIdFV4XTnyliIoNRlwAYl3dqmJLJfGBs32x9SuRwTMKeuB330DTH
2979
+ D8z7p/8Dvq1wkNoL3chtl1+afwkyQf3NosxabUzyqkn+Zvjp2DXrDige7kgvOtB5CTh8piKCk5XQ
2980
+ A76+AqAF3SAi428diDRgxuYKuQl1C/AH6GmWNcf7I4GOODm4RStDeKLRLBT/DShycpWbXgnbiUSY
2981
+ qqFJu3FS8r/2/yehNq+4tneI3TqkbZs0kNwUXTC/t+sX5Ie3cdCh13cV1ELX8vMxmV2b3RZtP+oG
2982
+ I/hGoiLtk/bdmuYqh7GYVPEi92tF4+KOdh2ajcQGjTa3FPOdVGm3jjzVpG2Tgbet9r1ke8LJaDmg
2983
+ kpzNNIaRkPpkUZ3+/uul9XXeifdy
2984
+ -----END CERTIFICATE-----
2985
+
2986
+ AC RAIZ FNMT-RCM SERVIDORES SEGUROS
2987
+ ===================================
2988
+ -----BEGIN CERTIFICATE-----
2989
+ MIICbjCCAfOgAwIBAgIQYvYybOXE42hcG2LdnC6dlTAKBggqhkjOPQQDAzB4MQswCQYDVQQGEwJF
2990
+ UzERMA8GA1UECgwIRk5NVC1SQ00xDjAMBgNVBAsMBUNlcmVzMRgwFgYDVQRhDA9WQVRFUy1RMjgy
2991
+ NjAwNEoxLDAqBgNVBAMMI0FDIFJBSVogRk5NVC1SQ00gU0VSVklET1JFUyBTRUdVUk9TMB4XDTE4
2992
+ MTIyMDA5MzczM1oXDTQzMTIyMDA5MzczM1oweDELMAkGA1UEBhMCRVMxETAPBgNVBAoMCEZOTVQt
2993
+ UkNNMQ4wDAYDVQQLDAVDZXJlczEYMBYGA1UEYQwPVkFURVMtUTI4MjYwMDRKMSwwKgYDVQQDDCNB
2994
+ QyBSQUlaIEZOTVQtUkNNIFNFUlZJRE9SRVMgU0VHVVJPUzB2MBAGByqGSM49AgEGBSuBBAAiA2IA
2995
+ BPa6V1PIyqvfNkpSIeSX0oNnnvBlUdBeh8dHsVnyV0ebAAKTRBdp20LHsbI6GA60XYyzZl2hNPk2
2996
+ LEnb80b8s0RpRBNm/dfF/a82Tc4DTQdxz69qBdKiQ1oKUm8BA06Oi6NCMEAwDwYDVR0TAQH/BAUw
2997
+ AwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFAG5L++/EYZg8k/QQW6rcx/n0m5JMAoGCCqG
2998
+ SM49BAMDA2kAMGYCMQCuSuMrQMN0EfKVrRYj3k4MGuZdpSRea0R7/DjiT8ucRRcRTBQnJlU5dUoD
2999
+ zBOQn5ICMQD6SmxgiHPz7riYYqnOK8LZiqZwMR2vsJRM60/G49HzYqc8/5MuB1xJAWdpEgJyv+c=
3000
+ -----END CERTIFICATE-----
3001
+
3002
+ GlobalSign Root R46
3003
+ ===================
3004
+ -----BEGIN CERTIFICATE-----
3005
+ MIIFWjCCA0KgAwIBAgISEdK7udcjGJ5AXwqdLdDfJWfRMA0GCSqGSIb3DQEBDAUAMEYxCzAJBgNV
3006
+ BAYTAkJFMRkwFwYDVQQKExBHbG9iYWxTaWduIG52LXNhMRwwGgYDVQQDExNHbG9iYWxTaWduIFJv
3007
+ b3QgUjQ2MB4XDTE5MDMyMDAwMDAwMFoXDTQ2MDMyMDAwMDAwMFowRjELMAkGA1UEBhMCQkUxGTAX
3008
+ BgNVBAoTEEdsb2JhbFNpZ24gbnYtc2ExHDAaBgNVBAMTE0dsb2JhbFNpZ24gUm9vdCBSNDYwggIi
3009
+ MA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCsrHQy6LNl5brtQyYdpokNRbopiLKkHWPd08Es
3010
+ CVeJOaFV6Wc0dwxu5FUdUiXSE2te4R2pt32JMl8Nnp8semNgQB+msLZ4j5lUlghYruQGvGIFAha/
3011
+ r6gjA7aUD7xubMLL1aa7DOn2wQL7Id5m3RerdELv8HQvJfTqa1VbkNud316HCkD7rRlr+/fKYIje
3012
+ 2sGP1q7Vf9Q8g+7XFkyDRTNrJ9CG0Bwta/OrffGFqfUo0q3v84RLHIf8E6M6cqJaESvWJ3En7YEt
3013
+ bWaBkoe0G1h6zD8K+kZPTXhc+CtI4wSEy132tGqzZfxCnlEmIyDLPRT5ge1lFgBPGmSXZgjPjHvj
3014
+ K8Cd+RTyG/FWaha/LIWFzXg4mutCagI0GIMXTpRW+LaCtfOW3T3zvn8gdz57GSNrLNRyc0NXfeD4
3015
+ 12lPFzYE+cCQYDdF3uYM2HSNrpyibXRdQr4G9dlkbgIQrImwTDsHTUB+JMWKmIJ5jqSngiCNI/on
3016
+ ccnfxkF0oE32kRbcRoxfKWMxWXEM2G/CtjJ9++ZdU6Z+Ffy7dXxd7Pj2Fxzsx2sZy/N78CsHpdls
3017
+ eVR2bJ0cpm4O6XkMqCNqo98bMDGfsVR7/mrLZqrcZdCinkqaByFrgY/bxFn63iLABJzjqls2k+g9
3018
+ vXqhnQt2sQvHnf3PmKgGwvgqo6GDoLclcqUC4wIDAQABo0IwQDAOBgNVHQ8BAf8EBAMCAYYwDwYD
3019
+ VR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUA1yrc4GHqMywptWU4jaWSf8FmSwwDQYJKoZIhvcNAQEM
3020
+ BQADggIBAHx47PYCLLtbfpIrXTncvtgdokIzTfnvpCo7RGkerNlFo048p9gkUbJUHJNOxO97k4Vg
3021
+ JuoJSOD1u8fpaNK7ajFxzHmuEajwmf3lH7wvqMxX63bEIaZHU1VNaL8FpO7XJqti2kM3S+LGteWy
3022
+ gxk6x9PbTZ4IevPuzz5i+6zoYMzRx6Fcg0XERczzF2sUyQQCPtIkpnnpHs6i58FZFZ8d4kuaPp92
3023
+ CC1r2LpXFNqD6v6MVenQTqnMdzGxRBF6XLE+0xRFFRhiJBPSy03OXIPBNvIQtQ6IbbjhVp+J3pZm
3024
+ OUdkLG5NrmJ7v2B0GbhWrJKsFjLtrWhV/pi60zTe9Mlhww6G9kuEYO4Ne7UyWHmRVSyBQ7N0H3qq
3025
+ JZ4d16GLuc1CLgSkZoNNiTW2bKg2SnkheCLQQrzRQDGQob4Ez8pn7fXwgNNgyYMqIgXQBztSvwye
3026
+ qiv5u+YfjyW6hY0XHgL+XVAEV8/+LbzvXMAaq7afJMbfc2hIkCwU9D9SGuTSyxTDYWnP4vkYxboz
3027
+ nxSjBF25cfe1lNj2M8FawTSLfJvdkzrnE6JwYZ+vj+vYxXX4M2bUdGc6N3ec592kD3ZDZopD8p/7
3028
+ DEJ4Y9HiD2971KE9dJeFt0g5QdYg/NA6s/rob8SKunE3vouXsXgxT7PntgMTzlSdriVZzH81Xwj3
3029
+ QEUxeCp6
3030
+ -----END CERTIFICATE-----
3031
+
3032
+ GlobalSign Root E46
3033
+ ===================
3034
+ -----BEGIN CERTIFICATE-----
3035
+ MIICCzCCAZGgAwIBAgISEdK7ujNu1LzmJGjFDYQdmOhDMAoGCCqGSM49BAMDMEYxCzAJBgNVBAYT
3036
+ AkJFMRkwFwYDVQQKExBHbG9iYWxTaWduIG52LXNhMRwwGgYDVQQDExNHbG9iYWxTaWduIFJvb3Qg
3037
+ RTQ2MB4XDTE5MDMyMDAwMDAwMFoXDTQ2MDMyMDAwMDAwMFowRjELMAkGA1UEBhMCQkUxGTAXBgNV
3038
+ BAoTEEdsb2JhbFNpZ24gbnYtc2ExHDAaBgNVBAMTE0dsb2JhbFNpZ24gUm9vdCBFNDYwdjAQBgcq
3039
+ hkjOPQIBBgUrgQQAIgNiAAScDrHPt+ieUnd1NPqlRqetMhkytAepJ8qUuwzSChDH2omwlwxwEwkB
3040
+ jtjqR+q+soArzfwoDdusvKSGN+1wCAB16pMLey5SnCNoIwZD7JIvU4Tb+0cUB+hflGddyXqBPCCj
3041
+ QjBAMA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBQxCpCPtsad0kRL
3042
+ gLWi5h+xEk8blTAKBggqhkjOPQQDAwNoADBlAjEA31SQ7Zvvi5QCkxeCmb6zniz2C5GMn0oUsfZk
3043
+ vLtoURMMA/cVi4RguYv/Uo7njLwcAjA8+RHUjE7AwWHCFUyqqx0LMV87HOIAl0Qx5v5zli/altP+
3044
+ CAezNIm8BZ/3Hobui3A=
3045
+ -----END CERTIFICATE-----
3046
+
3047
+ GLOBALTRUST 2020
3048
+ ================
3049
+ -----BEGIN CERTIFICATE-----
3050
+ MIIFgjCCA2qgAwIBAgILWku9WvtPilv6ZeUwDQYJKoZIhvcNAQELBQAwTTELMAkGA1UEBhMCQVQx
3051
+ IzAhBgNVBAoTGmUtY29tbWVyY2UgbW9uaXRvcmluZyBHbWJIMRkwFwYDVQQDExBHTE9CQUxUUlVT
3052
+ VCAyMDIwMB4XDTIwMDIxMDAwMDAwMFoXDTQwMDYxMDAwMDAwMFowTTELMAkGA1UEBhMCQVQxIzAh
3053
+ BgNVBAoTGmUtY29tbWVyY2UgbW9uaXRvcmluZyBHbWJIMRkwFwYDVQQDExBHTE9CQUxUUlVTVCAy
3054
+ MDIwMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAri5WrRsc7/aVj6B3GyvTY4+ETUWi
3055
+ D59bRatZe1E0+eyLinjF3WuvvcTfk0Uev5E4C64OFudBc/jbu9G4UeDLgztzOG53ig9ZYybNpyrO
3056
+ VPu44sB8R85gfD+yc/LAGbaKkoc1DZAoouQVBGM+uq/ufF7MpotQsjj3QWPKzv9pj2gOlTblzLmM
3057
+ CcpL3TGQlsjMH/1WljTbjhzqLL6FLmPdqqmV0/0plRPwyJiT2S0WR5ARg6I6IqIoV6Lr/sCMKKCm
3058
+ fecqQjuCgGOlYx8ZzHyyZqjC0203b+J+BlHZRYQfEs4kUmSFC0iAToexIiIwquuuvuAC4EDosEKA
3059
+ A1GqtH6qRNdDYfOiaxaJSaSjpCuKAsR49GiKweR6NrFvG5Ybd0mN1MkGco/PU+PcF4UgStyYJ9OR
3060
+ JitHHmkHr96i5OTUawuzXnzUJIBHKWk7buis/UDr2O1xcSvy6Fgd60GXIsUf1DnQJ4+H4xj04KlG
3061
+ DfV0OoIu0G4skaMxXDtG6nsEEFZegB31pWXogvziB4xiRfUg3kZwhqG8k9MedKZssCz3AwyIDMvU
3062
+ clOGvGBG85hqwvG/Q/lwIHfKN0F5VVJjjVsSn8VoxIidrPIwq7ejMZdnrY8XD2zHc+0klGvIg5rQ
3063
+ mjdJBKuxFshsSUktq6HQjJLyQUp5ISXbY9e2nKd+Qmn7OmMCAwEAAaNjMGEwDwYDVR0TAQH/BAUw
3064
+ AwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFNwuH9FhN3nkq9XVsxJxaD1qaJwiMB8GA1Ud
3065
+ IwQYMBaAFNwuH9FhN3nkq9XVsxJxaD1qaJwiMA0GCSqGSIb3DQEBCwUAA4ICAQCR8EICaEDuw2jA
3066
+ VC/f7GLDw56KoDEoqoOOpFaWEhCGVrqXctJUMHytGdUdaG/7FELYjQ7ztdGl4wJCXtzoRlgHNQIw
3067
+ 4Lx0SsFDKv/bGtCwr2zD/cuz9X9tAy5ZVp0tLTWMstZDFyySCstd6IwPS3BD0IL/qMy/pJTAvoe9
3068
+ iuOTe8aPmxadJ2W8esVCgmxcB9CpwYhgROmYhRZf+I/KARDOJcP5YBugxZfD0yyIMaK9MOzQ0MAS
3069
+ 8cE54+X1+NZK3TTN+2/BT+MAi1bikvcoskJ3ciNnxz8RFbLEAwW+uxF7Cr+obuf/WEPPm2eggAe2
3070
+ HcqtbepBEX4tdJP7wry+UUTF72glJ4DjyKDUEuzZpTcdN3y0kcra1LGWge9oXHYQSa9+pTeAsRxS
3071
+ vTOBTI/53WXZFM2KJVj04sWDpQmQ1GwUY7VA3+vA/MRYfg0UFodUJ25W5HCEuGwyEn6CMUO+1918
3072
+ oa2u1qsgEu8KwxCMSZY13At1XrFP1U80DhEgB3VDRemjEdqso5nCtnkn4rnvyOL2NSl6dPrFf4IF
3073
+ YqYK6miyeUcGbvJXqBUzxvd4Sj1Ce2t+/vdG6tHrju+IaFvowdlxfv1k7/9nR4hYJS8+hge9+6jl
3074
+ gqispdNpQ80xiEmEU5LAsTkbOYMBMMTyqfrQA71yN2BWHzZ8vTmR9W0Nv3vXkg==
3075
+ -----END CERTIFICATE-----
3076
+
3077
+ ANF Secure Server Root CA
3078
+ =========================
3079
+ -----BEGIN CERTIFICATE-----
3080
+ MIIF7zCCA9egAwIBAgIIDdPjvGz5a7EwDQYJKoZIhvcNAQELBQAwgYQxEjAQBgNVBAUTCUc2MzI4
3081
+ NzUxMDELMAkGA1UEBhMCRVMxJzAlBgNVBAoTHkFORiBBdXRvcmlkYWQgZGUgQ2VydGlmaWNhY2lv
3082
+ bjEUMBIGA1UECxMLQU5GIENBIFJhaXoxIjAgBgNVBAMTGUFORiBTZWN1cmUgU2VydmVyIFJvb3Qg
3083
+ Q0EwHhcNMTkwOTA0MTAwMDM4WhcNMzkwODMwMTAwMDM4WjCBhDESMBAGA1UEBRMJRzYzMjg3NTEw
3084
+ MQswCQYDVQQGEwJFUzEnMCUGA1UEChMeQU5GIEF1dG9yaWRhZCBkZSBDZXJ0aWZpY2FjaW9uMRQw
3085
+ EgYDVQQLEwtBTkYgQ0EgUmFpejEiMCAGA1UEAxMZQU5GIFNlY3VyZSBTZXJ2ZXIgUm9vdCBDQTCC
3086
+ AiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBANvrayvmZFSVgpCjcqQZAZ2cC4Ffc0m6p6zz
3087
+ BE57lgvsEeBbphzOG9INgxwruJ4dfkUyYA8H6XdYfp9qyGFOtibBTI3/TO80sh9l2Ll49a2pcbnv
3088
+ T1gdpd50IJeh7WhM3pIXS7yr/2WanvtH2Vdy8wmhrnZEE26cLUQ5vPnHO6RYPUG9tMJJo8gN0pcv
3089
+ B2VSAKduyK9o7PQUlrZXH1bDOZ8rbeTzPvY1ZNoMHKGESy9LS+IsJJ1tk0DrtSOOMspvRdOoiXse
3090
+ zx76W0OLzc2oD2rKDF65nkeP8Nm2CgtYZRczuSPkdxl9y0oukntPLxB3sY0vaJxizOBQ+OyRp1RM
3091
+ VwnVdmPF6GUe7m1qzwmd+nxPrWAI/VaZDxUse6mAq4xhj0oHdkLePfTdsiQzW7i1o0TJrH93PB0j
3092
+ 7IKppuLIBkwC/qxcmZkLLxCKpvR/1Yd0DVlJRfbwcVw5Kda/SiOL9V8BY9KHcyi1Swr1+KuCLH5z
3093
+ JTIdC2MKF4EA/7Z2Xue0sUDKIbvVgFHlSFJnLNJhiQcND85Cd8BEc5xEUKDbEAotlRyBr+Qc5RQe
3094
+ 8TZBAQIvfXOn3kLMTOmJDVb3n5HUA8ZsyY/b2BzgQJhdZpmYgG4t/wHFzstGH6wCxkPmrqKEPMVO
3095
+ Hj1tyRRM4y5Bu8o5vzY8KhmqQYdOpc5LMnndkEl/AgMBAAGjYzBhMB8GA1UdIwQYMBaAFJxf0Gxj
3096
+ o1+TypOYCK2Mh6UsXME3MB0GA1UdDgQWBBScX9BsY6Nfk8qTmAitjIelLFzBNzAOBgNVHQ8BAf8E
3097
+ BAMCAYYwDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQsFAAOCAgEATh65isagmD9uw2nAalxJ
3098
+ UqzLK114OMHVVISfk/CHGT0sZonrDUL8zPB1hT+L9IBdeeUXZ701guLyPI59WzbLWoAAKfLOKyzx
3099
+ j6ptBZNscsdW699QIyjlRRA96Gejrw5VD5AJYu9LWaL2U/HANeQvwSS9eS9OICI7/RogsKQOLHDt
3100
+ dD+4E5UGUcjohybKpFtqFiGS3XNgnhAY3jyB6ugYw3yJ8otQPr0R4hUDqDZ9MwFsSBXXiJCZBMXM
3101
+ 5gf0vPSQ7RPi6ovDj6MzD8EpTBNO2hVWcXNyglD2mjN8orGoGjR0ZVzO0eurU+AagNjqOknkJjCb
3102
+ 5RyKqKkVMoaZkgoQI1YS4PbOTOK7vtuNknMBZi9iPrJyJ0U27U1W45eZ/zo1PqVUSlJZS2Db7v54
3103
+ EX9K3BR5YLZrZAPbFYPhor72I5dQ8AkzNqdxliXzuUJ92zg/LFis6ELhDtjTO0wugumDLmsx2d1H
3104
+ hk9tl5EuT+IocTUW0fJz/iUrB0ckYyfI+PbZa/wSMVYIwFNCr5zQM378BvAxRAMU8Vjq8moNqRGy
3105
+ g77FGr8H6lnco4g175x2MjxNBiLOFeXdntiP2t7SxDnlF4HPOEfrf4htWRvfn0IUrn7PqLBmZdo3
3106
+ r5+qPeoott7VMVgWglvquxl1AnMaykgaIZOQCo6ThKd9OyMYkomgjaw=
3107
+ -----END CERTIFICATE-----
3108
+
3109
+ Certum EC-384 CA
3110
+ ================
3111
+ -----BEGIN CERTIFICATE-----
3112
+ MIICZTCCAeugAwIBAgIQeI8nXIESUiClBNAt3bpz9DAKBggqhkjOPQQDAzB0MQswCQYDVQQGEwJQ
3113
+ TDEhMB8GA1UEChMYQXNzZWNvIERhdGEgU3lzdGVtcyBTLkEuMScwJQYDVQQLEx5DZXJ0dW0gQ2Vy
3114
+ dGlmaWNhdGlvbiBBdXRob3JpdHkxGTAXBgNVBAMTEENlcnR1bSBFQy0zODQgQ0EwHhcNMTgwMzI2
3115
+ MDcyNDU0WhcNNDMwMzI2MDcyNDU0WjB0MQswCQYDVQQGEwJQTDEhMB8GA1UEChMYQXNzZWNvIERh
3116
+ dGEgU3lzdGVtcyBTLkEuMScwJQYDVQQLEx5DZXJ0dW0gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkx
3117
+ GTAXBgNVBAMTEENlcnR1bSBFQy0zODQgQ0EwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAATEKI6rGFtq
3118
+ vm5kN2PkzeyrOvfMobgOgknXhimfoZTy42B4mIF4Bk3y7JoOV2CDn7TmFy8as10CW4kjPMIRBSqn
3119
+ iBMY81CE1700LCeJVf/OTOffph8oxPBUw7l8t1Ot68KjQjBAMA8GA1UdEwEB/wQFMAMBAf8wHQYD
3120
+ VR0OBBYEFI0GZnQkdjrzife81r1HfS+8EF9LMA4GA1UdDwEB/wQEAwIBBjAKBggqhkjOPQQDAwNo
3121
+ ADBlAjADVS2m5hjEfO/JUG7BJw+ch69u1RsIGL2SKcHvlJF40jocVYli5RsJHrpka/F2tNQCMQC0
3122
+ QoSZ/6vnnvuRlydd3LBbMHHOXjgaatkl5+r3YZJW+OraNsKHZZYuciUvf9/DE8k=
3123
+ -----END CERTIFICATE-----
3124
+
3125
+ Certum Trusted Root CA
3126
+ ======================
3127
+ -----BEGIN CERTIFICATE-----
3128
+ MIIFwDCCA6igAwIBAgIQHr9ZULjJgDdMBvfrVU+17TANBgkqhkiG9w0BAQ0FADB6MQswCQYDVQQG
3129
+ EwJQTDEhMB8GA1UEChMYQXNzZWNvIERhdGEgU3lzdGVtcyBTLkEuMScwJQYDVQQLEx5DZXJ0dW0g
3130
+ Q2VydGlmaWNhdGlvbiBBdXRob3JpdHkxHzAdBgNVBAMTFkNlcnR1bSBUcnVzdGVkIFJvb3QgQ0Ew
3131
+ HhcNMTgwMzE2MTIxMDEzWhcNNDMwMzE2MTIxMDEzWjB6MQswCQYDVQQGEwJQTDEhMB8GA1UEChMY
3132
+ QXNzZWNvIERhdGEgU3lzdGVtcyBTLkEuMScwJQYDVQQLEx5DZXJ0dW0gQ2VydGlmaWNhdGlvbiBB
3133
+ dXRob3JpdHkxHzAdBgNVBAMTFkNlcnR1bSBUcnVzdGVkIFJvb3QgQ0EwggIiMA0GCSqGSIb3DQEB
3134
+ AQUAA4ICDwAwggIKAoICAQDRLY67tzbqbTeRn06TpwXkKQMlzhyC93yZn0EGze2jusDbCSzBfN8p
3135
+ fktlL5On1AFrAygYo9idBcEq2EXxkd7fO9CAAozPOA/qp1x4EaTByIVcJdPTsuclzxFUl6s1wB52
3136
+ HO8AU5853BSlLCIls3Jy/I2z5T4IHhQqNwuIPMqw9MjCoa68wb4pZ1Xi/K1ZXP69VyywkI3C7Te2
3137
+ fJmItdUDmj0VDT06qKhF8JVOJVkdzZhpu9PMMsmN74H+rX2Ju7pgE8pllWeg8xn2A1bUatMn4qGt
3138
+ g/BKEiJ3HAVz4hlxQsDsdUaakFjgao4rpUYwBI4Zshfjvqm6f1bxJAPXsiEodg42MEx51UGamqi4
3139
+ NboMOvJEGyCI98Ul1z3G4z5D3Yf+xOr1Uz5MZf87Sst4WmsXXw3Hw09Omiqi7VdNIuJGmj8PkTQk
3140
+ fVXjjJU30xrwCSss0smNtA0Aq2cpKNgB9RkEth2+dv5yXMSFytKAQd8FqKPVhJBPC/PgP5sZ0jeJ
3141
+ P/J7UhyM9uH3PAeXjA6iWYEMspA90+NZRu0PqafegGtaqge2Gcu8V/OXIXoMsSt0Puvap2ctTMSY
3142
+ njYJdmZm/Bo/6khUHL4wvYBQv3y1zgD2DGHZ5yQD4OMBgQ692IU0iL2yNqh7XAjlRICMb/gv1SHK
3143
+ HRzQ+8S1h9E6Tsd2tTVItQIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBSM+xx1
3144
+ vALTn04uSNn5YFSqxLNP+jAOBgNVHQ8BAf8EBAMCAQYwDQYJKoZIhvcNAQENBQADggIBAEii1QAL
3145
+ LtA/vBzVtVRJHlpr9OTy4EA34MwUe7nJ+jW1dReTagVphZzNTxl4WxmB82M+w85bj/UvXgF2Ez8s
3146
+ ALnNllI5SW0ETsXpD4YN4fqzX4IS8TrOZgYkNCvozMrnadyHncI013nR03e4qllY/p0m+jiGPp2K
3147
+ h2RX5Rc64vmNueMzeMGQ2Ljdt4NR5MTMI9UGfOZR0800McD2RrsLrfw9EAUqO0qRJe6M1ISHgCq8
3148
+ CYyqOhNf6DR5UMEQGfnTKB7U0VEwKbOukGfWHwpjscWpxkIxYxeU72nLL/qMFH3EQxiJ2fAyQOaA
3149
+ 4kZf5ePBAFmo+eggvIksDkc0C+pXwlM2/KfUrzHN/gLldfq5Jwn58/U7yn2fqSLLiMmq0Uc9Nneo
3150
+ WWRrJ8/vJ8HjJLWG965+Mk2weWjROeiQWMODvA8s1pfrzgzhIMfatz7DP78v3DSk+yshzWePS/Tj
3151
+ 6tQ/50+6uaWTRRxmHyH6ZF5v4HaUMst19W7l9o/HuKTMqJZ9ZPskWkoDbGs4xugDQ5r3V7mzKWmT
3152
+ OPQD8rv7gmsHINFSH5pkAnuYZttcTVoP0ISVoDwUQwbKytu4QTbaakRnh6+v40URFWkIsr4WOZck
3153
+ bxJF0WddCajJFdr60qZfE2Efv4WstK2tBZQIgx51F9NxO5NQI1mg7TyRVJ12AMXDuDjb
3154
+ -----END CERTIFICATE-----
3155
+
3156
+ TunTrust Root CA
3157
+ ================
3158
+ -----BEGIN CERTIFICATE-----
3159
+ MIIFszCCA5ugAwIBAgIUEwLV4kBMkkaGFmddtLu7sms+/BMwDQYJKoZIhvcNAQELBQAwYTELMAkG
3160
+ A1UEBhMCVE4xNzA1BgNVBAoMLkFnZW5jZSBOYXRpb25hbGUgZGUgQ2VydGlmaWNhdGlvbiBFbGVj
3161
+ dHJvbmlxdWUxGTAXBgNVBAMMEFR1blRydXN0IFJvb3QgQ0EwHhcNMTkwNDI2MDg1NzU2WhcNNDQw
3162
+ NDI2MDg1NzU2WjBhMQswCQYDVQQGEwJUTjE3MDUGA1UECgwuQWdlbmNlIE5hdGlvbmFsZSBkZSBD
3163
+ ZXJ0aWZpY2F0aW9uIEVsZWN0cm9uaXF1ZTEZMBcGA1UEAwwQVHVuVHJ1c3QgUm9vdCBDQTCCAiIw
3164
+ DQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMPN0/y9BFPdDCA61YguBUtB9YOCfvdZn56eY+hz
3165
+ 2vYGqU8ftPkLHzmMmiDQfgbU7DTZhrx1W4eI8NLZ1KMKsmwb60ksPqxd2JQDoOw05TDENX37Jk0b
3166
+ bjBU2PWARZw5rZzJJQRNmpA+TkBuimvNKWfGzC3gdOgFVwpIUPp6Q9p+7FuaDmJ2/uqdHYVy7BG7
3167
+ NegfJ7/Boce7SBbdVtfMTqDhuazb1YMZGoXRlJfXyqNlC/M4+QKu3fZnz8k/9YosRxqZbwUN/dAd
3168
+ gjH8KcwAWJeRTIAAHDOFli/LQcKLEITDCSSJH7UP2dl3RxiSlGBcx5kDPP73lad9UKGAwqmDrViW
3169
+ VSHbhlnUr8a83YFuB9tgYv7sEG7aaAH0gxupPqJbI9dkxt/con3YS7qC0lH4Zr8GRuR5KiY2eY8f
3170
+ Tpkdso8MDhz/yV3A/ZAQprE38806JG60hZC/gLkMjNWb1sjxVj8agIl6qeIbMlEsPvLfe/ZdeikZ
3171
+ juXIvTZxi11Mwh0/rViizz1wTaZQmCXcI/m4WEEIcb9PuISgjwBUFfyRbVinljvrS5YnzWuioYas
3172
+ DXxU5mZMZl+QviGaAkYt5IPCgLnPSz7ofzwB7I9ezX/SKEIBlYrilz0QIX32nRzFNKHsLA4KUiwS
3173
+ VXAkPcvCFDVDXSdOvsC9qnyW5/yeYa1E0wCXAgMBAAGjYzBhMB0GA1UdDgQWBBQGmpsfU33x9aTI
3174
+ 04Y+oXNZtPdEITAPBgNVHRMBAf8EBTADAQH/MB8GA1UdIwQYMBaAFAaamx9TffH1pMjThj6hc1m0
3175
+ 90QhMA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQsFAAOCAgEAqgVutt0Vyb+zxiD2BkewhpMl
3176
+ 0425yAA/l/VSJ4hxyXT968pk21vvHl26v9Hr7lxpuhbI87mP0zYuQEkHDVneixCwSQXi/5E/S7fd
3177
+ Ao74gShczNxtr18UnH1YeA32gAm56Q6XKRm4t+v4FstVEuTGfbvE7Pi1HE4+Z7/FXxttbUcoqgRY
3178
+ YdZ2vyJ/0Adqp2RT8JeNnYA/u8EH22Wv5psymsNUk8QcCMNE+3tjEUPRahphanltkE8pjkcFwRJp
3179
+ adbGNjHh/PqAulxPxOu3Mqz4dWEX1xAZufHSCe96Qp1bWgvUxpVOKs7/B9dPfhgGiPEZtdmYu65x
3180
+ xBzndFlY7wyJz4sfdZMaBBSSSFCp61cpABbjNhzI+L/wM9VBD8TMPN3pM0MBkRArHtG5Xc0yGYuP
3181
+ jCB31yLEQtyEFpslbei0VXF/sHyz03FJuc9SpAQ/3D2gu68zngowYI7bnV2UqL1g52KAdoGDDIzM
3182
+ MEZJ4gzSqK/rYXHv5yJiqfdcZGyfFoxnNidF9Ql7v/YQCvGwjVRDjAS6oz/v4jXH+XTgbzRB0L9z
3183
+ ZVcg+ZtnemZoJE6AZb0QmQZZ8mWvuMZHu/2QeItBcy6vVR/cO5JyboTT0GFMDcx2V+IthSIVNg3r
3184
+ AZ3r2OvEhJn7wAzMMujjd9qDRIueVSjAi1jTkD5OGwDxFa2DK5o=
3185
+ -----END CERTIFICATE-----
3186
+
3187
+ HARICA TLS RSA Root CA 2021
3188
+ ===========================
3189
+ -----BEGIN CERTIFICATE-----
3190
+ MIIFpDCCA4ygAwIBAgIQOcqTHO9D88aOk8f0ZIk4fjANBgkqhkiG9w0BAQsFADBsMQswCQYDVQQG
3191
+ EwJHUjE3MDUGA1UECgwuSGVsbGVuaWMgQWNhZGVtaWMgYW5kIFJlc2VhcmNoIEluc3RpdHV0aW9u
3192
+ cyBDQTEkMCIGA1UEAwwbSEFSSUNBIFRMUyBSU0EgUm9vdCBDQSAyMDIxMB4XDTIxMDIxOTEwNTUz
3193
+ OFoXDTQ1MDIxMzEwNTUzN1owbDELMAkGA1UEBhMCR1IxNzA1BgNVBAoMLkhlbGxlbmljIEFjYWRl
3194
+ bWljIGFuZCBSZXNlYXJjaCBJbnN0aXR1dGlvbnMgQ0ExJDAiBgNVBAMMG0hBUklDQSBUTFMgUlNB
3195
+ IFJvb3QgQ0EgMjAyMTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAIvC569lmwVnlskN
3196
+ JLnQDmT8zuIkGCyEf3dRywQRNrhe7Wlxp57kJQmXZ8FHws+RFjZiPTgE4VGC/6zStGndLuwRo0Xu
3197
+ a2s7TL+MjaQenRG56Tj5eg4MmOIjHdFOY9TnuEFE+2uva9of08WRiFukiZLRgeaMOVig1mlDqa2Y
3198
+ Ulhu2wr7a89o+uOkXjpFc5gH6l8Cct4MpbOfrqkdtx2z/IpZ525yZa31MJQjB/OCFks1mJxTuy/K
3199
+ 5FrZx40d/JiZ+yykgmvwKh+OC19xXFyuQnspiYHLA6OZyoieC0AJQTPb5lh6/a6ZcMBaD9YThnEv
3200
+ dmn8kN3bLW7R8pv1GmuebxWMevBLKKAiOIAkbDakO/IwkfN4E8/BPzWr8R0RI7VDIp4BkrcYAuUR
3201
+ 0YLbFQDMYTfBKnya4dC6s1BG7oKsnTH4+yPiAwBIcKMJJnkVU2DzOFytOOqBAGMUuTNe3QvboEUH
3202
+ GjMJ+E20pwKmafTCWQWIZYVWrkvL4N48fS0ayOn7H6NhStYqE613TBoYm5EPWNgGVMWX+Ko/IIqm
3203
+ haZ39qb8HOLubpQzKoNQhArlT4b4UEV4AIHrW2jjJo3Me1xR9BQsQL4aYB16cmEdH2MtiKrOokWQ
3204
+ CPxrvrNQKlr9qEgYRtaQQJKQCoReaDH46+0N0x3GfZkYVVYnZS6NRcUk7M7jAgMBAAGjQjBAMA8G
3205
+ A1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFApII6ZgpJIKM+qTW8VX6iVNvRLuMA4GA1UdDwEB/wQE
3206
+ AwIBhjANBgkqhkiG9w0BAQsFAAOCAgEAPpBIqm5iFSVmewzVjIuJndftTgfvnNAUX15QvWiWkKQU
3207
+ EapobQk1OUAJ2vQJLDSle1mESSmXdMgHHkdt8s4cUCbjnj1AUz/3f5Z2EMVGpdAgS1D0NTsY9FVq
3208
+ QRtHBmg8uwkIYtlfVUKqrFOFrJVWNlar5AWMxajaH6NpvVMPxP/cyuN+8kyIhkdGGvMA9YCRotxD
3209
+ QpSbIPDRzbLrLFPCU3hKTwSUQZqPJzLB5UkZv/HywouoCjkxKLR9YjYsTewfM7Z+d21+UPCfDtcR
3210
+ j88YxeMn/ibvBZ3PzzfF0HvaO7AWhAw6k9a+F9sPPg4ZeAnHqQJyIkv3N3a6dcSFA1pj1bF1BcK5
3211
+ vZStjBWZp5N99sXzqnTPBIWUmAD04vnKJGW/4GKvyMX6ssmeVkjaef2WdhW+o45WxLM0/L5H9MG0
3212
+ qPzVMIho7suuyWPEdr6sOBjhXlzPrjoiUevRi7PzKzMHVIf6tLITe7pTBGIBnfHAT+7hOtSLIBD6
3213
+ Alfm78ELt5BGnBkpjNxvoEppaZS3JGWg/6w/zgH7IS79aPib8qXPMThcFarmlwDB31qlpzmq6YR/
3214
+ PFGoOtmUW4y/Twhx5duoXNTSpv4Ao8YWxw/ogM4cKGR0GQjTQuPOAF1/sdwTsOEFy9EgqoZ0njnn
3215
+ kf3/W9b3raYvAwtt41dU63ZTGI0RmLo=
3216
+ -----END CERTIFICATE-----
3217
+
3218
+ HARICA TLS ECC Root CA 2021
3219
+ ===========================
3220
+ -----BEGIN CERTIFICATE-----
3221
+ MIICVDCCAdugAwIBAgIQZ3SdjXfYO2rbIvT/WeK/zjAKBggqhkjOPQQDAzBsMQswCQYDVQQGEwJH
3222
+ UjE3MDUGA1UECgwuSGVsbGVuaWMgQWNhZGVtaWMgYW5kIFJlc2VhcmNoIEluc3RpdHV0aW9ucyBD
3223
+ QTEkMCIGA1UEAwwbSEFSSUNBIFRMUyBFQ0MgUm9vdCBDQSAyMDIxMB4XDTIxMDIxOTExMDExMFoX
3224
+ DTQ1MDIxMzExMDEwOVowbDELMAkGA1UEBhMCR1IxNzA1BgNVBAoMLkhlbGxlbmljIEFjYWRlbWlj
3225
+ IGFuZCBSZXNlYXJjaCBJbnN0aXR1dGlvbnMgQ0ExJDAiBgNVBAMMG0hBUklDQSBUTFMgRUNDIFJv
3226
+ b3QgQ0EgMjAyMTB2MBAGByqGSM49AgEGBSuBBAAiA2IABDgI/rGgltJ6rK9JOtDA4MM7KKrxcm1l
3227
+ AEeIhPyaJmuqS7psBAqIXhfyVYf8MLA04jRYVxqEU+kw2anylnTDUR9YSTHMmE5gEYd103KUkE+b
3228
+ ECUqqHgtvpBBWJAVcqeht6NCMEAwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUyRtTgRL+BNUW
3229
+ 0aq8mm+3oJUZbsowDgYDVR0PAQH/BAQDAgGGMAoGCCqGSM49BAMDA2cAMGQCMBHervjcToiwqfAi
3230
+ rcJRQO9gcS3ujwLEXQNwSaSS6sUUiHCm0w2wqsosQJz76YJumgIwK0eaB8bRwoF8yguWGEEbo/Qw
3231
+ CZ61IygNnxS2PFOiTAZpffpskcYqSUXm7LcT4Tps
3232
+ -----END CERTIFICATE-----
includes/vendor/composer/ca-bundle/src/CaBundle.php CHANGED
@@ -20,8 +20,11 @@ use Symfony\Component\Process\PhpProcess;
20
  */
21
  class CaBundle
22
  {
 
23
  private static $caPath;
 
24
  private static $caFileValidity = array();
 
25
  private static $useOpensslParse;
26
 
27
  /**
@@ -68,7 +71,6 @@ class CaBundle
68
  }
69
  $caBundlePaths = array();
70
 
71
-
72
  // If SSL_CERT_FILE env variable points to a valid certificate/bundle, use that.
73
  // This mimics how OpenSSL uses the SSL_CERT_FILE env variable.
74
  $caBundlePaths[] = self::getEnvVariable('SSL_CERT_FILE');
@@ -102,11 +104,11 @@ class CaBundle
102
  $caBundlePaths = array_merge($caBundlePaths, $otherLocations);
103
 
104
  foreach ($caBundlePaths as $caBundle) {
105
- if (self::caFileUsable($caBundle, $logger)) {
106
  return self::$caPath = $caBundle;
107
  }
108
 
109
- if (self::caDirUsable($caBundle)) {
110
  return self::$caPath = $caBundle;
111
  }
112
  }
@@ -128,8 +130,13 @@ class CaBundle
128
  // cURL does not understand 'phar://' paths
129
  // see https://github.com/composer/ca-bundle/issues/10
130
  if (0 === strpos($caBundleFile, 'phar://')) {
 
 
 
 
 
131
  file_put_contents(
132
- $tempCaBundleFile = tempnam(sys_get_temp_dir(), 'openssl-ca-bundle-'),
133
  file_get_contents($caBundleFile)
134
  );
135
 
@@ -173,9 +180,16 @@ class CaBundle
173
  }
174
 
175
  $isValid = !empty($contents);
176
- } else {
177
  $contents = preg_replace("/^(\\-+(?:BEGIN|END))\\s+TRUSTED\\s+(CERTIFICATE\\-+)\$/m", '$1 $2', $contents);
178
- $isValid = (bool) openssl_x509_parse($contents);
 
 
 
 
 
 
 
179
  }
180
 
181
  if ($logger) {
@@ -210,7 +224,7 @@ class CaBundle
210
  if (
211
  (PHP_VERSION_ID < 50400 && PHP_VERSION_ID >= 50328)
212
  || (PHP_VERSION_ID < 50500 && PHP_VERSION_ID >= 50423)
213
- || (PHP_VERSION_ID < 50600 && PHP_VERSION_ID >= 50507)
214
  ) {
215
  // This version of PHP has the fix for CVE-2013-6420 applied.
216
  return self::$useOpensslParse = true;
@@ -277,7 +291,8 @@ EOT;
277
  $errorOutput = trim($process->getErrorOutput());
278
 
279
  if (
280
- count($output) === 3
 
281
  && $output[0] === sprintf('string(%d) "%s"', strlen(PHP_VERSION), PHP_VERSION)
282
  && $output[1] === 'string(27) "stefan.esser@sektioneins.de"'
283
  && $output[2] === 'int(-1)'
@@ -292,6 +307,7 @@ EOT;
292
 
293
  /**
294
  * Resets the static caches
 
295
  */
296
  public static function reset()
297
  {
@@ -300,6 +316,10 @@ EOT;
300
  self::$useOpensslParse = null;
301
  }
302
 
 
 
 
 
303
  private static function getEnvVariable($name)
304
  {
305
  if (isset($_SERVER[$name])) {
@@ -313,13 +333,99 @@ EOT;
313
  return false;
314
  }
315
 
 
 
 
 
 
316
  private static function caFileUsable($certFile, LoggerInterface $logger = null)
317
  {
318
- return $certFile && @is_file($certFile) && @is_readable($certFile) && static::validateCaFile($certFile, $logger);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
319
  }
320
 
321
- private static function caDirUsable($certDir)
 
 
 
 
 
322
  {
323
- return $certDir && @is_dir($certDir) && @is_readable($certDir) && glob($certDir . '/*');
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
324
  }
325
  }
20
  */
21
  class CaBundle
22
  {
23
+ /** @var string|null */
24
  private static $caPath;
25
+ /** @var array<string, bool> */
26
  private static $caFileValidity = array();
27
+ /** @var bool|null */
28
  private static $useOpensslParse;
29
 
30
  /**
71
  }
72
  $caBundlePaths = array();
73
 
 
74
  // If SSL_CERT_FILE env variable points to a valid certificate/bundle, use that.
75
  // This mimics how OpenSSL uses the SSL_CERT_FILE env variable.
76
  $caBundlePaths[] = self::getEnvVariable('SSL_CERT_FILE');
104
  $caBundlePaths = array_merge($caBundlePaths, $otherLocations);
105
 
106
  foreach ($caBundlePaths as $caBundle) {
107
+ if ($caBundle && self::caFileUsable($caBundle, $logger)) {
108
  return self::$caPath = $caBundle;
109
  }
110
 
111
+ if ($caBundle && self::caDirUsable($caBundle, $logger)) {
112
  return self::$caPath = $caBundle;
113
  }
114
  }
130
  // cURL does not understand 'phar://' paths
131
  // see https://github.com/composer/ca-bundle/issues/10
132
  if (0 === strpos($caBundleFile, 'phar://')) {
133
+ $tempCaBundleFile = tempnam(sys_get_temp_dir(), 'openssl-ca-bundle-');
134
+ if (false === $tempCaBundleFile) {
135
+ throw new \RuntimeException('Could not create a temporary file to store the bundled CA file');
136
+ }
137
+
138
  file_put_contents(
139
+ $tempCaBundleFile,
140
  file_get_contents($caBundleFile)
141
  );
142
 
180
  }
181
 
182
  $isValid = !empty($contents);
183
+ } elseif (is_string($contents) && strlen($contents) > 0) {
184
  $contents = preg_replace("/^(\\-+(?:BEGIN|END))\\s+TRUSTED\\s+(CERTIFICATE\\-+)\$/m", '$1 $2', $contents);
185
+ if (null === $contents) {
186
+ // regex extraction failed
187
+ $isValid = false;
188
+ } else {
189
+ $isValid = (bool) openssl_x509_parse($contents);
190
+ }
191
+ } else {
192
+ $isValid = false;
193
  }
194
 
195
  if ($logger) {
224
  if (
225
  (PHP_VERSION_ID < 50400 && PHP_VERSION_ID >= 50328)
226
  || (PHP_VERSION_ID < 50500 && PHP_VERSION_ID >= 50423)
227
+ || PHP_VERSION_ID >= 50507
228
  ) {
229
  // This version of PHP has the fix for CVE-2013-6420 applied.
230
  return self::$useOpensslParse = true;
291
  $errorOutput = trim($process->getErrorOutput());
292
 
293
  if (
294
+ is_array($output)
295
+ && count($output) === 3
296
  && $output[0] === sprintf('string(%d) "%s"', strlen(PHP_VERSION), PHP_VERSION)
297
  && $output[1] === 'string(27) "stefan.esser@sektioneins.de"'
298
  && $output[2] === 'int(-1)'
307
 
308
  /**
309
  * Resets the static caches
310
+ * @return void
311
  */
312
  public static function reset()
313
  {
316
  self::$useOpensslParse = null;
317
  }
318
 
319
+ /**
320
+ * @param string $name
321
+ * @return string|false
322
+ */
323
  private static function getEnvVariable($name)
324
  {
325
  if (isset($_SERVER[$name])) {
333
  return false;
334
  }
335
 
336
+ /**
337
+ * @param string|false $certFile
338
+ * @param LoggerInterface|null $logger
339
+ * @return bool
340
+ */
341
  private static function caFileUsable($certFile, LoggerInterface $logger = null)
342
  {
343
+ return $certFile
344
+ && static::isFile($certFile, $logger)
345
+ && static::isReadable($certFile, $logger)
346
+ && static::validateCaFile($certFile, $logger);
347
+ }
348
+
349
+ /**
350
+ * @param string|false $certDir
351
+ * @param LoggerInterface|null $logger
352
+ * @return bool
353
+ */
354
+ private static function caDirUsable($certDir, LoggerInterface $logger = null)
355
+ {
356
+ return $certDir
357
+ && static::isDir($certDir, $logger)
358
+ && static::isReadable($certDir, $logger)
359
+ && static::glob($certDir . '/*', $logger);
360
+ }
361
+
362
+ /**
363
+ * @param string $certFile
364
+ * @param LoggerInterface|null $logger
365
+ * @return bool
366
+ */
367
+ private static function isFile($certFile, LoggerInterface $logger = null)
368
+ {
369
+ $isFile = @is_file($certFile);
370
+ if (!$isFile && $logger) {
371
+ $logger->debug(sprintf('Checked CA file %s does not exist or it is not a file.', $certFile));
372
+ }
373
+
374
+ return $isFile;
375
+ }
376
+
377
+ /**
378
+ * @param string $certDir
379
+ * @param LoggerInterface|null $logger
380
+ * @return bool
381
+ */
382
+ private static function isDir($certDir, LoggerInterface $logger = null)
383
+ {
384
+ $isDir = @is_dir($certDir);
385
+ if (!$isDir && $logger) {
386
+ $logger->debug(sprintf('Checked directory %s does not exist or it is not a directory.', $certDir));
387
+ }
388
+
389
+ return $isDir;
390
+ }
391
+
392
+ /**
393
+ * @param string $certFileOrDir
394
+ * @param LoggerInterface|null $logger
395
+ * @return bool
396
+ */
397
+ private static function isReadable($certFileOrDir, LoggerInterface $logger = null)
398
+ {
399
+ $isReadable = @is_readable($certFileOrDir);
400
+ if (!$isReadable && $logger) {
401
+ $logger->debug(sprintf('Checked file or directory %s is not readable.', $certFileOrDir));
402
+ }
403
+
404
+ return $isReadable;
405
  }
406
 
407
+ /**
408
+ * @param string $pattern
409
+ * @param LoggerInterface|null $logger
410
+ * @return bool
411
+ */
412
+ private static function glob($pattern, LoggerInterface $logger = null)
413
  {
414
+ $certs = glob($pattern);
415
+ if ($certs === false) {
416
+ if ($logger) {
417
+ $logger->debug(sprintf("An error occurred while trying to find certificates for pattern: %s", $pattern));
418
+ }
419
+ return false;
420
+ }
421
+
422
+ if (count($certs) === 0) {
423
+ if ($logger) {
424
+ $logger->debug(sprintf("No CA files found for pattern: %s", $pattern));
425
+ }
426
+ return false;
427
+ }
428
+
429
+ return true;
430
  }
431
  }
includes/vendor/composer/installed.json CHANGED
@@ -1,468 +1,482 @@
1
- [
2
- {
3
- "name": "composer/ca-bundle",
4
- "version": "1.2.8",
5
- "version_normalized": "1.2.8.0",
6
- "source": {
7
- "type": "git",
8
- "url": "https://github.com/composer/ca-bundle.git",
9
- "reference": "8a7ecad675253e4654ea05505233285377405215"
10
- },
11
- "dist": {
12
- "type": "zip",
13
- "url": "https://api.github.com/repos/composer/ca-bundle/zipball/8a7ecad675253e4654ea05505233285377405215",
14
- "reference": "8a7ecad675253e4654ea05505233285377405215",
15
- "shasum": ""
16
- },
17
- "require": {
18
- "ext-openssl": "*",
19
- "ext-pcre": "*",
20
- "php": "^5.3.2 || ^7.0 || ^8.0"
21
- },
22
- "require-dev": {
23
- "phpunit/phpunit": "^4.8.35 || ^5.7 || 6.5 - 8",
24
- "psr/log": "^1.0",
25
- "symfony/process": "^2.5 || ^3.0 || ^4.0 || ^5.0"
26
- },
27
- "time": "2020-08-23T12:54:47+00:00",
28
- "type": "library",
29
- "extra": {
30
- "branch-alias": {
31
- "dev-master": "1.x-dev"
32
- }
33
- },
34
- "installation-source": "dist",
35
- "autoload": {
36
- "psr-4": {
37
- "Composer\\CaBundle\\": "src"
38
- }
39
- },
40
- "notification-url": "https://packagist.org/downloads/",
41
- "license": [
42
- "MIT"
43
- ],
44
- "authors": [
45
- {
46
- "name": "Jordi Boggiano",
47
- "email": "j.boggiano@seld.be",
48
- "homepage": "http://seld.be"
49
- }
50
- ],
51
- "description": "Lets you find a path to the system CA bundle, and includes a fallback to the Mozilla CA bundle.",
52
- "keywords": [
53
- "cabundle",
54
- "cacert",
55
- "certificate",
56
- "ssl",
57
- "tls"
58
- ],
59
- "support": {
60
- "irc": "irc://irc.freenode.org/composer",
61
- "issues": "https://github.com/composer/ca-bundle/issues",
62
- "source": "https://github.com/composer/ca-bundle/tree/1.2.8"
63
- },
64
- "funding": [
65
- {
66
- "url": "https://packagist.com",
67
- "type": "custom"
68
- },
69
- {
70
- "url": "https://github.com/composer",
71
- "type": "github"
72
- },
73
- {
74
- "url": "https://tidelift.com/funding/github/packagist/composer/composer",
75
- "type": "tidelift"
76
- }
77
- ]
78
- },
79
- {
80
- "name": "geoip2/geoip2",
81
- "version": "v2.10.0",
82
- "version_normalized": "2.10.0.0",
83
- "source": {
84
- "type": "git",
85
- "url": "https://github.com/maxmind/GeoIP2-php.git",
86
- "reference": "419557cd21d9fe039721a83490701a58c8ce784a"
87
- },
88
- "dist": {
89
- "type": "zip",
90
- "url": "https://api.github.com/repos/maxmind/GeoIP2-php/zipball/419557cd21d9fe039721a83490701a58c8ce784a",
91
- "reference": "419557cd21d9fe039721a83490701a58c8ce784a",
92
- "shasum": ""
93
- },
94
- "require": {
95
- "ext-json": "*",
96
- "maxmind-db/reader": "~1.5",
97
- "maxmind/web-service-common": "~0.6",
98
- "php": ">=5.6"
99
- },
100
- "require-dev": {
101
- "friendsofphp/php-cs-fixer": "2.*",
102
- "phpunit/phpunit": "5.*",
103
- "squizlabs/php_codesniffer": "3.*"
104
- },
105
- "time": "2019-12-12T18:48:39+00:00",
106
- "type": "library",
107
- "installation-source": "dist",
108
- "autoload": {
109
- "psr-4": {
110
- "GeoIp2\\": "src"
111
- }
112
- },
113
- "notification-url": "https://packagist.org/downloads/",
114
- "license": [
115
- "Apache-2.0"
116
- ],
117
- "authors": [
118
- {
119
- "name": "Gregory J. Oschwald",
120
- "email": "goschwald@maxmind.com",
121
- "homepage": "https://www.maxmind.com/"
122
- }
123
- ],
124
- "description": "MaxMind GeoIP2 PHP API",
125
- "homepage": "https://github.com/maxmind/GeoIP2-php",
126
- "keywords": [
127
- "IP",
128
- "geoip",
129
- "geoip2",
130
- "geolocation",
131
- "maxmind"
132
- ],
133
- "support": {
134
- "issues": "https://github.com/maxmind/GeoIP2-php/issues",
135
- "source": "https://github.com/maxmind/GeoIP2-php/tree/master"
136
- }
137
- },
138
- {
139
- "name": "jaybizzle/crawler-detect",
140
- "version": "v1.2.102",
141
- "version_normalized": "1.2.102.0",
142
- "source": {
143
- "type": "git",
144
- "url": "https://github.com/JayBizzle/Crawler-Detect.git",
145
- "reference": "346cfd72d11bb41f15e82654e532dc55360612ac"
146
- },
147
- "dist": {
148
- "type": "zip",
149
- "url": "https://api.github.com/repos/JayBizzle/Crawler-Detect/zipball/346cfd72d11bb41f15e82654e532dc55360612ac",
150
- "reference": "346cfd72d11bb41f15e82654e532dc55360612ac",
151
- "shasum": ""
152
- },
153
- "require": {
154
- "php": ">=5.3.0"
155
- },
156
- "require-dev": {
157
- "phpunit/phpunit": "^4.8|^5.5|^6.5"
158
- },
159
- "time": "2020-11-04T19:23:01+00:00",
160
- "type": "library",
161
- "installation-source": "dist",
162
- "autoload": {
163
- "psr-4": {
164
- "Jaybizzle\\CrawlerDetect\\": "src/"
165
- }
166
- },
167
- "notification-url": "https://packagist.org/downloads/",
168
- "license": [
169
- "MIT"
170
- ],
171
- "authors": [
172
- {
173
- "name": "Mark Beech",
174
- "email": "m@rkbee.ch",
175
- "role": "Developer"
176
- }
177
- ],
178
- "description": "CrawlerDetect is a PHP class for detecting bots/crawlers/spiders via the user agent",
179
- "homepage": "https://github.com/JayBizzle/Crawler-Detect/",
180
- "keywords": [
181
- "crawler",
182
- "crawler detect",
183
- "crawler detector",
184
- "crawlerdetect",
185
- "php crawler detect"
186
- ],
187
- "support": {
188
- "issues": "https://github.com/JayBizzle/Crawler-Detect/issues",
189
- "source": "https://github.com/JayBizzle/Crawler-Detect/tree/v1.2.102"
190
- }
191
- },
192
- {
193
- "name": "maxmind-db/reader",
194
- "version": "v1.6.0",
195
- "version_normalized": "1.6.0.0",
196
- "source": {
197
- "type": "git",
198
- "url": "https://github.com/maxmind/MaxMind-DB-Reader-php.git",
199
- "reference": "febd4920bf17c1da84cef58e56a8227dfb37fbe4"
200
- },
201
- "dist": {
202
- "type": "zip",
203
- "url": "https://api.github.com/repos/maxmind/MaxMind-DB-Reader-php/zipball/febd4920bf17c1da84cef58e56a8227dfb37fbe4",
204
- "reference": "febd4920bf17c1da84cef58e56a8227dfb37fbe4",
205
- "shasum": ""
206
- },
207
- "require": {
208
- "php": ">=5.6"
209
- },
210
- "conflict": {
211
- "ext-maxminddb": "<1.6.0,>=2.0.0"
212
- },
213
- "require-dev": {
214
- "friendsofphp/php-cs-fixer": "2.*",
215
- "php-coveralls/php-coveralls": "^2.1",
216
- "phpunit/phpcov": "^3.0",
217
- "phpunit/phpunit": "5.*",
218
- "squizlabs/php_codesniffer": "3.*"
219
- },
220
- "suggest": {
221
- "ext-bcmath": "bcmath or gmp is required for decoding larger integers with the pure PHP decoder",
222
- "ext-gmp": "bcmath or gmp is required for decoding larger integers with the pure PHP decoder",
223
- "ext-maxminddb": "A C-based database decoder that provides significantly faster lookups"
224
- },
225
- "time": "2019-12-19T22:59:03+00:00",
226
- "type": "library",
227
- "installation-source": "dist",
228
- "autoload": {
229
- "psr-4": {
230
- "MaxMind\\Db\\": "src/MaxMind/Db"
231
- }
232
- },
233
- "notification-url": "https://packagist.org/downloads/",
234
- "license": [
235
- "Apache-2.0"
236
- ],
237
- "authors": [
238
- {
239
- "name": "Gregory J. Oschwald",
240
- "email": "goschwald@maxmind.com",
241
- "homepage": "https://www.maxmind.com/"
242
- }
243
- ],
244
- "description": "MaxMind DB Reader API",
245
- "homepage": "https://github.com/maxmind/MaxMind-DB-Reader-php",
246
- "keywords": [
247
- "database",
248
- "geoip",
249
- "geoip2",
250
- "geolocation",
251
- "maxmind"
252
- ]
253
- },
254
- {
255
- "name": "maxmind/web-service-common",
256
- "version": "v0.7.0",
257
- "version_normalized": "0.7.0.0",
258
- "source": {
259
- "type": "git",
260
- "url": "https://github.com/maxmind/web-service-common-php.git",
261
- "reference": "74c996c218ada5c639c8c2f076756e059f5552fc"
262
- },
263
- "dist": {
264
- "type": "zip",
265
- "url": "https://api.github.com/repos/maxmind/web-service-common-php/zipball/74c996c218ada5c639c8c2f076756e059f5552fc",
266
- "reference": "74c996c218ada5c639c8c2f076756e059f5552fc",
267
- "shasum": ""
268
- },
269
- "require": {
270
- "composer/ca-bundle": "^1.0.3",
271
- "ext-curl": "*",
272
- "ext-json": "*",
273
- "php": ">=5.6"
274
- },
275
- "require-dev": {
276
- "friendsofphp/php-cs-fixer": "2.*",
277
- "phpunit/phpunit": "^4.8.36 || ^5.7 || ^6.5 || ^7.0",
278
- "squizlabs/php_codesniffer": "3.*"
279
- },
280
- "time": "2020-05-06T14:07:26+00:00",
281
- "type": "library",
282
- "installation-source": "dist",
283
- "autoload": {
284
- "psr-4": {
285
- "MaxMind\\Exception\\": "src/Exception",
286
- "MaxMind\\WebService\\": "src/WebService"
287
- }
288
- },
289
- "notification-url": "https://packagist.org/downloads/",
290
- "license": [
291
- "Apache-2.0"
292
- ],
293
- "authors": [
294
- {
295
- "name": "Gregory Oschwald",
296
- "email": "goschwald@maxmind.com"
297
- }
298
- ],
299
- "description": "Internal MaxMind Web Service API",
300
- "homepage": "https://github.com/maxmind/web-service-common-php"
301
- },
302
- {
303
- "name": "psr/cache",
304
- "version": "1.0.1",
305
- "version_normalized": "1.0.1.0",
306
- "source": {
307
- "type": "git",
308
- "url": "https://github.com/php-fig/cache.git",
309
- "reference": "d11b50ad223250cf17b86e38383413f5a6764bf8"
310
- },
311
- "dist": {
312
- "type": "zip",
313
- "url": "https://api.github.com/repos/php-fig/cache/zipball/d11b50ad223250cf17b86e38383413f5a6764bf8",
314
- "reference": "d11b50ad223250cf17b86e38383413f5a6764bf8",
315
- "shasum": ""
316
- },
317
- "require": {
318
- "php": ">=5.3.0"
319
- },
320
- "time": "2016-08-06T20:24:11+00:00",
321
- "type": "library",
322
- "extra": {
323
- "branch-alias": {
324
- "dev-master": "1.0.x-dev"
325
- }
326
- },
327
- "installation-source": "dist",
328
- "autoload": {
329
- "psr-4": {
330
- "Psr\\Cache\\": "src/"
331
- }
332
- },
333
- "notification-url": "https://packagist.org/downloads/",
334
- "license": [
335
- "MIT"
336
- ],
337
- "authors": [
338
- {
339
- "name": "PHP-FIG",
340
- "homepage": "http://www.php-fig.org/"
341
- }
342
- ],
343
- "description": "Common interface for caching libraries",
344
- "keywords": [
345
- "cache",
346
- "psr",
347
- "psr-6"
348
- ]
349
- },
350
- {
351
- "name": "s1lentium/iptools",
352
- "version": "v1.1.1",
353
- "version_normalized": "1.1.1.0",
354
- "source": {
355
- "type": "git",
356
- "url": "https://github.com/S1lentium/IPTools.git",
357
- "reference": "f6f8ab6132ca7443bd7cced1681f5066d725fd5f"
358
- },
359
- "dist": {
360
- "type": "zip",
361
- "url": "https://api.github.com/repos/S1lentium/IPTools/zipball/f6f8ab6132ca7443bd7cced1681f5066d725fd5f",
362
- "reference": "f6f8ab6132ca7443bd7cced1681f5066d725fd5f",
363
- "shasum": ""
364
- },
365
- "require": {
366
- "ext-bcmath": "*",
367
- "php": ">=5.4.0"
368
- },
369
- "require-dev": {
370
- "phpunit/phpunit": "~4.0",
371
- "satooshi/php-coveralls": "~1.0"
372
- },
373
- "time": "2018-09-19T06:15:53+00:00",
374
- "type": "library",
375
- "installation-source": "dist",
376
- "autoload": {
377
- "psr-4": {
378
- "IPTools\\": "src/"
379
- }
380
- },
381
- "notification-url": "https://packagist.org/downloads/",
382
- "license": [
383
- "MIT"
384
- ],
385
- "authors": [
386
- {
387
- "name": "Safarov Alisher",
388
- "email": "alisher.safarov@outlook.com",
389
- "homepage": "https://github.com/S1lentium"
390
- }
391
- ],
392
- "description": "PHP Library for manipulating network addresses (IPv4 and IPv6)",
393
- "keywords": [
394
- "IP",
395
- "IP-Tools",
396
- "cidr",
397
- "ipv4",
398
- "ipv6",
399
- "network",
400
- "subnet"
401
- ]
402
- },
403
- {
404
- "name": "whichbrowser/parser",
405
- "version": "v2.0.37",
406
- "version_normalized": "2.0.37.0",
407
- "source": {
408
- "type": "git",
409
- "url": "https://github.com/WhichBrowser/Parser-PHP.git",
410
- "reference": "9c6ad8eadc23294b1c66d92876c11f13c5d4cf48"
411
- },
412
- "dist": {
413
- "type": "zip",
414
- "url": "https://api.github.com/repos/WhichBrowser/Parser-PHP/zipball/9c6ad8eadc23294b1c66d92876c11f13c5d4cf48",
415
- "reference": "9c6ad8eadc23294b1c66d92876c11f13c5d4cf48",
416
- "shasum": ""
417
- },
418
- "require": {
419
- "php": ">=5.4.0",
420
- "psr/cache": "^1.0"
421
- },
422
- "require-dev": {
423
- "icomefromthenet/reverse-regex": "0.0.6.3",
424
- "phpunit/php-code-coverage": "^2.2|^3.0",
425
- "phpunit/phpunit": "^4.0|^5.0",
426
- "satooshi/php-coveralls": "^1.0",
427
- "squizlabs/php_codesniffer": "2.5.*",
428
- "symfony/yaml": ">=2.8"
429
- },
430
- "suggest": {
431
- "cache/array-adapter": "Allows testing of the caching functionality"
432
- },
433
- "time": "2018-10-02T09:26:41+00:00",
434
- "type": "library",
435
- "installation-source": "dist",
436
- "autoload": {
437
- "psr-4": {
438
- "WhichBrowser\\": [
439
- "src/",
440
- "tests/src/"
441
- ]
442
- }
443
- },
444
- "notification-url": "https://packagist.org/downloads/",
445
- "license": [
446
- "MIT"
447
- ],
448
- "authors": [
449
- {
450
- "name": "Niels Leenheer",
451
- "email": "niels@leenheer.nl",
452
- "role": "Developer"
453
- }
454
- ],
455
- "description": "Useragent sniffing library for PHP",
456
- "homepage": "http://whichbrowser.net",
457
- "keywords": [
458
- "browser",
459
- "sniffing",
460
- "ua",
461
- "useragent"
462
- ],
463
- "support": {
464
- "issues": "https://github.com/WhichBrowser/Parser-PHP/issues",
465
- "source": "https://github.com/WhichBrowser/Parser-PHP/tree/master"
 
 
 
 
 
 
 
 
 
 
 
 
466
  }
467
- }
468
- ]
 
 
1
+ {
2
+ "packages": [
3
+ {
4
+ "name": "composer/ca-bundle",
5
+ "version": "1.3.1",
6
+ "version_normalized": "1.3.1.0",
7
+ "source": {
8
+ "type": "git",
9
+ "url": "https://github.com/composer/ca-bundle.git",
10
+ "reference": "4c679186f2aca4ab6a0f1b0b9cf9252decb44d0b"
11
+ },
12
+ "dist": {
13
+ "type": "zip",
14
+ "url": "https://api.github.com/repos/composer/ca-bundle/zipball/4c679186f2aca4ab6a0f1b0b9cf9252decb44d0b",
15
+ "reference": "4c679186f2aca4ab6a0f1b0b9cf9252decb44d0b",
16
+ "shasum": ""
17
+ },
18
+ "require": {
19
+ "ext-openssl": "*",
20
+ "ext-pcre": "*",
21
+ "php": "^5.3.2 || ^7.0 || ^8.0"
22
+ },
23
+ "require-dev": {
24
+ "phpstan/phpstan": "^0.12.55",
25
+ "psr/log": "^1.0",
26
+ "symfony/phpunit-bridge": "^4.2 || ^5",
27
+ "symfony/process": "^2.5 || ^3.0 || ^4.0 || ^5.0 || ^6.0"
28
+ },
29
+ "time": "2021-10-28T20:44:15+00:00",
30
+ "type": "library",
31
+ "extra": {
32
+ "branch-alias": {
33
+ "dev-main": "1.x-dev"
34
+ }
35
+ },
36
+ "installation-source": "dist",
37
+ "autoload": {
38
+ "psr-4": {
39
+ "Composer\\CaBundle\\": "src"
40
+ }
41
+ },
42
+ "notification-url": "https://packagist.org/downloads/",
43
+ "license": [
44
+ "MIT"
45
+ ],
46
+ "authors": [
47
+ {
48
+ "name": "Jordi Boggiano",
49
+ "email": "j.boggiano@seld.be",
50
+ "homepage": "http://seld.be"
51
+ }
52
+ ],
53
+ "description": "Lets you find a path to the system CA bundle, and includes a fallback to the Mozilla CA bundle.",
54
+ "keywords": [
55
+ "cabundle",
56
+ "cacert",
57
+ "certificate",
58
+ "ssl",
59
+ "tls"
60
+ ],
61
+ "support": {
62
+ "irc": "irc://irc.freenode.org/composer",
63
+ "issues": "https://github.com/composer/ca-bundle/issues",
64
+ "source": "https://github.com/composer/ca-bundle/tree/1.3.1"
65
+ },
66
+ "funding": [
67
+ {
68
+ "url": "https://packagist.com",
69
+ "type": "custom"
70
+ },
71
+ {
72
+ "url": "https://github.com/composer",
73
+ "type": "github"
74
+ },
75
+ {
76
+ "url": "https://tidelift.com/funding/github/packagist/composer/composer",
77
+ "type": "tidelift"
78
+ }
79
+ ],
80
+ "install-path": "./ca-bundle"
81
+ },
82
+ {
83
+ "name": "geoip2/geoip2",
84
+ "version": "v2.10.0",
85
+ "version_normalized": "2.10.0.0",
86
+ "source": {
87
+ "type": "git",
88
+ "url": "https://github.com/maxmind/GeoIP2-php.git",
89
+ "reference": "419557cd21d9fe039721a83490701a58c8ce784a"
90
+ },
91
+ "dist": {
92
+ "type": "zip",
93
+ "url": "https://api.github.com/repos/maxmind/GeoIP2-php/zipball/419557cd21d9fe039721a83490701a58c8ce784a",
94
+ "reference": "419557cd21d9fe039721a83490701a58c8ce784a",
95
+ "shasum": ""
96
+ },
97
+ "require": {
98
+ "ext-json": "*",
99
+ "maxmind-db/reader": "~1.5",
100
+ "maxmind/web-service-common": "~0.6",
101
+ "php": ">=5.6"
102
+ },
103
+ "require-dev": {
104
+ "friendsofphp/php-cs-fixer": "2.*",
105
+ "phpunit/phpunit": "5.*",
106
+ "squizlabs/php_codesniffer": "3.*"
107
+ },
108
+ "time": "2019-12-12T18:48:39+00:00",
109
+ "type": "library",
110
+ "installation-source": "dist",
111
+ "autoload": {
112
+ "psr-4": {
113
+ "GeoIp2\\": "src"
114
+ }
115
+ },
116
+ "notification-url": "https://packagist.org/downloads/",
117
+ "license": [
118
+ "Apache-2.0"
119
+ ],
120
+ "authors": [
121
+ {
122
+ "name": "Gregory J. Oschwald",
123
+ "email": "goschwald@maxmind.com",
124
+ "homepage": "https://www.maxmind.com/"
125
+ }
126
+ ],
127
+ "description": "MaxMind GeoIP2 PHP API",
128
+ "homepage": "https://github.com/maxmind/GeoIP2-php",
129
+ "keywords": [
130
+ "IP",
131
+ "geoip",
132
+ "geoip2",
133
+ "geolocation",
134
+ "maxmind"
135
+ ],
136
+ "support": {
137
+ "issues": "https://github.com/maxmind/GeoIP2-php/issues",
138
+ "source": "https://github.com/maxmind/GeoIP2-php/tree/master"
139
+ },
140
+ "install-path": "../geoip2/geoip2"
141
+ },
142
+ {
143
+ "name": "jaybizzle/crawler-detect",
144
+ "version": "v1.2.102",
145
+ "version_normalized": "1.2.102.0",
146
+ "source": {
147
+ "type": "git",
148
+ "url": "https://github.com/JayBizzle/Crawler-Detect.git",
149
+ "reference": "346cfd72d11bb41f15e82654e532dc55360612ac"
150
+ },
151
+ "dist": {
152
+ "type": "zip",
153
+ "url": "https://api.github.com/repos/JayBizzle/Crawler-Detect/zipball/346cfd72d11bb41f15e82654e532dc55360612ac",
154
+ "reference": "346cfd72d11bb41f15e82654e532dc55360612ac",
155
+ "shasum": ""
156
+ },
157
+ "require": {
158
+ "php": ">=5.3.0"
159
+ },
160
+ "require-dev": {
161
+ "phpunit/phpunit": "^4.8|^5.5|^6.5"
162
+ },
163
+ "time": "2020-11-04T19:23:01+00:00",
164
+ "type": "library",
165
+ "installation-source": "dist",
166
+ "autoload": {
167
+ "psr-4": {
168
+ "Jaybizzle\\CrawlerDetect\\": "src/"
169
+ }
170
+ },
171
+ "notification-url": "https://packagist.org/downloads/",
172
+ "license": [
173
+ "MIT"
174
+ ],
175
+ "authors": [
176
+ {
177
+ "name": "Mark Beech",
178
+ "email": "m@rkbee.ch",
179
+ "role": "Developer"
180
+ }
181
+ ],
182
+ "description": "CrawlerDetect is a PHP class for detecting bots/crawlers/spiders via the user agent",
183
+ "homepage": "https://github.com/JayBizzle/Crawler-Detect/",
184
+ "keywords": [
185
+ "crawler",
186
+ "crawler detect",
187
+ "crawler detector",
188
+ "crawlerdetect",
189
+ "php crawler detect"
190
+ ],
191
+ "support": {
192
+ "issues": "https://github.com/JayBizzle/Crawler-Detect/issues",
193
+ "source": "https://github.com/JayBizzle/Crawler-Detect/tree/v1.2.102"
194
+ },
195
+ "install-path": "../jaybizzle/crawler-detect"
196
+ },
197
+ {
198
+ "name": "maxmind-db/reader",
199
+ "version": "v1.6.0",
200
+ "version_normalized": "1.6.0.0",
201
+ "source": {
202
+ "type": "git",
203
+ "url": "https://github.com/maxmind/MaxMind-DB-Reader-php.git",
204
+ "reference": "febd4920bf17c1da84cef58e56a8227dfb37fbe4"
205
+ },
206
+ "dist": {
207
+ "type": "zip",
208
+ "url": "https://api.github.com/repos/maxmind/MaxMind-DB-Reader-php/zipball/febd4920bf17c1da84cef58e56a8227dfb37fbe4",
209
+ "reference": "febd4920bf17c1da84cef58e56a8227dfb37fbe4",
210
+ "shasum": ""
211
+ },
212
+ "require": {
213
+ "php": ">=5.6"
214
+ },
215
+ "conflict": {
216
+ "ext-maxminddb": "<1.6.0,>=2.0.0"
217
+ },
218
+ "require-dev": {
219
+ "friendsofphp/php-cs-fixer": "2.*",
220
+ "php-coveralls/php-coveralls": "^2.1",
221
+ "phpunit/phpcov": "^3.0",
222
+ "phpunit/phpunit": "5.*",
223
+ "squizlabs/php_codesniffer": "3.*"
224
+ },
225
+ "suggest": {
226
+ "ext-bcmath": "bcmath or gmp is required for decoding larger integers with the pure PHP decoder",
227
+ "ext-gmp": "bcmath or gmp is required for decoding larger integers with the pure PHP decoder",
228
+ "ext-maxminddb": "A C-based database decoder that provides significantly faster lookups"
229
+ },
230
+ "time": "2019-12-19T22:59:03+00:00",
231
+ "type": "library",
232
+ "installation-source": "dist",
233
+ "autoload": {
234
+ "psr-4": {
235
+ "MaxMind\\Db\\": "src/MaxMind/Db"
236
+ }
237
+ },
238
+ "notification-url": "https://packagist.org/downloads/",
239
+ "license": [
240
+ "Apache-2.0"
241
+ ],
242
+ "authors": [
243
+ {
244
+ "name": "Gregory J. Oschwald",
245
+ "email": "goschwald@maxmind.com",
246
+ "homepage": "https://www.maxmind.com/"
247
+ }
248
+ ],
249
+ "description": "MaxMind DB Reader API",
250
+ "homepage": "https://github.com/maxmind/MaxMind-DB-Reader-php",
251
+ "keywords": [
252
+ "database",
253
+ "geoip",
254
+ "geoip2",
255
+ "geolocation",
256
+ "maxmind"
257
+ ],
258
+ "install-path": "../maxmind-db/reader"
259
+ },
260
+ {
261
+ "name": "maxmind/web-service-common",
262
+ "version": "v0.7.0",
263
+ "version_normalized": "0.7.0.0",
264
+ "source": {
265
+ "type": "git",
266
+ "url": "https://github.com/maxmind/web-service-common-php.git",
267
+ "reference": "74c996c218ada5c639c8c2f076756e059f5552fc"
268
+ },
269
+ "dist": {
270
+ "type": "zip",
271
+ "url": "https://api.github.com/repos/maxmind/web-service-common-php/zipball/74c996c218ada5c639c8c2f076756e059f5552fc",
272
+ "reference": "74c996c218ada5c639c8c2f076756e059f5552fc",
273
+ "shasum": ""
274
+ },
275
+ "require": {
276
+ "composer/ca-bundle": "^1.0.3",
277
+ "ext-curl": "*",
278
+ "ext-json": "*",
279
+ "php": ">=5.6"
280
+ },
281
+ "require-dev": {
282
+ "friendsofphp/php-cs-fixer": "2.*",
283
+ "phpunit/phpunit": "^4.8.36 || ^5.7 || ^6.5 || ^7.0",
284
+ "squizlabs/php_codesniffer": "3.*"
285
+ },
286
+ "time": "2020-05-06T14:07:26+00:00",
287
+ "type": "library",
288
+ "installation-source": "dist",
289
+ "autoload": {
290
+ "psr-4": {
291
+ "MaxMind\\Exception\\": "src/Exception",
292
+ "MaxMind\\WebService\\": "src/WebService"
293
+ }
294
+ },
295
+ "notification-url": "https://packagist.org/downloads/",
296
+ "license": [
297
+ "Apache-2.0"
298
+ ],
299
+ "authors": [
300
+ {
301
+ "name": "Gregory Oschwald",
302
+ "email": "goschwald@maxmind.com"
303
+ }
304
+ ],
305
+ "description": "Internal MaxMind Web Service API",
306
+ "homepage": "https://github.com/maxmind/web-service-common-php",
307
+ "install-path": "../maxmind/web-service-common"
308
+ },
309
+ {
310
+ "name": "psr/cache",
311
+ "version": "1.0.1",
312
+ "version_normalized": "1.0.1.0",
313
+ "source": {
314
+ "type": "git",
315
+ "url": "https://github.com/php-fig/cache.git",
316
+ "reference": "d11b50ad223250cf17b86e38383413f5a6764bf8"
317
+ },
318
+ "dist": {
319
+ "type": "zip",
320
+ "url": "https://api.github.com/repos/php-fig/cache/zipball/d11b50ad223250cf17b86e38383413f5a6764bf8",
321
+ "reference": "d11b50ad223250cf17b86e38383413f5a6764bf8",
322
+ "shasum": ""
323
+ },
324
+ "require": {
325
+ "php": ">=5.3.0"
326
+ },
327
+ "time": "2016-08-06T20:24:11+00:00",
328
+ "type": "library",
329
+ "extra": {
330
+ "branch-alias": {
331
+ "dev-master": "1.0.x-dev"
332
+ }
333
+ },
334
+ "installation-source": "dist",
335
+ "autoload": {
336
+ "psr-4": {
337
+ "Psr\\Cache\\": "src/"
338
+ }
339
+ },
340
+ "notification-url": "https://packagist.org/downloads/",
341
+ "license": [
342
+ "MIT"
343
+ ],
344
+ "authors": [
345
+ {
346
+ "name": "PHP-FIG",
347
+ "homepage": "http://www.php-fig.org/"
348
+ }
349
+ ],
350
+ "description": "Common interface for caching libraries",
351
+ "keywords": [
352
+ "cache",
353
+ "psr",
354
+ "psr-6"
355
+ ],
356
+ "install-path": "../psr/cache"
357
+ },
358
+ {
359
+ "name": "s1lentium/iptools",
360
+ "version": "v1.1.1",
361
+ "version_normalized": "1.1.1.0",
362
+ "source": {
363
+ "type": "git",
364
+ "url": "https://github.com/S1lentium/IPTools.git",
365
+ "reference": "f6f8ab6132ca7443bd7cced1681f5066d725fd5f"
366
+ },
367
+ "dist": {
368
+ "type": "zip",
369
+ "url": "https://api.github.com/repos/S1lentium/IPTools/zipball/f6f8ab6132ca7443bd7cced1681f5066d725fd5f",
370
+ "reference": "f6f8ab6132ca7443bd7cced1681f5066d725fd5f",
371
+ "shasum": ""
372
+ },
373
+ "require": {
374
+ "ext-bcmath": "*",
375
+ "php": ">=5.4.0"
376
+ },
377
+ "require-dev": {
378
+ "phpunit/phpunit": "~4.0",
379
+ "satooshi/php-coveralls": "~1.0"
380
+ },
381
+ "time": "2018-09-19T06:15:53+00:00",
382
+ "type": "library",
383
+ "installation-source": "dist",
384
+ "autoload": {
385
+ "psr-4": {
386
+ "IPTools\\": "src/"
387
+ }
388
+ },
389
+ "notification-url": "https://packagist.org/downloads/",
390
+ "license": [
391
+ "MIT"
392
+ ],
393
+ "authors": [
394
+ {
395
+ "name": "Safarov Alisher",
396
+ "email": "alisher.safarov@outlook.com",
397
+ "homepage": "https://github.com/S1lentium"
398
+ }
399
+ ],
400
+ "description": "PHP Library for manipulating network addresses (IPv4 and IPv6)",
401
+ "keywords": [
402
+ "IP",
403
+ "IP-Tools",
404
+ "cidr",
405
+ "ipv4",
406
+ "ipv6",
407
+ "network",
408
+ "subnet"
409
+ ],
410
+ "install-path": "../s1lentium/iptools"
411
+ },
412
+ {
413
+ "name": "whichbrowser/parser",
414
+ "version": "v2.1.7",
415
+ "version_normalized": "2.1.7.0",
416
+ "source": {
417
+ "type": "git",
418
+ "url": "https://github.com/WhichBrowser/Parser-PHP.git",
419
+ "reference": "1044880bc792dbce5948fbff22ae731c43c280d9"
420
+ },
421
+ "dist": {
422
+ "type": "zip",
423
+ "url": "https://api.github.com/repos/WhichBrowser/Parser-PHP/zipball/1044880bc792dbce5948fbff22ae731c43c280d9",
424
+ "reference": "1044880bc792dbce5948fbff22ae731c43c280d9",
425
+ "shasum": ""
426
+ },
427
+ "require": {
428
+ "php": ">=5.4.0",
429
+ "psr/cache": "^1.0 || ^2.0 || ^3.0"
430
+ },
431
+ "require-dev": {
432
+ "cache/array-adapter": "^1.1",
433
+ "icomefromthenet/reverse-regex": "0.0.6.3",
434
+ "php-coveralls/php-coveralls": "^2.0",
435
+ "phpunit/php-code-coverage": "^5.0 || ^7.0",
436
+ "phpunit/phpunit": "^6.0 || ^8.0",
437
+ "squizlabs/php_codesniffer": "^3.5",
438
+ "symfony/yaml": "~3.4 || ~4.0"
439
+ },
440
+ "suggest": {
441
+ "cache/array-adapter": "Allows testing of the caching functionality"
442
+ },
443
+ "time": "2022-04-19T20:14:54+00:00",
444
+ "type": "library",
445
+ "installation-source": "dist",
446
+ "autoload": {
447
+ "psr-4": {
448
+ "WhichBrowser\\": [
449
+ "src/",
450
+ "tests/src/"
451
+ ]
452
+ }
453
+ },
454
+ "notification-url": "https://packagist.org/downloads/",
455
+ "license": [
456
+ "MIT"
457
+ ],
458
+ "authors": [
459
+ {
460
+ "name": "Niels Leenheer",
461
+ "email": "niels@leenheer.nl",
462
+ "role": "Developer"
463
+ }
464
+ ],
465
+ "description": "Useragent sniffing library for PHP",
466
+ "homepage": "http://whichbrowser.net",
467
+ "keywords": [
468
+ "browser",
469
+ "sniffing",
470
+ "ua",
471
+ "useragent"
472
+ ],
473
+ "support": {
474
+ "issues": "https://github.com/WhichBrowser/Parser-PHP/issues",
475
+ "source": "https://github.com/WhichBrowser/Parser-PHP/tree/v2.1.7"
476
+ },
477
+ "install-path": "../whichbrowser/parser"
478
  }
479
+ ],
480
+ "dev": true,
481
+ "dev-package-names": []
482
+ }
includes/vendor/composer/installed.php ADDED
@@ -0,0 +1,96 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php return array (
2
+ 'root' =>
3
+ array (
4
+ 'pretty_version' => 'dev-master',
5
+ 'version' => 'dev-master',
6
+ 'aliases' =>
7
+ array (
8
+ ),
9
+ 'reference' => '85b3271b377541bca11a7812fe8372944174812b',
10
+ 'name' => '__root__',
11
+ ),
12
+ 'versions' =>
13
+ array (
14
+ '__root__' =>
15
+ array (
16
+ 'pretty_version' => 'dev-master',
17
+ 'version' => 'dev-master',
18
+ 'aliases' =>
19
+ array (
20
+ ),
21
+ 'reference' => '85b3271b377541bca11a7812fe8372944174812b',
22
+ ),
23
+ 'composer/ca-bundle' =>
24
+ array (
25
+ 'pretty_version' => '1.3.1',
26
+ 'version' => '1.3.1.0',
27
+ 'aliases' =>
28
+ array (
29
+ ),
30
+ 'reference' => '4c679186f2aca4ab6a0f1b0b9cf9252decb44d0b',
31
+ ),
32
+ 'geoip2/geoip2' =>
33
+ array (
34
+ 'pretty_version' => 'v2.10.0',
35
+ 'version' => '2.10.0.0',
36
+ 'aliases' =>
37
+ array (
38
+ ),
39
+ 'reference' => '419557cd21d9fe039721a83490701a58c8ce784a',
40
+ ),
41
+ 'jaybizzle/crawler-detect' =>
42
+ array (
43
+ 'pretty_version' => 'v1.2.102',
44
+ 'version' => '1.2.102.0',
45
+ 'aliases' =>
46
+ array (
47
+ ),
48
+ 'reference' => '346cfd72d11bb41f15e82654e532dc55360612ac',
49
+ ),
50
+ 'maxmind-db/reader' =>
51
+ array (
52
+ 'pretty_version' => 'v1.6.0',
53
+ 'version' => '1.6.0.0',
54
+ 'aliases' =>
55
+ array (
56
+ ),
57
+ 'reference' => 'febd4920bf17c1da84cef58e56a8227dfb37fbe4',
58
+ ),
59
+ 'maxmind/web-service-common' =>
60
+ array (
61
+ 'pretty_version' => 'v0.7.0',
62
+ 'version' => '0.7.0.0',
63
+ 'aliases' =>
64
+ array (
65
+ ),
66
+ 'reference' => '74c996c218ada5c639c8c2f076756e059f5552fc',
67
+ ),
68
+ 'psr/cache' =>
69
+ array (
70
+ 'pretty_version' => '1.0.1',
71
+ 'version' => '1.0.1.0',
72
+ 'aliases' =>
73
+ array (
74
+ ),
75
+ 'reference' => 'd11b50ad223250cf17b86e38383413f5a6764bf8',
76
+ ),
77
+ 's1lentium/iptools' =>
78
+ array (
79
+ 'pretty_version' => 'v1.1.1',
80
+ 'version' => '1.1.1.0',
81
+ 'aliases' =>
82
+ array (
83
+ ),
84
+ 'reference' => 'f6f8ab6132ca7443bd7cced1681f5066d725fd5f',
85
+ ),
86
+ 'whichbrowser/parser' =>
87
+ array (
88
+ 'pretty_version' => 'v2.1.7',
89
+ 'version' => '2.1.7.0',
90
+ 'aliases' =>
91
+ array (
92
+ ),
93
+ 'reference' => '1044880bc792dbce5948fbff22ae731c43c280d9',
94
+ ),
95
+ ),
96
+ );
includes/vendor/whichbrowser/parser/.coveralls.yml DELETED
@@ -1,7 +0,0 @@
1
- service_name: travis-ci
2
-
3
- coverage_clover:
4
- - runner.xml
5
- - phpunit.xml
6
-
7
- json_path: coveralls.json
 
 
 
 
 
 
 
includes/vendor/whichbrowser/parser/.travis.yml DELETED
@@ -1,39 +0,0 @@
1
- sudo: false
2
- dist: trusty
3
- language: php
4
-
5
- php:
6
- - 5.4
7
- - 5.5
8
- - 5.6
9
- - 7.0
10
- - 7.1
11
- - 7.2
12
-
13
- before_script:
14
- - composer self-update
15
- - composer update --prefer-source
16
-
17
- # Install suggested cache/array-adapter on supported versions of PHP
18
- - composer require --dev cache/array-adapter || true
19
-
20
- # Set memory limit to 2 MB
21
- - echo "memory_limit=2048M" >> ~/.phpenv/versions/$(phpenv version-name)/etc/conf.d/travis.ini
22
-
23
- # Disable X-debug on all but PHP 5.6
24
- - if [ "$TRAVIS_PHP_VERSION" != "5.6" ]; then phpenv config-rm xdebug.ini; fi
25
-
26
- script:
27
- - vendor/bin/phpcs --standard=PSR1,PSR2 -n src
28
-
29
- # Run tests (all except PHP 5.6)
30
- - if [ "$TRAVIS_PHP_VERSION" != "5.6" ]; then php bin/runner.php --show check; fi
31
- - if [ "$TRAVIS_PHP_VERSION" != "5.6" ]; then vendor/bin/phpunit; fi
32
-
33
- # Run tests with coverage enabled (only PHP 5.6)
34
- - if [ "$TRAVIS_PHP_VERSION" = "5.6" ]; then php bin/runner.php --coverage --show check; fi
35
- - if [ "$TRAVIS_PHP_VERSION" = "5.6" ]; then vendor/bin/phpunit --coverage-clover phpunit.xml; fi
36
-
37
- after_script:
38
- # Upload coverage to Coveralls.io
39
- - if [ "$TRAVIS_PHP_VERSION" = "5.6" ]; then travis_retry php vendor/bin/coveralls -v; fi
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
includes/vendor/whichbrowser/parser/bin/runner.php CHANGED
@@ -4,8 +4,10 @@ include_once __DIR__ . '/bootstrap.php';
4
 
5
  use WhichBrowser\Testrunner;
6
  use WhichBrowser\Tests;
 
 
7
 
8
- set_error_handler(function ($errno, $errstr, $errfile, $errline, array $errcontext) {
9
  // error was suppressed with the @-operator
10
  if (0 === error_reporting()) {
11
  return false;
@@ -50,7 +52,7 @@ switch ($command) {
50
 
51
  case 'check':
52
  if (in_array('coverage', $options)) {
53
- $coverage = new PHP_CodeCoverage;
54
  $coverage->filter()->addDirectoryToWhitelist('src');
55
  $coverage->start('Testrunner');
56
  }
@@ -60,7 +62,7 @@ switch ($command) {
60
  if (in_array('coverage', $options)) {
61
  $coverage->stop();
62
 
63
- $writer = new PHP_CodeCoverage_Report_Clover;
64
  $writer->process($coverage, 'runner.xml');
65
 
66
  echo "\nCoverage saved as runner.xml\n\n";
4
 
5
  use WhichBrowser\Testrunner;
6
  use WhichBrowser\Tests;
7
+ use SebastianBergmann\CodeCoverage\CodeCoverage;
8
+ use SebastianBergmann\CodeCoverage\Report\Clover;
9
 
10
+ set_error_handler(function ($errno, $errstr, $errfile, $errline) {
11
  // error was suppressed with the @-operator
12
  if (0 === error_reporting()) {
13
  return false;
52
 
53
  case 'check':
54
  if (in_array('coverage', $options)) {
55
+ $coverage = new CodeCoverage;
56
  $coverage->filter()->addDirectoryToWhitelist('src');
57
  $coverage->start('Testrunner');
58
  }
62
  if (in_array('coverage', $options)) {
63
  $coverage->stop();
64
 
65
+ $writer = new Clover;
66
  $writer->process($coverage, 'runner.xml');
67
 
68
  echo "\nCoverage saved as runner.xml\n\n";
includes/vendor/whichbrowser/parser/data/applications-bots.php CHANGED
@@ -12,13 +12,19 @@ Applications::$BOTS = [
12
  [ 'name' => 'Adaxas', 'id' => 'adaxas', 'regexp' => '/Adaxas Spider/u' ],
13
  [ 'name' => 'AddThis.com', 'id' => 'addthis', 'regexp' => '/AddThis.com/u' ],
14
  [ 'name' => 'ADmantX', 'id' => 'admantx', 'regexp' => '/ADmantX Platform Semantic Analyzer/u' ],
15
- [ 'name' => 'AhrefsBot', 'id' => 'ahrefsbot', 'regexp' => '/AhrefsBot.Feeds v([0-9.]*)/u' ],
16
- [ 'name' => 'AhrefsBot', 'id' => 'ahrefsbot', 'regexp' => '/AhrefsBot\/([0-9.]*)/u' ],
 
 
 
 
17
  [ 'name' => 'Alexa', 'id' => 'archiver', 'regexp' => '/ia_archiver/u' ],
18
  [ 'name' => 'AltaVista', 'id' => 'altavista', 'regexp' => '/AltaVista Intranet V([0-9.]*)/u' ],
19
  [ 'name' => 'Analytics SEO', 'id' => 'curious', 'regexp' => '/Curious George - www.analyticsseo.com\/crawler/u' ],
20
  [ 'name' => 'Amazon CloudFront', 'id' => 'cloudfront', 'regexp' => '/Amazon CloudFront/u' ],
21
  [ 'name' => 'Amorank Spider', 'id' => 'amorank', 'regexp' => '/AmorankSpider\/([0-9.]*)/u' ],
 
 
22
  [ 'name' => 'ArchiveBot', 'id' => 'archive', 'regexp' => '/ArchiveTeam ArchiveBot/u' ],
23
  [ 'name' => 'Archive.org', 'id' => 'archive', 'regexp' => '/archive.org_bot(?:\/([0-9.]*))?/u' ],
24
  [ 'name' => 'Archive.org', 'id' => 'archive', 'regexp' => '/special_archiver(?:\/([0-9.]*))?/u' ],
@@ -32,6 +38,7 @@ Applications::$BOTS = [
32
  [ 'name' => 'Baiduspider', 'id' => 'baidu', 'regexp' => '/baiduspider-mobile-gate/u' ],
33
  [ 'name' => 'Baiduspider', 'id' => 'baidu', 'regexp' => '/\+http:\/\/www.baidu.com\/search\/spider.html/u' ],
34
  [ 'name' => 'Baiduspider', 'id' => 'baidu', 'regexp' => '/BaiduImagespider/u' ],
 
35
  [ 'name' => 'BazQux', 'id' => 'bazqux', 'regexp' => '/BazQux\/([0-9.]*)/u' ],
36
  [ 'name' => 'Bing', 'id' => 'bingbot', 'regexp' => '/bingbot\/([0-9.]*)/u' ],
37
  [ 'name' => 'Bing', 'id' => 'msnbot', 'regexp' => '/msnbot\/([0-9.]*)/u' ],
@@ -42,7 +49,10 @@ Applications::$BOTS = [
42
  [ 'name' => 'Bing', 'id' => 'msnbot', 'regexp' => '/MSNBOT_Mobile/u' ],
43
  [ 'name' => 'Bing', 'id' => 'msmobot', 'regexp' => '/MSMOBOT/u' ],
44
  [ 'name' => 'Bing Preview', 'id' => 'bing', 'regexp' => '/BingPreview\/([0-9.]*)/u' ],
 
 
45
  [ 'name' => 'BlogBridge', 'id' => 'blogbridge', 'regexp' => '/BlogBridge ([0-9.]*)/u' ],
 
46
  [ 'name' => 'Bloglines', 'id' => 'bloglines', 'regexp' => '/Bloglines\/([0-9.]*)/u' ],
47
  [ 'name' => 'Bloglovin', 'id' => 'bloglovin', 'regexp' => '/Bloglovin\/([0-9.]*)/u' ],
48
  [ 'name' => 'BlogPulse', 'id' => 'blogpulse', 'regexp' => '/BlogPulse \(ISSpider-([0-9.]*)/u' ],
@@ -50,21 +60,46 @@ Applications::$BOTS = [
50
  [ 'name' => 'Blogtrottr', 'id' => 'blogtrot', 'regexp' => '/Blogtrottr\/([0-9.]*)/u' ],
51
  [ 'name' => 'Blogshares', 'id' => 'blogshares', 'regexp' => '/Blogshares/u' ],
52
  [ 'name' => 'BoardReader', 'id' => 'boardreader', 'regexp' => '/BoardReader\/([0-9.]*)/u' ],
 
53
  [ 'name' => 'Browsershots', 'id' => 'browsershots', 'regexp' => '/Browsershots/u' ],
54
  [ 'name' => 'BUbiNG', 'id' => 'bubing', 'regexp' => '/BUbiNG/u' ],
 
 
55
  [ 'name' => 'Butterfly', 'id' => 'butterfly', 'regexp' => '/Butterfly\/([0-9.]*)/u' ],
 
 
56
  [ 'name' => 'CiteSeerX', 'id' => 'heritrix', 'regexp' => '/heritrix\/([0-9.]*)/u' ],
 
57
  [ 'name' => 'Cliqzbot', 'id' => 'cliqz', 'regexp' => '/Cliqzbot\/([0-9.]*)/u' ],
58
- [ 'name' => 'CloudFare Always Online', 'id' => 'cloudflare', 'regexp' => '/CloudFlare-AlwaysOnline\/([0-9.]*)/u' ],
 
 
 
 
 
 
59
  [ 'name' => 'Comodo', 'id' => 'comodo', 'regexp' => '/Comodo Spider ([0-9.]*)/u' ],
60
  [ 'name' => 'CommaFeed', 'id' => 'commafeed', 'regexp' => '/CommaFeed\/([0-9.]*)/u' ],
61
- [ 'name' => 'CommonCrawl', 'id' => 'cbot', 'regexp' => '/CCBot\/([0-9.]*)/u' ],
 
62
  [ 'name' => 'Data Hotel Watchdog', 'id' => 'watchdog', 'regexp' => '/Data-Hotel-Watchdog\/([0-9.]*)/u' ],
 
63
  [ 'name' => 'DataparkSearch', 'id' => 'datasearch', 'regexp' => '/DataparkSearch\/([0-9.]*)/u' ],
 
 
64
  [ 'name' => 'Daumoa', 'id' => 'daumoa', 'regexp' => '/Daumoa ([0-9.]*)/u' ],
65
  [ 'name' => 'Digg', 'id' => 'digg', 'regexp' => '/Digg Deeper\/v([0-9.]*)/u' ],
66
  [ 'name' => 'Digg', 'id' => 'digg', 'regexp' => '/Digg\/([0-9.]*)/u' ],
 
 
 
67
  [ 'name' => 'Domain Re-Animator', 'id' => 'domain', 'regexp' => '/Domain Re-Animator Bot/u' ],
 
 
 
 
 
 
68
  [ 'name' => 'Exabot Thumbnails', 'id' => 'exabot', 'regexp' => '/Exabot-Thumbnails/u' ],
69
  [ 'name' => 'ExactSeek', 'id' => 'exactseek', 'regexp' => '/ExactSeek Crawler/u' ],
70
  [ 'name' => 'Ezooms Crawler', 'id' => 'ezooms', 'regexp' => '/Ezooms\/([0-9.]*)/u' ],
@@ -91,11 +126,13 @@ Applications::$BOTS = [
91
  [ 'name' => 'FeedValidator', 'id' => 'validator', 'regexp' => '/FeedValidator\/([0-9.]*)/u' ],
92
  [ 'name' => 'FeedZirra', 'id' => 'feed', 'regexp' => '/feedzirra/u' ],
93
  [ 'name' => 'Fever', 'id' => 'fever', 'regexp' => '/Fever\/([0-9.]*)/u' ],
 
94
  [ 'name' => 'Friendica', 'id' => 'friendica', 'regexp' => '/Friendica/u' ],
95
  [ 'name' => 'FTRF: Friendly Robot', 'id' => 'robot', 'regexp' => '/FTRF: Friendly robot\/([0-9.]*)/u' ],
96
  [ 'name' => 'Genieo Web Filter', 'id' => 'genieo', 'regexp' => '/Genieo\/([0-9.]*)/u' ],
97
  [ 'name' => 'GNIP', 'id' => 'fetchor', 'regexp' => '/UnwindFetchor\/([0-9.]*)/u' ],
98
  [ 'name' => 'Gocrawl', 'id' => 'google', 'regexp' => '/Googlebot \(gocrawl v([0-9.]*)\)/u' ],
 
99
  [ 'name' => 'GomezAgent', 'id' => 'gomez', 'regexp' => '/GomezAgent ([0-9.]+)/u' ],
100
  [ 'name' => 'Goo', 'id' => 'ichiro', 'regexp' => '/ichiro\/mobile goo/u' ],
101
  [ 'name' => 'Goo Blog Search', 'id' => 'gooblog', 'regexp' => '/gooblog\/([0-9.]*)/u' ],
@@ -110,6 +147,7 @@ Applications::$BOTS = [
110
  [ 'name' => 'Google App Engine', 'id' => 'google', 'regexp' => '/AppEngine-Google/u' ],
111
  [ 'name' => 'Google Web Preview', 'id' => 'google', 'regexp' => '/Google Web Preview/u' ],
112
  [ 'name' => 'Google Page Speed', 'id' => 'google', 'regexp' => '/Google Page Speed Insights/u' ],
 
113
  [ 'name' => 'Google FeedBurner', 'id' => 'feed', 'regexp' => '/FeedBurner\/([0-9.]*)/u' ],
114
  [ 'name' => 'Google Feedfetcher', 'id' => 'google', 'regexp' => '/Feedfetcher-Google/iu' ],
115
  [ 'name' => 'Google Font Analysis', 'id' => 'google', 'regexp' => '/Google-FontAnalysis\/([0-9.]*)/u' ],
@@ -122,6 +160,7 @@ Applications::$BOTS = [
122
  [ 'name' => 'Google Wireless Transcoder', 'id' => 'google', 'regexp' => '/Google Wireless Transcoder/u' ],
123
  [ 'name' => 'Google Play Newsstand', 'id' => 'google', 'regexp' => '/GoogleProducer/u' ],
124
  [ 'name' => 'Google YouTube Sample', 'id' => 'google', 'regexp' => '/Google-YouTubeSample\/([0-9.]*)/u' ],
 
125
  [ 'name' => 'Grammarly', 'id' => 'grammarly', 'regexp' => '/Grammarly\/([0-9.]*)/u' ],
126
  [ 'name' => 'Grub', 'id' => 'grub', 'regexp' => '/grub-client-([0-9.]*)/u' ],
127
  [ 'name' => 'Hatena Antenna', 'id' => 'hatena', 'regexp' => '/Hatena Antenna\/([0-9.]*)/u' ],
@@ -129,30 +168,57 @@ Applications::$BOTS = [
129
  [ 'name' => 'Hatena Pagetitle', 'id' => 'hatena', 'regexp' => '/Hatena Pagetitle Agent\/([0-9.]*)/u' ],
130
  [ 'name' => 'HeartRails Capture', 'id' => 'capture', 'regexp' => '/HeartRails_Capture\/([0-9.]*)/u' ],
131
  [ 'name' => 'Heureka Feed', 'id' => 'heureka', 'regexp' => '/Heurekabot-Feed/u' ],
 
 
132
  [ 'name' => 'htdig', 'id' => 'htdig', 'regexp' => '/htdig\/([0-9.]*)/u' ],
133
  [ 'name' => 'HTTPMon', 'id' => 'httpmon', 'regexp' => '/HTTPMon\/([0-9.]*)/u' ],
134
  [ 'name' => 'HubPages', 'id' => 'hubpages', 'regexp' => '/HubPages V([0-9.]*)/u' ],
 
135
  [ 'name' => 'iAsk Spider', 'id' => 'spider', 'regexp' => '/iaskspider\/([0-9.]*)/u' ],
136
  [ 'name' => 'iAsk Spider', 'id' => 'spider', 'regexp' => '/iaskspider2/u' ],
137
  [ 'name' => 'Ichiro', 'id' => 'ichiro', 'regexp' => '/ichiro\/([0-9.]*)/u' ],
138
  [ 'name' => 'Internet Archive', 'id' => 'archive', 'regexp' => '/InternetArchive\/([0-9.]*)/u' ],
 
 
 
139
  [ 'name' => 'JamesBOT', 'id' => 'crawler', 'regexp' => '/James BOT - WebCrawler/u' ],
140
  [ 'name' => 'Jayde', 'id' => 'crawler', 'regexp' => '/Jayde Crawler./u' ],
 
141
  [ 'name' => 'Kouio', 'id' => 'kouio', 'regexp' => '/kouio.com/u' ],
142
  [ 'name' => 'Larbin', 'id' => 'larbin', 'regexp' => '/[Ll]arbin[\/_]([0-9.]*)/u' ],
 
 
143
  [ 'name' => 'Linkedin Bot', 'id' => 'linkedin', 'regexp' => '/LinkedInBot\/([0-9.]*)/u' ],
 
144
  [ 'name' => 'Linkdex Bot', 'id' => 'linkdex', 'regexp' => '/linkdexbot-mobile\/([0-9.]*)/u' ],
145
  [ 'name' => 'Linkdex Bot', 'id' => 'linkdex', 'regexp' => '/linkdex.com\/v([0-9.]*)/u' ],
146
  [ 'name' => 'Livedoor', 'id' => 'livedoor', 'regexp' => '/livedoor/u' ],
 
147
  [ 'name' => 'LTX71', 'id' => 'ltx71', 'regexp' => '/ltx71/u' ],
148
  [ 'name' => 'Magpie RSS', 'id' => 'magpie', 'regexp' => '/MagpieRSS\/([0-9.]*)/u' ],
 
 
149
  [ 'name' => 'Mapian News Bot', 'id' => 'mapion', 'regexp' => '/mapion-news-bot\/([0-9.]*)/u' ],
 
 
 
 
 
150
  [ 'name' => 'Microsoft Social Streams', 'id' => 'socialstreams', 'regexp' => '/Microsoft MSN SocialStreams Bot/u' ],
151
  [ 'name' => 'Mixi', 'id' => 'mixi', 'regexp' => '/mixi-check\/([0-9.]*)/u' ],
 
152
  [ 'name' => 'MnoGoSearch', 'id' => 'mnogo', 'regexp' => '/MnoGoSearch\/([0-9.]*)/u' ],
 
153
  [ 'name' => 'Monitor.us', 'id' => 'monitor', 'regexp' => '/monitor.us/u' ],
 
 
154
  [ 'name' => 'Naver Yeti', 'id' => 'yeti', 'regexp' => '/Yeti\/([0-9.]*)/u' ],
155
- [ 'name' => 'Netcraft Survey Bot', 'id' => 'netcraft', 'regexp' => '/Netcraft Web Server Survey/u' ],
 
 
 
 
 
156
  [ 'name' => 'Netvibes', 'id' => 'netvibes', 'regexp' => '/Netvibes/u' ],
157
  [ 'name' => 'NewsBlur', 'id' => 'newsblur', 'regexp' => '/NewsBlur Favicon Fetcher/u' ],
158
  [ 'name' => 'NewsBlur', 'id' => 'newsblur', 'regexp' => '/NewsBlur Feed Fetcher/u' ],
@@ -161,17 +227,27 @@ Applications::$BOTS = [
161
  [ 'name' => 'NewsGator', 'id' => 'newsgator', 'regexp' => '/NewsGator\/([0-9.]*)/u' ],
162
  [ 'name' => 'NewsGator', 'id' => 'newsgator', 'regexp' => '/NewsGatorOnline\/([0-9.]*)/u' ],
163
  [ 'name' => 'NewsGator FetchLinks', 'id' => 'newsgator', 'regexp' => '/NewsGator FetchLinks extension\/([0-9.]*)/u' ],
 
 
164
  [ 'name' => 'OpenWebSpider', 'id' => 'spider', 'regexp' => '/OpenWebSpider v([0-9.]*)/u' ],
165
  [ 'name' => 'OrangeBot', 'id' => 'orange', 'regexp' => '/OrangeBot-Collector\/([0-9.]*)/u' ],
166
  [ 'name' => 'OrangeBot', 'id' => 'orange', 'regexp' => '/OrangeBot-Mobile/u' ],
167
- [ 'name' => 'PagesInventory ', 'id' => 'pages', 'regexp' => '/PagesInventory/u' ],
168
- [ 'name' => 'Picsearch bot', 'id' => 'psbot', 'regexp' => '/psbot-page/u' ],
 
 
 
 
169
  [ 'name' => 'Pingdom', 'id' => 'pingdom', 'regexp' => '/Pingdom.com_bot_version_([0-9.]*)/u' ],
170
  [ 'name' => 'Pinterest', 'id' => 'pinterest', 'regexp' => '/Pinterest\/([0-9.]+)( \(+|$)/u' ],
 
 
 
171
  [ 'name' => 'PostRank', 'id' => 'postrank', 'regexp' => '/PostRank\/([0-9.]*)/u' ],
172
  [ 'name' => 'PowerMapper', 'id' => 'crawler', 'regexp' => '/CrawlerProcess \(http:\/\/www\.PowerMapper\.com\) \/([0-9.]*)/u' ],
173
  [ 'name' => 'Radian 6', 'id' => 'feed', 'regexp' => '/R6_FeedFetcher/u' ],
174
  [ 'name' => 'Radian 6', 'id' => 'comment', 'regexp' => '/R6_CommentReader/u' ],
 
175
  [ 'name' => 'RssBar', 'id' => 'rssbar', 'regexp' => '/RssBar\/([0-9.]*)/u' ],
176
  [ 'name' => 'ROI Hunter', 'id' => 'hunter', 'regexp' => '/ROI Hunter/u' ],
177
  [ 'name' => 'QuerySeekerSpider', 'id' => 'spider', 'regexp' => '/QuerySeekerSpider(?:\/([0-9.]*))?/u' ],
@@ -179,6 +255,11 @@ Applications::$BOTS = [
179
  [ 'name' => 'SafeSearch Microdata', 'id' => 'safesearch', 'regexp' => '/SafeSearch microdata crawler/u' ],
180
  [ 'name' => 'Scrapy', 'id' => 'scrapy', 'regexp' => '/Scrapy\/([0-9.]*)/u' ],
181
  [ 'name' => 'ScreenerBot', 'id' => 'crawler', 'regexp' => '/ScreenerBot Crawler Beta ([0-9.]*)/u' ],
 
 
 
 
 
182
  [ 'name' => 'Server Density', 'id' => 'monitor', 'regexp' => '/Server Density Service Monitoring/u' ],
183
  [ 'name' => 'Seznam bot', 'id' => 'seznam', 'regexp' => '/SeznamBot|SklikBot|Seznam screenshot-generator/u' ],
184
  [ 'name' => 'Seznam Email Proxy', 'id' => 'seznam', 'regexp' => '/SeznamEmailProxy/u' ],
@@ -187,6 +268,8 @@ Applications::$BOTS = [
187
  [ 'name' => 'SilverReader', 'id' => 'reader', 'regexp' => '/SilverReader\/([0-9.]*)/u' ],
188
  [ 'name' => 'SimplePie', 'id' => 'simplepie', 'regexp' => '/SimplePie\/([0-9.]*)/u' ],
189
  [ 'name' => 'Site24x7', 'id' => 'site24', 'regexp' => '/Site24x7/u' ],
 
 
190
  [ 'name' => 'Sogou Web Spider', 'id' => 'sogou', 'regexp' => '/sogou spider/u' ],
191
  [ 'name' => 'Sogou Web Spider', 'id' => 'sogou', 'regexp' => '/Sogou pic spider\/([0-9.]*)/u' ],
192
  [ 'name' => 'Sogou Web Spider', 'id' => 'sogou', 'regexp' => '/Sogou inst spider\/([0-9.]*)/u' ],
@@ -196,21 +279,32 @@ Applications::$BOTS = [
196
  [ 'name' => 'Soso Web Spider', 'id' => 'soso', 'regexp' => '/Sosospider\/([0-9.]*)/u' ],
197
  [ 'name' => 'Soso Web Spider', 'id' => 'soso', 'regexp' => '/Sosospider/u' ],
198
  [ 'name' => 'Soso Image Spider', 'id' => 'soso', 'regexp' => '/Sosoimagespider/u' ],
 
199
  [ 'name' => 'SPDYCheck', 'id' => 'spdycheck', 'regexp' => '/SPDYCheck SPDY Protocol Tester/iu' ],
200
  [ 'name' => 'Spinn3r', 'id' => 'spinn', 'regexp' => '/Spinn3r ([0-9.]*)/iu' ],
201
  [ 'name' => 'Spiderlytics', 'id' => 'spider', 'regexp' => '/Spiderlytics\/([0-9.]*)/iu' ],
 
 
 
202
  [ 'name' => 'StatusCake Error Detector', 'id' => 'detector', 'regexp' => '/StatusCake Error Detector/iu' ],
203
  [ 'name' => 'Summify', 'id' => 'summify', 'regexp' => '/Summify\/([0-9.]*)/u' ],
204
  [ 'name' => 'TelegramBot', 'id' => 'telegram', 'regexp' => '/TelegramBot/u' ],
205
  [ 'name' => 'Twisted PageGetter', 'id' => 'twisted', 'regexp' => '/Twisted PageGetter/u' ],
206
  [ 'name' => 'Twitterbot', 'id' => 'twitter', 'regexp' => '/Twitterbot\/([0-9.]*)/u' ],
207
  [ 'name' => 'Tiny Tiny RSS', 'id' => 'tiny', 'regexp' => '/Tiny Tiny RSS\/([0-9.]*)/u' ],
 
 
208
  [ 'name' => 'TLSProber', 'id' => 'tlsprober', 'regexp' => '/TLSProber\/([0-9.]*)/u' ],
 
209
  [ 'name' => 'Typhoeus', 'id' => 'typhoeus', 'regexp' => '/Typhoeus/u' ],
210
  [ 'name' => 'Vagabondo', 'id' => 'vagabondo', 'regexp' => '/Vagabondo\/([0-9.]*)/u' ],
 
 
 
211
  [ 'name' => 'Voilabot', 'id' => 'voila', 'regexp' => '/Voila[Bb]ot/u' ],
212
  [ 'name' => 'VocusBot', 'id' => 'vocus', 'regexp' => '/VocusBot ([0-9.]*)/u' ],
213
  [ 'name' => 'Vodafone mCrawler', 'id' => 'mcrawler', 'regexp' => '/Vodafone mCrawler/u' ],
 
214
  [ 'name' => 'W3Bot', 'id' => 'w3bot', 'regexp' => '/W3Bot ([0-9.]*)/u' ],
215
  [ 'name' => 'W3C CSS Validator', 'id' => 'jigsaw', 'regexp' => '/Jigsaw\/([0-9.]*)/u' ],
216
  [ 'name' => 'W3C Internationalization Checker', 'id' => 'w3c', 'regexp' => '/W3C_I18n-Checker\/([0-9.]*)/u' ],
@@ -222,6 +316,7 @@ Applications::$BOTS = [
222
  [ 'name' => 'W3C Robot', 'id' => 'w3c', 'regexp' => '/W3CRobot\/([0-9.]*)/u' ],
223
  [ 'name' => 'W3C Unified Validator', 'id' => 'w3c', 'regexp' => '/W3C_Unicorn\/([0-9.]*)/u' ],
224
  [ 'name' => 'W3C Validator.nu', 'id' => 'validator', 'regexp' => '/Validator.nu\//u' ],
 
225
  [ 'name' => 'Wayback Archive', 'id' => 'wayback', 'regexp' => '/waybackarchive.org\/([0-9.]*)/u' ],
226
  [ 'name' => 'WebbCrawler', 'id' => 'crawler', 'regexp' => '/WebbCrawler ([0-9.]*)/u' ],
227
  [ 'name' => 'WebIndexer', 'id' => 'webindexer', 'regexp' => '/WebIndexer\//u' ],
@@ -229,6 +324,7 @@ Applications::$BOTS = [
229
  [ 'name' => 'WordPress.com', 'id' => 'wordpress', 'regexp' => '/WordPress\.com; http/u' ],
230
  [ 'name' => 'WordPress Jetpack', 'id' => 'wordpress', 'regexp' => '/Jetpack by WordPress\.com/u' ],
231
  [ 'name' => 'WWW Mechanize', 'id' => 'mechanize', 'regexp' => '/WWW-Mechanize\/([0-9.]*)/u' ],
 
232
  [ 'name' => 'Xerka WebBot', 'id' => 'xerka', 'regexp' => '/Xerka WebBot v([0-9.]*)/u' ],
233
  [ 'name' => 'XML Sitemaps Generator', 'id' => 'sitemap', 'regexp' => '/XML-Sitemaps\/([0-9.]*)/u' ],
234
  [ 'name' => 'XMLSitemapGenerator', 'id' => 'sitemap', 'regexp' => '/XmlSitemapGenerator/u' ],
@@ -267,6 +363,12 @@ Applications::$BOTS = [
267
 
268
  [ 'name' => 'Inktomi Slurp', 'id' => 'slurp', 'regexp' => '/Slurp\/([0-9.]*)/u' ],
269
  [ 'name' => 'Inktomi Slurp', 'id' => 'slurp', 'regexp' => '/Slurp\.so\/([0-9.]*)/u' ],
 
 
 
 
 
 
270
 
271
  /* Generic bots */
272
  [ 'name' => 'Apache Httpd', 'id' => 'httpclient', 'regexp' => '/Apache-HttpClient(?:\/([0-9.]*))?/u' ],
@@ -275,6 +377,11 @@ Applications::$BOTS = [
275
  [ 'name' => 'Apache Nutch', 'id' => 'nutch', 'regexp' => '/Nutch(?:CVS|Org)\/([0-9.]*)/u' ],
276
  [ 'name' => 'Apache Synapse', 'id' => 'synapse', 'regexp' => '/compatible; Synapse/u' ],
277
  [ 'name' => 'Borland Delphi', 'id' => 'indy', 'regexp' => '/Indy Library/u' ],
 
 
 
 
 
278
  [ 'name' => 'Wget', 'id' => 'wget', 'regexp' => '/Wget\/([0-9.]*)/u' ],
279
  [ 'name' => 'Curl', 'id' => 'curl', 'regexp' => '/^curl\/([0-9.]*)/u' ],
280
 
@@ -283,7 +390,8 @@ Applications::$BOTS = [
283
  [ 'name' => 'Perl', 'id' => 'simple', 'regexp' => '/LWP::Simple\//u' ],
284
  [ 'name' => 'Perl', 'id' => 'libwww', 'regexp' => '/libwww-perl\//u' ],
285
  [ 'name' => 'Perl', 'id' => 'lwp', 'regexp' => '/lwp-trivial\//u' ],
286
- [ 'name' => 'Python', 'id' => 'urllib', 'regexp' => '/Python-urllib/u' ],
 
287
  [ 'name' => 'PHP', 'id' => 'php', 'regexp' => '/ PHP\/([0-9.]*)/u' ],
288
  [ 'name' => 'PHP', 'id' => 'php', 'regexp' => '/^PHP/u' ],
289
  [ 'name' => 'PHP', 'id' => 'pear', 'regexp' => '/PEAR HTTP_Request class/u' ],
12
  [ 'name' => 'Adaxas', 'id' => 'adaxas', 'regexp' => '/Adaxas Spider/u' ],
13
  [ 'name' => 'AddThis.com', 'id' => 'addthis', 'regexp' => '/AddThis.com/u' ],
14
  [ 'name' => 'ADmantX', 'id' => 'admantx', 'regexp' => '/ADmantX Platform Semantic Analyzer/u' ],
15
+ [ 'name' => 'Adsbot', 'id' => 'adsbot', 'regexp' => '/Adsbot\/([0-9.]*)/u' ], // Not to be mixed up with Google Adsbot
16
+ [ 'name' => 'Ahrefs Feeds Bot', 'id' => 'ahrefs', 'regexp' => '/AhrefsBot\.Feeds v([0-9.]*)/u' ],
17
+ [ 'name' => 'Ahrefs Site Audit Bot', 'id' => 'ahrefs', 'regexp' => '/AhrefsSiteAudit\/([0-9.]*)/u' ],
18
+ [ 'name' => 'Ahrefs News Bot', 'id' => 'ahrefs', 'regexp' => '/AhrefsBot\/([0-9.]*); News/u' ],
19
+ [ 'name' => 'Ahrefs SA Bot', 'id' => 'ahrefs', 'regexp' => '/AhrefsBot\/([0-9.]*); SA/u' ],
20
+ [ 'name' => 'Ahrefs Bot', 'id' => 'ahrefs', 'regexp' => '/AhrefsBot\/([0-9.]*)/u' ],
21
  [ 'name' => 'Alexa', 'id' => 'archiver', 'regexp' => '/ia_archiver/u' ],
22
  [ 'name' => 'AltaVista', 'id' => 'altavista', 'regexp' => '/AltaVista Intranet V([0-9.]*)/u' ],
23
  [ 'name' => 'Analytics SEO', 'id' => 'curious', 'regexp' => '/Curious George - www.analyticsseo.com\/crawler/u' ],
24
  [ 'name' => 'Amazon CloudFront', 'id' => 'cloudfront', 'regexp' => '/Amazon CloudFront/u' ],
25
  [ 'name' => 'Amorank Spider', 'id' => 'amorank', 'regexp' => '/AmorankSpider\/([0-9.]*)/u' ],
26
+ [ 'name' => 'Apple Bot', 'id' => 'apple', 'regexp' => '/Applebot\/([0-9.]*)/u' ],
27
+ [ 'name' => 'Apple News Bot', 'id' => 'apple', 'regexp' => '/AppleNewsBot/u' ],
28
  [ 'name' => 'ArchiveBot', 'id' => 'archive', 'regexp' => '/ArchiveTeam ArchiveBot/u' ],
29
  [ 'name' => 'Archive.org', 'id' => 'archive', 'regexp' => '/archive.org_bot(?:\/([0-9.]*))?/u' ],
30
  [ 'name' => 'Archive.org', 'id' => 'archive', 'regexp' => '/special_archiver(?:\/([0-9.]*))?/u' ],
38
  [ 'name' => 'Baiduspider', 'id' => 'baidu', 'regexp' => '/baiduspider-mobile-gate/u' ],
39
  [ 'name' => 'Baiduspider', 'id' => 'baidu', 'regexp' => '/\+http:\/\/www.baidu.com\/search\/spider.html/u' ],
40
  [ 'name' => 'Baiduspider', 'id' => 'baidu', 'regexp' => '/BaiduImagespider/u' ],
41
+ [ 'name' => 'Barkrowler', 'id' => 'barkrowler', 'regexp' => '/Barkrowler\/([0-9.]*)/u' ],
42
  [ 'name' => 'BazQux', 'id' => 'bazqux', 'regexp' => '/BazQux\/([0-9.]*)/u' ],
43
  [ 'name' => 'Bing', 'id' => 'bingbot', 'regexp' => '/bingbot\/([0-9.]*)/u' ],
44
  [ 'name' => 'Bing', 'id' => 'msnbot', 'regexp' => '/msnbot\/([0-9.]*)/u' ],
49
  [ 'name' => 'Bing', 'id' => 'msnbot', 'regexp' => '/MSNBOT_Mobile/u' ],
50
  [ 'name' => 'Bing', 'id' => 'msmobot', 'regexp' => '/MSMOBOT/u' ],
51
  [ 'name' => 'Bing Preview', 'id' => 'bing', 'regexp' => '/BingPreview\/([0-9.]*)/u' ],
52
+ [ 'name' => 'Blex Bot', 'id' => 'blex', 'regexp' => '/BLEXBot\/([0-9.]*)/u' ],
53
+ [ 'name' => 'Blex Test Bot', 'id' => 'blex', 'regexp' => '/BLEXBotTest\/([0-9.]*)/u' ],
54
  [ 'name' => 'BlogBridge', 'id' => 'blogbridge', 'regexp' => '/BlogBridge ([0-9.]*)/u' ],
55
+ [ 'name' => 'Blogger Bot', 'id' => 'blogger', 'regexp' => '/blogger\.com\)/u' ],
56
  [ 'name' => 'Bloglines', 'id' => 'bloglines', 'regexp' => '/Bloglines\/([0-9.]*)/u' ],
57
  [ 'name' => 'Bloglovin', 'id' => 'bloglovin', 'regexp' => '/Bloglovin\/([0-9.]*)/u' ],
58
  [ 'name' => 'BlogPulse', 'id' => 'blogpulse', 'regexp' => '/BlogPulse \(ISSpider-([0-9.]*)/u' ],
60
  [ 'name' => 'Blogtrottr', 'id' => 'blogtrot', 'regexp' => '/Blogtrottr\/([0-9.]*)/u' ],
61
  [ 'name' => 'Blogshares', 'id' => 'blogshares', 'regexp' => '/Blogshares/u' ],
62
  [ 'name' => 'BoardReader', 'id' => 'boardreader', 'regexp' => '/BoardReader\/([0-9.]*)/u' ],
63
+ [ 'name' => 'British Library', 'id' => 'lddc', 'regexp' => '/uk_lddc_bot\/([0-9.]*)/u' ],
64
  [ 'name' => 'Browsershots', 'id' => 'browsershots', 'regexp' => '/Browsershots/u' ],
65
  [ 'name' => 'BUbiNG', 'id' => 'bubing', 'regexp' => '/BUbiNG/u' ],
66
+ [ 'name' => 'Buck', 'id' => 'buck', 'regexp' => '/Buck\/([0-9.]*)/u' ],
67
+ [ 'name' => 'BuiltWith', 'id' => 'builtwith', 'regexp' => '/BuiltWith\/([0-9.]*)/u' ],
68
  [ 'name' => 'Butterfly', 'id' => 'butterfly', 'regexp' => '/Butterfly\/([0-9.]*)/u' ],
69
+ [ 'name' => 'BuzzSumo', 'id' => 'buzzsumo', 'regexp' => '/buzzsumo\.com/u' ],
70
+ [ 'name' => 'Bytespider', 'id' => 'bytespider', 'regexp' => '/Bytespider/u' ],
71
  [ 'name' => 'CiteSeerX', 'id' => 'heritrix', 'regexp' => '/heritrix\/([0-9.]*)/u' ],
72
+ [ 'name' => 'Clarabot', 'id' => 'clarabot', 'regexp' => '/Clarabot\/([0-9.]*)/u' ],
73
  [ 'name' => 'Cliqzbot', 'id' => 'cliqz', 'regexp' => '/Cliqzbot\/([0-9.]*)/u' ],
74
+ [ 'name' => 'Cloudflare Always Online', 'id' => 'cloudflare', 'regexp' => '/CloudFlare-AlwaysOnline\/([0-9.]*)/u' ],
75
+ [ 'name' => 'Cloudflare AMP', 'id' => 'cloudflare', 'regexp' => '/Cloudflare-AMP\/([0-9.]*)/u' ],
76
+ [ 'name' => 'Cloudflare Diagnostics', 'id' => 'cloudflare', 'regexp' => '/Cloudflare Diagnostics/u' ],
77
+ [ 'name' => 'Cloudflare Diagnostics', 'id' => 'cloudflare', 'regexp' => '/Cloudflare-Diagnostics/u' ],
78
+ [ 'name' => 'Cloudflare SpeedTest', 'id' => 'cloudflare', 'regexp' => '/Cloudflare SpeedTest\/([0-9.]*)/u' ],
79
+ [ 'name' => 'Coccocbot Web', 'id' => 'coccoc', 'regexp' => '/coccocbot-web\/([0-9.]*)/u' ],
80
+ [ 'name' => 'Coccocbot Image', 'id' => 'coccoc', 'regexp' => '/coccocbot-image\/([0-9.]*)/u' ],
81
  [ 'name' => 'Comodo', 'id' => 'comodo', 'regexp' => '/Comodo Spider ([0-9.]*)/u' ],
82
  [ 'name' => 'CommaFeed', 'id' => 'commafeed', 'regexp' => '/CommaFeed\/([0-9.]*)/u' ],
83
+ [ 'name' => 'Common Crawl Bot', 'id' => 'cbot', 'regexp' => '/CCBot\/([0-9.]*)/u' ],
84
+ [ 'name' => 'Common Crawl Research Bot', 'id' => 'cresearch', 'regexp' => '/CCResearchBot\/([0-9.]*)/u' ],
85
  [ 'name' => 'Data Hotel Watchdog', 'id' => 'watchdog', 'regexp' => '/Data-Hotel-Watchdog\/([0-9.]*)/u' ],
86
+ [ 'name' => 'Datanyze', 'id' => 'datanyze', 'regexp' => '/Datanyze/u' ],
87
  [ 'name' => 'DataparkSearch', 'id' => 'datasearch', 'regexp' => '/DataparkSearch\/([0-9.]*)/u' ],
88
+ [ 'name' => 'Dataprovider Bot', 'id' => 'dataprovider', 'regexp' => '/Dataprovider/u' ],
89
+ [ 'name' => 'Daum', 'id' => 'daum', 'regexp' => '/Daum\/([0-9.]*)/u' ],
90
  [ 'name' => 'Daumoa', 'id' => 'daumoa', 'regexp' => '/Daumoa ([0-9.]*)/u' ],
91
  [ 'name' => 'Digg', 'id' => 'digg', 'regexp' => '/Digg Deeper\/v([0-9.]*)/u' ],
92
  [ 'name' => 'Digg', 'id' => 'digg', 'regexp' => '/Digg\/([0-9.]*)/u' ],
93
+ [ 'name' => 'DomainCrawler', 'id' => 'domaincrawl', 'regexp' => '/DomainCrawler\/([0-9.]*)/u' ],
94
+ [ 'name' => 'Domain Stats Bot', 'id' => 'domainstats', 'regexp' => '/DomainStatsBot\/([0-9.]*)/u' ],
95
+ [ 'name' => 'Discord', 'id' => 'discord', 'regexp' => '/Discordbot\/([0-9.]*)/u' ],
96
  [ 'name' => 'Domain Re-Animator', 'id' => 'domain', 'regexp' => '/Domain Re-Animator Bot/u' ],
97
+ [ 'name' => 'DMCA', 'id' => 'dmca', 'regexp' => '/DMCA\.com Page Protection Crawling Service/u' ],
98
+ [ 'name' => 'DuckDuckGo Bot', 'id' => 'duckduck', 'regexp' => '/DuckDuckBot\/([0-9.]*)/u' ],
99
+ [ 'name' => 'DuckDuckGo Https Bot', 'id' => 'duckduck', 'regexp' => '/DuckDuckBot-Https\/([0-9.]*)/u' ],
100
+ [ 'name' => 'DuckDuckGo Favicons Bot', 'id' => 'duckduck', 'regexp' => '/DuckDuckGo-Favicons-Bot\/([0-9.]*)/u' ],
101
+ [ 'name' => 'Embed PHP Library', 'id' => 'embed', 'regexp' => '/Embed PHP library/iu' ],
102
+ [ 'name' => 'Evc-batch', 'id' => 'evc', 'regexp' => '/evc-batch\/([0-9.]*)/u' ],
103
  [ 'name' => 'Exabot Thumbnails', 'id' => 'exabot', 'regexp' => '/Exabot-Thumbnails/u' ],
104
  [ 'name' => 'ExactSeek', 'id' => 'exactseek', 'regexp' => '/ExactSeek Crawler/u' ],
105
  [ 'name' => 'Ezooms Crawler', 'id' => 'ezooms', 'regexp' => '/Ezooms\/([0-9.]*)/u' ],
126
  [ 'name' => 'FeedValidator', 'id' => 'validator', 'regexp' => '/FeedValidator\/([0-9.]*)/u' ],
127
  [ 'name' => 'FeedZirra', 'id' => 'feed', 'regexp' => '/feedzirra/u' ],
128
  [ 'name' => 'Fever', 'id' => 'fever', 'regexp' => '/Fever\/([0-9.]*)/u' ],
129
+ [ 'name' => 'Florienzh', 'id' => 'florienzh', 'regexp' => '/Florienzh\/([0-9.]*)/u' ],
130
  [ 'name' => 'Friendica', 'id' => 'friendica', 'regexp' => '/Friendica/u' ],
131
  [ 'name' => 'FTRF: Friendly Robot', 'id' => 'robot', 'regexp' => '/FTRF: Friendly robot\/([0-9.]*)/u' ],
132
  [ 'name' => 'Genieo Web Filter', 'id' => 'genieo', 'regexp' => '/Genieo\/([0-9.]*)/u' ],
133
  [ 'name' => 'GNIP', 'id' => 'fetchor', 'regexp' => '/UnwindFetchor\/([0-9.]*)/u' ],
134
  [ 'name' => 'Gocrawl', 'id' => 'google', 'regexp' => '/Googlebot \(gocrawl v([0-9.]*)\)/u' ],
135
+ [ 'name' => 'Gofeed', 'id' => 'gofeed', 'regexp' => '/Gofeed\/([0-9.]+)/u' ],
136
  [ 'name' => 'GomezAgent', 'id' => 'gomez', 'regexp' => '/GomezAgent ([0-9.]+)/u' ],
137
  [ 'name' => 'Goo', 'id' => 'ichiro', 'regexp' => '/ichiro\/mobile goo/u' ],
138
  [ 'name' => 'Goo Blog Search', 'id' => 'gooblog', 'regexp' => '/gooblog\/([0-9.]*)/u' ],
147
  [ 'name' => 'Google App Engine', 'id' => 'google', 'regexp' => '/AppEngine-Google/u' ],
148
  [ 'name' => 'Google Web Preview', 'id' => 'google', 'regexp' => '/Google Web Preview/u' ],
149
  [ 'name' => 'Google Page Speed', 'id' => 'google', 'regexp' => '/Google Page Speed Insights/u' ],
150
+ [ 'name' => 'Google Favicon', 'id' => 'google', 'regexp' => '/Google Favicon/u' ],
151
  [ 'name' => 'Google FeedBurner', 'id' => 'feed', 'regexp' => '/FeedBurner\/([0-9.]*)/u' ],
152
  [ 'name' => 'Google Feedfetcher', 'id' => 'google', 'regexp' => '/Feedfetcher-Google/iu' ],
153
  [ 'name' => 'Google Font Analysis', 'id' => 'google', 'regexp' => '/Google-FontAnalysis\/([0-9.]*)/u' ],
160
  [ 'name' => 'Google Wireless Transcoder', 'id' => 'google', 'regexp' => '/Google Wireless Transcoder/u' ],
161
  [ 'name' => 'Google Play Newsstand', 'id' => 'google', 'regexp' => '/GoogleProducer/u' ],
162
  [ 'name' => 'Google YouTube Sample', 'id' => 'google', 'regexp' => '/Google-YouTubeSample\/([0-9.]*)/u' ],
163
+ [ 'name' => 'Gowikibot', 'id' => 'gowiki', 'regexp' => '/Gowikibot\/([0-9.]*)/u' ],
164
  [ 'name' => 'Grammarly', 'id' => 'grammarly', 'regexp' => '/Grammarly\/([0-9.]*)/u' ],
165
  [ 'name' => 'Grub', 'id' => 'grub', 'regexp' => '/grub-client-([0-9.]*)/u' ],
166
  [ 'name' => 'Hatena Antenna', 'id' => 'hatena', 'regexp' => '/Hatena Antenna\/([0-9.]*)/u' ],
168
  [ 'name' => 'Hatena Pagetitle', 'id' => 'hatena', 'regexp' => '/Hatena Pagetitle Agent\/([0-9.]*)/u' ],
169
  [ 'name' => 'HeartRails Capture', 'id' => 'capture', 'regexp' => '/HeartRails_Capture\/([0-9.]*)/u' ],
170
  [ 'name' => 'Heureka Feed', 'id' => 'heureka', 'regexp' => '/Heurekabot-Feed/u' ],
171
+ [ 'name' => 'HootSuite', 'id' => 'hootsuite', 'regexp' => '/Hootsuite-WebFeed\/([0-9\.]*)/u' ],
172
+ [ 'name' => 'HootSuite', 'id' => 'hootsuite', 'regexp' => '/HootSuite Image proxy/u' ],
173
  [ 'name' => 'htdig', 'id' => 'htdig', 'regexp' => '/htdig\/([0-9.]*)/u' ],
174
  [ 'name' => 'HTTPMon', 'id' => 'httpmon', 'regexp' => '/HTTPMon\/([0-9.]*)/u' ],
175
  [ 'name' => 'HubPages', 'id' => 'hubpages', 'regexp' => '/HubPages V([0-9.]*)/u' ],
176
+ [ 'name' => 'HubSpot Crawler', 'id' => 'hubspot', 'regexp' => '/hubspot\.com/u' ],
177
  [ 'name' => 'iAsk Spider', 'id' => 'spider', 'regexp' => '/iaskspider\/([0-9.]*)/u' ],
178
  [ 'name' => 'iAsk Spider', 'id' => 'spider', 'regexp' => '/iaskspider2/u' ],
179
  [ 'name' => 'Ichiro', 'id' => 'ichiro', 'regexp' => '/ichiro\/([0-9.]*)/u' ],
180
  [ 'name' => 'Internet Archive', 'id' => 'archive', 'regexp' => '/InternetArchive\/([0-9.]*)/u' ],
181
+ [ 'name' => 'IndeedBot', 'id' => 'indeed', 'regexp' => '/IndeedBot ([0-9.]*)/u' ],
182
+ [ 'name' => 'Iodc', 'id' => 'iodc', 'regexp' => '/iodc\.co\.uk/u' ],
183
+ [ 'name' => 'Istellabot', 'id' => 'istellabot', 'regexp' => '/istellabot\/t\.([0-9.]*)/u' ],
184
  [ 'name' => 'JamesBOT', 'id' => 'crawler', 'regexp' => '/James BOT - WebCrawler/u' ],
185
  [ 'name' => 'Jayde', 'id' => 'crawler', 'regexp' => '/Jayde Crawler./u' ],
186
+ [ 'name' => 'KakaoTalk Bot', 'id' => 'kakao', 'regexp' => '/kakaotalk-scrap\/([0-9.]*)/u' ],
187
  [ 'name' => 'Kouio', 'id' => 'kouio', 'regexp' => '/kouio.com/u' ],
188
  [ 'name' => 'Larbin', 'id' => 'larbin', 'regexp' => '/[Ll]arbin[\/_]([0-9.]*)/u' ],
189
+ [ 'name' => 'LetsearchBot', 'id' => 'letsearch', 'regexp' => '/LetsearchBot\/([0-9.]*)/u' ],
190
+ [ 'name' => 'Line Bot', 'id' => 'line', 'regexp' => '/Linespider\/([0-9.]*)/u' ],
191
  [ 'name' => 'Linkedin Bot', 'id' => 'linkedin', 'regexp' => '/LinkedInBot\/([0-9.]*)/u' ],
192
+ [ 'name' => 'Linkpad Bot', 'id' => 'linkpad', 'regexp' => '/LinkpadBot\/([0-9.]*)/u' ],
193
  [ 'name' => 'Linkdex Bot', 'id' => 'linkdex', 'regexp' => '/linkdexbot-mobile\/([0-9.]*)/u' ],
194
  [ 'name' => 'Linkdex Bot', 'id' => 'linkdex', 'regexp' => '/linkdex.com\/v([0-9.]*)/u' ],
195
  [ 'name' => 'Livedoor', 'id' => 'livedoor', 'regexp' => '/livedoor/u' ],
196
+ [ 'name' => 'LookSeek', 'id' => 'seeker', 'regexp' => '/Seeker v\.([0-9.]*)/u' ],
197
  [ 'name' => 'LTX71', 'id' => 'ltx71', 'regexp' => '/ltx71/u' ],
198
  [ 'name' => 'Magpie RSS', 'id' => 'magpie', 'regexp' => '/MagpieRSS\/([0-9.]*)/u' ],
199
+ [ 'name' => 'Majestic MJ12 Bot', 'id' => 'mj12bot', 'regexp' => '/MJ12bot\/v([0-9.]*)/u' ],
200
+ [ 'name' => 'Majestic MJ12 Bot', 'id' => 'mj12bot', 'regexp' => '/mj12bot/u' ],
201
  [ 'name' => 'Mapian News Bot', 'id' => 'mapion', 'regexp' => '/mapion-news-bot\/([0-9.]*)/u' ],
202
+ [ 'name' => 'Mail.ru Bot', 'id' => 'mail\.ru', 'regexp' => '/Mail\.RU_Bot\/Img\/([0-9.]*)/i' ],
203
+ [ 'name' => 'Mail.ru Bot', 'id' => 'mail\.ru', 'regexp' => '/Mail\.RU_Bot\/([0-9.]*)/i' ],
204
+ [ 'name' => 'Medium Bot', 'id' => 'medium', 'regexp' => '/Mediumbot-MetaTagFetcher\/([0-9.]*)/u' ],
205
+ [ 'name' => 'Medium Bot', 'id' => 'medium', 'regexp' => '/Mediumbot-ProxyFetcher\/([0-9.]*)/u' ],
206
+ [ 'name' => 'Mega Index Bot', 'id' => 'megaindex', 'regexp' => '/MegaIndex\.ru\/([0-9.]*)/u' ],
207
  [ 'name' => 'Microsoft Social Streams', 'id' => 'socialstreams', 'regexp' => '/Microsoft MSN SocialStreams Bot/u' ],
208
  [ 'name' => 'Mixi', 'id' => 'mixi', 'regexp' => '/mixi-check\/([0-9.]*)/u' ],
209
+ [ 'name' => 'Minds', 'id' => 'minds', 'regexp' => '/MindsMediaProxy\/([0-9\.]*)/u' ],
210
  [ 'name' => 'MnoGoSearch', 'id' => 'mnogo', 'regexp' => '/MnoGoSearch\/([0-9.]*)/u' ],
211
+ [ 'name' => 'MojeekBot', 'id' => 'mojeek', 'regexp' => '/MojeekBot\/([0-9.]*)/u' ],
212
  [ 'name' => 'Monitor.us', 'id' => 'monitor', 'regexp' => '/monitor.us/u' ],
213
+ [ 'name' => 'Moz', 'id' => 'dotbot', 'regexp' => '/DotBot\/([0-9.]*)/i' ],
214
+ [ 'name' => 'Moz', 'id' => 'rogerbot', 'regexp' => '/rogerbot\/([0-9.]*)/i' ],
215
  [ 'name' => 'Naver Yeti', 'id' => 'yeti', 'regexp' => '/Yeti\/([0-9.]*)/u' ],
216
+ [ 'name' => 'MxToolbox', 'id' => 'mxtoolbox', 'regexp' => '/MxToolbox\/([a-zA-Z0-9.]*)/u' ],
217
+ [ 'name' => 'Netcraft Survey Agent Bot', 'id' => 'netcraft', 'regexp' => '/NetcraftSurveyAgent\/([0-9.]*)/u' ],
218
+ [ 'name' => 'Netcraft Web Server Survey Bot', 'id' => 'netcraft', 'regexp' => '/Netcraft Web Server Survey/u' ],
219
+ [ 'name' => 'Netcraft SSL Server Survey Bot', 'id' => 'netcraft', 'regexp' => '/Netcraft SSL Server Survey/u' ],
220
+ [ 'name' => 'Netcraft Bot', 'id' => 'netcraft', 'regexp' => '/Netcraft/iu' ],
221
+ [ 'name' => 'netEstate NE Crawler', 'id' => 'netestate', 'regexp' => '/netEstate NE Crawler/u' ],
222
  [ 'name' => 'Netvibes', 'id' => 'netvibes', 'regexp' => '/Netvibes/u' ],
223
  [ 'name' => 'NewsBlur', 'id' => 'newsblur', 'regexp' => '/NewsBlur Favicon Fetcher/u' ],
224
  [ 'name' => 'NewsBlur', 'id' => 'newsblur', 'regexp' => '/NewsBlur Feed Fetcher/u' ],
227
  [ 'name' => 'NewsGator', 'id' => 'newsgator', 'regexp' => '/NewsGator\/([0-9.]*)/u' ],
228
  [ 'name' => 'NewsGator', 'id' => 'newsgator', 'regexp' => '/NewsGatorOnline\/([0-9.]*)/u' ],
229
  [ 'name' => 'NewsGator FetchLinks', 'id' => 'newsgator', 'regexp' => '/NewsGator FetchLinks extension\/([0-9.]*)/u' ],
230
+ [ 'name' => 'Nimbostratus', 'id' => 'nimbostratus', 'regexp' => '/Nimbostratus-Bot\/v([0-9.]*)/u' ],
231
+ [ 'name' => 'OdklBot', 'id' => 'odklbot', 'regexp' => '/OdklBot\/([0-9.]*)/u' ],
232
  [ 'name' => 'OpenWebSpider', 'id' => 'spider', 'regexp' => '/OpenWebSpider v([0-9.]*)/u' ],
233
  [ 'name' => 'OrangeBot', 'id' => 'orange', 'regexp' => '/OrangeBot-Collector\/([0-9.]*)/u' ],
234
  [ 'name' => 'OrangeBot', 'id' => 'orange', 'regexp' => '/OrangeBot-Mobile/u' ],
235
+ [ 'name' => 'PagesInventory', 'id' => 'pages', 'regexp' => '/PagesInventory/u' ],
236
+ [ 'name' => 'Petal Bot', 'id' => 'petal', 'regexp' => '/PetalBot/u' ],
237
+ [ 'name' => 'Petal Bot', 'id' => 'aspiegel', 'regexp' => '/Aspiegel/u' ],
238
+ [ 'name' => 'Picsearch Bot', 'id' => 'psbot', 'regexp' => '/psbot\/([0-9.]*)/u' ],
239
+ [ 'name' => 'Picsearch Bot', 'id' => 'psbot', 'regexp' => '/psbot-page/u' ],
240
+ [ 'name' => 'Picsearch Bot', 'id' => 'psbot', 'regexp' => '/psbot-image/u' ],
241
  [ 'name' => 'Pingdom', 'id' => 'pingdom', 'regexp' => '/Pingdom.com_bot_version_([0-9.]*)/u' ],
242
  [ 'name' => 'Pinterest', 'id' => 'pinterest', 'regexp' => '/Pinterest\/([0-9.]+)( \(+|$)/u' ],
243
+ [ 'name' => 'Plurk Bot', 'id' => 'plurk', 'regexp' => '/PlurkBot\/([0-9\.]*)/u' ],
244
+ [ 'name' => 'Pocket', 'id' => 'pocket', 'regexp' => '/PocketImageCache\/([0-9.]+)/u' ],
245
+ [ 'name' => 'Pocket', 'id' => 'pocket', 'regexp' => '/PocketParser\/([0-9.]+)/u' ],
246
  [ 'name' => 'PostRank', 'id' => 'postrank', 'regexp' => '/PostRank\/([0-9.]*)/u' ],
247
  [ 'name' => 'PowerMapper', 'id' => 'crawler', 'regexp' => '/CrawlerProcess \(http:\/\/www\.PowerMapper\.com\) \/([0-9.]*)/u' ],
248
  [ 'name' => 'Radian 6', 'id' => 'feed', 'regexp' => '/R6_FeedFetcher/u' ],
249
  [ 'name' => 'Radian 6', 'id' => 'comment', 'regexp' => '/R6_CommentReader/u' ],
250
+ [ 'name' => 'Reddit Bot', 'id' => 'reddit', 'regexp' => '/redditbot\/([0-9.]*)/u' ],
251
  [ 'name' => 'RssBar', 'id' => 'rssbar', 'regexp' => '/RssBar\/([0-9.]*)/u' ],
252
  [ 'name' => 'ROI Hunter', 'id' => 'hunter', 'regexp' => '/ROI Hunter/u' ],
253
  [ 'name' => 'QuerySeekerSpider', 'id' => 'spider', 'regexp' => '/QuerySeekerSpider(?:\/([0-9.]*))?/u' ],
255
  [ 'name' => 'SafeSearch Microdata', 'id' => 'safesearch', 'regexp' => '/SafeSearch microdata crawler/u' ],
256
  [ 'name' => 'Scrapy', 'id' => 'scrapy', 'regexp' => '/Scrapy\/([0-9.]*)/u' ],
257
  [ 'name' => 'ScreenerBot', 'id' => 'crawler', 'regexp' => '/ScreenerBot Crawler Beta ([0-9.]*)/u' ],
258
+ [ 'name' => 'Search Atlas Bot', 'id' => 'searchatlas', 'regexp' => '/SearchAtlas/iu' ],
259
+ [ 'name' => 'Seekport Crawler', 'id' => 'seekport', 'regexp' => '/Seekport Crawler/u' ],
260
+ [ 'name' => 'Semrush', 'id' => 'semrush', 'regexp' => '/SemrushBot\/([0-9.]*)/u' ],
261
+ [ 'name' => 'Serp Stat', 'id' => 'serpstat', 'regexp' => '/serpstatbot\/([0-9.]*)/u' ],
262
+ [ 'name' => 'SEOkicks Bot', 'id' => 'seokicks', 'regexp' => '/SEOkicks/u' ],
263
  [ 'name' => 'Server Density', 'id' => 'monitor', 'regexp' => '/Server Density Service Monitoring/u' ],
264
  [ 'name' => 'Seznam bot', 'id' => 'seznam', 'regexp' => '/SeznamBot|SklikBot|Seznam screenshot-generator/u' ],
265
  [ 'name' => 'Seznam Email Proxy', 'id' => 'seznam', 'regexp' => '/SeznamEmailProxy/u' ],
268
  [ 'name' => 'SilverReader', 'id' => 'reader', 'regexp' => '/SilverReader\/([0-9.]*)/u' ],
269
  [ 'name' => 'SimplePie', 'id' => 'simplepie', 'regexp' => '/SimplePie\/([0-9.]*)/u' ],
270
  [ 'name' => 'Site24x7', 'id' => 'site24', 'regexp' => '/Site24x7/u' ],
271
+ [ 'name' => 'Skype Url Preview', 'id' => 'skype', 'regexp' => '/SkypeUriPreview Preview\/([0-9.]*)/u' ],
272
+ [ 'name' => 'Slackbot Link Checker', 'id' => 'slack', 'regexp' => '/Slackbot-LinkExpanding ([0-9.]*)/u' ],
273
  [ 'name' => 'Sogou Web Spider', 'id' => 'sogou', 'regexp' => '/sogou spider/u' ],
274
  [ 'name' => 'Sogou Web Spider', 'id' => 'sogou', 'regexp' => '/Sogou pic spider\/([0-9.]*)/u' ],
275
  [ 'name' => 'Sogou Web Spider', 'id' => 'sogou', 'regexp' => '/Sogou inst spider\/([0-9.]*)/u' ],
279
  [ 'name' => 'Soso Web Spider', 'id' => 'soso', 'regexp' => '/Sosospider\/([0-9.]*)/u' ],
280
  [ 'name' => 'Soso Web Spider', 'id' => 'soso', 'regexp' => '/Sosospider/u' ],
281
  [ 'name' => 'Soso Image Spider', 'id' => 'soso', 'regexp' => '/Sosoimagespider/u' ],
282
+ [ 'name' => 'SpazioDati', 'id' => 'spaziodati', 'regexp' => '/spaziodati/u' ],
283
  [ 'name' => 'SPDYCheck', 'id' => 'spdycheck', 'regexp' => '/SPDYCheck SPDY Protocol Tester/iu' ],
284
  [ 'name' => 'Spinn3r', 'id' => 'spinn', 'regexp' => '/Spinn3r ([0-9.]*)/iu' ],
285
  [ 'name' => 'Spiderlytics', 'id' => 'spider', 'regexp' => '/Spiderlytics\/([0-9.]*)/iu' ],
286
+ [ 'name' => 'Sputnik Favicon Bot', 'id' => 'sputnik', 'regexp' => '/SputnikFaviconBot\/([0-9.]*)/iu' ],
287
+ [ 'name' => 'Sputnik Image Bot', 'id' => 'sputnik', 'regexp' => '/SputnikImageBot\/([0-9.]*)/iu' ],
288
+ [ 'name' => 'Sputnik Bot', 'id' => 'sputnik', 'regexp' => '/SputnikBot\/([0-9.]*)/iu' ],
289
  [ 'name' => 'StatusCake Error Detector', 'id' => 'detector', 'regexp' => '/StatusCake Error Detector/iu' ],
290
  [ 'name' => 'Summify', 'id' => 'summify', 'regexp' => '/Summify\/([0-9.]*)/u' ],
291
  [ 'name' => 'TelegramBot', 'id' => 'telegram', 'regexp' => '/TelegramBot/u' ],
292
  [ 'name' => 'Twisted PageGetter', 'id' => 'twisted', 'regexp' => '/Twisted PageGetter/u' ],
293
  [ 'name' => 'Twitterbot', 'id' => 'twitter', 'regexp' => '/Twitterbot\/([0-9.]*)/u' ],
294
  [ 'name' => 'Tiny Tiny RSS', 'id' => 'tiny', 'regexp' => '/Tiny Tiny RSS\/([0-9.]*)/u' ],
295
+ [ 'name' => 'TinEye Bot', 'id' => 'tineye', 'regexp' => '/TinEye\/([0-9.]*)/u' ],
296
+ [ 'name' => 'TinEye Bot', 'id' => 'tineye', 'regexp' => '/TinEye-bot\/([0-9.]*)/u' ],
297
  [ 'name' => 'TLSProber', 'id' => 'tlsprober', 'regexp' => '/TLSProber\/([0-9.]*)/u' ],
298
+ [ 'name' => 'TrustedSite', 'id' => 'trustedsite', 'regexp' => '/TrustedSite/u' ],
299
  [ 'name' => 'Typhoeus', 'id' => 'typhoeus', 'regexp' => '/Typhoeus/u' ],
300
  [ 'name' => 'Vagabondo', 'id' => 'vagabondo', 'regexp' => '/Vagabondo\/([0-9.]*)/u' ],
301
+ [ 'name' => 'VelenPublicWebCrawler', 'id' => 'velen', 'regexp' => '/VelenPublicWebCrawler\/([0-9.]*)/u' ],
302
+ [ 'name' => 'vkShare', 'id' => 'vkshare', 'regexp' => '/vkShare/u' ],
303
+ [ 'name' => 'Voat', 'id' => 'voat', 'regexp' => '/Voat\.co OpenGraph Parser/u' ],
304
  [ 'name' => 'Voilabot', 'id' => 'voila', 'regexp' => '/Voila[Bb]ot/u' ],
305
  [ 'name' => 'VocusBot', 'id' => 'vocus', 'regexp' => '/VocusBot ([0-9.]*)/u' ],
306
  [ 'name' => 'Vodafone mCrawler', 'id' => 'mcrawler', 'regexp' => '/Vodafone mCrawler/u' ],
307
+ [ 'name' => 'VuhuvBot', 'id' => 'vuhuv', 'regexp' => '/vuhuvBot\/([0-9.]*)/u' ],
308
  [ 'name' => 'W3Bot', 'id' => 'w3bot', 'regexp' => '/W3Bot ([0-9.]*)/u' ],
309
  [ 'name' => 'W3C CSS Validator', 'id' => 'jigsaw', 'regexp' => '/Jigsaw\/([0-9.]*)/u' ],
310
  [ 'name' => 'W3C Internationalization Checker', 'id' => 'w3c', 'regexp' => '/W3C_I18n-Checker\/([0-9.]*)/u' ],
316
  [ 'name' => 'W3C Robot', 'id' => 'w3c', 'regexp' => '/W3CRobot\/([0-9.]*)/u' ],
317
  [ 'name' => 'W3C Unified Validator', 'id' => 'w3c', 'regexp' => '/W3C_Unicorn\/([0-9.]*)/u' ],
318
  [ 'name' => 'W3C Validator.nu', 'id' => 'validator', 'regexp' => '/Validator.nu\//u' ],
319
+ [ 'name' => 'Wappalyzer', 'id' => 'wappalyzer', 'regexp' => '/Wappalyzer/u' ],
320
  [ 'name' => 'Wayback Archive', 'id' => 'wayback', 'regexp' => '/waybackarchive.org\/([0-9.]*)/u' ],
321
  [ 'name' => 'WebbCrawler', 'id' => 'crawler', 'regexp' => '/WebbCrawler ([0-9.]*)/u' ],
322
  [ 'name' => 'WebIndexer', 'id' => 'webindexer', 'regexp' => '/WebIndexer\//u' ],
324
  [ 'name' => 'WordPress.com', 'id' => 'wordpress', 'regexp' => '/WordPress\.com; http/u' ],
325
  [ 'name' => 'WordPress Jetpack', 'id' => 'wordpress', 'regexp' => '/Jetpack by WordPress\.com/u' ],
326
  [ 'name' => 'WWW Mechanize', 'id' => 'mechanize', 'regexp' => '/WWW-Mechanize\/([0-9.]*)/u' ],
327
+ [ 'name' => 'Xenu Link Sleuth', 'id' => 'xenu', 'regexp' => '/Xenu Link Sleuth\/([0-9.]*)/u' ],
328
  [ 'name' => 'Xerka WebBot', 'id' => 'xerka', 'regexp' => '/Xerka WebBot v([0-9.]*)/u' ],
329
  [ 'name' => 'XML Sitemaps Generator', 'id' => 'sitemap', 'regexp' => '/XML-Sitemaps\/([0-9.]*)/u' ],
330
  [ 'name' => 'XMLSitemapGenerator', 'id' => 'sitemap', 'regexp' => '/XmlSitemapGenerator/u' ],
363
 
364
  [ 'name' => 'Inktomi Slurp', 'id' => 'slurp', 'regexp' => '/Slurp\/([0-9.]*)/u' ],
365
  [ 'name' => 'Inktomi Slurp', 'id' => 'slurp', 'regexp' => '/Slurp\.so\/([0-9.]*)/u' ],
366
+
367
+ [ 'name' => 'Yelp Spider', 'id' => 'yelp', 'regexp' => '/yelpspider-([0-9.]*)/u' ],
368
+ [ 'name' => 'Yioop Bot', 'id' => 'yioop', 'regexp' => '/YioopBot/u' ],
369
+ [ 'name' => 'Yisou Spider', 'id' => 'yisou', 'regexp' => '/YisouSpider\/?([0-9.]*)/u' ],
370
+ [ 'name' => 'Zgrab', 'id' => 'zgrab', 'regexp' => '/zgrab\//u' ],
371
+ [ 'name' => 'ZmEu', 'id' => 'zmeu', 'regexp' => '/ZmEu/u' ],
372
 
373
  /* Generic bots */
374
  [ 'name' => 'Apache Httpd', 'id' => 'httpclient', 'regexp' => '/Apache-HttpClient(?:\/([0-9.]*))?/u' ],
377
  [ 'name' => 'Apache Nutch', 'id' => 'nutch', 'regexp' => '/Nutch(?:CVS|Org)\/([0-9.]*)/u' ],
378
  [ 'name' => 'Apache Synapse', 'id' => 'synapse', 'regexp' => '/compatible; Synapse/u' ],
379
  [ 'name' => 'Borland Delphi', 'id' => 'indy', 'regexp' => '/Indy Library/u' ],
380
+ [ 'name' => 'Go Http Client', 'id' => 'go', 'regexp' => '/Go-http-client\/([0-9.]*)/u' ],
381
+ [ 'name' => 'Go Http Client', 'id' => 'go', 'regexp' => '/go-httpclient v([0-9.]*)/u' ],
382
+ [ 'name' => 'HttpUnit', 'id' => 'httpunit', 'regexp' => '/httpunit\/([0-9.]*)/u' ],
383
+ [ 'name' => 'OkHttp', 'id' => 'okhttp', 'regexp' => '/okhttp\/([0-9.]*)/u' ],
384
+ [ 'name' => 'Node Fetch', 'id' => 'node', 'regexp' => '/node-fetch\/([0-9.]*)/u' ],
385
  [ 'name' => 'Wget', 'id' => 'wget', 'regexp' => '/Wget\/([0-9.]*)/u' ],
386
  [ 'name' => 'Curl', 'id' => 'curl', 'regexp' => '/^curl\/([0-9.]*)/u' ],
387
 
390
  [ 'name' => 'Perl', 'id' => 'simple', 'regexp' => '/LWP::Simple\//u' ],
391
  [ 'name' => 'Perl', 'id' => 'libwww', 'regexp' => '/libwww-perl\//u' ],
392
  [ 'name' => 'Perl', 'id' => 'lwp', 'regexp' => '/lwp-trivial\//u' ],
393
+ [ 'name' => 'Python', 'id' => 'urllib', 'regexp' => '/Python-urllib\/([0-9.]*)/u' ],
394
+ [ 'name' => 'Python', 'id' => 'requests', 'regexp' => '/python-requests\/([0-9.]*)/u' ],
395
  [ 'name' => 'PHP', 'id' => 'php', 'regexp' => '/ PHP\/([0-9.]*)/u' ],
396
  [ 'name' => 'PHP', 'id' => 'php', 'regexp' => '/^PHP/u' ],
397
  [ 'name' => 'PHP', 'id' => 'pear', 'regexp' => '/PEAR HTTP_Request class/u' ],
includes/vendor/whichbrowser/parser/data/applications-browsers.php CHANGED
@@ -15,7 +15,9 @@ Applications::$BROWSERS = [
15
  [ 'name' => '2345 Explorer', 'id' => '2345', 'regexp' =>'/2345Explorer\/([0-9.]*)/u', 'details' => 3 ],
16
  [ 'name' => '2345 Explorer', 'id' => '2345', 'regexp' =>'/2345Explorer v([0-9.]*)/u', 'details' => 3 ],
17
  [ 'name' => '2345 Chrome', 'id' => '2345', 'regexp' =>'/2345chrome v([0-9.]*)/u', 'details' => 3 ],
 
18
  [ 'name' => '360 Extreme Explorer', 'id' => 'qihu', 'regexp' =>'/QIHU 360EE/u', 'type' => Constants\DeviceType::DESKTOP ],
 
19
  [ 'name' => '360 Safe Explorer', 'id' => 'qihu', 'regexp' =>'/QIHU 360SE/u', 'type' => Constants\DeviceType::DESKTOP ],
20
  [ 'name' => '7Star', 'id' => '7star', 'regexp' =>'/7Star\/([0-9.]*)/u' ], // see: http://www.qixing123.com
21
  [ 'name' => 'ABrowse', 'id' => 'abrowse', 'regexp' =>'/A[Bb]rowse ([0-9.]*)/u' ], // browser for the Syllable OS
@@ -23,8 +25,10 @@ Applications::$BROWSERS = [
23
  [ 'name' => 'Acorn Browse', 'id' => 'acorn', 'regexp' =>'/Acorn Browse ([0-9.]+)/u' ],
24
  [ 'name' => 'Acorn Browse', 'id' => 'acorn', 'regexp' =>'/Acorn Phoenix ([0-9.]+)/u' ],
25
  [ 'name' => 'Acoo Browser', 'id' => 'acoo', 'regexp' =>'/Acoo Browser/u' ],
 
26
  [ 'name' => 'AOL Desktop', 'id' => 'aol', 'regexp' =>'/AOL ([0-9.]*); AOLBuild/i' ],
27
  [ 'name' => 'AOL Browser', 'id' => 'america', 'regexp' =>'/America Online Browser (?:[0-9.]*); rev([0-9.]*);/i' ],
 
28
  [ 'name' => 'Arachne', 'id' => 'arachne', 'regexp' =>'/xChaos_Arachne\/[0-9]\.([0-9.]*)/u', 'type' => Constants\DeviceType::DESKTOP ], // see: www.glennmcc.org
29
  [ 'name' => 'Arora', 'id' => 'arora', 'regexp' =>'/[Aa]rora\/([0-9.]*)/u' ], // see: www.arora-browser.org
30
  [ 'name' => 'AWeb', 'id' => 'aweb', 'regexp' =>'/Amiga-AWeb(?:\/([0-9.]*))?/u' ],
@@ -32,85 +36,180 @@ Applications::$BROWSERS = [
32
  [ 'name' => 'Avant Browser', 'id' => 'avant', 'regexp' =>'/Avant Browser/u' ],
33
  [ 'name' => 'Avant Browser', 'id' => 'avant', 'regexp' =>'/Avant TriCore/u' ],
34
  [ 'name' => 'Avast SafeZone', 'id' => 'asw', 'regexp' =>'/ASW\/([0-9.]*)/u', 'details' => 2 ],
 
35
  [ 'name' => 'Aviator', 'id' => 'aviator', 'regexp' =>'/Aviator\/([0-9.]*)/u', 'details' => 1 ], // see: https://github.com/WhiteHatSecurity/Aviator
 
36
  [ 'name' => 'Baidu Browser', 'id' => 'flyflow', 'regexp' =>'/FlyFlow\/([0-9.]*)/u', 'details' => 2 ],
37
  [ 'name' => 'Baidu Browser', 'id' => 'bdbrowser', 'regexp' =>'/bdbrowser\/([0-9.]*)/i' ],
38
  [ 'name' => 'Baidu Browser', 'id' => 'bdbrowser', 'regexp' =>'/bdbrowser_i18n\/([0-9.]*)/i' ],
39
  [ 'name' => 'Baidu Spark', 'id' => 'bdspark', 'regexp' =>'/BDSpark\/([0-9.]*)/u', 'details' => 2 ],
 
40
  [ 'name' => 'Beamrise', 'id' => 'beamrise', 'regexp' =>'/Beamrise\/([0-9.]*)/u' ], // see: http://beamrise.com
 
41
  [ 'name' => 'Black Wren', 'id' => 'blackwren', 'regexp' =>'/BlackWren\/([0-9.]*)/u', 'details' => 2 ], // see: https://github.com/conmarap/jetbrowser
 
 
 
42
  [ 'name' => 'Brave', 'id' => 'brave', 'regexp' =>'/brave\/([0-9.]*)/u' ],
 
 
 
43
  [ 'name' => 'Byffox', 'id' => 'byffox', 'regexp' =>'/Byffox\/([0-9.]*)/u', 'type' => Constants\DeviceType::DESKTOP ],
44
  [ 'name' => 'Camino', 'id' => 'camino', 'regexp' =>'/Camino\/([0-9.]*)/u', 'type' => Constants\DeviceType::DESKTOP ],
45
  [ 'name' => 'Canure', 'id' => 'canure', 'regexp' =>'/Canure\/([0-9.]*)/u', 'details' => 3 ], // see: http://canure.weebly.com/index.html
 
 
46
  [ 'name' => 'Charon', 'id' => 'charon', 'regexp' =>'/Charon/' ], // see: http://www.vitanuova.com/inferno/man/1/charon.html
 
 
 
 
47
  [ 'name' => 'ChromePlus', 'id' => 'chromeplus', 'regexp' =>'/ChromePlus(?:\/([0-9.]*))?$/u', 'details' => 3, 'type' => Constants\DeviceType::DESKTOP ],
 
 
48
  [ 'name' => 'CometBird', 'id' => 'cometbird', 'regexp' =>'/CometBird\/([0-9.]*)/u' ], // see: http://www.cometbird.com
49
  [ 'name' => 'Comodo Dragon', 'id' => 'comodo', 'regexp' =>'/Comodo_Dragon\/([0-9.]*)/u', 'details' => 2 ],
50
  [ 'name' => 'Comodo Dragon', 'id' => 'dragon', 'regexp' =>'/Dragon\/([0-9.]*)/u', 'details' => 2 ],
51
  [ 'name' => 'Comodo IceDragon', 'id' => 'dragon', 'regexp' =>'/IceDragon\/([0-9.]*)/u', 'details' => 2, 'type' => Constants\DeviceType::DESKTOP ],
52
  [ 'name' => 'Conkeror', 'id' => 'conkeror', 'regexp' =>'/[Cc]onkeror\/([0-9.]*)/u' ],
 
53
  [ 'name' => 'CoolNovo', 'id' => 'coolnovo', 'regexp' =>'/(?:CoolNovo|CoolNovoChromePlus)\/([0-9.]*)/u', 'details' => 3, 'type' => Constants\DeviceType::DESKTOP ],
 
 
 
54
  [ 'name' => 'Cunaguaro', 'id' => 'cunaguaro', 'regexp' =>'/Cunaguaro\/([0-9.]*)/u', 'details' => 3, 'type' => Constants\DeviceType::DESKTOP ],
 
55
  [ 'name' => 'Cyberfox', 'id' => 'cyberfox', 'regexp' =>'/Cyberfox\/([0-9.]*)/u', 'details' => 2 ], // see: https://cyberfox.8pecxstudios.com
56
  [ 'name' => 'Daedalus', 'id' => 'daedalus', 'regexp' =>'/Daedalus ([0-9.]*)/u', 'details' => 2 ],
 
 
 
 
57
  [ 'name' => 'Dillo', 'id' => 'dillo', 'regexp' =>'/Dillo\/([0-9.]*)/u' ], // see: http://www.dillo.org
 
58
  [ 'name' => 'Doga Rhodonit', 'id' => 'rhodonit', 'regexp' =>'/DogaRhodonit/u' ],
 
 
59
  [ 'name' => 'EudoraWeb', 'id' => 'eudoraweb', 'regexp' =>'/EudoraWeb ([0-9.]*)/u' ],
 
 
60
  [ 'name' => 'Flock', 'id' => 'flock', 'regexp' =>'/Flock\/([0-9.]*)/u', 'details' => 3, 'type' => Constants\DeviceType::DESKTOP ],
 
 
61
  [ 'name' => 'Galeon', 'id' => 'galeon', 'regexp' =>'/Galeon\/([0-9.]*)/u', 'details' => 3 ],
 
62
  [ 'name' => 'GNOME Web', 'id' => 'epiphany', 'regexp' =>'/Epiphany\/([0-9.]*)/u', 'type' => Constants\DeviceType::DESKTOP ],
 
 
 
63
  [ 'name' => 'IBrowse', 'id' => 'ibrowse', 'regexp' =>'/IBrowse[\/ ]([0-9.]*)/u', 'type' => Constants\DeviceType::DESKTOP ],
64
  [ 'name' => 'iCab', 'id' => 'icab', 'regexp' =>'/iCab(?: J)?[\/ ](?:Pre)?([0-9.]*)/u' ],
65
  [ 'name' => 'Iceape', 'id' => 'iceape', 'regexp' =>'/Iceape\/([0-9.]*)/u' ],
66
  [ 'name' => 'IceCat', 'id' => 'icecat', 'regexp' =>'/IceCat[ \/]([0-9.]*)/u', 'type' => Constants\DeviceType::DESKTOP ], // see: https://www.gnu.org/software/gnuzilla/
 
67
  [ 'name' => 'Iceweasel', 'id' => 'iceweasel', 'regexp' =>'/Iceweasel\/([0-9.]*)/iu', 'type' => Constants\DeviceType::DESKTOP ],
 
68
  [ 'name' => 'Iridium', 'id' => 'iridium', 'regexp' =>'/Iridium\/([0-9.]*)/u', 'details' => 2 ], // see: http://www.srware.net/en/software_srware_iron.php
69
  [ 'name' => 'Iron', 'id' => 'iron', 'regexp' =>'/Iron\/([0-9.]*)/u', 'details' => 2 ], // see: http://www.srware.net/en/software_srware_iron.php
 
70
  [ 'name' => 'Kazehakase', 'id' => 'kazehakase', 'regexp' =>'/Kazehakase\/([0-9.]*)/u' ], // see: http://kazehakase.osdn.jp
71
  [ 'name' => 'KChrome', 'id' => 'kchrome', 'regexp' =>'/KChrome\/([0-9.]*)/u', 'details' => 3 ], // see: http://www.kchrome.com
 
 
 
 
72
  [ 'name' => 'K-Meleon', 'id' => 'meleon', 'regexp' =>'/K-Meleon\/([0-9.]*)/u', 'type' => Constants\DeviceType::DESKTOP ], // see: http://kmeleonbrowser.org
 
73
  [ 'name' => 'LieBao', 'id' => 'lbbrowser', 'regexp' =>'/LBBROWSER/u' ], // see: http://www.liebao.cn
 
74
  [ 'name' => 'Lobo', 'id' => 'lobo', 'regexp' =>'/Lobo\/([0-9.]*)/u', 'type' => Constants\DeviceType::DESKTOP ], // see: http://sourceforge.net/projects/xamj/files/Lobo%20Browser/
 
 
75
  [ 'name' => 'Lunascape', 'id' => 'lunascape', 'regexp' =>'/ Lunascape[\/| ]([0-9.]*)/u', 'details' => 3 ], // see: http://www.lunascape.tv
76
  [ 'name' => 'Naenara', 'id' => 'naenara', 'regexp' =>'/NaenaraBrowser\/([0-9.]*)/u', 'details' => 2 ], // Firefox based browser used with Red Star OS
 
 
77
  [ 'name' => 'Maxthon', 'id' => 'mxbrowser', 'regexp' =>'/MxBrowser\/([0-9.]*)/u' ],
78
  [ 'name' => 'Maxthon', 'id' => 'mxbrowser', 'regexp' =>'/MxBrowser-iPhone\/([0-9.]*)/u' ],
 
 
79
  [ 'name' => 'MixShark', 'id' => 'mixshark', 'regexp' =>'/MixShark\/([0-9.]*)/u' ], // see: http://terbaddo.free.fr/mixshark.php
80
  [ 'name' => 'mlbrowser', 'id' => 'mlbrowser', 'regexp' =>'/mlbrowser/u' ], // see: https://github.com/Topguy/mlbrowser
 
 
81
  [ 'name' => 'NetPositive', 'id' => 'netpositive', 'regexp' =>'/NetPositive\/([0-9.]*)/u' ],
 
82
  [ 'name' => 'Origyn', 'id' => 'origyn', 'regexp' =>'/Origyn Web Browser/u' ],
83
  [ 'name' => 'Odyssey', 'id' => 'owb', 'regexp' =>'/OWB\/([0-9.]*)/u' ],
 
 
84
  [ 'name' => 'Orca', 'id' => 'orca', 'regexp' =>'/Orca\/([0-9.]*)/u' ],
85
  [ 'name' => 'Oregano', 'id' => 'oregano', 'regexp' =>'/Oregano ([0-9.]*)/u' ], // see: http://www.xat.nl/en/riscos/sw/oregano/
86
  [ 'name' => 'Otter', 'id' => 'otter', 'regexp' =>'/Otter(?: Browser)?\/([0-9.]*)/u' ], // see: https://otter-browser.org
87
  [ 'name' => 'Pale Moon', 'id' => 'palemoon', 'regexp' =>'/Pale[mM]oon\/([0-9.]*)/u' ], // see: https://www.palemoon.org
 
 
 
 
88
  [ 'name' => 'Qihoo 360', 'id' => 'qihu', 'regexp' =>'/QIHU THEWORLD/u' ],
 
89
  [ 'name' => 'QtWeb', 'id' => 'qtweb', 'regexp' =>'/QtWeb Internet Browser\/([0-9.]*)/u' ],
 
90
  [ 'name' => 'QupZilla', 'id' => 'qupzilla', 'regexp' =>'/QupZilla\/([0-9.]*)/u', 'type' => Constants\DeviceType::DESKTOP ],
 
91
  [ 'name' => 'rekonq', 'id' => 'rekonq', 'regexp' =>'/rekonq(?:\/([0-9.]*))?/u', 'type' => Constants\DeviceType::DESKTOP ],
92
  [ 'name' => 'Ryouko', 'id' => 'ryouko', 'regexp' =>'/Ryouko\/([0-9.]*)/u', 'type' => Constants\DeviceType::DESKTOP ], // see: https://github.com/foxhead128/ryouko
 
93
  [ 'name' => 'SaaYaa Explorer', 'id' => 'saayaa', 'regexp' =>'/SaaYaa/u', 'type' => Constants\DeviceType::DESKTOP ],
 
 
 
 
 
94
  [ 'name' => 'Sleipnir', 'id' => 'sleipnir', 'regexp' =>'/Sleipnir\/([0-9.]*)/u', 'details' => 3 ],
 
95
  [ 'name' => 'Sogou Explorer', 'id' => 'metasr', 'regexp' =>'/SE 2.X MetaSr/u', 'type' => Constants\DeviceType::DESKTOP ],
 
 
96
  [ 'name' => 'Stainless', 'id' => 'stainless', 'regexp' =>'/Stainless\/([0-9.]*)/u' ], // see: http://www.stainlessapp.com
 
97
  [ 'name' => 'SunChrome', 'id' => 'sunchrome', 'regexp' =>'/SunChrome\/([0-9.]*)/u' ],
 
 
98
  [ 'name' => 'Superbird', 'id' => 'superbird', 'regexp' =>'/Super[Bb]ird\/([0-9.]*)/u', 'details' => 2 ],
 
 
99
  [ 'name' => 'Swing Browser', 'id' => 'swing', 'regexp' =>'/Swing(?:\(And\))?\/([0-9.]*)/u', 'details' => 3 ], // see: http://swing-browser.com
 
 
100
  [ 'name' => 'Tencent Traveler', 'id' => 'tencent', 'regexp' =>'/TencentTraveler ([0-9.]*)/u', 'details' => 2 ],
101
  [ 'name' => 'TenFourFox', 'id' => 'tenfourfox', 'regexp' =>'/TenFourFox\//u' ],
102
  [ 'name' => 'The World', 'id' => 'theworld', 'regexp' =>'/TheWorld(?: ([0-9.]*))?/u' ],
 
103
  [ 'name' => 'Tungsten Browser', 'id' => 'tungsten', 'regexp' =>'/TungstenBrowser\/([0-9.]*)/u' ],
 
 
 
104
  [ 'name' => 'Vivaldi', 'id' => 'vivaldi', 'regexp' =>'/Vivaldi\/([0-9.]*)/u', 'details' => 2 ],
 
 
105
  [ 'name' => 'Voyager', 'id' => 'voyager', 'regexp' =>'/AmigaVoyager\/([0-9.]*)/u' ],
106
  [ 'name' => 'Waterfox', 'id' => 'waterfox', 'regexp' =>'/Waterfox\/([0-9.]*)/u', 'details' => 2, 'type' => Constants\DeviceType::DESKTOP ],
 
 
 
 
107
  [ 'name' => 'Yandex Browser', 'id' => 'yabrowser', 'regexp' =>'/YaBrowser\/([0-9.]*)/u', 'details' => 2 ],
 
 
 
108
 
109
  /* Mobile browsers */
110
  [ 'name' => '1Browser', 'id' => '1password', 'regexp' =>'/1Password\/([0-9.]*)/u' ],
111
  [ 'name' => '2345 Browser', 'id' => '2345', 'regexp' =>'/Mb2345Browser\/([0-9.]*)/u' ],
112
  [ 'name' => '3G Explorer', 'id' => '3g explorer', 'regexp' =>'/3G Explorer\/([0-9.]*)/u', 'details' => 3 ],
113
  [ 'name' => '4G Explorer', 'id' => '4g explorer', 'regexp' =>'/4G Explorer\/([0-9.]*)/u', 'details' => 3 ],
 
114
  [ 'name' => 'Atomic', 'id' => 'atomiclite', 'regexp' =>'/AtomicLite\/([0-9.]*)/u' ], // see: http://atomicwebbrowser.com
115
  [ 'name' => 'AU', 'id' => 'au', 'regexp' =>'/(?:^| )AU(?:.Browser)?\/([0-9.]+)/u' ],
116
  [ 'name' => 'Awakening', 'id' => 'awakening', 'regexp' =>'/Awakening Browser\/([0-9.]*)/u', 'details' => 2 ],
@@ -128,10 +227,14 @@ Applications::$BROWSERS = [
128
  [ 'name' => 'Digia @Web', 'id' => 'digia', 'regexp' =>'/Digia @Web\/([0-9.]*)/u' ],
129
  [ 'name' => 'Doris', 'id' => 'doris', 'regexp' =>'/Doris\/([0-9.]*)/u' ],
130
  [ 'name' => 'Dorothy', 'id' => 'doroty', 'regexp' =>'/Dorothy$/u' ],
 
 
131
  [ 'name' => 'EMOBILE Browser', 'id' => 'www browser', 'regexp' =>'/WWW Browser\/ver([0-9.]*)/u' ],
 
132
  [ 'name' => 'EUI Browser', 'id' => 'eui', 'regexp' =>'/EUI Browser\/[^0-9\s]*([0-9.]*)/u', 'details' => 2 ],
133
  [ 'name' => 'Go.Web', 'id' => 'go\.web', 'regexp' =>'/Go\.Web\/([0-9.]*)/u' ], // used on early Blackberry, by GoAmerica
134
  [ 'name' => 'Helium', 'id' => 'helium', 'regexp' =>'/HeliumMobileBrowser\/([0-9.]*)/u' ],
 
135
  [ 'name' => 'Huohou Browser', 'id' => 'huohoubrowser', 'regexp' =>'/HuohouBrowser\/([0-9.]*)/u' ],
136
  [ 'name' => 'iCab', 'id' => 'icab', 'regexp' =>'/iCabMobile\/([0-9.]*)/u' ],
137
  [ 'name' => 'iLunascape', 'id' => 'lunascape', 'regexp' =>'/iLunascape\/([0-9.]*)/u', 'details' => 3 ], // see: http://www.lunascape.tv
@@ -139,35 +242,49 @@ Applications::$BROWSERS = [
139
  [ 'name' => 'iSurf', 'id' => 'isurf', 'regexp' =>'/iSurf version \/v([0-9.]*)/u', 'details' => 2 ],
140
  [ 'name' => 'Jig Browser', 'id' => 'jig browser', 'regexp' =>'/jig browser(?: web| core|9i?)?;? ?([0-9.]+)?/u', 'type' => Constants\DeviceType::MOBILE ],
141
  [ 'name' => 'Jumanji', 'id' => 'jumanji', 'regexp' =>'/jumanji/u' ], // see: jumanji browser ubuntu
 
142
  [ 'name' => 'Kiosk', 'id' => 'kiosk', 'regexp' =>'/Kiosk\/([0-9.]*)/u' ], // see: http://www.kioskbrowser.net
 
143
  [ 'name' => 'LeBrowser', 'id' => 'lebrowser', 'regexp' =>'/LeBrowser\/([0-9.]*)/u', 'details' => 2 ],
144
  [ 'name' => 'LieBaoFast', 'id' => 'liebao', 'regexp' =>'/LieBaoFast\/([0-9.]*)/u' ], // see: http://www.liebao.cn
145
  [ 'name' => 'MaCross Mobile', 'id' => 'macross', 'regexp' =>'/MaCross\/([0-9.]*)/u' ],
146
  [ 'name' => 'Mammoth', 'id' => 'mammoth', 'regexp' =>'/Mammoth\/([0-9.]*)/u' ], // see: https://itunes.apple.com/cn/app/meng-ma-liu-lan-qi/id403760998?mt=8
147
  [ 'name' => 'mCent Browser', 'id' => 'mcent', 'regexp' =>'/mCent\/([0-9.]*)/u' ],
 
 
148
  [ 'name' => 'Motorola Internet Browser', 'id' => 'mib', 'regexp' =>'/MIB\/([0-9.]*)/u' ],
149
  [ 'name' => 'Motorola Internet Browser', 'id' => 'mib', 'regexp' =>'/MIB([0-9.]+)\//u' ],
150
  [ 'name' => 'Motorola Internet Browser', 'id' => 'cmcs', 'regexp' =>'/Browser\/CMCS([0-9.]*)/u' ],
151
  [ 'name' => 'Motorola WebKit', 'id' => 'motorola', 'regexp' =>'/MotorolaWebKit(?:\/([0-9.]*))?/u', 'details' => 3 ],
 
152
  [ 'name' => 'NetFront Life Browser', 'id' => 'netfrontlife', 'regexp' =>'/NetFrontLifeBrowser\/([0-9.]*)/u' ],
153
  [ 'name' => 'OneBrowser', 'id' => 'onebrowser', 'regexp' =>'/OneBrowser\/([0-9.]*)/u' ],
 
154
  [ 'name' => 'PocketLink', 'id' => 'plink', 'regexp' =>'/PLink ([0-9.]+)/iu', 'details' => 2 ],
155
  [ 'name' => 'Polaris', 'id' => 'polaris', 'regexp' =>'/Polaris[\/ ]v?([0-9.]*)/iu', 'details' => 2 ],
156
  [ 'name' => 'Polaris', 'id' => 'polaris', 'regexp' =>'/POLARIS([0-9.]+)/u', 'details' => 2 ],
 
157
  [ 'name' => 'Openwave', 'id' => 'openwave', 'regexp' =>'/Open[Ww]ave\/([0-9.]*)/u', 'details' => 2, 'type' => Constants\DeviceType::MOBILE ],
158
  [ 'name' => 'Openwave', 'id' => 'openwave', 'regexp' =>'/Openwave Mobile Browser ([0-9.]*)/u', 'details' => 2, 'type' => Constants\DeviceType::MOBILE ],
159
  [ 'name' => 'Openwave', 'id' => 'openwave', 'regexp' =>'/Browser\/OpenWave([0-9.]*)/u', 'details' => 2, 'type' => Constants\DeviceType::MOBILE ],
160
  [ 'name' => 'Openwave', 'id' => 'up', 'regexp' =>'/UP\. ?Browser(?:\/([a-z0-9.]*))?/iu', 'details' => 2, 'type' => Constants\DeviceType::MOBILE ],
161
  [ 'name' => 'Openwave', 'id' => 'km', 'regexp' =>'/KM\.Browser\/([0-9.]+)/iu', 'details' => 2, 'type' => Constants\DeviceType::MOBILE ],
162
  [ 'name' => 'Openwave', 'id' => 'up', 'regexp' =>'/UP\/([0-9.]+)/u', 'details' => 2, 'type' => Constants\DeviceType::MOBILE ],
163
- [ 'name' => 'Quark Browser', 'id' => 'quark', 'regexp' =>'/Quark\/([0-9.]*)/u', 'details' => 3 ],
 
 
 
164
  [ 'name' => 'SEMC Browser', 'id' => 'semc', 'regexp' =>'/SEMC-Browser\/([0-9.]*)/u' ],
165
  [ 'name' => 'STNC HitchHiker' , 'id' => 'stnc', 'regexp' =>'/STNC-WTL\/[0-9.]*/u' ],
166
  [ 'name' => 'Sogou Mobile', 'id' => 'sogou', 'regexp' =>'/SogouMobileBrowser\/([0-9.]*)/u', 'details' => 2 ],
167
  [ 'name' => 'Swing Browser', 'id' => 'swing', 'regexp' =>'/Swing\(And\)\/([0-9.]*)/u', 'details' => 3 ],
168
  [ 'name' => 'Symphony', 'id' => 'symphony', 'regexp' =>'/Symphony ([0-9.]+)$/u' ],
 
169
  [ 'name' => 'TinY', 'id' => 'ucpro', 'regexp' =>'/ucpro\/([0-9.]+)/iu' ],
 
170
  [ 'name' => 'WebLite', 'id' => 'weblite', 'regexp' =>'/WebLite\/([0-9.]*)/u', 'type' => Constants\DeviceType::MOBILE ],
 
 
171
 
172
  /* Television browsers */
173
  [ 'name' => 'AltiBrowser', 'id' => 'alti', 'regexp' =>'/AltiBrowser\/([0-9.]*)/i' ],
@@ -175,6 +292,7 @@ Applications::$BROWSERS = [
175
  [ 'name' => 'AwoX', 'id' => 'awox', 'regexp' =>'/AwoX(?:\/([0-9.]*))? Browser/i' ],
176
  [ 'name' => 'Isis', 'id' => 'browserserver', 'regexp' =>'/BrowserServer/u' ],
177
  [ 'name' => 'Isis', 'id' => 'isis', 'regexp' =>'/ISIS\/([0-9.]*)/u', 'details' => 2 ],
 
178
  [ 'name' => 'Spyglass', 'id' => 'spyglass', 'regexp' =>'/Spyglass ([0-9.]+); OpenTV/u' ],
179
  [ 'name' => 'Oregan Browser', 'id' => 'oregan', 'regexp' =>'/OreganMediaBrowser(?:\/([0-9.]*))?/u', 'details' => 2 ],
180
  [ 'name' => 'Viera Browser', 'id' => 'viera', 'regexp' =>'/Viera\/([0-9.]*)/u' ],
@@ -185,7 +303,7 @@ Applications::$BROWSERS = [
185
  [ 'name' => 'Aplix', 'id' => 'aplix', 'regexp' =>'/Aplix_SEGASATURN_browser\/([0-9](?:.[0-9.]+)?)/u' ], // browser for the Sega Saturn
186
  [ 'name' => 'Bunjalloo', 'id' => 'bunjalloo', 'regexp' =>'/Bunjalloo\/([0-9.]*)/u' ], // browser for the Nintento DS
187
  [ 'name' => 'Nintendo Web Framework', 'id' => 'nwf', 'regexp' =>'/NWF\/([0-9.]*)/u', 'details' => 2 ], // browser for the Sega Dreamcast
188
- [ 'name' => 'Nuanti Meta', 'id' => 'nuanti', 'regexp' =>'/Nuanti(?:Meta)?\/([0-9.]*)/u' ], // browser for the Playstation
189
 
190
  /* Other browsers */
191
  [ 'name' => 'Wear Internet Browser','id' => 'wib', 'regexp' =>'/WIB\/([0-9.]*)/u' ],
@@ -216,7 +334,7 @@ Applications::$BROWSERS = [
216
  [ 'name' => 'Snowshoe', 'id' => 'snowshoe', 'regexp' =>'/Snowshoe\/([0-9.]*)/u', 'details' => 2 ],
217
  [ 'name' => 'Sputnik', 'id' => 'sputnik', 'regexp' =>'/Sputnik\/([0-9.]*)/iu', 'details' => 3 ],
218
  [ 'name' => 'Surf', 'id' => 'surf', 'regexp' =>'/Surf\/([0-9.]*)/u' ],
219
- [ 'name' => 'TaoBrowser', 'id' => 'tao', 'regexp' =>'/TaoBrowser\/([0-9.]*)/u', 'details' => 2 ],
220
  [ 'name' => 'TaomeeBrowser', 'id' => 'tao', 'regexp' =>'/TaomeeBrowser\/([0-9.]*)/u', 'details' => 2 ],
221
  [ 'name' => 'TazWeb', 'id' => 'taz', 'regexp' =>'/TazWeb/u' ],
222
  [ 'name' => 'Uzbl', 'id' => 'uzbl', 'regexp' =>'/^Uzbl/u' ],
@@ -250,4 +368,4 @@ Applications::$BROWSERS = [
250
  [ 'name' => 'BrightSign', 'id' => 'brightsign', 'regexp' =>'/BrightSign\/([0-9.]*)/u', 'type' => Constants\DeviceType::SIGNAGE ],
251
  [ 'name' => 'Coship MMCP', 'id' => 'coship', 'regexp' =>'/Coship_MMCP_([0-9.]*)/u', 'type' => Constants\DeviceType::SIGNAGE ],
252
  ]
253
- ];
15
  [ 'name' => '2345 Explorer', 'id' => '2345', 'regexp' =>'/2345Explorer\/([0-9.]*)/u', 'details' => 3 ],
16
  [ 'name' => '2345 Explorer', 'id' => '2345', 'regexp' =>'/2345Explorer v([0-9.]*)/u', 'details' => 3 ],
17
  [ 'name' => '2345 Chrome', 'id' => '2345', 'regexp' =>'/2345chrome v([0-9.]*)/u', 'details' => 3 ],
18
+ [ 'name' => '37abc Browser', 'id' => '37abc', 'regexp' => '/ 37abc\/([0-9.]*)/u', 'type' => Constants\DeviceType::DESKTOP ],
19
  [ 'name' => '360 Extreme Explorer', 'id' => 'qihu', 'regexp' =>'/QIHU 360EE/u', 'type' => Constants\DeviceType::DESKTOP ],
20
+ [ 'name' => '1st Browser', 'id' => '1stbrowser', 'regexp' => '/1stBrowser\/([0-9.]*)/u', 'type' => Constants\DeviceType::DESKTOP ],
21
  [ 'name' => '360 Safe Explorer', 'id' => 'qihu', 'regexp' =>'/QIHU 360SE/u', 'type' => Constants\DeviceType::DESKTOP ],
22
  [ 'name' => '7Star', 'id' => '7star', 'regexp' =>'/7Star\/([0-9.]*)/u' ], // see: http://www.qixing123.com
23
  [ 'name' => 'ABrowse', 'id' => 'abrowse', 'regexp' =>'/A[Bb]rowse ([0-9.]*)/u' ], // browser for the Syllable OS
25
  [ 'name' => 'Acorn Browse', 'id' => 'acorn', 'regexp' =>'/Acorn Browse ([0-9.]+)/u' ],
26
  [ 'name' => 'Acorn Browse', 'id' => 'acorn', 'regexp' =>'/Acorn Phoenix ([0-9.]+)/u' ],
27
  [ 'name' => 'Acoo Browser', 'id' => 'acoo', 'regexp' =>'/Acoo Browser/u' ],
28
+ [ 'name' => 'Amigo Browser', 'id' => 'amigo', 'regexp' => '/ Amigo\/([0-9.]*)/u', 'type' => Constants\DeviceType::DESKTOP ], // see: https://amigo.mail.ru/
29
  [ 'name' => 'AOL Desktop', 'id' => 'aol', 'regexp' =>'/AOL ([0-9.]*); AOLBuild/i' ],
30
  [ 'name' => 'AOL Browser', 'id' => 'america', 'regexp' =>'/America Online Browser (?:[0-9.]*); rev([0-9.]*);/i' ],
31
+ [ 'name' => 'APUS Browser', 'id' => 'apus', 'regexp' => '/APUSBrowser\/([0-9.]*)/u', 'type' => Constants\DeviceType::DESKTOP ], // see: https://www.apusapps.com/en/browser/
32
  [ 'name' => 'Arachne', 'id' => 'arachne', 'regexp' =>'/xChaos_Arachne\/[0-9]\.([0-9.]*)/u', 'type' => Constants\DeviceType::DESKTOP ], // see: www.glennmcc.org
33
  [ 'name' => 'Arora', 'id' => 'arora', 'regexp' =>'/[Aa]rora\/([0-9.]*)/u' ], // see: www.arora-browser.org
34
  [ 'name' => 'AWeb', 'id' => 'aweb', 'regexp' =>'/Amiga-AWeb(?:\/([0-9.]*))?/u' ],
36
  [ 'name' => 'Avant Browser', 'id' => 'avant', 'regexp' =>'/Avant Browser/u' ],
37
  [ 'name' => 'Avant Browser', 'id' => 'avant', 'regexp' =>'/Avant TriCore/u' ],
38
  [ 'name' => 'Avast SafeZone', 'id' => 'asw', 'regexp' =>'/ASW\/([0-9.]*)/u', 'details' => 2 ],
39
+ [ 'name' => 'AVG Secure Browser', 'id' => 'avg', 'regexp' =>'/ AVG\/([0-9.]*)/u', 'type' => Constants\DeviceType::DESKTOP ], // see: https://www.avg.com/secure-browser
40
  [ 'name' => 'Aviator', 'id' => 'aviator', 'regexp' =>'/Aviator\/([0-9.]*)/u', 'details' => 1 ], // see: https://github.com/WhiteHatSecurity/Aviator
41
+ [ 'name' => 'Avira Scout', 'id' => 'avira', 'regexp' => '/AviraScout\/([0-9.]*)/u', 'type' => Constants\DeviceType::DESKTOP ], // see: https://www.avira.com/en/avira-scout
42
  [ 'name' => 'Baidu Browser', 'id' => 'flyflow', 'regexp' =>'/FlyFlow\/([0-9.]*)/u', 'details' => 2 ],
43
  [ 'name' => 'Baidu Browser', 'id' => 'bdbrowser', 'regexp' =>'/bdbrowser\/([0-9.]*)/i' ],
44
  [ 'name' => 'Baidu Browser', 'id' => 'bdbrowser', 'regexp' =>'/bdbrowser_i18n\/([0-9.]*)/i' ],
45
  [ 'name' => 'Baidu Spark', 'id' => 'bdspark', 'regexp' =>'/BDSpark\/([0-9.]*)/u', 'details' => 2 ],
46
+ [ 'name' => 'Basilisk', 'id' => 'basilisk', 'regexp' => '/ Basilisk\/([0-9.]*)/u', 'type' => Constants\DeviceType::DESKTOP ], // see: https://basilisk-browser.org/
47
  [ 'name' => 'Beamrise', 'id' => 'beamrise', 'regexp' =>'/Beamrise\/([0-9.]*)/u' ], // see: http://beamrise.com
48
+ [ 'name' => 'Beonex', 'id' => 'beonex', 'regexp' =>'/Beonex\/([0-9.]*)/u', 'type' => Constants\DeviceType::DESKTOP ], // see: https://www.beonex.com/
49
  [ 'name' => 'Black Wren', 'id' => 'blackwren', 'regexp' =>'/BlackWren\/([0-9.]*)/u', 'details' => 2 ], // see: https://github.com/conmarap/jetbrowser
50
+ [ 'name' => 'Black Hawk', 'id' => 'blackhawk', 'regexp' => '/BlackHawk\/([0-9.]*)/u', 'type' => Constants\DeviceType::DESKTOP ], // see: http://www.netgate.sk/blackhawk/help/welcome-to-blackhawk-web-browser.html
51
+ [ 'name' => 'Bolt Browser', 'id' => 'bolt', 'regexp' => '/ Bolt\/([0-9.]*)/i', 'type' => Constants\DeviceType::DESKTOP ], // see: http://www.boltbrowser.com/
52
+ [ 'name' => 'Blackbird', 'id' => 'blackbird', 'regexp' =>'/Blackbird\/([0-9.]*)/u', 'type' => Constants\DeviceType::DESKTOP ], // see: http://www.blackbirdbrowser.com/
53
  [ 'name' => 'Brave', 'id' => 'brave', 'regexp' =>'/brave\/([0-9.]*)/u' ],
54
+ [ 'name' => 'Brisk Bard', 'id' => 'brisk', 'regexp' => '/BriskBard\/([0-9.]*)/u', 'type' => Constants\DeviceType::DESKTOP ], // see: https://www.briskbard.com/index.php?lang=en
55
+ [ 'name' => 'BrowseX', 'id' => 'browsex', 'regexp' => '/BrowseX \(([0-9.]*)/u', 'type' => Constants\DeviceType::DESKTOP ], // see: https://dev.pdqi.com/fossil/browsex/doc/tip/index.html
56
+ [ 'name' => 'Browzar', 'id' => 'browzar', 'regexp' => '/Browzar/u', 'type' => Constants\DeviceType::DESKTOP ], // see: http://browzar.com/
57
  [ 'name' => 'Byffox', 'id' => 'byffox', 'regexp' =>'/Byffox\/([0-9.]*)/u', 'type' => Constants\DeviceType::DESKTOP ],
58
  [ 'name' => 'Camino', 'id' => 'camino', 'regexp' =>'/Camino\/([0-9.]*)/u', 'type' => Constants\DeviceType::DESKTOP ],
59
  [ 'name' => 'Canure', 'id' => 'canure', 'regexp' =>'/Canure\/([0-9.]*)/u', 'details' => 3 ], // see: http://canure.weebly.com/index.html
60
+ [ 'name' => 'CCleaner Browser', 'id' => 'ccleaner', 'regexp' => '/CCleaner\/([0-9.]*)/u', 'type' => Constants\DeviceType::DESKTOP ], // see: https://www.ccleaner.com/ccleaner/browser
61
+ [ 'name' => 'Cent Browser', 'id' => 'cent', 'regexp' => '/ Cent\/([0-9.]*)/u', 'type' => Constants\DeviceType::DESKTOP ], // see: https://www.centbrowser.com/
62
  [ 'name' => 'Charon', 'id' => 'charon', 'regexp' =>'/Charon/' ], // see: http://www.vitanuova.com/inferno/man/1/charon.html
63
+ [ 'name' => 'Chedot', 'id' => 'chedot', 'regexp' => '/ Chedot\/([0-9.]*)/u', 'type' => Constants\DeviceType::DESKTOP ], // see: http://landing.chedot.com/
64
+ [ 'name' => 'Cheshire', 'id' => 'cheshire', 'regexp' => '/ Cheshire\/([0-9.A-Z]*)/u', 'type' => Constants\DeviceType::DESKTOP ],
65
+ [ 'name' => 'Chim Lac', 'id' => 'chimlac', 'regexp' => '/chimlac_browser\/([0-9.]*)/u', 'type' => Constants\DeviceType::DESKTOP ], // see: https://chimlac.com.vn/
66
+ [ 'name' => 'Chimera', 'id' => 'chimera', 'regexp' => '/ Chimera\/([0-9.]*)/u', 'type' => Constants\DeviceType::DESKTOP ],
67
  [ 'name' => 'ChromePlus', 'id' => 'chromeplus', 'regexp' =>'/ChromePlus(?:\/([0-9.]*))?$/u', 'details' => 3, 'type' => Constants\DeviceType::DESKTOP ],
68
+ [ 'name' => 'Colibri', 'id' => 'colibri', 'regexp' => '/Colibri\/([0-9.]*)/u', 'type' => Constants\DeviceType::DESKTOP ], // see: https://colibri.opqr.co/
69
+ [ 'name' => 'Columbus', 'id' => 'columbus', 'regexp' =>'/Columbus\/([0-9.]*)/u', 'type' => Constants\DeviceType::DESKTOP ],
70
  [ 'name' => 'CometBird', 'id' => 'cometbird', 'regexp' =>'/CometBird\/([0-9.]*)/u' ], // see: http://www.cometbird.com
71
  [ 'name' => 'Comodo Dragon', 'id' => 'comodo', 'regexp' =>'/Comodo_Dragon\/([0-9.]*)/u', 'details' => 2 ],
72
  [ 'name' => 'Comodo Dragon', 'id' => 'dragon', 'regexp' =>'/Dragon\/([0-9.]*)/u', 'details' => 2 ],
73
  [ 'name' => 'Comodo IceDragon', 'id' => 'dragon', 'regexp' =>'/IceDragon\/([0-9.]*)/u', 'details' => 2, 'type' => Constants\DeviceType::DESKTOP ],
74
  [ 'name' => 'Conkeror', 'id' => 'conkeror', 'regexp' =>'/[Cc]onkeror\/([0-9.]*)/u' ],
75
+ [ 'name' => 'Coc Coc', 'id' => 'coc', 'regexp' => '/coc_coc_browser\/([0-9.]*)/u', 'type' => Constants\DeviceType::DESKTOP ], // see: https://coccoc.com/en/
76
  [ 'name' => 'CoolNovo', 'id' => 'coolnovo', 'regexp' =>'/(?:CoolNovo|CoolNovoChromePlus)\/([0-9.]*)/u', 'details' => 3, 'type' => Constants\DeviceType::DESKTOP ],
77
+ [ 'name' => 'Corom Browser', 'id' => 'corom', 'regexp' => '/ CoRom\/([0-9.]*)/u', 'type' => Constants\DeviceType::MOBILE ], // see: https://apkpure.com/corom-browser-for-android/com.coccoc.corom
78
+ [ 'name' => 'Crazy Browser', 'id' => 'crazy', 'regexp' => '/Crazy Browser ([0-9.]*)/u', 'type' => Constants\DeviceType::DESKTOP ],
79
+ [ 'name' => 'Crusta', 'id' => 'crusta', 'regexp' => '/ Crusta\/([0-9.]*)/u', 'type' => Constants\DeviceType::DESKTOP ], // see: https://github.com/Tarptaeya/Crusta
80
  [ 'name' => 'Cunaguaro', 'id' => 'cunaguaro', 'regexp' =>'/Cunaguaro\/([0-9.]*)/u', 'details' => 3, 'type' => Constants\DeviceType::DESKTOP ],
81
+ [ 'name' => 'Cyberdog', 'id' => 'cyberdog', 'regexp' =>'/Cyberdog\/([0-9.]*)/u', 'type' => Constants\DeviceType::DESKTOP ],
82
  [ 'name' => 'Cyberfox', 'id' => 'cyberfox', 'regexp' =>'/Cyberfox\/([0-9.]*)/u', 'details' => 2 ], // see: https://cyberfox.8pecxstudios.com
83
  [ 'name' => 'Daedalus', 'id' => 'daedalus', 'regexp' =>'/Daedalus ([0-9.]*)/u', 'details' => 2 ],
84
+ [ 'name' => 'Deg-degan', 'id' => 'degan', 'regexp' => '/Degdegan\/([0-9.]*)/u', 'details' => 3, 'type' => Constants\DeviceType::DESKTOP ],
85
+ [ 'name' => 'Demeter', 'id' => 'demeter', 'regexp' =>'/Demeter\/([0-9.]*)/u', 'type' => Constants\DeviceType::DESKTOP ],
86
+ [ 'name' => 'DeskBrowse', 'id' => 'deskbrowse', 'regexp' =>'/DeskBrowse\/([0-9.]*)/u', 'type' => Constants\DeviceType::DESKTOP ],
87
+ [ 'name' => 'Diigo Browser', 'id' => 'diigo', 'regexp' => '/DiigoBrowser/u', 'type' => Constants\DeviceType::MOBILE ], // see: https://apps.apple.com/us/app/diigo-annotator-for-safari/id933773981
88
  [ 'name' => 'Dillo', 'id' => 'dillo', 'regexp' =>'/Dillo\/([0-9.]*)/u' ], // see: http://www.dillo.org
89
+ [ 'name' => 'DocZilla', 'id' => 'doczilla', 'regexp' =>'/DocZilla\/([0-9.]*)/u', 'type' => Constants\DeviceType::DESKTOP ],
90
  [ 'name' => 'Doga Rhodonit', 'id' => 'rhodonit', 'regexp' =>'/DogaRhodonit/u' ],
91
+ [ 'name' => 'DPlus Browser', 'id' => 'dplus', 'regexp' =>'/ DPlus ([0-9.]*)/u', 'type' => Constants\DeviceType::DESKTOP ],
92
+ [ 'name' => 'Elements Browser', 'id' => 'elements', 'regexp' => '/Elements Browser\/([0-9.]*)/u', 'type' => Constants\DeviceType::DESKTOP ],
93
  [ 'name' => 'EudoraWeb', 'id' => 'eudoraweb', 'regexp' =>'/EudoraWeb ([0-9.]*)/u' ],
94
+ [ 'name' => 'Falkon', 'id' => 'falkon', 'regexp' => '/ Falkon\/([0-9.]*)/u', 'type' => Constants\DeviceType::DESKTOP ], // see: https://www.falkon.org/
95
+ [ 'name' => 'FlameSky', 'id' => 'flamesky', 'regexp' => '/FlameSky\/([0-9.]*)/u', 'type' => Constants\DeviceType::DESKTOP ], // see: https://github.com/flameskyofficial/flamesky
96
  [ 'name' => 'Flock', 'id' => 'flock', 'regexp' =>'/Flock\/([0-9.]*)/u', 'details' => 3, 'type' => Constants\DeviceType::DESKTOP ],
97
+ [ 'name' => 'Framafox', 'id' => 'framafox', 'regexp' => '/Framafox\/([0-9.]*)/u', 'type' => Constants\DeviceType::DESKTOP ], // see: https://framakey.org/telecharger/applications-portables-libres#internet
98
+ [ 'name' => 'Freeu Browser', 'id' => 'freeu', 'regexp' => '/ Free[Uu]\/([0-9.]*)/u', 'type' => Constants\DeviceType::DESKTOP ], // see: https://play.google.com/store/apps/details?id=com.freeuvpn.android&hl=en
99
  [ 'name' => 'Galeon', 'id' => 'galeon', 'regexp' =>'/Galeon\/([0-9.]*)/u', 'details' => 3 ],
100
+ [ 'name' => 'GlobalMojo', 'id' => 'globalmojo', 'regexp' =>'/GlobalMojo\/([0-9.]*)/u', 'type' => Constants\DeviceType::DESKTOP ],
101
  [ 'name' => 'GNOME Web', 'id' => 'epiphany', 'regexp' =>'/Epiphany\/([0-9.]*)/u', 'type' => Constants\DeviceType::DESKTOP ],
102
+ [ 'name' => 'GreenBrowser', 'id' => 'greenbrowser', 'regexp' =>'/GreenBrowser/u', 'type' => Constants\DeviceType::DESKTOP ],
103
+ [ 'name' => 'Hola Browser', 'id' => 'hola', 'regexp' => '/ Hola\/([0-9.]*)/u', 'type' => Constants\DeviceType::DESKTOP ], // see: https://play.google.com/store/apps/details?id=org.hola&hl=en
104
+ [ 'name' => 'Hydra Browser', 'id' => 'hydra', 'regexp' =>'/Hydra Browser/u', 'type' => Constants\DeviceType::DESKTOP ],
105
  [ 'name' => 'IBrowse', 'id' => 'ibrowse', 'regexp' =>'/IBrowse[\/ ]([0-9.]*)/u', 'type' => Constants\DeviceType::DESKTOP ],
106
  [ 'name' => 'iCab', 'id' => 'icab', 'regexp' =>'/iCab(?: J)?[\/ ](?:Pre)?([0-9.]*)/u' ],
107
  [ 'name' => 'Iceape', 'id' => 'iceape', 'regexp' =>'/Iceape\/([0-9.]*)/u' ],
108
  [ 'name' => 'IceCat', 'id' => 'icecat', 'regexp' =>'/IceCat[ \/]([0-9.]*)/u', 'type' => Constants\DeviceType::DESKTOP ], // see: https://www.gnu.org/software/gnuzilla/
109
+ [ 'name' => 'Icedove', 'id' => 'icedove', 'regexp' => '/ Icedove\/([0-9.]*)/u', 'type' => Constants\DeviceType::DESKTOP ], // see: https://wiki.debian.org/Icedove
110
  [ 'name' => 'Iceweasel', 'id' => 'iceweasel', 'regexp' =>'/Iceweasel\/([0-9.]*)/iu', 'type' => Constants\DeviceType::DESKTOP ],
111
+ [ 'name' => 'iRider Browser', 'id' => 'irider', 'regexp' =>'/iRider ([0-9.]*)/u', 'type' => Constants\DeviceType::DESKTOP ],
112
  [ 'name' => 'Iridium', 'id' => 'iridium', 'regexp' =>'/Iridium\/([0-9.]*)/u', 'details' => 2 ], // see: http://www.srware.net/en/software_srware_iron.php
113
  [ 'name' => 'Iron', 'id' => 'iron', 'regexp' =>'/Iron\/([0-9.]*)/u', 'details' => 2 ], // see: http://www.srware.net/en/software_srware_iron.php
114
+ [ 'name' => 'Kapiko', 'id' => 'kapiko', 'regexp' => '/ Kapiko\/([0-9.]*)/u', 'type' => Constants\DeviceType::DESKTOP ], // see: https://sites.google.com/site/kapikoproject/
115
  [ 'name' => 'Kazehakase', 'id' => 'kazehakase', 'regexp' =>'/Kazehakase\/([0-9.]*)/u' ], // see: http://kazehakase.osdn.jp
116
  [ 'name' => 'KChrome', 'id' => 'kchrome', 'regexp' =>'/KChrome\/([0-9.]*)/u', 'details' => 3 ], // see: http://www.kchrome.com
117
+ [ 'name' => 'Kinza', 'id' => 'kinza', 'regexp' => '/ Kinza\/([0-9.]*)/u', 'type' => Constants\DeviceType::DESKTOP ], // see: https://www.kinza.jp/en/
118
+ [ 'name' => 'KKMAN', 'id' => 'kkman', 'regexp' => '/ KKman([0-9.]*)/u', 'type' => Constants\DeviceType::DESKTOP ], // see: https://www.kkbox.com/kkman/
119
+ [ 'name' => 'Klondike', 'id' => 'klondike', 'regexp' => '/Klondike\/([0-9.]*)/u', 'type' => Constants\DeviceType::DESKTOP ],
120
+ [ 'name' => 'Kylo', 'id' => 'kylo', 'regexp' => '/ Kylo\/([0-9.]*)/u', 'type' => Constants\DeviceType::DESKTOP ], // see: http://kylo.tv/
121
  [ 'name' => 'K-Meleon', 'id' => 'meleon', 'regexp' =>'/K-Meleon\/([0-9.]*)/u', 'type' => Constants\DeviceType::DESKTOP ], // see: http://kmeleonbrowser.org
122
+ [ 'name' => 'LBrowser', 'id' => 'lbrowser', 'regexp' =>'/LBrowser\/([0-9.]*)/u', 'type' => Constants\DeviceType::DESKTOP ],
123
  [ 'name' => 'LieBao', 'id' => 'lbbrowser', 'regexp' =>'/LBBROWSER/u' ], // see: http://www.liebao.cn
124
+ [ 'name' => 'Light', 'id' => 'light', 'regexp' => '/ Light\/([0-9.]*)/u', 'type' => Constants\DeviceType::DESKTOP ], // see: https://en.wikipedia.org/wiki/Light_(web_browser)
125
  [ 'name' => 'Lobo', 'id' => 'lobo', 'regexp' =>'/Lobo\/([0-9.]*)/u', 'type' => Constants\DeviceType::DESKTOP ], // see: http://sourceforge.net/projects/xamj/files/Lobo%20Browser/
126
+ [ 'name' => 'Lolifox', 'id' => 'lolifox', 'regexp' => '/lolifox\/([0-9.]*)/u', 'type' => Constants\DeviceType::DESKTOP ], // see: https://ja.wikipedia.org/wiki/Lolifox
127
+ [ 'name' => 'Lovense', 'id' => 'lovense', 'regexp' => '/Lovense\/([0-9.]*)/u', 'type' => Constants\DeviceType::DESKTOP ], // see: https://www.lovense.com/cam-model/guides/pc-phone
128
  [ 'name' => 'Lunascape', 'id' => 'lunascape', 'regexp' =>'/ Lunascape[\/| ]([0-9.]*)/u', 'details' => 3 ], // see: http://www.lunascape.tv
129
  [ 'name' => 'Naenara', 'id' => 'naenara', 'regexp' =>'/NaenaraBrowser\/([0-9.]*)/u', 'details' => 2 ], // Firefox based browser used with Red Star OS
130
+ [ 'name' => 'NetCaptor', 'id' => 'netcaptor', 'regexp' =>'/NetCaptor ([0-9.]*)/u', 'type' => Constants\DeviceType::DESKTOP ], // see: https://en.wikipedia.org/wiki/NetCaptor
131
+ [ 'name' => 'Madfox', 'id' => 'madfox', 'regexp' =>'/Madfox\/([0-9.]*)/u', 'type' => Constants\DeviceType::DESKTOP ],
132
  [ 'name' => 'Maxthon', 'id' => 'mxbrowser', 'regexp' =>'/MxBrowser\/([0-9.]*)/u' ],
133
  [ 'name' => 'Maxthon', 'id' => 'mxbrowser', 'regexp' =>'/MxBrowser-iPhone\/([0-9.]*)/u' ],
134
+ [ 'name' => 'Min Browser', 'id' => 'min', 'regexp' => '/ min\/([0-9.]*)/u', 'type' => Constants\DeviceType::DESKTOP ], // see: https://minbrowser.github.io/min/
135
+ [ 'name' => 'Mini Browser', 'id' => 'mini', 'regexp' => '/ MiniBrowser\/([0-9.]*)/u', 'type' => Constants\DeviceType::DESKTOP ], // see: http://dmkho.tripod.com/mb/index.html
136
  [ 'name' => 'MixShark', 'id' => 'mixshark', 'regexp' =>'/MixShark\/([0-9.]*)/u' ], // see: http://terbaddo.free.fr/mixshark.php
137
  [ 'name' => 'mlbrowser', 'id' => 'mlbrowser', 'regexp' =>'/mlbrowser/u' ], // see: https://github.com/Topguy/mlbrowser
138
+ [ 'name' => 'Mypal Browser', 'id' => 'mypal', 'regexp' => '/ Mypal\/([0-9.]*)/u', 'type' => Constants\DeviceType::DESKTOP ], // see: https://github.com/Feodor2/Mypal
139
+ [ 'name' => 'Multi-Browser XP', 'id' => 'multixp', 'regexp' =>'/Multi-Browser ([0-9.]*)/u', 'type' => Constants\DeviceType::DESKTOP ],
140
  [ 'name' => 'NetPositive', 'id' => 'netpositive', 'regexp' =>'/NetPositive\/([0-9.]*)/u' ],
141
+ [ 'name' => 'Nichrome', 'id' => 'nichrome', 'regexp' => '/Nichrome\/self\/([0-9.]*)/u', 'type' => Constants\DeviceType::DESKTOP ],
142
  [ 'name' => 'Origyn', 'id' => 'origyn', 'regexp' =>'/Origyn Web Browser/u' ],
143
  [ 'name' => 'Odyssey', 'id' => 'owb', 'regexp' =>'/OWB\/([0-9.]*)/u' ],
144
+ [ 'name' => 'Open Live Writer', 'id' => 'live', 'regexp' =>'/Open Live Writer ([0-9.]*)/u', 'type' => Constants\DeviceType::DESKTOP ], // see: http://openlivewriter.org/
145
+ [ 'name' => 'Orange Browser', 'id' => 'juzi', 'regexp' =>'/JuziBrowser/u', 'type' => Constants\DeviceType::DESKTOP ], // see: http://www.123juzi.com/
146
  [ 'name' => 'Orca', 'id' => 'orca', 'regexp' =>'/Orca\/([0-9.]*)/u' ],
147
  [ 'name' => 'Oregano', 'id' => 'oregano', 'regexp' =>'/Oregano ([0-9.]*)/u' ], // see: http://www.xat.nl/en/riscos/sw/oregano/
148
  [ 'name' => 'Otter', 'id' => 'otter', 'regexp' =>'/Otter(?: Browser)?\/([0-9.]*)/u' ], // see: https://otter-browser.org
149
  [ 'name' => 'Pale Moon', 'id' => 'palemoon', 'regexp' =>'/Pale[mM]oon\/([0-9.]*)/u' ], // see: https://www.palemoon.org
150
+ [ 'name' => 'Patriott Browser', 'id' => 'patriott', 'regexp' =>'/Patriott::Browser\/([0-9.]*)/u', 'type' => Constants\DeviceType::DESKTOP ], // see: http://madgroup.x10.mx/patriott1.php
151
+ [ 'name' => 'Perk', 'id' => 'perk', 'regexp' =>'/ Perk\/([0-9.]*)/u', 'type' => Constants\DeviceType::DESKTOP ], // see: http://www.perk.com/
152
+ [ 'name' => 'Polarity', 'id' => 'polarity', 'regexp' =>'/Polarity\/([0-9.]*)/u', 'type' => Constants\DeviceType::DESKTOP ],
153
+ [ 'name' => 'Privacy Browser', 'id' => 'privacy', 'regexp' => '/PrivacyBrowser\/([0-9.]*)/u', 'type' => Constants\DeviceType::DESKTOP ], // see: https://www.stoutner.com/privacy-browser/
154
  [ 'name' => 'Qihoo 360', 'id' => 'qihu', 'regexp' =>'/QIHU THEWORLD/u' ],
155
+ [ 'name' => 'Qiyu Browser', 'id' => 'qiyu', 'regexp' => '/Qiyu\/([0-9.]*)/i', 'type' => Constants\DeviceType::DESKTOP ], // see: https://apps.apple.com/cn/app/qi-yu-liu-lan-qi/id959447103
156
  [ 'name' => 'QtWeb', 'id' => 'qtweb', 'regexp' =>'/QtWeb Internet Browser\/([0-9.]*)/u' ],
157
+ [ 'name' => 'Quick Look', 'id' => 'quicklook', 'regexp' => '/QuickLook\/([0-9.]*)/u' ], // see: https://en.wikipedia.org/wiki/Quick_Look
158
  [ 'name' => 'QupZilla', 'id' => 'qupzilla', 'regexp' =>'/QupZilla\/([0-9.]*)/u', 'type' => Constants\DeviceType::DESKTOP ],
159
+ [ 'name' => 'Qute Browser', 'id' => 'qute', 'regexp' => '/qutebrowser\/([0-9.]*)/u', 'type' => Constants\DeviceType::DESKTOP ], // see: https://github.com/qutebrowser/qutebrowser
160
  [ 'name' => 'rekonq', 'id' => 'rekonq', 'regexp' =>'/rekonq(?:\/([0-9.]*))?/u', 'type' => Constants\DeviceType::DESKTOP ],
161
  [ 'name' => 'Ryouko', 'id' => 'ryouko', 'regexp' =>'/Ryouko\/([0-9.]*)/u', 'type' => Constants\DeviceType::DESKTOP ], // see: https://github.com/foxhead128/ryouko
162
+ [ 'name' => 'Sylera', 'id' => 'sylera', 'regexp' =>'/Sylera\/([0-9.]*)/u', 'type' => Constants\DeviceType::DESKTOP ], // Needs to be discovered before SeaMonkey Browser, see: https://ja.wikipedia.org/wiki/Sylera
163
  [ 'name' => 'SaaYaa Explorer', 'id' => 'saayaa', 'regexp' =>'/SaaYaa/u', 'type' => Constants\DeviceType::DESKTOP ],
164
+ [ 'name' => 'SalamWeb', 'id' => 'salam', 'regexp' => '/SalamWeb\/([0-9.]*)/u', 'type' => Constants\DeviceType::DESKTOP ], // see: https://salamweb.com/
165
+ [ 'name' => 'SalamWeb', 'id' => 'salam', 'regexp' => '/Salam Browser/u', 'type' => Constants\DeviceType::DESKTOP ],
166
+ [ 'name' => 'Shiira', 'id' => 'shiira', 'regexp' => '/Shiira/u', 'type' => Constants\DeviceType::DESKTOP ],
167
+ [ 'name' => 'Sielo Browser', 'id' => 'sielo', 'regexp' => '/ Sielo\/([0-9.]*)/u', 'type' => Constants\DeviceType::DESKTOP ], // see: https://github.com/SieloBrowser/sielo-legacy
168
+ [ 'name' => 'SiteKiosk', 'id' => 'sitekiosk', 'regexp' => '/SiteKiosk ([0-9.]*)/u', 'type' => Constants\DeviceType::DESKTOP ], // see: https://www.provisio.com/web/us/products/windows-kiosk-software-sitekiosk
169
  [ 'name' => 'Sleipnir', 'id' => 'sleipnir', 'regexp' =>'/Sleipnir\/([0-9.]*)/u', 'details' => 3 ],
170
+ [ 'name' => 'Slimjet', 'id' => 'slimjet', 'regexp' => '/ Slimjet\/([0-9.]*)/u', 'type' => Constants\DeviceType::DESKTOP ], // see: https://www.slimjet.com/
171
  [ 'name' => 'Sogou Explorer', 'id' => 'metasr', 'regexp' =>'/SE 2.X MetaSr/u', 'type' => Constants\DeviceType::DESKTOP ],
172
+ [ 'name' => 'Sparrow', 'id' => 'sparrow', 'regexp' =>'/Sparrow\/([0-9.]*)/u', 'type' => Constants\DeviceType::DESKTOP ],
173
+ [ 'name' => 'Sputnik', 'id' => 'sputnik', 'regexp' => '/SputnikBrowser\/([0-9.]*)/u' ], // see: https://browser.sputnik.ru/
174
  [ 'name' => 'Stainless', 'id' => 'stainless', 'regexp' =>'/Stainless\/([0-9.]*)/u' ], // see: http://www.stainlessapp.com
175
+ [ 'name' => 'Station Browser', 'id' => 'station', 'regexp' => '/ Station\/([0-9.]*)/u', 'type' => Constants\DeviceType::DESKTOP ], // see: https://getstation.com/
176
  [ 'name' => 'SunChrome', 'id' => 'sunchrome', 'regexp' =>'/SunChrome\/([0-9.]*)/u' ],
177
+ [ 'name' => 'Sundance', 'id' => 'sundance', 'regexp' =>'/Sundance\/([0-9.]*)/u', 'type' => Constants\DeviceType::DESKTOP ],
178
+ [ 'name' => 'Sundial', 'id' => 'sundial', 'regexp' =>'/Sundial\/([0-9.]*)/u', 'type' => Constants\DeviceType::DESKTOP ], // see: http://www.sundialbrowser.com/
179
  [ 'name' => 'Superbird', 'id' => 'superbird', 'regexp' =>'/Super[Bb]ird\/([0-9.]*)/u', 'details' => 2 ],
180
+ [ 'name' => 'Swiftweasel', 'id' => 'swiftweasel', 'regexp' =>'/Swiftweasel\/([0-9.]*)/u', 'type' => Constants\DeviceType::DESKTOP ], // see: http://swiftweasel.tuxfamily.org/
181
+ [ 'name' => 'Swiftfox', 'id' => 'swiftfox', 'regexp' =>'/Swiftfox/u', 'type' => Constants\DeviceType::DESKTOP ],
182
  [ 'name' => 'Swing Browser', 'id' => 'swing', 'regexp' =>'/Swing(?:\(And\))?\/([0-9.]*)/u', 'details' => 3 ], // see: http://swing-browser.com
183
+ [ 'name' => 't-online.de', 'id' => 'to-browser', 'regexp' =>'/TO-Browser\/TOB([0-9.]*)/u', 'type' => Constants\DeviceType::DESKTOP ], // see: https://www.t-online.de/computer/browser/
184
+ [ 'name' => 't-online.de', 'id' => 'to-browser', 'regexp' =>'/TO-Browser/u', 'type' => Constants\DeviceType::DESKTOP ],
185
  [ 'name' => 'Tencent Traveler', 'id' => 'tencent', 'regexp' =>'/TencentTraveler ([0-9.]*)/u', 'details' => 2 ],
186
  [ 'name' => 'TenFourFox', 'id' => 'tenfourfox', 'regexp' =>'/TenFourFox\//u' ],
187
  [ 'name' => 'The World', 'id' => 'theworld', 'regexp' =>'/TheWorld(?: ([0-9.]*))?/u' ],
188
+ [ 'name' => 'Tulip Chain', 'id' => 'tulip', 'regexp' =>'/TulipChain\/([0-9.]*)/u', 'type' => Constants\DeviceType::DESKTOP ], // see: http://ostermiller.org/tulipchain/
189
  [ 'name' => 'Tungsten Browser', 'id' => 'tungsten', 'regexp' =>'/TungstenBrowser\/([0-9.]*)/u' ],
190
+ [ 'name' => 'UltraBrowser', 'id' => 'ultrab', 'regexp' =>'/UltraBrowser ([0-9.]*)/u', 'type' => Constants\DeviceType::DESKTOP ], // see: http://www.ultrabrowser.com/
191
+ [ 'name' => 'Usejump', 'id' => 'usejump', 'regexp' =>'/Usejump\/([0-9.]*)/u', 'details' => 2, 'type' => Constants\DeviceType::DESKTOP ],
192
+ [ 'name' => 'Vimprobable', 'id' => 'vimprobable', 'regexp' =>'/Vimprobable\/([0-9.]*)/u', 'type' => Constants\DeviceType::DESKTOP ],
193
  [ 'name' => 'Vivaldi', 'id' => 'vivaldi', 'regexp' =>'/Vivaldi\/([0-9.]*)/u', 'details' => 2 ],
194
+ [ 'name' => 'VMware Workspace ONE', 'id' => 'airwatch', 'regexp' => '/Air[Ww]atch Browser v([0-9.]*)/u', 'type' => Constants\DeviceType::DESKTOP ],
195
+ [ 'name' => 'Vonkeror', 'id' => 'vonkeror', 'regexp' =>'/Vonkeror\/([0-9.]*)/u', 'type' => Constants\DeviceType::DESKTOP ],
196
  [ 'name' => 'Voyager', 'id' => 'voyager', 'regexp' =>'/AmigaVoyager\/([0-9.]*)/u' ],
197
  [ 'name' => 'Waterfox', 'id' => 'waterfox', 'regexp' =>'/Waterfox\/([0-9.]*)/u', 'details' => 2, 'type' => Constants\DeviceType::DESKTOP ],
198
+ [ 'name' => 'Whale Browser', 'id' => 'whale', 'regexp' => '/ Whale\/([0-9.]*)/u', 'type' => Constants\DeviceType::DESKTOP ], // see: https://whale.naver.com/
199
+ [ 'name' => 'WinWAP Browser', 'id' => 'winwap', 'regexp' => '/WinWAP\/([0-9]*)/u', 'type' => Constants\DeviceType::DESKTOP ], // see: https://www.winwap.com/mobile_applications/winwap_browser.php
200
+ [ 'name' => 'WinWAP Browser', 'id' => 'winwap', 'regexp' => '/WinWAP-SPBE\/([0-9.]*)/u', 'type' => Constants\DeviceType::DESKTOP ],
201
+ [ 'name' => 'Xvast', 'id' => 'xvast', 'regexp' =>'/Xvast\/([0-9.]*)/u', 'type' => Constants\DeviceType::DESKTOP ], // see: http://www.xvast.com/
202
  [ 'name' => 'Yandex Browser', 'id' => 'yabrowser', 'regexp' =>'/YaBrowser\/([0-9.]*)/u', 'details' => 2 ],
203
+ [ 'name' => 'Zvu Browser', 'id' => 'zvu', 'regexp' => '/ Zvu\/([0-9.]*)/u', 'type' => Constants\DeviceType::DESKTOP ], // see: http://zvu.com/
204
+ [ 'name' => 'ZipZap', 'id' => 'zipzap', 'regexp' =>'/ZipZap ([0-9.]*)/u', 'type' => Constants\DeviceType::DESKTOP ], // see: http://www.zipzaphome.com/
205
+ [ 'name' => 'Zombie.js', 'id' => 'zombie', 'regexp' =>'/Zombie\.js\/([0-9.]*)/u', 'type' => Constants\DeviceType::DESKTOP ], // see: http://zombie.js.org/
206
 
207
  /* Mobile browsers */
208
  [ 'name' => '1Browser', 'id' => '1password', 'regexp' =>'/1Password\/([0-9.]*)/u' ],
209
  [ 'name' => '2345 Browser', 'id' => '2345', 'regexp' =>'/Mb2345Browser\/([0-9.]*)/u' ],
210
  [ 'name' => '3G Explorer', 'id' => '3g explorer', 'regexp' =>'/3G Explorer\/([0-9.]*)/u', 'details' => 3 ],
211
  [ 'name' => '4G Explorer', 'id' => '4g explorer', 'regexp' =>'/4G Explorer\/([0-9.]*)/u', 'details' => 3 ],
212
+ [ 'name' => 'Aloha Browser', 'id' => 'aloha', 'regexp' => '/AlohaBrowser\/([0-9.]*)/u', 'type' => Constants\DeviceType::MOBILE ], // see: https://alohabrowser.com/
213
  [ 'name' => 'Atomic', 'id' => 'atomiclite', 'regexp' =>'/AtomicLite\/([0-9.]*)/u' ], // see: http://atomicwebbrowser.com
214
  [ 'name' => 'AU', 'id' => 'au', 'regexp' =>'/(?:^| )AU(?:.Browser)?\/([0-9.]+)/u' ],
215
  [ 'name' => 'Awakening', 'id' => 'awakening', 'regexp' =>'/Awakening Browser\/([0-9.]*)/u', 'details' => 2 ],
227
  [ 'name' => 'Digia @Web', 'id' => 'digia', 'regexp' =>'/Digia @Web\/([0-9.]*)/u' ],
228
  [ 'name' => 'Doris', 'id' => 'doris', 'regexp' =>'/Doris\/([0-9.]*)/u' ],
229
  [ 'name' => 'Dorothy', 'id' => 'doroty', 'regexp' =>'/Dorothy$/u' ],
230
+ [ 'name' => 'Ecosia Browser', 'id' => 'ecosia', 'regexp' => '/Ecosia\sandroid@([0-9.]*)/u', 'type' => Constants\DeviceType::MOBILE ], // see: https://play.google.com/store/apps/details?id=com.ecosia.android
231
+ [ 'name' => 'Ecosia Browser', 'id' => 'ecosia', 'regexp' => '/Ecosia\sios@([0-9.]*)/u', 'type' => Constants\DeviceType::MOBILE ], // see: https://apps.apple.com/us/app/ecosia/id670881887
232
  [ 'name' => 'EMOBILE Browser', 'id' => 'www browser', 'regexp' =>'/WWW Browser\/ver([0-9.]*)/u' ],
233
+ [ 'name' => 'Epic Browser', 'id' => 'epic', 'regexp' => '/ Epic\/([0-9.]*)/u', 'type' => Constants\DeviceType::MOBILE ], // see: https://en.wikipedia.org/wiki/Epic_(web_browser)
234
  [ 'name' => 'EUI Browser', 'id' => 'eui', 'regexp' =>'/EUI Browser\/[^0-9\s]*([0-9.]*)/u', 'details' => 2 ],
235
  [ 'name' => 'Go.Web', 'id' => 'go\.web', 'regexp' =>'/Go\.Web\/([0-9.]*)/u' ], // used on early Blackberry, by GoAmerica
236
  [ 'name' => 'Helium', 'id' => 'helium', 'regexp' =>'/HeliumMobileBrowser\/([0-9.]*)/u' ],
237
+ [ 'name' => 'HeyTap Browser', 'id' => 'heytap', 'regexp' => '/HeyTapBrowser\/([0-9.]*)/u', 'type' => Constants\DeviceType::MOBILE ],
238
  [ 'name' => 'Huohou Browser', 'id' => 'huohoubrowser', 'regexp' =>'/HuohouBrowser\/([0-9.]*)/u' ],
239
  [ 'name' => 'iCab', 'id' => 'icab', 'regexp' =>'/iCabMobile\/([0-9.]*)/u' ],
240
  [ 'name' => 'iLunascape', 'id' => 'lunascape', 'regexp' =>'/iLunascape\/([0-9.]*)/u', 'details' => 3 ], // see: http://www.lunascape.tv
242
  [ 'name' => 'iSurf', 'id' => 'isurf', 'regexp' =>'/iSurf version \/v([0-9.]*)/u', 'details' => 2 ],
243
  [ 'name' => 'Jig Browser', 'id' => 'jig browser', 'regexp' =>'/jig browser(?: web| core|9i?)?;? ?([0-9.]+)?/u', 'type' => Constants\DeviceType::MOBILE ],
244
  [ 'name' => 'Jumanji', 'id' => 'jumanji', 'regexp' =>'/jumanji/u' ], // see: jumanji browser ubuntu
245
+ [ 'name' => 'K.Browser', 'id' => 'tnsbrowser', 'regexp' => '/TNSBrowser\/([0-9.]*)/u', 'type' => Constants\DeviceType::MOBILE ], // see: https://play.google.com/store/apps/details?id=com.tnsua.browser
246
  [ 'name' => 'Kiosk', 'id' => 'kiosk', 'regexp' =>'/Kiosk\/([0-9.]*)/u' ], // see: http://www.kioskbrowser.net
247
+ [ 'name' => 'Kiwi Browser', 'id' => 'kiwi', 'regexp' => '/Kiwi Chrome\/([0-9.A-Z]*)/u' ], // see: https://kiwibrowser.com
248
  [ 'name' => 'LeBrowser', 'id' => 'lebrowser', 'regexp' =>'/LeBrowser\/([0-9.]*)/u', 'details' => 2 ],
249
  [ 'name' => 'LieBaoFast', 'id' => 'liebao', 'regexp' =>'/LieBaoFast\/([0-9.]*)/u' ], // see: http://www.liebao.cn
250
  [ 'name' => 'MaCross Mobile', 'id' => 'macross', 'regexp' =>'/MaCross\/([0-9.]*)/u' ],
251
  [ 'name' => 'Mammoth', 'id' => 'mammoth', 'regexp' =>'/Mammoth\/([0-9.]*)/u' ], // see: https://itunes.apple.com/cn/app/meng-ma-liu-lan-qi/id403760998?mt=8
252
  [ 'name' => 'mCent Browser', 'id' => 'mcent', 'regexp' =>'/mCent\/([0-9.]*)/u' ],
253
+ [ 'name' => 'Mint Browser', 'id' => 'mint', 'regexp' => '/XiaoMi\/Mint Browser\/([0-9.]*)/u', 'type' => Constants\DeviceType::MOBILE ], // see: http://www.mintbrowser.com/
254
+ [ 'name' => 'Mobicip', 'id' => 'mobicip', 'regexp' => '/ Mobicip\//u', 'type' => Constants\DeviceType::MOBILE ], // see: https://www.mobicip.com/
255
  [ 'name' => 'Motorola Internet Browser', 'id' => 'mib', 'regexp' =>'/MIB\/([0-9.]*)/u' ],
256
  [ 'name' => 'Motorola Internet Browser', 'id' => 'mib', 'regexp' =>'/MIB([0-9.]+)\//u' ],
257
  [ 'name' => 'Motorola Internet Browser', 'id' => 'cmcs', 'regexp' =>'/Browser\/CMCS([0-9.]*)/u' ],
258
  [ 'name' => 'Motorola WebKit', 'id' => 'motorola', 'regexp' =>'/MotorolaWebKit(?:\/([0-9.]*))?/u', 'details' => 3 ],
259
+ [ 'name' => 'MultiZilla', 'id' => 'multizilla', 'regexp' => '/MultiZilla\/([0-9.]*)/u', 'type' => Constants\DeviceType::DESKTOP ], // see: https://sourceforge.net/projects/multizilla/
260
  [ 'name' => 'NetFront Life Browser', 'id' => 'netfrontlife', 'regexp' =>'/NetFrontLifeBrowser\/([0-9.]*)/u' ],
261
  [ 'name' => 'OneBrowser', 'id' => 'onebrowser', 'regexp' =>'/OneBrowser\/([0-9.]*)/u' ],
262
+ [ 'name' => 'OnePlus Browser', 'id' => 'oneplus', 'regexp' => '/OnePlusBrowser\/([0-9.]*)/u', 'type' => Constants\DeviceType::MOBILE ], // see: https://www.oneplus.com/
263
  [ 'name' => 'PocketLink', 'id' => 'plink', 'regexp' =>'/PLink ([0-9.]+)/iu', 'details' => 2 ],
264
  [ 'name' => 'Polaris', 'id' => 'polaris', 'regexp' =>'/Polaris[\/ ]v?([0-9.]*)/iu', 'details' => 2 ],
265
  [ 'name' => 'Polaris', 'id' => 'polaris', 'regexp' =>'/POLARIS([0-9.]+)/u', 'details' => 2 ],
266
+ [ 'name' => 'Pure Browser', 'id' => 'pure', 'regexp' =>'/PureBrowser\/([0-9.]*)/u', 'details' => 2 ],
267
  [ 'name' => 'Openwave', 'id' => 'openwave', 'regexp' =>'/Open[Ww]ave\/([0-9.]*)/u', 'details' => 2, 'type' => Constants\DeviceType::MOBILE ],
268
  [ 'name' => 'Openwave', 'id' => 'openwave', 'regexp' =>'/Openwave Mobile Browser ([0-9.]*)/u', 'details' => 2, 'type' => Constants\DeviceType::MOBILE ],
269
  [ 'name' => 'Openwave', 'id' => 'openwave', 'regexp' =>'/Browser\/OpenWave([0-9.]*)/u', 'details' => 2, 'type' => Constants\DeviceType::MOBILE ],
270
  [ 'name' => 'Openwave', 'id' => 'up', 'regexp' =>'/UP\. ?Browser(?:\/([a-z0-9.]*))?/iu', 'details' => 2, 'type' => Constants\DeviceType::MOBILE ],
271
  [ 'name' => 'Openwave', 'id' => 'km', 'regexp' =>'/KM\.Browser\/([0-9.]+)/iu', 'details' => 2, 'type' => Constants\DeviceType::MOBILE ],
272
  [ 'name' => 'Openwave', 'id' => 'up', 'regexp' =>'/UP\/([0-9.]+)/u', 'details' => 2, 'type' => Constants\DeviceType::MOBILE ],
273
+ [ 'name' => 'Oppo Browser', 'id' => 'oppo', 'regexp' =>'/OppoBrowser\/([0-9.]+)/iu' ],
274
+ [ 'name' => 'Quark Browser', 'id' => 'quark', 'regexp' =>'/Quark\/([0-9.]*)/u', 'details' => 3 ],
275
+ [ 'name' => 'Realme Browser', 'id' => 'realme', 'regexp' =>'/RealmeBrowser\/([0-9.]*)/u', 'type' => Constants\DeviceType::MOBILE ],
276
+
277
  [ 'name' => 'SEMC Browser', 'id' => 'semc', 'regexp' =>'/SEMC-Browser\/([0-9.]*)/u' ],
278
  [ 'name' => 'STNC HitchHiker' , 'id' => 'stnc', 'regexp' =>'/STNC-WTL\/[0-9.]*/u' ],
279
  [ 'name' => 'Sogou Mobile', 'id' => 'sogou', 'regexp' =>'/SogouMobileBrowser\/([0-9.]*)/u', 'details' => 2 ],
280
  [ 'name' => 'Swing Browser', 'id' => 'swing', 'regexp' =>'/Swing\(And\)\/([0-9.]*)/u', 'details' => 3 ],
281
  [ 'name' => 'Symphony', 'id' => 'symphony', 'regexp' =>'/Symphony ([0-9.]+)$/u' ],
282
+ [ 'name' => 'Tenta Browser', 'id' => 'tenta', 'regexp' => '/ Tenta\/([0-9.]*)/u', 'type' => Constants\DeviceType::MOBILE ], // see: https://play.google.com/store/apps/details?id=com.tenta.android&hl=en
283
  [ 'name' => 'TinY', 'id' => 'ucpro', 'regexp' =>'/ucpro\/([0-9.]+)/iu' ],
284
+ [ 'name' => 'Vivo Browser', 'id' => 'vivo', 'regexp' =>'/VivoBrowser\/([0-9.]+)/iu' ],
285
  [ 'name' => 'WebLite', 'id' => 'weblite', 'regexp' =>'/WebLite\/([0-9.]*)/u', 'type' => Constants\DeviceType::MOBILE ],
286
+ [ 'name' => 'WK Browser', 'id' => 'wk', 'regexp' => '/wkbrowser ([0-9.]*)/u', 'type' => Constants\DeviceType::MOBILE ], // see: https://github.com/keanulee/WKBrowser
287
+ [ 'name' => 'Yaani Browser', 'id' => 'yaani', 'regexp' => '/YaaniBrowser\/([0-9.]*)/u', 'type' => Constants\DeviceType::MOBILE ], // see: https://www.yaani.com.tr/
288
 
289
  /* Television browsers */
290
  [ 'name' => 'AltiBrowser', 'id' => 'alti', 'regexp' =>'/AltiBrowser\/([0-9.]*)/i' ],
292
  [ 'name' => 'AwoX', 'id' => 'awox', 'regexp' =>'/AwoX(?:\/([0-9.]*))? Browser/i' ],
293
  [ 'name' => 'Isis', 'id' => 'browserserver', 'regexp' =>'/BrowserServer/u' ],
294
  [ 'name' => 'Isis', 'id' => 'isis', 'regexp' =>'/ISIS\/([0-9.]*)/u', 'details' => 2 ],
295
+ [ 'name' => 'Netbox', 'id' => 'netbox', 'regexp' =>'/Netbox\/([0-9.]*)/u', 'type' => Constants\DeviceType::TELEVISION ],
296
  [ 'name' => 'Spyglass', 'id' => 'spyglass', 'regexp' =>'/Spyglass ([0-9.]+); OpenTV/u' ],
297
  [ 'name' => 'Oregan Browser', 'id' => 'oregan', 'regexp' =>'/OreganMediaBrowser(?:\/([0-9.]*))?/u', 'details' => 2 ],
298
  [ 'name' => 'Viera Browser', 'id' => 'viera', 'regexp' =>'/Viera\/([0-9.]*)/u' ],
303
  [ 'name' => 'Aplix', 'id' => 'aplix', 'regexp' =>'/Aplix_SEGASATURN_browser\/([0-9](?:.[0-9.]+)?)/u' ], // browser for the Sega Saturn
304
  [ 'name' => 'Bunjalloo', 'id' => 'bunjalloo', 'regexp' =>'/Bunjalloo\/([0-9.]*)/u' ], // browser for the Nintento DS
305
  [ 'name' => 'Nintendo Web Framework', 'id' => 'nwf', 'regexp' =>'/NWF\/([0-9.]*)/u', 'details' => 2 ], // browser for the Sega Dreamcast
306
+ [ 'name' => 'Nuanti Meta', 'id' => 'nuanti', 'regexp' =>'/Nuanti(?:Meta)?\/([0-9.]*)/u' ], // browser for the PlayStation
307
 
308
  /* Other browsers */
309
  [ 'name' => 'Wear Internet Browser','id' => 'wib', 'regexp' =>'/WIB\/([0-9.]*)/u' ],
334
  [ 'name' => 'Snowshoe', 'id' => 'snowshoe', 'regexp' =>'/Snowshoe\/([0-9.]*)/u', 'details' => 2 ],
335
  [ 'name' => 'Sputnik', 'id' => 'sputnik', 'regexp' =>'/Sputnik\/([0-9.]*)/iu', 'details' => 3 ],
336
  [ 'name' => 'Surf', 'id' => 'surf', 'regexp' =>'/Surf\/([0-9.]*)/u' ],
337
+ [ 'name' => 'Taobao Browser', 'id' => 'tao', 'regexp' =>'/TaoBrowser\/([0-9.]*)/u', 'details' => 2 ],
338
  [ 'name' => 'TaomeeBrowser', 'id' => 'tao', 'regexp' =>'/TaomeeBrowser\/([0-9.]*)/u', 'details' => 2 ],
339
  [ 'name' => 'TazWeb', 'id' => 'taz', 'regexp' =>'/TazWeb/u' ],
340
  [ 'name' => 'Uzbl', 'id' => 'uzbl', 'regexp' =>'/^Uzbl/u' ],
368
  [ 'name' => 'BrightSign', 'id' => 'brightsign', 'regexp' =>'/BrightSign\/([0-9.]*)/u', 'type' => Constants\DeviceType::SIGNAGE ],
369
  [ 'name' => 'Coship MMCP', 'id' => 'coship', 'regexp' =>'/Coship_MMCP_([0-9.]*)/u', 'type' => Constants\DeviceType::SIGNAGE ],
370
  ]
371
+ ];
includes/vendor/whichbrowser/parser/data/applications-others.php CHANGED
@@ -71,11 +71,20 @@ Applications::$OTHERS = [
71
  Constants\BrowserType::APP_CHAT => [
72
  [ 'name' => 'Facebook Messenger', 'id' => 'messenger', 'regexp' =>'/FBAN\/MessengerForiOS/u' ],
73
  [ 'name' => 'Facebook Messenger', 'id' => 'messenger', 'regexp' =>'/FB_IAB\/MESSENGER/u' ],
 
 
74
  [ 'name' => 'Kik', 'id' => 'kik', 'regexp' =>'/Kik\/([0-9.]*?)(\.0)?\.[0-9]{3,4}/u' ],
 
 
 
 
75
  [ 'name' => 'WeChat', 'id' => 'messenger', 'regexp' =>'/MicroMessenger\/([0-9.]*)/u' ],
 
76
  [ 'name' => 'Wire', 'id' => 'wire', 'regexp' =>'/Wire\/([0-9.]*)/u' ],
77
  [ 'name' => 'Yahoo Messenger', 'id' => 'yahoo', 'regexp' =>'/YahooMobile\/1.0 \(im; ([0-9.]+)\)/u', 'details' => 3 ],
78
  [ 'name' => 'Yammer', 'id' => 'yammer', 'regexp' =>'/Yammer\/([0-9.]*)/u', 'details' => 2 ],
 
 
79
  ],
80
 
81
  Constants\BrowserType::APP_SOCIAL => [
@@ -91,6 +100,7 @@ Applications::$OTHERS = [
91
  [ 'name' => 'Twitter', 'id' => 'twitter', 'regexp' =>'/TwitterAndroid/u' ],
92
  [ 'name' => 'Twitter', 'id' => 'twitter', 'regexp' =>'/Twitter for iPhone/u' ],
93
  [ 'name' => 'WordPress', 'id' => 'wp-android', 'regexp' =>'/wp-android\/([0-9.]*)/u' ],
 
94
  ],
95
 
96
  Constants\BrowserType::APP_OFFICE => [
71
  Constants\BrowserType::APP_CHAT => [
72
  [ 'name' => 'Facebook Messenger', 'id' => 'messenger', 'regexp' =>'/FBAN\/MessengerForiOS/u' ],
73
  [ 'name' => 'Facebook Messenger', 'id' => 'messenger', 'regexp' =>'/FB_IAB\/MESSENGER/u' ],
74
+ [ 'name' => 'KakaoTalk', 'id' => 'kakao', 'regexp' => '/KAKAOTALK ([0-9.]*)/u' ],
75
+ [ 'name' => 'KakaoTalk', 'id' => 'kakao', 'regexp' => '/KAKAOTALK/u' ],
76
  [ 'name' => 'Kik', 'id' => 'kik', 'regexp' =>'/Kik\/([0-9.]*?)(\.0)?\.[0-9]{3,4}/u' ],
77
+ [ 'name' => 'Line', 'id' => 'line', 'regexp' => '/ Line\/([0-9.]*)/u' ],
78
+ [ 'name' => 'Slack', 'id' => 'slack', 'regexp' => '/ Slack_SSB\/([0-9.]*)/u' ],
79
+ [ 'name' => 'Viber', 'id' => 'viber', 'regexp' => '/ Viber/u' ],
80
+ [ 'name' => 'Viber', 'id' => 'viber', 'regexp' => '/Viber\/([0-9.]*)/u' ],
81
  [ 'name' => 'WeChat', 'id' => 'messenger', 'regexp' =>'/MicroMessenger\/([0-9.]*)/u' ],
82
+ [ 'name' => 'WhatsApp', 'id' => 'whatsapp', 'regexp' =>'/WhatsApp\/([0-9.]*)/u' ],
83
  [ 'name' => 'Wire', 'id' => 'wire', 'regexp' =>'/Wire\/([0-9.]*)/u' ],
84
  [ 'name' => 'Yahoo Messenger', 'id' => 'yahoo', 'regexp' =>'/YahooMobile\/1.0 \(im; ([0-9.]+)\)/u', 'details' => 3 ],
85
  [ 'name' => 'Yammer', 'id' => 'yammer', 'regexp' =>'/Yammer\/([0-9.]*)/u', 'details' => 2 ],
86
+ [ 'name' => 'Zalo', 'id' => 'zalo', 'regexp' => '/Zalo-win32-([0-9.]*)/u' ],
87
+ [ 'name' => 'Zalo', 'id' => 'zalo', 'regexp' => '/ Zalo\/([0-9.]*)/u' ],
88
  ],
89
 
90
  Constants\BrowserType::APP_SOCIAL => [
100
  [ 'name' => 'Twitter', 'id' => 'twitter', 'regexp' =>'/TwitterAndroid/u' ],
101
  [ 'name' => 'Twitter', 'id' => 'twitter', 'regexp' =>'/Twitter for iPhone/u' ],
102
  [ 'name' => 'WordPress', 'id' => 'wp-android', 'regexp' =>'/wp-android\/([0-9.]*)/u' ],
103
+ [ 'name' => 'Yelp', 'id' => 'yelp', 'regexp' =>'/YelpApp\/([0-9.]*)/u' ],
104
  ],
105
 
106
  Constants\BrowserType::APP_OFFICE => [
includes/vendor/whichbrowser/parser/data/browsers-chrome.php CHANGED
@@ -76,6 +76,34 @@ Chrome::$DESKTOP = [
76
  '67.0.3396' => 'stable',
77
  '68.0.3440' => 'stable',
78
  '69.0.3497' => 'stable',
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
79
  ];
80
 
81
  Chrome::$MOBILE = [
@@ -124,4 +152,33 @@ Chrome::$MOBILE = [
124
  '67.0.3396' => 'stable',
125
  '68.0.3440' => 'stable',
126
  '69.0.3497' => 'stable',
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
127
  ];
76
  '67.0.3396' => 'stable',
77
  '68.0.3440' => 'stable',
78
  '69.0.3497' => 'stable',
79
+ '72.0.3626' => 'stable',
80
+ '73.0.3683' => 'stable',
81
+ '74.0.3729' => 'stable',
82
+ '75.0.3770' => 'stable',
83
+ '76.0.3809' => 'stable',
84
+ '77.0.3865' => 'stable',
85
+ '78.0.3904' => 'stable',
86
+ '79.0.3945' => 'stable',
87
+ '80.0.3987' => 'stable',
88
+ '81.0.4044' => 'stable',
89
+ '83.0.4103' => 'stable',
90
+ '84.0.4147' => 'stable',
91
+ '85.0.4183' => 'stable',
92
+ '86.0.4240' => 'stable',
93
+ '87.0.4280' => 'stable',
94
+ '88.0.4324' => 'stable',
95
+ '89.0.4389' => 'stable',
96
+ '90.0.4430' => 'stable',
97
+ '91.0.4472' => 'stable',
98
+ '92.0.4515' => 'stable',
99
+ '93.0.4577' => 'stable',
100
+ '94.0.4606' => 'stable',
101
+ '95.0.4638' => 'stable',
102
+ '96.0.4664' => 'stable',
103
+ '97.0.4692' => 'stable',
104
+ '98.0.4758' => 'stable',
105
+ '99.0.4844' => 'stable',
106
+ '100.0.4896' => 'stable'
107
  ];
108
 
109
  Chrome::$MOBILE = [
152
  '67.0.3396' => 'stable',
153
  '68.0.3440' => 'stable',
154
  '69.0.3497' => 'stable',
155
+ '70.0.3538' => 'stable',
156
+ '71.0.3578' => 'stable',
157
+ '72.0.3626' => 'stable',
158
+ '73.0.3683' => 'stable',
159
+ '74.0.3729' => 'stable',
160
+ '75.0.3770' => 'stable',
161
+ '76.0.3809' => 'stable',
162
+ '77.0.3865' => 'stable',
163
+ '78.0.3904' => 'stable',
164
+ '79.0.3945' => 'stable',
165
+ '80.0.3987' => 'stable',
166
+ '83.0.4103' => 'stable',
167
+ '84.0.4147' => 'stable',
168
+ '85.0.4183' => 'stable',
169
+ '86.0.4240' => 'stable',
170
+ '87.0.4280' => 'stable',
171
+ '88.0.4324' => 'stable',
172
+ '89.0.4389' => 'stable',
173
+ '90.0.4430' => 'stable',
174
+ '91.0.4472' => 'stable',
175
+ '92.0.4515' => 'stable',
176
+ '93.0.4577' => 'stable',
177
+ '94.0.4606' => 'stable',
178
+ '95.0.4638' => 'stable',
179
+ '96.0.4664' => 'stable',
180
+ '97.0.4692' => 'stable',
181
+ '98.0.4758' => 'stable',
182
+ '99.0.4844' => 'stable',
183
+ '100.0.4896' => 'stable'
184
  ];
includes/vendor/whichbrowser/parser/data/indices/models-android.php CHANGED
@@ -15,46 +15,49 @@ DeviceModels::$ANDROID_INDEX = array (
15
  7 => '(Hisense )?(LED[0-9]{2,2}(G|K|L|EC|XT)[0-9]{2,3})!',
16
  8 => '[SX06][0-9]{2,2}HT!!',
17
  9 => '(Huawei )?[MSTX](1|2|7|8|10)\\-[A-Z0-9][0-9]{2,2}!!',
18
- 10 => 'G[0-9]{3,3}!!',
19
- 11 => 'Y[0-9]{3,3}!!',
20
- 12 => '[0-9AS][0-9]{2,2}HW!!',
21
- 13 => '(USCC-|KYOCERA-)?E[0-9]{4,4}!!',
22
- 14 => '(USCC-|KYOCERA-)?C[0-9]{4,4}!!',
23
- 15 => '[0-9]0[0-9]KC?!!',
24
- 16 => 'K\\-?Touch!!',
25
- 17 => '(Lenovo ?)?(IdeaTab ?)?[AB][0-9]{4,4}!!',
26
- 18 => '(Lenovo )?(Tab ?)?(2 ?)?[AS](7|8|10)!!',
27
- 19 => '(Lenovo ?)?(IdeaTab ?)?[KSV][0-9]{4,4}!!',
28
- 20 => '[0-9]0[0-9]LG!!',
29
- 21 => 'M\\-PP!!',
30
- 22 => 'M\\-MP!!',
31
- 23 => 'M\\-IPRO!!',
32
- 24 => '(MEDION|(MD )?LIFETAB)!!',
33
- 25 => 'M\\.T\\.T\\.!!',
34
- 26 => 'O\\+!!',
35
- 27 => '[0-9]{2,2}PFH6[0-9]{3,3}!',
36
- 28 => '(?:RIVO )?RHYTHM RX ?([0-9]+)!',
37
- 29 => '[4567A]0[0-9]SH!!',
38
- 30 => '(3|5|6|7)0[0-9]SH!!',
39
- 31 => 'C[0-9]{4,4}!!',
40
- 32 => 'D[0-9]{4,4}!!',
41
- 33 => 'E[0-9]{4,4}!!',
42
- 34 => 'F[0-9]{4,4}!!',
43
- 35 => 'G[0-9]{4,4}!!',
44
- 36 => 'H[0-9]{4,4}!!',
45
- 37 => 'E[0-9]{2,2}[a-z]!!',
46
- 38 => 'L[0-9]{2,2}[a-z]!!',
47
- 39 => '(SNM\\-)?M[0-9]{2,2}[a-z]!!',
48
- 40 => 'S[0-9]{2,2}[a-z]!!',
49
- 41 => '(XOLO )?[ABQX][0-9]{3,4}!!',
50
- 42 => '(ZTE ?)?N[0-9]{3,3}!!',
51
- 43 => '(ZXY-)?(ZTE )?N[0-9]{4,4}!!',
52
- 44 => '(ZTE ?)?U[0-9]{3,3}!!',
53
- 45 => '(ZTE ?)?V[0-9]{3,3}[A-Z]!!',
54
- 46 => '(ZTE ?)?V ?[0-9]{3,3}!!',
55
- 47 => '(ZTE ?)?X[0-9]{3,3}!!',
56
- 48 => '(ZTE )?Z[0-9]!!',
57
- 49 => '[a-z][a-z](?:-[a-z][a-z])?, SmartTabII7!',
 
 
 
58
  ),
59
  '@00' =>
60
  array (
@@ -124,6 +127,22 @@ DeviceModels::$ANDROID_INDEX = array (
124
  1 => '(Xiaomi )?20!!',
125
  2 => '(Xiaomi |HM)?20!!',
126
  ),
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
127
  '@2P' =>
128
  array (
129
  0 => '2PQ93',
@@ -133,6 +152,10 @@ DeviceModels::$ANDROID_INDEX = array (
133
  array (
134
  0 => '(3|5|6|7)0[0-9]SH!!',
135
  ),
 
 
 
 
136
  '@36' =>
137
  array (
138
  0 => '360 N4S',
@@ -162,7 +185,7 @@ DeviceModels::$ANDROID_INDEX = array (
162
  13 => '4027[ADNX]!',
163
  14 => '4028[AEJS]!',
164
  15 => '4032[ADEX]!',
165
- 16 => '4033[AL]!',
166
  17 => '4034[ADEFGX]!',
167
  18 => '4035[ADYX]!',
168
  19 => '4036[E]!',
@@ -170,12 +193,14 @@ DeviceModels::$ANDROID_INDEX = array (
170
  21 => '4037[T]!',
171
  22 => '4037[V]!',
172
  23 => '4045[ADEFLOYX]!',
173
- 24 => '4055[JU]!',
174
- 25 => '4060[A]!',
175
- 26 => '4060[W]!',
176
- 27 => '40[0-9]SC!!',
177
- 28 => '40[0-9]SO!!',
178
- 29 => '402ZT',
 
 
179
  ),
180
  '@48' =>
181
  array (
@@ -187,51 +212,70 @@ DeviceModels::$ANDROID_INDEX = array (
187
  ),
188
  '@50' =>
189
  array (
190
- 0 => '5010[DEGSUX]!',
191
- 1 => '5012[G]!',
192
- 2 => '5015[ADEX]!',
193
- 3 => '5016[AJ]!',
194
- 4 => '5017[B]!',
195
- 5 => '5017[ADEOX]!',
196
- 6 => '5019[D]!',
197
- 7 => '5020[A]!',
198
- 8 => '5022[DEX]!',
199
- 9 => '5023[F]!',
200
- 10 => '5025[DEGX]!',
201
- 11 => '5027[B]!',
202
- 12 => '5036[D]!',
203
- 13 => '5038[ADEX]!',
204
- 14 => '5042[ADEFGTWXY]!',
205
- 15 => '5044[ADOY]!',
206
- 16 => '5045[ADGJTX]!',
207
- 17 => '5046[DGJY]!',
208
- 18 => '5047[DUY]!',
209
- 19 => '5049[EGSWZ]!',
210
- 20 => '5050[ASYX]!',
211
- 21 => '5051[ADJMX]!',
212
- 22 => '5052[D]!',
213
- 23 => '5054[ADOSTX]!',
214
- 24 => '5054[NW]!',
215
- 25 => '5056[ADENUWX]!',
216
- 26 => '5056[O]!',
217
- 27 => '5057[M]!',
218
- 28 => '5065[ADJNWX]!',
219
- 29 => '5070[DJX]!',
220
- 30 => '5080[DFQX]!',
221
- 31 => '5085[CDJNY]!',
222
- 32 => '5090[Y]!',
223
- 33 => '5095[BIKY]!',
224
- 34 => '5096[AI]!',
225
- 35 => '5098[OS]!',
226
- 36 => '5099[ADY]!',
227
- 37 => '504Q',
228
- 38 => '504Q+',
229
- 39 => '504QP',
230
- 40 => '501LV',
231
- 41 => '(48|50|55)AX600C!',
232
- 42 => '5080C Pro',
233
- 43 => '50[0-9]SO!!',
234
- 44 => '502ZT',
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
235
  ),
236
  '@55' =>
237
  array (
@@ -256,21 +300,30 @@ DeviceModels::$ANDROID_INDEX = array (
256
  array (
257
  0 => '6014[DX]!',
258
  1 => '6016[ADEX]!',
259
- 2 => '6031[X]!',
260
- 3 => '6036[AYX]!',
261
- 4 => '6037[BIKY]!',
262
- 5 => '6039[AHJKSY]!',
263
- 6 => '6042[D]!',
264
- 7 => '6043[AD]!',
265
- 8 => '6044D',
266
- 9 => '6045[BFGIKOXY]!',
267
- 10 => '6050[AFWY]!',
268
- 11 => '6055[ABDHIKPUY]!',
269
- 12 => '6070[KOY]!',
270
- 13 => '602LV',
271
- 14 => '60[0-9]SO!!',
272
- 15 => '602ZT',
273
- 16 => '6034R ORANGE Niva',
 
 
 
 
 
 
 
 
 
274
  ),
275
  '@70' =>
276
  array (
@@ -310,13 +363,17 @@ DeviceModels::$ANDROID_INDEX = array (
310
  array (
311
  0 => '8020[D]!',
312
  1 => '8030[BY]!',
313
- 2 => 8022,
314
- 3 => '801ES',
315
- 4 => '80-1',
316
- 5 => '801a',
317
- 6 => '801s',
318
- 7 => '802w',
319
- 8 => '800P31C',
 
 
 
 
320
  ),
321
  '@81' =>
322
  array (
@@ -366,10 +423,11 @@ DeviceModels::$ANDROID_INDEX = array (
366
  9 => '9022[SX]!',
367
  10 => '9024[OW]!',
368
  11 => '9025[MQ]!',
369
- 12 => '9021[AM]!',
370
- 13 => '909d',
371
- 14 => 9088,
372
- 15 => '9020[A]!',
 
373
  ),
374
  '@93' =>
375
  array (
@@ -384,9 +442,10 @@ DeviceModels::$ANDROID_INDEX = array (
384
  '@A0' =>
385
  array (
386
  0 => 'A001',
387
- 1 => 'A0001',
388
- 2 => 'A0002',
389
- 3 => 'A05510',
 
390
  ),
391
  '@A1' =>
392
  array (
@@ -423,6 +482,7 @@ DeviceModels::$ANDROID_INDEX = array (
423
  30 => 'A11(M5A7)',
424
  31 => 'A11s(M5A7)',
425
  32 => 'A15(E6C2)',
 
426
  ),
427
  '@A2' =>
428
  array (
@@ -442,11 +502,12 @@ DeviceModels::$ANDROID_INDEX = array (
442
  7 => 'A31',
443
  8 => 'A31c',
444
  9 => 'A31t',
445
- 10 => 'A33f',
446
- 11 => 'A33w',
447
- 12 => 'A37f',
448
- 13 => 'A37fw',
449
- 14 => 'A3',
 
450
  ),
451
  '@A4' =>
452
  array (
@@ -487,10 +548,11 @@ DeviceModels::$ANDROID_INDEX = array (
487
  17 => 'A500CG',
488
  18 => 'A55i',
489
  19 => 'A52',
490
- 20 => 'A51f',
491
- 21 => 'A51w',
492
- 22 => 'A5000',
493
- 23 => 'a5',
 
494
  ),
495
  '@A6' =>
496
  array (
@@ -525,9 +587,10 @@ DeviceModels::$ANDROID_INDEX = array (
525
  16 => 'A750',
526
  17 => 'A7000-a',
527
  18 => 'A7010a48',
528
- 19 => 'A7272+',
529
- 20 => 'A70(CY6T)',
530
- 21 => 'A78h四核(C1V3)',
 
531
  ),
532
  '@A8' =>
533
  array (
@@ -537,20 +600,22 @@ DeviceModels::$ANDROID_INDEX = array (
537
  3 => 'A862W',
538
  4 => 'A80KSC!',
539
  5 => 'A80HF',
540
- 6 => 'A89',
541
- 7 => 'A820t',
542
- 8 => 'A87',
543
- 9 => 'A853',
544
- 10 => 'A853 Milestone',
545
- 11 => 'A878 Duo',
546
- 12 => 'A898 Duo',
547
- 13 => 'A8HD',
548
- 14 => 'A80h双核(A4P9)',
549
- 15 => 'A80 se??(M5MA)',
550
- 16 => 'A80 se四核(M5MC)',
551
- 17 => 'A80HD四核(C4H6)',
552
- 18 => 'A88 mini四核(M1C5)',
553
- 19 => 'A81E',
 
 
554
  ),
555
  '@A9' =>
556
  array (
@@ -561,6 +626,7 @@ DeviceModels::$ANDROID_INDEX = array (
561
  4 => 'A90S',
562
  5 => 'A953',
563
  6 => 'A955',
 
564
  ),
565
  '@AA' =>
566
  array (
@@ -568,19 +634,22 @@ DeviceModels::$ANDROID_INDEX = array (
568
  ),
569
  '@AC' =>
570
  array (
571
- 0 => 'Acer Chromebook R11',
572
- 1 => 'Acer Chromebook R11 (CB5-132T / C738T)',
573
- 2 => 'Acer Chromebook 15 (CB3-532)',
574
  3 => '(AC|BC|LC|MT|RC|QS|VM|TS|OC)[0-9]{4,4}[A-Z]!!',
575
  4 => 'AC45BHE',
576
  5 => 'AC50BHE',
577
  6 => 'AC50DHE',
578
  7 => 'AC45NE',
579
- 8 => 'ACM3066-8',
580
- 9 => '(Explay|X-tremer|ActiveD|Informer|Surfer)!!',
581
- 10 => 'ACT2000',
582
- 11 => 'ACU Volvo',
583
- 12 => 'Acqua',
 
 
 
584
  ),
585
  '@AD' =>
586
  array (
@@ -661,7 +730,8 @@ DeviceModels::$ANDROID_INDEX = array (
661
  3 => 'AG Go-Tab Access',
662
  4 => 'AG Chrome Go Tab 7.0',
663
  5 => 'AGS-(L09|W09)!',
664
- 6 => '(KATBL|Kogan|Agora)!!',
 
665
  ),
666
  '@AI' =>
667
  array (
@@ -733,8 +803,8 @@ DeviceModels::$ANDROID_INDEX = array (
733
  33 => '(Allview|Alldro)!!',
734
  34 => 'Allwinner A10',
735
  35 => '(Highscreen|Alpha|Bay|Boost|Cosmo|Explosion|Power|Prime|Zera)!!',
736
- 36 => '(HUAWEI )?(ALP|BLA|CRR|LON|MATE|MHA|MT1|MT2|MT7|M200|NXT|Z100)!!',
737
- 37 => '(HW-|HUAWEI )?(ALE|ANE|D2|DAV|EML|EVA|FIG|G6|G7|GRA|M100|P2|P6|P7|PRA|RIO|SC|Sophia|VIE|VKY|VNS|VTR|WAS)!!',
738
  38 => 'Alfa A93 POP',
739
  39 => 'Alfa L',
740
  40 => 'Ally',
@@ -771,7 +841,8 @@ DeviceModels::$ANDROID_INDEX = array (
771
  25 => 'AMD120',
772
  26 => '(Amaze|Hitech)!!',
773
  27 => 'Amaze 4G',
774
- 28 => '(Amazing|Fantastic)!!',
 
775
  ),
776
  '@AN' =>
777
  array (
@@ -819,7 +890,7 @@ DeviceModels::$ANDROID_INDEX = array (
819
  41 => 'AN10G2-LZ',
820
  42 => 'AN10BG3-LZ',
821
  43 => 'AN7DG3C',
822
- 44 => '(HW-|HUAWEI )?(ALE|ANE|D2|DAV|EML|EVA|FIG|G6|G7|GRA|M100|P2|P6|P7|PRA|RIO|SC|Sophia|VIE|VKY|VNS|VTR|WAS)!!',
823
  45 => '(iBall )?Andi!!',
824
  46 => 'AND1',
825
  47 => 'AND1E',
@@ -880,10 +951,11 @@ DeviceModels::$ANDROID_INDEX = array (
880
  11 => 'Aquila 101-1008 3G',
881
  12 => 'Aquila LE 080-0508',
882
  13 => 'Aquila SE 090-0508',
883
- 14 => '(Intex )?Aqua!!',
884
- 15 => 'AQUOS!!',
885
- 16 => 'aqua',
886
- 17 => 'AQT80',
 
887
  ),
888
  '@AR' =>
889
  array (
@@ -915,37 +987,54 @@ DeviceModels::$ANDROID_INDEX = array (
915
  25 => 'arrowsM03',
916
  26 => 'ARIES 101',
917
  27 => 'ARIES 785',
918
- 28 => 'ARA YS608',
919
- 29 => 'Arctic450',
920
- 30 => 'Arc',
921
- 31 => 'Arc S',
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
922
  ),
923
  '@AS' =>
924
  array (
925
- 0 => 'ASUS Chromebook Flip C100PA',
926
- 1 => 'ASUS Chromebook Flip C302',
927
- 2 => 'Astone A108',
928
- 3 => 'aspire1000s',
929
- 4 => 'Aspire!!',
930
- 5 => 'ASK SP[0-9]{3,3}!!',
931
- 6 => 'ASTRI',
932
- 7 => 'asus laptop',
933
- 8 => 'ASUS T20',
934
- 9 => 'ASUS Pad ME370T',
935
- 10 => 'Asus Fonepad ME371MG 8GB',
936
- 11 => 'AST21',
937
- 12 => 'asus google cube',
938
- 13 => 'ASP-4300W',
939
- 14 => 'ASP-4500Z',
940
- 15 => 'ASP-5000H',
941
- 16 => 'Asus A10',
942
- 17 => '(Huawei|Ascend|HW-)!!',
943
- 18 => 'AS740',
944
- 19 => 'AS870 4G',
945
- 20 => 'AS985',
946
- 21 => 'AS650C',
947
- 22 => 'Aster',
948
- 23 => 'Aster T',
949
  ),
950
  '@AT' =>
951
  array (
@@ -965,50 +1054,52 @@ DeviceModels::$ANDROID_INDEX = array (
965
  13 => 'AT1G*',
966
  14 => 'AT7E',
967
  15 => 'ATP515CKIT',
968
- 16 => '(HW-|HUAWEI |HONOR )?(ATH|BLN|BKL|BND|CHE|CHM|COL|DUA|DUK|DLI|EDI|FRD|HN3|H30|H60|HOL|JMM|KIW|LLD|NEM|NMO|PE|PLK|RNE|SCL|KNT|CAM|STF|HDN)!!',
969
- 17 => 'aTab9.7 IPS',
970
- 18 => 'AT735',
971
- 19 => 'Atrix 2',
972
- 20 => 'Atrix 2 WeifanZ',
973
- 21 => 'Atrix 4G',
974
- 22 => 'Atrix 4G ME860',
975
- 23 => 'Atrix 4G MB860',
976
- 24 => 'Atrix HD',
977
- 25 => 'AtrixHD',
978
- 26 => 'ATLANTIS',
979
- 27 => 'ATP7526',
980
- 28 => 'ATP7683',
981
- 29 => 'AT1S0',
982
- 30 => 'AT7-A',
983
- 31 => 'AT7-B',
984
- 32 => 'AT7-C',
985
- 33 => 'AT10-A',
986
- 34 => 'AT10LE-A',
987
- 35 => 'AT10PE-A',
988
- 36 => 'AT100',
989
- 37 => 'AT200',
990
- 38 => 'AT270',
991
- 39 => 'AT300',
992
- 40 => 'AT300SE',
993
- 41 => 'AT330',
994
- 42 => 'AT374',
995
- 43 => 'AT400',
996
- 44 => 'AT470',
997
- 45 => 'AT500',
998
- 46 => 'AT500a',
999
- 47 => 'AT503',
1000
- 48 => 'AT570',
1001
- 49 => 'AT703',
1002
- 50 => 'AT830',
1003
- 51 => 'AT-A[QS][0-9]{2,2}!!',
1004
- 52 => 'ATLAS W',
 
1005
  ),
1006
  '@AU' =>
1007
  array (
1008
  0 => 'Aurora-II',
1009
  1 => 'AUX!!',
1010
- 2 => '(Aura|iberry|AUXUS)!!',
1011
- 3 => 'AURUS III',
 
1012
  ),
1013
  '@AV' =>
1014
  array (
@@ -1036,6 +1127,10 @@ DeviceModels::$ANDROID_INDEX = array (
1036
  1 => 'B15',
1037
  2 => 'B15Q',
1038
  ),
 
 
 
 
1039
  '@B3' =>
1040
  array (
1041
  0 => 'B3-A10',
@@ -1045,7 +1140,12 @@ DeviceModels::$ANDROID_INDEX = array (
1045
  4 => 'B3-A32',
1046
  5 => 'B3-A40',
1047
  6 => 'B3-A40FHD',
1048
- 7 => 'B3000',
 
 
 
 
 
1049
  ),
1050
  '@B9' =>
1051
  array (
@@ -1061,12 +1161,14 @@ DeviceModels::$ANDROID_INDEX = array (
1061
  5 => 'Barnes & Noble Nook HD+',
1062
  6 => '(Highscreen|Alpha|Bay|Boost|Cosmo|Explosion|Power|Prime|Zera)!!',
1063
  7 => 'BAH-(W09|AL00|L09)!',
1064
- 8 => '(HW-|HUAWEI )?BAC-(AL00|L03|L21|L22|TL00)!',
1065
- 9 => 'Backflip',
1066
- 10 => 'Backflip Me600',
1067
- 11 => 'Bambook S1',
1068
- 12 => 'BARRY',
1069
- 13 => 'BASE!!',
 
 
1070
  ),
1071
  '@BB' =>
1072
  array (
@@ -1125,9 +1227,11 @@ DeviceModels::$ANDROID_INDEX = array (
1125
  13 => 'BePhone UN030',
1126
  14 => 'Best ?sonny!!',
1127
  15 => 'BEAN 454',
1128
- 16 => 'beetle',
1129
- 17 => 'Be Touch 2',
1130
- 18 => 'Beeline!!',
 
 
1131
  ),
1132
  '@BF' =>
1133
  array (
@@ -1143,7 +1247,7 @@ DeviceModels::$ANDROID_INDEX = array (
1143
  3 => 'bg2qa0v4 !',
1144
  4 => 'bg2qv4 !',
1145
  5 => 'BGO-(DL09|L03)!',
1146
- 6 => 'BG2-(U01)!',
1147
  ),
1148
  '@BH' =>
1149
  array (
@@ -1156,12 +1260,15 @@ DeviceModels::$ANDROID_INDEX = array (
1156
  2 => 'Bird!!',
1157
  3 => 'BizSmartPhone',
1158
  4 => 'BIP-6000',
1159
- 5 => 'BIRDY',
 
 
 
1160
  ),
1161
  '@BK' =>
1162
  array (
1163
  0 => '(BDS|BHX|BKO)\\-!!',
1164
- 1 => '(HW-|HUAWEI |HONOR )?(ATH|BLN|BKL|BND|CHE|CHM|COL|DUA|DUK|DLI|EDI|FRD|HN3|H30|H60|HOL|JMM|KIW|LLD|NEM|NMO|PE|PLK|RNE|SCL|KNT|CAM|STF|HDN)!!',
1165
  ),
1166
  '@BL' =>
1167
  array (
@@ -1170,18 +1277,19 @@ DeviceModels::$ANDROID_INDEX = array (
1170
  2 => 'BlueStacks!',
1171
  3 => 'BlackBerry Runtime for Android Apps',
1172
  4 => 'BLACKBERRY P\'9982',
1173
- 5 => '(BLU|DASH|LIFE|NEO|STUDIO|VIVO)!!',
1174
- 6 => 'Bluboo S1',
1175
- 7 => 'Blaze S180',
1176
- 8 => 'BLADE LE 70',
1177
- 9 => '(HUAWEI )?(ALP|BLA|CRR|LON|MATE|MHA|MT1|MT2|MT7|M200|NXT|Z100)!!',
1178
- 10 => '(HW-|HUAWEI |HONOR )?(ATH|BLN|BKL|BND|CHE|CHM|COL|DUA|DUK|DLI|EDI|FRD|HN3|H30|H60|HOL|JMM|KIW|LLD|NEM|NMO|PE|PLK|RNE|SCL|KNT|CAM|STF|HDN)!!',
1179
- 11 => '(HW-|HUAWEI )?(BLL|CHC|TAG|KII)!!',
1180
- 12 => '(BLF-)?lephone!!',
1181
- 13 => 'Blackphone 2',
1182
- 14 => 'BLOOM',
1183
- 15 => 'BLACK',
1184
- 16 => '(ZTE )?Blade!!',
 
1185
  ),
1186
  '@BM' =>
1187
  array (
@@ -1201,7 +1309,7 @@ DeviceModels::$ANDROID_INDEX = array (
1201
  6 => '(NOOK )?BNTV(800)!',
1202
  7 => 'BN Nook HD',
1203
  8 => 'BN NookHD+',
1204
- 9 => '(HW-|HUAWEI |HONOR )?(ATH|BLN|BKL|BND|CHE|CHM|COL|DUA|DUK|DLI|EDI|FRD|HN3|H30|H60|HOL|JMM|KIW|LLD|NEM|NMO|PE|PLK|RNE|SCL|KNT|CAM|STF|HDN)!!',
1205
  ),
1206
  '@BO' =>
1207
  array (
@@ -1303,11 +1411,30 @@ DeviceModels::$ANDROID_INDEX = array (
1303
  ),
1304
  '@BV' =>
1305
  array (
1306
- 0 => 'BV8000Pro',
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1307
  ),
1308
  '@C2' =>
1309
  array (
1310
- 0 => 'C2',
 
1311
  ),
1312
  '@C5' =>
1313
  array (
@@ -1346,28 +1473,33 @@ DeviceModels::$ANDROID_INDEX = array (
1346
  array (
1347
  0 => 'Cardhu',
1348
  1 => 'CA907AAC0G',
1349
- 2 => 'Camangi-Mangrove7',
1350
- 3 => 'CAPTIVA!!',
1351
- 4 => 'Carpad T5',
1352
- 5 => 'Carpad T61 2g',
1353
- 6 => 'CAL21',
1354
- 7 => 'CA201SP',
1355
- 8 => 'CA-201L',
1356
- 9 => 'Casper VIA!!',
1357
- 10 => 'CAT!!',
1358
- 11 => 'Candy TV',
1359
- 12 => '(HW-|HUAWEI |HONOR )?(ATH|BLN|BKL|BND|CHE|CHM|COL|DUA|DUK|DLI|EDI|FRD|HN3|H30|H60|HOL|JMM|KIW|LLD|NEM|NMO|PE|PLK|RNE|SCL|KNT|CAM|STF|HDN)!!',
1360
- 13 => '(HW-|HUAWEI )?(CRO|LUA|CUN|SCC|SCU|CAM|LDN|LYO|MYA)!!',
1361
- 14 => '(HW-|HUAWEI )?CAZ-(AL10|TL10|TL20)!',
1362
- 15 => '(HW-|HUAWEI )?CAN-(L01|L11|L12)!',
1363
- 16 => 'calgary',
1364
- 17 => 'Captivate-I897',
1365
- 18 => 'capricorn',
 
1366
  ),
1367
  '@CC' =>
1368
  array (
1369
  0 => 'CCE SK352',
1370
  ),
 
 
 
 
1371
  '@CE' =>
1372
  array (
1373
  0 => 'cedartrail',
@@ -1391,7 +1523,7 @@ DeviceModels::$ANDROID_INDEX = array (
1391
  11 => 'Cherry w500',
1392
  12 => 'CHUWI!!',
1393
  13 => 'CHONG!!',
1394
- 14 => '(HW-|HUAWEI |HONOR )?(ATH|BLN|BKL|BND|CHE|CHM|COL|DUA|DUK|DLI|EDI|FRD|HN3|H30|H60|HOL|JMM|KIW|LLD|NEM|NMO|PE|PLK|RNE|SCL|KNT|CAM|STF|HDN)!!',
1395
  15 => '(HW-|HUAWEI )?(BLL|CHC|TAG|KII)!!',
1396
  16 => 'chagall',
1397
  17 => 'chiron',
@@ -1426,17 +1558,19 @@ DeviceModels::$ANDROID_INDEX = array (
1426
  4 => 'Clanga SE 097-1008',
1427
  5 => 'CLP281X',
1428
  6 => 'Click',
1429
- 7 => '(Intex )?Cloud!!',
1430
- 8 => 'CLIQ',
1431
- 9 => 'CLIQ XT',
1432
- 10 => 'CLIQ2',
 
1433
  ),
1434
  '@CM' =>
1435
  array (
1436
  0 => 'CMP!!',
1437
  1 => '(cm|aokp) tenderloin!',
1438
- 2 => 'CM980',
1439
- 3 => 'CM990',
 
1440
  ),
1441
  '@CN' =>
1442
  array (
@@ -1458,17 +1592,18 @@ DeviceModels::$ANDROID_INDEX = array (
1458
  10 => 'COSHIP F2',
1459
  11 => 'COWON!!',
1460
  12 => 'COZCO C1 Plus',
1461
- 13 => 'Collo DG100',
1462
- 14 => 'Collo 2 DG120',
1463
- 15 => 'Connect-2G-2.0',
1464
- 16 => '(Highscreen|Alpha|Bay|Boost|Cosmo|Explosion|Power|Prime|Zera)!!',
1465
- 17 => 'Coquettish Red',
1466
- 18 => '(HW-|HUAWEI |HONOR )?(ATH|BLN|BKL|BND|CHE|CHM|COL|DUA|DUK|DLI|EDI|FRD|HN3|H30|H60|HOL|JMM|KIW|LLD|NEM|NMO|PE|PLK|RNE|SCL|KNT|CAM|STF|HDN)!!',
1467
- 19 => 'Comet',
1468
- 20 => 'Corvair',
1469
- 21 => 'COOLPIX S800c',
1470
- 22 => 'COOLPIX S810c',
1471
- 23 => 'Constellation V',
 
1472
  ),
1473
  '@CP' =>
1474
  array (
@@ -1477,13 +1612,84 @@ DeviceModels::$ANDROID_INDEX = array (
1477
  2 => 'CP8676!',
1478
  3 => 'CP8298!',
1479
  4 => 'CPN-(W09|AL00|L09)!',
1480
- 5 => 'CPH1605',
1481
- 6 => 'CPH1701',
1482
- 7 => 'CPH1717',
1483
- 8 => 'CPH1609',
1484
- 9 => 'CPH1613',
1485
- 10 => 'CPH1723',
1486
- 11 => 'CPH1611',
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1487
  ),
1488
  '@CR' =>
1489
  array (
@@ -1491,15 +1697,16 @@ DeviceModels::$ANDROID_INDEX = array (
1491
  1 => 'CRESTA.CTP888',
1492
  2 => 'Cross!!',
1493
  3 => 'Crosscall!!',
1494
- 4 => '(HUAWEI )?(ALP|BLA|CRR|LON|MATE|MHA|MT1|MT2|MT7|M200|NXT|Z100)!!',
1495
- 5 => '(HW-|HUAWEI )?(CRO|LUA|CUN|SCC|SCU|CAM|LDN|LYO|MYA)!!',
1496
  6 => 'CRONO 22',
1497
  7 => 'Crescent',
1498
  ),
1499
  '@CS' =>
1500
  array (
1501
- 0 => 'CS-1A13',
1502
- 1 => '(CSL[- ])?(Spice[- ]?)?Mi(-| )?[0-9]{3,3}!!',
 
1503
  ),
1504
  '@CT' =>
1505
  array (
@@ -1525,7 +1732,7 @@ DeviceModels::$ANDROID_INDEX = array (
1525
  0 => 'CUBOT!!',
1526
  1 => '(CUBE ?)?(K8|U1|U2|U3|U5|U6|U8|U9)[0-9]?GT!!',
1527
  2 => 'CUBE!!',
1528
- 3 => '(HW-|HUAWEI )?(CRO|LUA|CUN|SCC|SCU|CAM|LDN|LYO|MYA)!!',
1529
  ),
1530
  '@CW' =>
1531
  array (
@@ -1564,7 +1771,7 @@ DeviceModels::$ANDROID_INDEX = array (
1564
  '@D2' =>
1565
  array (
1566
  0 => 'D2-[0-9]{3,3}!!',
1567
- 1 => '(HW-|HUAWEI )?(ALE|ANE|D2|DAV|EML|EVA|FIG|G6|G7|GRA|M100|P2|P6|P7|PRA|RIO|SC|Sophia|VIE|VKY|VNS|VTR|WAS)!!',
1568
  ),
1569
  '@D5' =>
1570
  array (
@@ -1597,7 +1804,7 @@ DeviceModels::$ANDROID_INDEX = array (
1597
  1 => '(BLU|DASH|LIFE|NEO|STUDIO|VIVO)!!',
1598
  2 => 'Dakele A380',
1599
  3 => 'DAKELE MC001',
1600
- 4 => '(HW-|HUAWEI )?(ALE|ANE|D2|DAV|EML|EVA|FIG|G6|G7|GRA|M100|P2|P6|P7|PRA|RIO|SC|Sophia|VIE|VKY|VNS|VTR|WAS)!!',
1601
  5 => 'DATAM803HC',
1602
  6 => 'DATAM805HC',
1603
  7 => 'DATAM819HD!',
@@ -1680,18 +1887,22 @@ DeviceModels::$ANDROID_INDEX = array (
1680
  1 => 'DL8006',
1681
  2 => 'DLX',
1682
  3 => 'DLXU',
1683
- 4 => '(HW-|HUAWEI |HONOR )?(ATH|BLN|BKL|BND|CHE|CHM|COL|DUA|DUK|DLI|EDI|FRD|HN3|H30|H60|HOL|JMM|KIW|LLD|NEM|NMO|PE|PLK|RNE|SCL|KNT|CAM|STF|HDN)!!',
1684
  5 => 'dL1',
 
1685
  ),
1686
  '@DM' =>
1687
  array (
1688
  0 => 'DM0[0-9]{2,2}(K|SH)!!',
1689
- 1 => 'DM-01G',
1690
- 2 => 'DM-01K',
1691
- 3 => 'DM-02H',
1692
- 4 => 'DMC-CM1',
1693
- 5 => 'DM-01H',
1694
- 6 => 'DM-01J',
 
 
 
1695
  ),
1696
  '@DN' =>
1697
  array (
@@ -1700,6 +1911,8 @@ DeviceModels::$ANDROID_INDEX = array (
1700
  2 => 'DNS S!!',
1701
  3 => 'DNSS4003',
1702
  4 => 'DNS4502M',
 
 
1703
  ),
1704
  '@DO' =>
1705
  array (
@@ -1710,10 +1923,11 @@ DeviceModels::$ANDROID_INDEX = array (
1710
  4 => 'DOOV!!',
1711
  5 => 'Doro Liberto!!',
1712
  6 => 'Doro 8030',
1713
- 7 => 'Doro 824',
1714
- 8 => 'Doro PhoneEasy 745',
1715
- 9 => 'Dolphin 70e Black',
1716
- 10 => 'Docomo HT-03A',
 
1717
  ),
1718
  '@DP' =>
1719
  array (
@@ -1727,7 +1941,7 @@ DeviceModels::$ANDROID_INDEX = array (
1727
  0 => 'Dream',
1728
  1 => '(GIO-)?(GiONEE[- ])?Dream D1!',
1729
  2 => 'Droid Incredible',
1730
- 3 => '(HW-|HUAWEI )?(DRA|FLA|TIT|TAG|NCE|TRT|SLA)!!',
1731
  4 => 'DroniX-0.5',
1732
  5 => 'Droid',
1733
  6 => 'DROID',
@@ -1763,6 +1977,8 @@ DeviceModels::$ANDROID_INDEX = array (
1763
  '@DS' =>
1764
  array (
1765
  0 => 'Dslide!!',
 
 
1766
  ),
1767
  '@DT' =>
1768
  array (
@@ -1771,7 +1987,12 @@ DeviceModels::$ANDROID_INDEX = array (
1771
  ),
1772
  '@DU' =>
1773
  array (
1774
- 0 => '(HW-|HUAWEI |HONOR )?(ATH|BLN|BKL|BND|CHE|CHM|COL|DUA|DUK|DLI|EDI|FRD|HN3|H30|H60|HOL|JMM|KIW|LLD|NEM|NMO|PE|PLK|RNE|SCL|KNT|CAM|STF|HDN)!!',
 
 
 
 
 
1775
  ),
1776
  '@DW' =>
1777
  array (
@@ -1809,8 +2030,11 @@ DeviceModels::$ANDROID_INDEX = array (
1809
  0 => 'E1 v360',
1810
  1 => 'E170BS',
1811
  2 => 'E1031',
1812
- 3 => 'e1808 v75!',
1813
- 4 => 'e1109 v73!',
 
 
 
1814
  ),
1815
  '@E2' =>
1816
  array (
@@ -1864,8 +2088,10 @@ DeviceModels::$ANDROID_INDEX = array (
1864
  ),
1865
  '@E9' =>
1866
  array (
1867
- 0 => 'E900',
1868
- 1 => 'E912',
 
 
1869
  ),
1870
  '@EA' =>
1871
  array (
@@ -1877,11 +2103,13 @@ DeviceModels::$ANDROID_INDEX = array (
1877
  array (
1878
  0 => 'EBEN!!',
1879
  1 => 'EBEST!!',
1880
- 2 => 'EB-4063-X',
1881
- 3 => 'EB-A71GJ',
1882
- 4 => 'EB-W51GJ',
1883
- 5 => 'EB-WX1GJ',
1884
- 6 => 'EB-L76G-B',
 
 
1885
  ),
1886
  '@EC' =>
1887
  array (
@@ -1894,7 +2122,7 @@ DeviceModels::$ANDROID_INDEX = array (
1894
  array (
1895
  0 => '(bq|Aquaris|Edison|Maxwell)!!',
1896
  1 => 'edgejr',
1897
- 2 => '(HW-|HUAWEI |HONOR )?(ATH|BLN|BKL|BND|CHE|CHM|COL|DUA|DUK|DLI|EDI|FRD|HN3|H30|H60|HOL|JMM|KIW|LLD|NEM|NMO|PE|PLK|RNE|SCL|KNT|CAM|STF|HDN)!!',
1898
  3 => 'edenTAB ET-701',
1899
  ),
1900
  '@EE' =>
@@ -1930,37 +2158,38 @@ DeviceModels::$ANDROID_INDEX = array (
1930
  4 => 'ELIFE-E3',
1931
  5 => 'Elife E5',
1932
  6 => 'ElifeE6',
1933
- 7 => 'Elektra L',
1934
- 8 => 'Elektra XL',
1935
- 9 => 'Electrify',
1936
- 10 => 'Eluga A2',
1937
- 11 => 'ELUGA A3',
1938
- 12 => 'ELUGA A3 Pro',
1939
- 13 => 'ELUGA I2',
1940
- 14 => 'ELUGA I2 Activ',
1941
- 15 => 'ELUGA I4',
1942
- 16 => 'Eluga Arc 2',
1943
- 17 => 'Eluga Mark 2',
1944
- 18 => 'ELUGA Note',
1945
- 19 => 'ELUGA Prim',
1946
- 20 => 'ELUGA Pulse X',
1947
- 21 => 'ELUGA Ray',
1948
- 22 => 'ELUGA Ray Max',
1949
- 23 => 'ELUGA Ray X',
1950
- 24 => 'Eluga Ray 700',
1951
- 25 => 'ELUGA Turbo',
1952
- 26 => 'Elite',
1953
- 27 => 'Elite 11',
1954
- 28 => '(SENCOR )?ELEMENT!!',
1955
- 29 => 'Elite 5.5L+',
1956
- 30 => 'Elite 6.0L',
 
1957
  ),
1958
  '@EM' =>
1959
  array (
1960
  0 => 'EMBT3C',
1961
  1 => 'EM63',
1962
  2 => 'EM01F',
1963
- 3 => '(HW-|HUAWEI )?(ALE|ANE|D2|DAV|EML|EVA|FIG|G6|G7|GRA|M100|P2|P6|P7|PRA|RIO|SC|Sophia|VIE|VKY|VNS|VTR|WAS)!!',
1964
  4 => 'eMAX mini',
1965
  5 => 'EMR1879',
1966
  ),
@@ -2018,15 +2247,18 @@ DeviceModels::$ANDROID_INDEX = array (
2018
  3 => '(EVAS )?EVERCOSS[- ]A!!',
2019
  4 => 'EVERPAD SC-710',
2020
  5 => 'Ever!!',
2021
- 6 => 'EVO',
2022
- 7 => 'Evo HD2',
2023
- 8 => 'EVO ?3D!',
2024
- 9 => 'EVO 4G',
2025
- 10 => 'Evo V 4G',
2026
- 11 => '(HW-|HUAWEI )?(ALE|ANE|D2|DAV|EML|EVA|FIG|G6|G7|GRA|M100|P2|P6|P7|PRA|RIO|SC|Sophia|VIE|VKY|VNS|VTR|WAS)!!',
2027
- 12 => '(EV|KM)-[ES][0-9]{3,3}!!',
2028
- 13 => 'Event',
2029
- 14 => 'EVERY35',
 
 
 
2030
  ),
2031
  '@EX' =>
2032
  array (
@@ -2102,9 +2334,10 @@ DeviceModels::$ANDROID_INDEX = array (
2102
  array (
2103
  0 => 'FIH-FB0',
2104
  1 => 'FIH-!!',
2105
- 2 => '(HW-|HUAWEI )?(ALE|ANE|D2|DAV|EML|EVA|FIG|G6|G7|GRA|M100|P2|P6|P7|PRA|RIO|SC|Sophia|VIE|VKY|VNS|VTR|WAS)!!',
2106
  3 => 'Find 5',
2107
  4 => 'FIND7',
 
2108
  ),
2109
  '@FJ' =>
2110
  array (
@@ -2141,7 +2374,7 @@ DeviceModels::$ANDROID_INDEX = array (
2141
  25 => 'Flylife!!',
2142
  26 => 'Fly Flylife Web 7.85 Slim',
2143
  27 => 'Flyer',
2144
- 28 => '(HW-|HUAWEI )?(DRA|FLA|TIT|TAG|NCE|TRT|SLA)!!',
2145
  29 => 'Flair E1',
2146
  30 => 'Flair E2',
2147
  31 => 'FlairE3',
@@ -2183,11 +2416,13 @@ DeviceModels::$ANDROID_INDEX = array (
2183
  0 => 'FP1',
2184
  1 => 'FP1U',
2185
  2 => 'FP2',
 
 
2186
  ),
2187
  '@FR' =>
2188
  array (
2189
  0 => 'Freelander I20',
2190
- 1 => '(HW-|HUAWEI |HONOR )?(ATH|BLN|BKL|BND|CHE|CHM|COL|DUA|DUK|DLI|EDI|FRD|HN3|H30|H60|HOL|JMM|KIW|LLD|NEM|NMO|PE|PLK|RNE|SCL|KNT|CAM|STF|HDN)!!',
2191
  2 => '(MODECOM )?FreeTAB!!',
2192
  ),
2193
  '@FS' =>
@@ -2196,6 +2431,7 @@ DeviceModels::$ANDROID_INDEX = array (
2196
  1 => 'FS407',
2197
  2 => 'FS451',
2198
  3 => 'FS514',
 
2199
  ),
2200
  '@FT' =>
2201
  array (
@@ -2268,11 +2504,11 @@ DeviceModels::$ANDROID_INDEX = array (
2268
  ),
2269
  '@G6' =>
2270
  array (
2271
- 0 => '(HW-|HUAWEI )?(ALE|ANE|D2|DAV|EML|EVA|FIG|G6|G7|GRA|M100|P2|P6|P7|PRA|RIO|SC|Sophia|VIE|VKY|VNS|VTR|WAS)!!',
2272
  ),
2273
  '@G7' =>
2274
  array (
2275
- 0 => '(HW-|HUAWEI )?(ALE|ANE|D2|DAV|EML|EVA|FIG|G6|G7|GRA|M100|P2|P6|P7|PRA|RIO|SC|Sophia|VIE|VKY|VNS|VTR|WAS)!!',
2276
  ),
2277
  '@G9' =>
2278
  array (
@@ -2439,18 +2675,22 @@ DeviceModels::$ANDROID_INDEX = array (
2439
  ),
2440
  '@GM' =>
2441
  array (
2442
- 0 => 'Gm Discovery',
2443
- 1 => 'GM Discovery II',
2444
- 2 => 'GM Discovery II+',
2445
- 3 => 'GM FOX',
2446
- 4 => 'GM Ultimate Slim',
2447
- 5 => 'GM 5',
2448
- 6 => 'GM 5 d',
2449
- 7 => 'GM 5 Plus',
2450
- 8 => 'GM 5 Plus d',
2451
- 9 => 'GM 6',
2452
- 10 => 'GM 6 d',
2453
- 11 => 'GM Discovery tab 8',
 
 
 
 
2454
  ),
2455
  '@GN' =>
2456
  array (
@@ -2526,23 +2766,22 @@ DeviceModels::$ANDROID_INDEX = array (
2526
  10 => '(Google )?Nexus ?9!',
2527
  11 => '(Google )?Nexus ?10!',
2528
  12 => 'Google Pixel',
2529
- 13 => 'Google Pixel XL',
2530
- 14 => 'Google Pixel 2',
2531
- 15 => 'Google Pixel 2XL',
2532
- 16 => 'Google Chromebook Pixel (2015)',
2533
- 17 => 'google cube',
2534
- 18 => 'GOCL!!',
2535
- 19 => 'GO Live!!',
2536
- 20 => 'GOOPHONE!!',
2537
- 21 => 'GO !!',
2538
- 22 => 'GOA',
2539
- 23 => 'GO504',
2540
- 24 => 'GO778',
2541
- 25 => 'GO960',
2542
- 26 => 'GO963',
2543
- 27 => 'GO980',
2544
- 28 => 'GO984',
2545
- 29 => 'Gomobile GO1001',
2546
  ),
2547
  '@GP' =>
2548
  array (
@@ -2560,7 +2799,7 @@ DeviceModels::$ANDROID_INDEX = array (
2560
  array (
2561
  0 => 'Grouper',
2562
  1 => 'GR-TB!!',
2563
- 2 => '(HW-|HUAWEI )?(ALE|ANE|D2|DAV|EML|EVA|FIG|G6|G7|GRA|M100|P2|P6|P7|PRA|RIO|SC|Sophia|VIE|VKY|VNS|VTR|WAS)!!',
2564
  3 => 'greenridge',
2565
  4 => 'Graphos A10',
2566
  5 => '(ZTE )?(Grand|Mimosa)!!',
@@ -2569,8 +2808,17 @@ DeviceModels::$ANDROID_INDEX = array (
2569
  array (
2570
  0 => 'GS01',
2571
  1 => '(Gsmart|Gigabyte|Rio)!!',
2572
- 2 => 'GS02',
2573
- 3 => 'GS03',
 
 
 
 
 
 
 
 
 
2574
  ),
2575
  '@GT' =>
2576
  array (
@@ -2610,7 +2858,8 @@ DeviceModels::$ANDROID_INDEX = array (
2610
  ),
2611
  '@GX' =>
2612
  array (
2613
- 0 => 'GX1210V TV',
 
2614
  ),
2615
  '@H1' =>
2616
  array (
@@ -2622,11 +2871,11 @@ DeviceModels::$ANDROID_INDEX = array (
2622
  ),
2623
  '@H3' =>
2624
  array (
2625
- 0 => '(HW-|HUAWEI |HONOR )?(ATH|BLN|BKL|BND|CHE|CHM|COL|DUA|DUK|DLI|EDI|FRD|HN3|H30|H60|HOL|JMM|KIW|LLD|NEM|NMO|PE|PLK|RNE|SCL|KNT|CAM|STF|HDN)!!',
2626
  ),
2627
  '@H6' =>
2628
  array (
2629
- 0 => '(HW-|HUAWEI |HONOR )?(ATH|BLN|BKL|BND|CHE|CHM|COL|DUA|DUK|DLI|EDI|FRD|HN3|H30|H60|HOL|JMM|KIW|LLD|NEM|NMO|PE|PLK|RNE|SCL|KNT|CAM|STF|HDN)!!',
2630
  ),
2631
  '@H7' =>
2632
  array (
@@ -2653,13 +2902,21 @@ DeviceModels::$ANDROID_INDEX = array (
2653
  1 => '(Haier[- ])?H[ETW]- ?[A-Z][0-9]!!',
2654
  2 => 'Haier-W700',
2655
  3 => 'Haier-SY0880',
2656
- 4 => 'Hasee E50 S1',
2657
- 5 => 'Hasee H45 T2',
2658
- 6 => 'Hasee W50 T2',
2659
- 7 => 'Hasee-X50TS',
2660
- 8 => 'HannsComb',
2661
- 9 => 'Hannspadd',
2662
- 10 => 'Hayabusa',
 
 
 
 
 
 
 
 
2663
  ),
2664
  '@HB' =>
2665
  array (
@@ -2672,7 +2929,9 @@ DeviceModels::$ANDROID_INDEX = array (
2672
  0 => 'HD2',
2673
  1 => 'HD2 LEO',
2674
  2 => 'HD7 Pro',
2675
- 3 => '(HW-|HUAWEI |HONOR )?(ATH|BLN|BKL|BND|CHE|CHM|COL|DUA|DUK|DLI|EDI|FRD|HN3|H30|H60|HOL|JMM|KIW|LLD|NEM|NMO|PE|PLK|RNE|SCL|KNT|CAM|STF|HDN)!!',
 
 
2676
  ),
2677
  '@HE' =>
2678
  array (
@@ -2708,23 +2967,26 @@ DeviceModels::$ANDROID_INDEX = array (
2708
  '@HL' =>
2709
  array (
2710
  0 => 'HLV-T!!',
 
2711
  ),
2712
  '@HM' =>
2713
  array (
2714
- 0 => 'HMP8100 ATV 93',
2715
- 1 => 'HMP8100 ATV INT',
2716
- 2 => '(Xiaomi )?(Redmi|RedRice|HM)!!',
2717
- 3 => '(Xiaomi )?(Redmi|HM)[ \\-]?Note!!',
2718
- 4 => '(Xiaomi |HM)?20!!',
 
 
2719
  ),
2720
  '@HN' =>
2721
  array (
2722
- 0 => '(HW-|HUAWEI |HONOR )?(ATH|BLN|BKL|BND|CHE|CHM|COL|DUA|DUK|DLI|EDI|FRD|HN3|H30|H60|HOL|JMM|KIW|LLD|NEM|NMO|PE|PLK|RNE|SCL|KNT|CAM|STF|HDN)!!',
2723
  ),
2724
  '@HO' =>
2725
  array (
2726
  0 => 'HOSIN!!',
2727
- 1 => '(HW-|HUAWEI |HONOR )?(ATH|BLN|BKL|BND|CHE|CHM|COL|DUA|DUK|DLI|EDI|FRD|HN3|H30|H60|HOL|JMM|KIW|LLD|NEM|NMO|PE|PLK|RNE|SCL|KNT|CAM|STF|HDN)!!',
2728
  2 => 'Honor3c2G-T',
2729
  3 => 'Honor Bee',
2730
  4 => 'HOMESYNCT2WIFI',
@@ -2737,6 +2999,10 @@ DeviceModels::$ANDROID_INDEX = array (
2737
  3 => 'HP-TouchPad',
2738
  4 => '(HP )?Touchpad!',
2739
  ),
 
 
 
 
2740
  '@HS' =>
2741
  array (
2742
  0 => 'HS-[0-9]{1,2}DTB!!',
@@ -2781,53 +3047,61 @@ DeviceModels::$ANDROID_INDEX = array (
2781
  6 => 'Huawei MediaPad T1 10 4G',
2782
  7 => '(Huawei )?[MSTX](1|2|7|8|10)\\-[A-Z0-9][0-9]{2,2}!!',
2783
  8 => 'HUAWEI GEM-703L',
2784
- 9 => '(HUAWEI )?(ALP|BLA|CRR|LON|MATE|MHA|MT1|MT2|MT7|M200|NXT|Z100)!!',
2785
- 10 => '(HW-|HUAWEI )?(DRA|FLA|TIT|TAG|NCE|TRT|SLA)!!',
2786
- 11 => '(HW-|HUAWEI |HONOR )?(ATH|BLN|BKL|BND|CHE|CHM|COL|DUA|DUK|DLI|EDI|FRD|HN3|H30|H60|HOL|JMM|KIW|LLD|NEM|NMO|PE|PLK|RNE|SCL|KNT|CAM|STF|HDN)!!',
2787
  12 => '(HW-|HUAWEI )?(BLL|CHC|TAG|KII)!!',
2788
- 13 => '(HW-|HUAWEI )?(ALE|ANE|D2|DAV|EML|EVA|FIG|G6|G7|GRA|M100|P2|P6|P7|PRA|RIO|SC|Sophia|VIE|VKY|VNS|VTR|WAS)!!',
2789
  14 => 'HUAWEI A168-(AL10|DL09|L09|L29)!',
2790
- 15 => '(HW-|HUAWEI )?(CRO|LUA|CUN|SCC|SCU|CAM|LDN|LYO|MYA)!!',
2791
  16 => '(HW-|HUAWEI )?CAZ-(AL10|TL10|TL20)!',
2792
  17 => '(HW-|HUAWEI )?CAN-(L01|L11|L12)!',
2793
  18 => '(HW-|HUAWEI )?MLA-(L01|L03|L11|L12|L13)!',
2794
  19 => '(HW-|HUAWEI )?DIG-(AL00|L01|L03|L21|TL10)!',
2795
- 20 => '(HW-|HUAWEI )?BAC-(AL00|L03|L21|L22|TL00)!',
2796
- 21 => '(HW-|HUAWEI )?HWI-(AL00|TL00)!',
2797
- 22 => '(HW-|HUAWEI )?MLA-(AL00|AL10)!',
2798
- 23 => '(HW-|HUAWEI )?MLA-(TL00|TL10|UL00)!',
2799
- 24 => 'Huawei P7 mini',
2800
- 25 => 'Huawei P8max',
2801
- 26 => '(Huawei|Ascend|HW-)!!',
2802
- 27 => 'HUAWEI Honor 3c w',
2803
- 28 => 'Huawei S7',
2804
- 29 => 'Hudl HT7S3',
2805
- 30 => 'Hudl 2',
2806
- 31 => 'HUAWEI U8686',
2807
- 32 => 'Huawei 858',
 
 
 
 
2808
  ),
2809
  '@HW' =>
2810
  array (
2811
- 0 => '(HW-|HUAWEI )?(DRA|FLA|TIT|TAG|NCE|TRT|SLA)!!',
2812
- 1 => '(HW-|HUAWEI |HONOR )?(ATH|BLN|BKL|BND|CHE|CHM|COL|DUA|DUK|DLI|EDI|FRD|HN3|H30|H60|HOL|JMM|KIW|LLD|NEM|NMO|PE|PLK|RNE|SCL|KNT|CAM|STF|HDN)!!',
2813
  2 => '(HW-|HUAWEI )?(BLL|CHC|TAG|KII)!!',
2814
- 3 => '(HW-|HUAWEI )?(ALE|ANE|D2|DAV|EML|EVA|FIG|G6|G7|GRA|M100|P2|P6|P7|PRA|RIO|SC|Sophia|VIE|VKY|VNS|VTR|WAS)!!',
2815
- 4 => '(HW-|HUAWEI )?(CRO|LUA|CUN|SCC|SCU|CAM|LDN|LYO|MYA)!!',
2816
  5 => '(HW-|HUAWEI )?CAZ-(AL10|TL10|TL20)!',
2817
  6 => '(HW-|HUAWEI )?CAN-(L01|L11|L12)!',
2818
  7 => '(HW-|HUAWEI )?MLA-(L01|L03|L11|L12|L13)!',
2819
  8 => '(HW-|HUAWEI )?DIG-(AL00|L01|L03|L21|TL10)!',
2820
- 9 => '(HW-|HUAWEI )?BAC-(AL00|L03|L21|L22|TL00)!',
2821
- 10 => '(HW-|HUAWEI )?HWI-(AL00|TL00)!',
2822
- 11 => '(HW-|HUAWEI )?MLA-(AL00|AL10)!',
2823
- 12 => '(HW-|HUAWEI )?MLA-(TL00|TL10|UL00)!',
2824
- 13 => '(Huawei|Ascend|HW-)!!',
2825
- 14 => 'hwu8812D',
2826
- 15 => 'HW-01E',
2827
- 16 => 'HW-01K',
2828
- 17 => 'HW-03E',
2829
- 18 => 'HWT31',
2830
- 19 => 'HWV32',
 
 
 
 
2831
  ),
2832
  '@HY' =>
2833
  array (
@@ -2849,6 +3123,20 @@ DeviceModels::$ANDROID_INDEX = array (
2849
  3 => 'i-Call 504',
2850
  4 => '(i-mobile|i-style|IQ)!!',
2851
  ),
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2852
  '@I1' =>
2853
  array (
2854
  0 => 'I110',
@@ -2951,22 +3239,25 @@ DeviceModels::$ANDROID_INDEX = array (
2951
  7 => 'Incredible ?2!',
2952
  8 => 'Incredible 4G LTE',
2953
  9 => 'Inspire 4G',
2954
- 10 => 'INFOBAR!!',
2955
- 11 => 'Infinix!!',
2956
- 12 => 'IN[0-9]{3,3}!!',
2957
- 13 => 'Infocus!!',
2958
- 14 => 'INHON PAPILIO G1',
2959
- 15 => 'intki E86',
2960
- 16 => 'Innos!!',
2961
- 17 => '(Intex )?Aqua!!',
2962
- 18 => '(Intex )?Cloud!!',
2963
- 19 => 'INTEX IRIS-II',
2964
- 20 => 'INQ Cloud Touch',
2965
- 21 => 'INQ Mayfair (EU)',
2966
- 22 => '(iNote|itel)!!',
2967
- 23 => 'Infinity',
2968
- 24 => 'Internet TV',
2969
- 25 => 'Internet TV Box',
 
 
 
2970
  ),
2971
  '@IO' =>
2972
  array (
@@ -2993,21 +3284,22 @@ DeviceModels::$ANDROID_INDEX = array (
2993
  0 => 'IS11CA',
2994
  1 => 'ISW?[0-9]{2,2}F!!',
2995
  2 => 'ISW[0-9]{2,2}HT!!',
2996
- 3 => 'ISW11K',
2997
- 4 => 'IS11LG',
2998
- 5 => 'ISW11M',
2999
- 6 => 'IS12M',
3000
- 7 => 'IS11N',
3001
- 8 => 'IS06',
3002
- 9 => 'IS11PT',
3003
- 10 => 'IS703C',
3004
- 11 => 'IS801C',
3005
- 12 => 'ISW11SC',
3006
- 13 => 'IS0[0-9]!!',
3007
- 14 => 'ISW?1[0-9]SH!!',
3008
- 15 => 'IS[0-9]{2,2}S!!',
3009
- 16 => 'IS04',
3010
- 17 => 'IS11T',
 
3011
  ),
3012
  '@IT' =>
3013
  array (
@@ -3023,6 +3315,7 @@ DeviceModels::$ANDROID_INDEX = array (
3023
  '@IV' =>
3024
  array (
3025
  0 => 'IVIO!!',
 
3026
  ),
3027
  '@IW' =>
3028
  array (
@@ -3036,8 +3329,9 @@ DeviceModels::$ANDROID_INDEX = array (
3036
  ),
3037
  '@JA' =>
3038
  array (
3039
- 0 => 'Jaguar3',
3040
- 1 => 'Jaguar7',
 
3041
  ),
3042
  '@JC' =>
3043
  array (
@@ -3048,6 +3342,12 @@ DeviceModels::$ANDROID_INDEX = array (
3048
  '@JD' =>
3049
  array (
3050
  0 => 'JDN-W09',
 
 
 
 
 
 
3051
  ),
3052
  '@JI' =>
3053
  array (
@@ -3058,9 +3358,17 @@ DeviceModels::$ANDROID_INDEX = array (
3058
  array (
3059
  0 => 'JJ5S+',
3060
  ),
 
 
 
 
3061
  '@JM' =>
3062
  array (
3063
- 0 => '(HW-|HUAWEI |HONOR )?(ATH|BLN|BKL|BND|CHE|CHM|COL|DUA|DUK|DLI|EDI|FRD|HN3|H30|H60|HOL|JMM|KIW|LLD|NEM|NMO|PE|PLK|RNE|SCL|KNT|CAM|STF|HDN)!!',
 
 
 
 
3064
  ),
3065
  '@JO' =>
3066
  array (
@@ -3068,6 +3376,10 @@ DeviceModels::$ANDROID_INDEX = array (
3068
  1 => 'Joy',
3069
  2 => 'JOIN',
3070
  ),
 
 
 
 
3071
  '@JT' =>
3072
  array (
3073
  0 => 'JT SmartPC02',
@@ -3134,6 +3446,10 @@ DeviceModels::$ANDROID_INDEX = array (
3134
  2 => 'K30-W',
3135
  3 => 'K3 Note',
3136
  ),
 
 
 
 
3137
  '@K8' =>
3138
  array (
3139
  0 => '(CUBE ?)?(K8|U1|U2|U3|U5|U6|U8|U9)[0-9]?GT!!',
@@ -3154,6 +3470,7 @@ DeviceModels::$ANDROID_INDEX = array (
3154
  '@KB' =>
3155
  array (
3156
  0 => 'KB901',
 
3157
  ),
3158
  '@KC' =>
3159
  array (
@@ -3186,15 +3503,20 @@ DeviceModels::$ANDROID_INDEX = array (
3186
  14 => 'KFGIWI',
3187
  15 => 'KFDOWI',
3188
  16 => 'KFSUWI',
 
 
 
3189
  ),
3190
  '@KI' =>
3191
  array (
3192
  0 => 'Kindle Fire',
3193
- 1 => '(HW-|HUAWEI |HONOR )?(ATH|BLN|BKL|BND|CHE|CHM|COL|DUA|DUK|DLI|EDI|FRD|HN3|H30|H60|HOL|JMM|KIW|LLD|NEM|NMO|PE|PLK|RNE|SCL|KNT|CAM|STF|HDN)!!',
3194
- 2 => '(HW-|HUAWEI )?(BLL|CHC|TAG|KII)!!',
3195
- 3 => 'KIOTO 793',
3196
- 4 => 'KITE',
3197
- 5 => '(ZTE )?Kis!!',
 
 
3198
  ),
3199
  '@KM' =>
3200
  array (
@@ -3202,19 +3524,20 @@ DeviceModels::$ANDROID_INDEX = array (
3202
  ),
3203
  '@KN' =>
3204
  array (
3205
- 0 => '(HW-|HUAWEI |HONOR )?(ATH|BLN|BKL|BND|CHE|CHM|COL|DUA|DUK|DLI|EDI|FRD|HN3|H30|H60|HOL|JMM|KIW|LLD|NEM|NMO|PE|PLK|RNE|SCL|KNT|CAM|STF|HDN)!!',
3206
  ),
3207
  '@KO' =>
3208
  array (
3209
  0 => 'Konka Amber3',
3210
  1 => 'KOB-(L09|W09)!',
3211
- 2 => '(KATBL|Kogan|Agora)!!',
3212
- 3 => 'KOMU!!',
3213
- 4 => 'KONKA!!',
3214
- 5 => 'koobee-T550',
3215
- 6 => 'Koobe!!',
3216
- 7 => 'KORIDY H15',
3217
- 8 => 'KORIDY H16',
 
3218
  ),
3219
  '@KP' =>
3220
  array (
@@ -3223,7 +3546,12 @@ DeviceModels::$ANDROID_INDEX = array (
3223
  ),
3224
  '@KS' =>
3225
  array (
3226
- 0 => 'KSP8000',
 
 
 
 
 
3227
  ),
3228
  '@KU' =>
3229
  array (
@@ -3261,35 +3589,37 @@ DeviceModels::$ANDROID_INDEX = array (
3261
  '@LA' =>
3262
  array (
3263
  0 => 'LA-!!',
3264
- 1 => '(Lanix )?(Ilium|llium)!!',
3265
- 2 => 'Lark!!',
3266
- 3 => 'LAVA iris 351',
3267
- 4 => 'LAVA iRIS 504q',
3268
- 5 => 'LAVA A1',
3269
- 6 => 'Lava A89',
3270
- 7 => 'LAVA R1',
3271
- 8 => 'LAVA R1s',
3272
- 9 => 'LAVA S12',
3273
- 10 => 'LAVA V5',
3274
- 11 => 'LAP250U',
3275
- 12 => 'LAP255U',
3276
- 13 => 'LaVieTab!!',
3277
- 14 => 'land',
3278
- 15 => 'LA-I Dual core',
3279
- 16 => 'LA-M3',
3280
- 17 => 'LA1-L',
3281
- 18 => 'LA2-E',
3282
- 19 => 'LA2-E1',
3283
- 20 => 'LA2-L',
3284
- 21 => 'LA2-T',
3285
- 22 => 'LA2-T1',
3286
- 23 => 'LA2-S',
3287
- 24 => 'LA2-SN',
3288
- 25 => 'LA2-W',
3289
- 26 => 'LA2-W1',
3290
- 27 => 'LA3-W',
3291
- 28 => 'LA3S',
3292
- 29 => 'LA5-W',
 
 
3293
  ),
3294
  '@LC' =>
3295
  array (
@@ -3301,7 +3631,7 @@ DeviceModels::$ANDROID_INDEX = array (
3301
  ),
3302
  '@LD' =>
3303
  array (
3304
- 0 => '(HW-|HUAWEI )?(CRO|LUA|CUN|SCC|SCU|CAM|LDN|LYO|MYA)!!',
3305
  1 => 'LDK-ICK v1.4',
3306
  ),
3307
  '@LE' =>
@@ -3377,52 +3707,84 @@ DeviceModels::$ANDROID_INDEX = array (
3377
  68 => 'Lenovo YT3-X50F',
3378
  69 => 'Lenovo YT3-X50L',
3379
  70 => 'Lenovo YT3-850F',
3380
- 71 => 'Lenovo YT-X703F',
3381
- 72 => 'Lenovo YT3-X90F',
3382
- 73 => 'Lenovo YT3-X90L',
3383
- 74 => '(Lenovo )?(Tab ?)?(2 ?)?[AS](7|8|10)!!',
3384
- 75 => 'Lenovo TB-7304F',
3385
- 76 => 'Lenovo TB-X103F',
3386
- 77 => 'Lenovo TB2-X30F',
3387
- 78 => 'Lenovo TB2-X30L',
3388
- 79 => 'Lenovo TB3-730X',
3389
- 80 => 'Lenovo TB3-710F',
3390
- 81 => 'Lenovo TB3-710I',
3391
- 82 => 'Lenovo TB-7703X',
3392
- 83 => 'Lenovo TB3-850F',
3393
- 84 => 'Lenovo TB3-850M',
3394
- 85 => 'Lenovo TB3-X70F',
3395
- 86 => 'Lenovo TB3-X70L',
3396
- 87 => 'Lenovo TB-8504F',
3397
- 88 => 'Lenovo TB-8703F',
3398
- 89 => 'Lenovo TB-8704F',
3399
- 90 => 'Lenovo TB-X304F',
3400
- 91 => 'Lenovo TB-X704F',
3401
- 92 => 'Lenovo TB-X704L',
3402
- 93 => '(Lenovo ?)?(IdeaTab ?)?[KSV][0-9]{4,4}!!',
3403
- 94 => 'Lenovo Pad A4',
3404
- 95 => 'Lenovo',
3405
- 96 => 'lepad 001b',
3406
- 97 => 'lepad 001n',
3407
- 98 => '(Lenovo |Lephone )?3GC101!',
3408
- 99 => '(Lenovo |Lephone )?3GW100!',
3409
- 100 => '(Lenovo |Lephone )?3GW101!',
3410
- 101 => '(Lenovo )?S1[- ]37AH0!',
3411
- 102 => '(Lenovo )?S2[- ]38A(H0|T0)!',
3412
- 103 => 'Lenovo!!',
3413
- 104 => 'LenovoTV 40S9',
3414
- 105 => 'LenovoTV 50S52',
3415
- 106 => 'Lenovo Z2',
3416
- 107 => '(BLF-)?lephone!!',
3417
- 108 => 'Le Pan Mini',
3418
- 109 => 'Le Pan TC802A',
3419
- 110 => 'Le Pan TC1010',
3420
- 111 => 'Le Pan TC1020',
3421
- 112 => 'LePanII',
3422
- 113 => 'Le Pan S',
3423
- 114 => 'LENNY',
3424
- 115 => 'LENNY2',
3425
- 116 => 'LENNY3',
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3426
  ),
3427
  '@LG' =>
3428
  array (
@@ -3441,95 +3803,138 @@ DeviceModels::$ANDROID_INDEX = array (
3441
  12 => 'LG-DS1203',
3442
  13 => 'LG-?E[0-9]{3,3}!!',
3443
  14 => 'LG-F[0-9]{3,3}!!',
3444
- 15 => 'LG-GT540!',
3445
- 16 => 'LG-GW620!',
3446
- 17 => 'LG-H[0-9]{3,3}!!',
3447
- 18 => 'LG-K[0-9]{3,3}!!',
3448
- 19 => 'LG-KH5200',
3449
- 20 => 'LG-KS1024',
3450
- 21 => 'LG-KU[0-9]{4,4}!!',
3451
- 22 => 'LG-?L[0-9]{2,3}[A-Z]!!',
3452
- 23 => 'LG-LG[0-9]{3,3}!!',
3453
- 24 => 'LGLK430',
3454
- 25 => 'LG-LK460',
3455
- 26 => 'LG-?LS[0-9]{3,3}!!',
3456
- 27 => 'LG-LU[0-9]{4,4}!!',
3457
- 28 => 'LG-LW690',
3458
- 29 => 'LG-LW770',
3459
- 30 => 'LG-M[0-9]{3,3}!!',
3460
- 31 => 'LG-?MS[0-9]{3,3}!!',
3461
- 32 => 'LGMP260',
3462
- 33 => 'LG-P[0-9]{3,3}!!',
3463
- 34 => 'LG-SU[0-9]{3,3}!!',
3464
- 35 => 'LG-T480!',
3465
- 36 => 'LG-T540!',
3466
- 37 => 'LG-TP260',
3467
- 38 => 'LG-TP450',
3468
- 39 => 'LG-SU-760',
3469
- 40 => 'LGUK410',
3470
- 41 => 'LG-UK495',
3471
- 42 => 'LGUK750',
3472
- 43 => 'LGUK932',
3473
- 44 => 'LG-UN350',
3474
- 45 => 'LG-?US[0-9]{3,3}!!',
3475
- 46 => 'LG-V[0-9]{3,3}!!',
3476
- 47 => 'LG-VK[0-9]{3,3}!!',
3477
- 48 => 'LG-VN[0-9]{3,3}!!',
3478
- 49 => 'LG-VM[0-9]{3,3}!!',
3479
- 50 => 'LG-VS[0-9]{3,3}!!',
3480
- 51 => 'LG-X[0-9]{3,3}!!',
3481
- 52 => 'LGM-[GKVX][0-9]{3,3}!!',
3482
- 53 => 'LGMP450',
3483
- 54 => 'lge-F160!',
3484
- 55 => 'LGE-E988!',
3485
- 56 => 'lgp-970',
3486
- 57 => 'LG[LSTV][0-9]{2,2}!!',
3487
- 58 => 'LG!!',
3488
- 59 => 'LG-Google TV!!',
3489
- 60 => 'LG-ANDROID MINI BOX',
3490
- 61 => 'LG-P999',
3491
- 62 => 'LG-E739',
3492
- 63 => 'LG-C800',
 
 
 
 
3493
  ),
3494
  '@LI' =>
3495
  array (
3496
  0 => 'Liquid!!',
3497
  1 => '(BLU|DASH|LIFE|NEO|STUDIO|VIVO)!!',
3498
  2 => 'Liberty',
3499
- 3 => '(MEDION|(MD )?LIFETAB)!!',
3500
- 4 => 'Life',
3501
- 5 => 'Liberty Tab G100',
3502
- 6 => 'Live ?With ?Walkman!',
3503
- 7 => 'libra',
3504
- 8 => 'lithium',
3505
- 9 => 'Light Tab',
3506
- 10 => 'Light Tab 2',
3507
- 11 => 'Light Tab 2W',
 
3508
  ),
3509
  '@LL' =>
3510
  array (
3511
- 0 => '(HW-|HUAWEI |HONOR )?(ATH|BLN|BKL|BND|CHE|CHM|COL|DUA|DUK|DLI|EDI|FRD|HN3|H30|H60|HOL|JMM|KIW|LLD|NEM|NMO|PE|PLK|RNE|SCL|KNT|CAM|STF|HDN)!!',
3512
  1 => '(Lanix )?(Ilium|llium)!!',
3513
  ),
3514
  '@LM' =>
3515
  array (
3516
- 0 => 'LM-G710!',
3517
- 1 => 'LM-G715!',
3518
- 2 => 'LM-Q610!',
3519
- 3 => 'LM-Q710!',
3520
- 4 => 'LM-V350!',
3521
- 5 => 'LM-X210!',
3522
- 6 => 'LM-X410!',
3523
- 7 => 'LM-X415!',
3524
- 8 => 'LM-X510!',
3525
- 9 => 'LM-Y110!',
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3526
  ),
3527
  '@LO' =>
3528
  array (
3529
  0 => 'LogicPD Zoom2',
3530
- 1 => '(HUAWEI )?(ALP|BLA|CRR|LON|MATE|MHA|MT1|MT2|MT7|M200|NXT|Z100)!!',
3531
  2 => 'Loox',
3532
  ),
 
 
 
 
3533
  '@LS' =>
3534
  array (
3535
  0 => 'LS670',
@@ -3584,7 +3989,7 @@ DeviceModels::$ANDROID_INDEX = array (
3584
  1 => 'LUXURY 3',
3585
  2 => 'LUXURY 4',
3586
  3 => 'LUXURY 5',
3587
- 4 => '(HW-|HUAWEI )?(CRO|LUA|CUN|SCC|SCU|CAM|LDN|LYO|MYA)!!',
3588
  5 => 'Lucky Ultra Sonic U8650',
3589
  6 => 'LU2300',
3590
  7 => 'Lumia800',
@@ -3600,9 +4005,10 @@ DeviceModels::$ANDROID_INDEX = array (
3600
  ),
3601
  '@LY' =>
3602
  array (
3603
- 0 => '(HW-|HUAWEI )?(CRO|LUA|CUN|SCC|SCU|CAM|LDN|LYO|MYA)!!',
3604
- 1 => 'LYF LS-4006',
3605
- 2 => 'LYF LS-5009',
 
3606
  ),
3607
  '@M' =>
3608
  array (
@@ -3633,21 +4039,61 @@ DeviceModels::$ANDROID_INDEX = array (
3633
  '@M1' =>
3634
  array (
3635
  0 => 'M19',
3636
- 1 => '(HW-|HUAWEI )?(ALE|ANE|D2|DAV|EML|EVA|FIG|G6|G7|GRA|M100|P2|P6|P7|PRA|RIO|SC|Sophia|VIE|VKY|VNS|VTR|WAS)!!',
3637
  2 => 'M1050S',
3638
  3 => 'M1',
3639
  4 => 'm1 metal',
3640
  5 => 'm1 note',
3641
  6 => 'M1001',
3642
  7 => 'M12',
 
3643
  ),
3644
  '@M2' =>
3645
  array (
3646
- 0 => '(HUAWEI )?(ALP|BLA|CRR|LON|MATE|MHA|MT1|MT2|MT7|M200|NXT|Z100)!!',
3647
  1 => 'M210',
3648
  2 => 'm2 note',
3649
  3 => 'm2',
3650
  4 => 'M2mini',
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3651
  ),
3652
  '@M3' =>
3653
  array (
@@ -3673,6 +4119,8 @@ DeviceModels::$ANDROID_INDEX = array (
3673
  2 => 'M470BSE',
3674
  3 => 'M4',
3675
  4 => 'M4(TEL)? SS[0-9]{3,4}!!',
 
 
3676
  ),
3677
  '@M5' =>
3678
  array (
@@ -3731,18 +4179,21 @@ DeviceModels::$ANDROID_INDEX = array (
3731
  2 => 'manta',
3732
  3 => '(bq|Aquaris|Edison|Maxwell)!!',
3733
  4 => '(DNS )?(Airtab )?(E|ES|M|MA|MC|MF|MW|P|PC|PF)[0-9]{2,4}!!',
3734
- 5 => '(HUAWEI )?(ALP|BLA|CRR|LON|MATE|MHA|MT1|MT2|MT7|M200|NXT|Z100)!!',
3735
- 6 => 'MAX FIND 5.0',
3736
- 7 => 'Malata!!',
3737
- 8 => 'Masstel!!',
3738
- 9 => 'MASTONE!!',
3739
- 10 => 'Maxtron!!',
3740
- 11 => 'magi',
3741
- 12 => 'MagicBox',
3742
- 13 => '(Xiaomi )?(MI )?MAX$!',
3743
- 14 => '(Xiaomi )?(MI )?MAX 2$!',
3744
- 15 => 'markf',
3745
- 16 => 'markw',
 
 
 
3746
  ),
3747
  '@MB' =>
3748
  array (
@@ -3757,9 +4208,10 @@ DeviceModels::$ANDROID_INDEX = array (
3757
  array (
3758
  0 => 'MC002',
3759
  1 => '(DNS )?(Airtab )?(E|ES|M|MA|MC|MF|MW|P|PC|PF)[0-9]{2,4}!!',
3760
- 2 => 'MC32N0',
3761
- 3 => 'MC40N0',
3762
- 4 => 'MC67NA',
 
3763
  ),
3764
  '@MD' =>
3765
  array (
@@ -3784,27 +4236,28 @@ DeviceModels::$ANDROID_INDEX = array (
3784
  13 => 'ME581CL',
3785
  14 => 'MeMO Pad 7',
3786
  15 => 'MediaPad!!',
3787
- 16 => 'Mediacom 810C',
3788
- 17 => '(MEDION|(MD )?LIFETAB)!!',
3789
- 18 => 'MEEG!!',
3790
- 19 => 'MEIZU E3',
3791
- 20 => 'meizu m1note',
3792
- 21 => 'MEIZU M5',
3793
- 22 => 'MEIZU M9',
3794
- 23 => 'MEIZU MX',
3795
- 24 => 'Meizu S6',
3796
- 25 => '(MEO )?Smart A!!',
3797
- 26 => 'MEU AN!!',
3798
- 27 => 'ME[0-9]{3,3}!!',
3799
- 28 => 'MEM02',
3800
- 29 => 'MegaFon SP-AI',
3801
- 30 => 'MegaFon SP-A3',
3802
- 31 => 'MegaFon SP-A5',
3803
- 32 => 'MegaFon SP-A10',
3804
- 33 => 'MegaFon V9',
3805
- 34 => 'MegaFon V9+',
3806
- 35 => 'MegaFon SIM+',
3807
- 36 => 'MegaFon Login 3',
 
3808
  ),
3809
  '@MF' =>
3810
  array (
@@ -3816,7 +4269,7 @@ DeviceModels::$ANDROID_INDEX = array (
3816
  '@MH' =>
3817
  array (
3818
  0 => 'MH350',
3819
- 1 => '(HUAWEI )?(ALP|BLA|CRR|LON|MATE|MHA|MT1|MT2|MT7|M200|NXT|Z100)!!',
3820
  ),
3821
  '@MI' =>
3822
  array (
@@ -3856,17 +4309,42 @@ DeviceModels::$ANDROID_INDEX = array (
3856
  33 => '(CSL[- ])?(Spice[- ]?)?Mi(-| )?[0-9]{3,3}!!',
3857
  34 => 'miTab!!',
3858
  35 => '(Xiaomi )?(Xiaomi|Xiaomi M|MI)!!',
3859
- 36 => '(Xiaomi|Xiaomi Mi|MI) Note!!',
3860
- 37 => '(Xiaomi )?(MI )?MAX$!',
3861
- 38 => '(Xiaomi )?(MI )?MAX 2$!',
3862
- 39 => '(Xiaomi )?(MI )?MIX$!',
3863
- 40 => '(Xiaomi )?(MI )?MIX 2$!',
3864
- 41 => '(Xiaomi )?(MI )?MIX 2S$!',
3865
- 42 => 'mido',
3866
- 43 => '(Xiaomi|Xiaomi Mi|MI) Pad!!',
3867
- 44 => '(Xiaomi|Xiaomi Mi|MI)Box!!',
3868
- 45 => '(Xiaomi|Xiaomi Mi|MI)TV!!',
3869
- 46 => '(ZTE )?(Grand|Mimosa)!!',
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3870
  ),
3871
  '@MK' =>
3872
  array (
@@ -3909,51 +4387,127 @@ DeviceModels::$ANDROID_INDEX = array (
3909
  13 => 'MOGU!!',
3910
  14 => 'moii!!',
3911
  15 => 'MORAL N01',
3912
- 16 => 'Moto Droid',
3913
- 17 => 'Motorola Pro XT610',
3914
- 18 => 'Motorola Milestone MAXX',
3915
- 19 => 'Motorola Backflip Me600',
3916
- 20 => 'Moto ME860',
3917
- 21 => 'Moto C',
3918
- 22 => 'Moto C Plus',
3919
- 23 => '(Moto)?E2$!',
3920
- 24 => '(Moto)?E2\\(4G-LTE\\)$!',
3921
- 25 => 'Motorola MotoE2!',
3922
- 26 => 'Moto E (4)',
3923
- 27 => 'Moto E (4) Plus',
3924
- 28 => 'moto e5 cruise',
3925
- 29 => '(Moto)?G3$!',
3926
- 30 => '(Moto)?G3-TE$!',
3927
- 31 => 'MOTOROLA MOTOG',
3928
- 32 => 'Moto G Play',
3929
- 33 => 'Moto G4',
3930
- 34 => 'Moto G (4)',
3931
- 35 => 'Moto G4 Plus',
3932
- 36 => 'Moto G (5)',
3933
- 37 => 'Moto G (5) Plus',
3934
- 38 => 'Moto G (5S) Plus',
3935
- 39 => 'moto g(6)',
3936
- 40 => 'moto g(6) plus',
3937
- 41 => 'Moto Z (2)',
3938
- 42 => 'Moto Z2 Play',
3939
- 43 => 'Moto X Pro',
3940
- 44 => 'moto x4',
3941
- 45 => 'Moto Backflip',
3942
- 46 => 'MOTOROLA XOOM MZ606',
3943
- 47 => 'MOTOROLA RAZR',
3944
- 48 => 'MOTWX435KT',
3945
- 49 => '(PLOYER-)?MOMO!!',
3946
- 50 => 'MOB-5045',
3947
- 51 => 'Mobii 7',
3948
- 52 => 'MoFing',
3949
- 53 => 'mocha',
3950
- 54 => 'MO-01J',
3951
- 55 => 'MO-01K',
3952
- 56 => 'Movistar Express',
3953
- 57 => 'Movistar Link',
3954
- 58 => 'Movistar Motion',
3955
- 59 => 'Movistar Prime',
3956
- 60 => 'MOVE',
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3957
  ),
3958
  '@MP' =>
3959
  array (
@@ -3977,6 +4531,10 @@ DeviceModels::$ANDROID_INDEX = array (
3977
  17 => 'MPQC804HD',
3978
  18 => 'MPQC1010',
3979
  ),
 
 
 
 
3980
  '@MS' =>
3981
  array (
3982
  0 => 'MStar Amber3',
@@ -4033,7 +4591,7 @@ DeviceModels::$ANDROID_INDEX = array (
4033
  28 => 'mt8580!',
4034
  29 => 'mt8658!',
4035
  30 => '(AC|BC|LC|MT|RC|QS|VM|TS|OC)[0-9]{4,4}[A-Z]!!',
4036
- 31 => '(HUAWEI )?(ALP|BLA|CRR|LON|MATE|MHA|MT1|MT2|MT7|M200|NXT|Z100)!!',
4037
  32 => 'MTC Android',
4038
  33 => 'MT791',
4039
  34 => 'MT70[0-9]{2,2}!!',
@@ -4087,7 +4645,7 @@ DeviceModels::$ANDROID_INDEX = array (
4087
  ),
4088
  '@MY' =>
4089
  array (
4090
- 0 => '(HW-|HUAWEI )?(CRO|LUA|CUN|SCC|SCU|CAM|LDN|LYO|MYA)!!',
4091
  1 => 'MyPhone A818g Duo',
4092
  2 => 'MyPhone A818 Slim Duo',
4093
  3 => 'MyPhone A848 Duo',
@@ -4244,7 +4802,7 @@ DeviceModels::$ANDROID_INDEX = array (
4244
  ),
4245
  '@NC' =>
4246
  array (
4247
- 0 => '(HW-|HUAWEI )?(DRA|FLA|TIT|TAG|NCE|TRT|SLA)!!',
4248
  ),
4249
  '@NE' =>
4250
  array (
@@ -4281,7 +4839,7 @@ DeviceModels::$ANDROID_INDEX = array (
4281
  30 => '(BLU|DASH|LIFE|NEO|STUDIO|VIVO)!!',
4282
  31 => 'NexusHD2',
4283
  32 => 'Nexus HD2',
4284
- 33 => '(HW-|HUAWEI |HONOR )?(ATH|BLN|BKL|BND|CHE|CHM|COL|DUA|DUK|DLI|EDI|FRD|HN3|H30|H60|HOL|JMM|KIW|LLD|NEM|NMO|PE|PLK|RNE|SCL|KNT|CAM|STF|HDN)!!',
4285
  34 => 'Neon7',
4286
  35 => 'Neon9',
4287
  36 => '(NetTab|NT-)!!',
@@ -4331,9 +4889,10 @@ DeviceModels::$ANDROID_INDEX = array (
4331
  80 => 'Next9P',
4332
  81 => 'Next10P12',
4333
  82 => 'NEXT',
4334
- 83 => 'New Andromax-i',
4335
- 84 => 'Neo V',
4336
- 85 => 'NEBULA6.9',
 
4337
  ),
4338
  '@NG' =>
4339
  array (
@@ -4372,7 +4931,7 @@ DeviceModels::$ANDROID_INDEX = array (
4372
  ),
4373
  '@NM' =>
4374
  array (
4375
- 0 => '(HW-|HUAWEI |HONOR )?(ATH|BLN|BKL|BND|CHE|CHM|COL|DUA|DUK|DLI|EDI|FRD|HN3|H30|H60|HOL|JMM|KIW|LLD|NEM|NMO|PE|PLK|RNE|SCL|KNT|CAM|STF|HDN)!!',
4376
  1 => '(NMP|MBR|XDK|XDS|XMP)\\-!!',
4377
  ),
4378
  '@NO' =>
@@ -4428,26 +4987,51 @@ DeviceModels::$ANDROID_INDEX = array (
4428
  48 => 'Nook HD',
4429
  49 => 'Nook HD+',
4430
  50 => 'Novapad!!',
4431
- 51 => 'Nova!!',
4432
- 52 => 'Now',
4433
- 53 => 'NO1 S6',
4434
- 54 => 'NOAIN!!',
4435
- 55 => 'Nokia N9',
4436
- 56 => 'Nokia N900',
4437
- 57 => 'Nokia X',
4438
- 58 => 'Nokia X Dual SIM',
4439
- 59 => 'Nokia X+',
4440
- 60 => 'Nokia Xplus',
4441
- 61 => 'Nokia XL 4G',
4442
- 62 => 'Nokia XL',
4443
- 63 => 'Nokia XL Dual SIM',
4444
- 64 => 'Nokia X2',
4445
- 65 => 'NokiaX2DS',
4446
- 66 => 'Notion Ink ADAM',
4447
- 67 => 'Note III',
4448
- 68 => 'Nozomi',
4449
- 69 => 'Noble TAB07-485',
4450
- 70 => '(QMobile|QTab|Q-Smart|Noir)!!',
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
4451
  ),
4452
  '@NP' =>
4453
  array (
@@ -4463,7 +5047,8 @@ DeviceModels::$ANDROID_INDEX = array (
4463
  ),
4464
  '@NT' =>
4465
  array (
4466
- 0 => '(NetTab|NT-)!!',
 
4467
  ),
4468
  '@NU' =>
4469
  array (
@@ -4481,7 +5066,7 @@ DeviceModels::$ANDROID_INDEX = array (
4481
  ),
4482
  '@NX' =>
4483
  array (
4484
- 0 => '(HUAWEI )?(ALP|BLA|CRR|LON|MATE|MHA|MT1|MT2|MT7|M200|NXT|Z100)!!',
4485
  1 => '(Nexian )?NX-A[0-9]{3,3}!!',
4486
  2 => 'NXA8QC116',
4487
  3 => 'NX16A8116K',
@@ -4515,8 +5100,12 @@ DeviceModels::$ANDROID_INDEX = array (
4515
  '@OB' =>
4516
  array (
4517
  0 => 'OB-OPPO A31c',
4518
- 1 => 'OB-OPPO 3005',
4519
- 2 => 'Obreey SURFpad',
 
 
 
 
4520
  ),
4521
  '@OC' =>
4522
  array (
@@ -4692,34 +5281,40 @@ DeviceModels::$ANDROID_INDEX = array (
4692
  121 => 'One V',
4693
  122 => 'One',
4694
  123 => 'One M7',
4695
- 124 => 'one m8',
4696
- 125 => 'One A0001',
4697
- 126 => 'OnePlus One',
4698
- 127 => 'OnePlus One A0001',
4699
- 128 => 'ONE A2001',
4700
- 129 => 'ONE A2003',
4701
- 130 => 'ONE A2005',
4702
- 131 => 'OnePlus2',
4703
- 132 => 'ONE A3000',
4704
- 133 => 'ONE A3003',
4705
- 134 => 'ONEPLUS A3000',
4706
- 135 => 'ONEPLUS A3003',
4707
- 136 => 'OnePlus3',
4708
- 137 => 'ONEPLUS A3010',
4709
- 138 => 'ONEPLUS A5000',
4710
- 139 => 'ONEPLUS A5010',
4711
- 140 => 'ONEPLUS A6000',
4712
- 141 => 'ONE E1000',
4713
- 142 => 'ONE E1001',
4714
- 143 => 'ONE E1003',
4715
- 144 => 'ONE E1005',
4716
- 145 => 'ONDA MID',
4717
- 146 => 'ONDA A9 Core4',
4718
- 147 => 'ONDA VI10',
4719
- 148 => 'Onda V812',
4720
- 149 => 'ONDA v975m',
4721
- 150 => 'ONDA V989',
4722
- 151 => 'ONDA V989 Core8',
 
 
 
 
 
 
4723
  ),
4724
  '@OP' =>
4725
  array (
@@ -4728,84 +5323,109 @@ DeviceModels::$ANDROID_INDEX = array (
4728
  2 => 'Opus One',
4729
  3 => 'OPS-DRD Digital Signage Player',
4730
  4 => 'OP110',
4731
- 5 => 'OPPO A30',
4732
- 6 => 'OPPO A31',
4733
- 7 => 'OPPO A31t',
4734
- 8 => 'OPPO A33',
4735
- 9 => 'OPPO A33m',
4736
- 10 => 'OPPO A37m',
4737
- 11 => 'OPPO A53',
4738
- 12 => 'OPPO A53m',
4739
- 13 => 'OPPO A57',
4740
- 14 => 'OPPO A57t',
4741
- 15 => 'OPPO A59m',
4742
- 16 => 'OPPO A59s',
4743
- 17 => 'OPPO A59st',
4744
- 18 => 'OPPO A77',
4745
- 19 => 'OPPO A77t',
4746
- 20 => 'OPPO A800',
4747
- 21 => 'OPPOX905',
4748
- 22 => 'OPPOX907',
4749
- 23 => 'OPPO Find5',
4750
- 24 => 'OPPOX909',
4751
- 25 => 'OPPO X909',
4752
- 26 => 'OPPOX9015',
4753
- 27 => 'OPPOX9017',
4754
- 28 => 'OPPO find7',
4755
- 29 => 'OPPOR601',
4756
- 30 => 'OPPOR801',
4757
- 31 => 'OPPOR803',
4758
- 32 => 'OPPOR805',
4759
- 33 => 'OPPOR807',
4760
- 34 => 'OPPO R811',
4761
- 35 => 'OPPO R813T',
4762
- 36 => 'OPPO R815',
4763
- 37 => 'OPPOR817',
4764
- 38 => 'Oppo R819',
4765
- 39 => 'OPPO R821',
4766
- 40 => 'OPPO R831',
4767
- 41 => 'Oppo R831 Limited Edition',
4768
- 42 => 'OPPO R1001',
4769
- 43 => 'OPPOR8015',
4770
- 44 => 'OPPOR8111',
4771
- 45 => 'OPPOT29',
4772
- 46 => '(OPPO-?)?T703!',
4773
- 47 => 'OPPOU701',
4774
- 48 => 'OPPOU7011',
4775
- 49 => 'OPPOU7015',
4776
- 50 => 'OPPO N1',
4777
- 51 => 'OPPO R7',
4778
- 52 => 'OPPO R7s',
4779
- 53 => 'OPPO R7sm',
4780
- 54 => 'OPPO R7st',
4781
- 55 => 'OPPO R7t',
4782
- 56 => 'OPPO R9m',
4783
- 57 => 'OPPO R9tm',
4784
- 58 => 'OPPO R9km',
4785
- 59 => 'OPPO R9s',
4786
- 60 => 'OPPO R9sk',
4787
- 61 => 'OPPO R9st',
4788
- 62 => 'OPPO R9t',
4789
- 63 => 'OPPO R11',
4790
- 64 => 'OPPO R11t',
4791
- 65 => 'OPPO R7 Plus',
4792
- 66 => 'OPPO R7sPlus',
4793
- 67 => 'OPPO R9 Plusm A',
4794
- 68 => 'OPPO R9 Plustm A',
4795
- 69 => 'OPPO R9s Plus',
4796
- 70 => 'OPPO R11 Plus',
4797
- 71 => 'OPPO R11 Plusk',
4798
- 72 => 'OPPO R11 Pluskt',
4799
- 73 => 'OPPO R11s Plus',
4800
- 74 => 'OPSSON!!',
4801
- 75 => 'OP0118-12',
4802
- 76 => 'Optimus Barcelona',
4803
- 77 => 'Optimus Boston',
4804
- 78 => 'Optimus Madrid',
4805
- 79 => 'Optimus Monte Carlo',
4806
- 80 => 'Optimus San Francisco',
4807
- 81 => 'Optimus San Remo',
4808
- 82 => 'Optimus Zali',
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
4809
  ),
4810
  '@OR' =>
4811
  array (
@@ -4856,6 +5476,11 @@ DeviceModels::$ANDROID_INDEX = array (
4856
  '@OV' =>
4857
  array (
4858
  0 => '(OV-|Overmax|Vertis)!!',
 
 
 
 
 
4859
  ),
4860
  '@OY' =>
4861
  array (
@@ -4886,20 +5511,23 @@ DeviceModels::$ANDROID_INDEX = array (
4886
  0 => 'P001',
4887
  1 => 'P001 2',
4888
  2 => 'P002',
4889
- 3 => 'P00C',
4890
- 4 => 'P00I',
4891
- 5 => 'P01M',
4892
- 6 => 'P01MA',
4893
- 7 => 'P01T',
4894
- 8 => 'P01T 1',
4895
- 9 => 'P01V',
4896
- 10 => 'P01W',
4897
- 11 => 'P01Y',
4898
- 12 => 'P01Z',
4899
- 13 => 'P021',
4900
- 14 => 'P022',
4901
- 15 => 'P023',
4902
- 16 => 'P024',
 
 
 
4903
  ),
4904
  '@P1' =>
4905
  array (
@@ -4907,20 +5535,24 @@ DeviceModels::$ANDROID_INDEX = array (
4907
  1 => 'P105',
4908
  2 => 'P1m',
4909
  3 => 'P1ma40',
4910
- 4 => 'P1050X',
4911
- 5 => 'P10HD??(E6NA)',
4912
- 6 => 'P11HD',
4913
- 7 => 'P11HD四核(G9X6)',
4914
- 8 => 'P11HD??(G9X6)',
4915
- 9 => 'P11HD四核(G9X7)',
4916
- 10 => 'P19HD(E1K3)',
4917
- 11 => 'P19HD(E1K5)',
 
 
 
4918
  ),
4919
  '@P2' =>
4920
  array (
4921
  0 => 'P2A700',
4922
  1 => 'P2Lite',
4923
- 2 => '(HW-|HUAWEI )?(ALE|ANE|D2|DAV|EML|EVA|FIG|G6|G7|GRA|M100|P2|P6|P7|PRA|RIO|SC|Sophia|VIE|VKY|VNS|VTR|WAS)!!',
 
4924
  ),
4925
  '@P3' =>
4926
  array (
@@ -4949,11 +5581,11 @@ DeviceModels::$ANDROID_INDEX = array (
4949
  2 => 'P6 Pro',
4950
  3 => 'P6 Qmax',
4951
  4 => 'P6 Quad',
4952
- 5 => '(HW-|HUAWEI )?(ALE|ANE|D2|DAV|EML|EVA|FIG|G6|G7|GRA|M100|P2|P6|P7|PRA|RIO|SC|Sophia|VIE|VKY|VNS|VTR|WAS)!!',
4953
  ),
4954
  '@P7' =>
4955
  array (
4956
- 0 => '(HW-|HUAWEI )?(ALE|ANE|D2|DAV|EML|EVA|FIG|G6|G7|GRA|M100|P2|P6|P7|PRA|RIO|SC|Sophia|VIE|VKY|VNS|VTR|WAS)!!',
4957
  1 => 'P700i',
4958
  2 => 'P701',
4959
  3 => 'P7',
@@ -5019,23 +5651,24 @@ DeviceModels::$ANDROID_INDEX = array (
5019
  ),
5020
  '@P9' =>
5021
  array (
5022
- 0 => 'P940',
5023
- 1 => 'P990',
5024
- 2 => 'P90(H3U6)',
5025
- 3 => 'P90(H3U7)',
5026
- 4 => 'P98(F2K9)',
5027
- 5 => 'P98 八核(B9A3)',
5028
- 6 => 'P98 3Gk8(A4HY)',
5029
- 7 => 'P98 3G??(A4HY)',
5030
- 8 => 'P98 3G(M1Q2)',
5031
- 9 => 'P98 3G八核(A3HY)',
5032
- 10 => 'P98 3G八核(A4HY)',
5033
- 11 => 'P98 4G??(A8H6)',
5034
- 12 => 'P98 Air?? (C6V8)',
5035
- 13 => 'P98Air(C6V8)',
5036
- 14 => 'P98HD(A2Q6)',
5037
- 15 => 'P98HD+M6',
5038
- 16 => 'P98T(K3C4)',
 
5039
  ),
5040
  '@PA' =>
5041
  array (
@@ -5057,21 +5690,38 @@ DeviceModels::$ANDROID_INDEX = array (
5057
  15 => 'Patio100',
5058
  16 => 'Patio100 3G',
5059
  17 => 'PAD[0-9]{3,3}!!',
5060
- 18 => 'Panasonic!!',
5061
- 19 => 'pandigital9hr',
5062
- 20 => 'pandigital9hr2',
5063
- 21 => 'pandigitalopc1',
5064
- 22 => 'pandigitalopp1',
5065
- 23 => 'pandigitalp1hr',
5066
- 24 => 'PantechP!!',
5067
- 25 => 'PAT712W',
5068
- 26 => 'PATG7506HD',
5069
- 27 => 'PAP[0-9]{4,4}!!',
5070
- 28 => 'PAD1001',
 
 
 
 
 
 
 
 
 
5071
  ),
5072
  '@PB' =>
5073
  array (
5074
  0 => 'PB99400',
 
 
 
 
 
 
 
 
5075
  ),
5076
  '@PC' =>
5077
  array (
@@ -5079,11 +5729,16 @@ DeviceModels::$ANDROID_INDEX = array (
5079
  1 => '(DNS )?(Airtab )?(E|ES|M|MA|MC|MF|MW|P|PC|PF)[0-9]{2,4}!!',
5080
  2 => '(HTC|PCD|USCC)?ADR[0-9]{4,4}!!',
5081
  3 => 'PC36100!',
5082
- 4 => 'PC-TE307N1W',
5083
- 5 => 'PC-TE508BAW',
5084
- 6 => 'PC-TS508FAM',
5085
- 7 => 'PC-TS508T1W',
5086
- 8 => 'PC-TS708T1W',
 
 
 
 
 
5087
  ),
5088
  '@PD' =>
5089
  array (
@@ -5092,7 +5747,7 @@ DeviceModels::$ANDROID_INDEX = array (
5092
  ),
5093
  '@PE' =>
5094
  array (
5095
- 0 => '(HW-|HUAWEI |HONOR )?(ATH|BLN|BKL|BND|CHE|CHM|COL|DUA|DUK|DLI|EDI|FRD|HN3|H30|H60|HOL|JMM|KIW|LLD|NEM|NMO|PE|PLK|RNE|SCL|KNT|CAM|STF|HDN)!!',
5096
  1 => 'PEDI',
5097
  2 => 'Penta!!',
5098
  3 => 'Pentagram!!',
@@ -5185,34 +5840,47 @@ DeviceModels::$ANDROID_INDEX = array (
5185
  3 => 'Pixel 2',
5186
  4 => 'Pixel 2XL',
5187
  5 => 'Pixel 2 XL',
5188
- 6 => '(Axioo[\\- ])?PICO!!',
5189
- 7 => 'picoBit-L',
5190
- 8 => '(GIO-)?(GiONEE[- ])?Pioneer P1!',
5191
- 9 => '(GIO-)?(GiONEE[- ])?Pioneer P2!',
5192
- 10 => '(GIO-)?(GiONEE[- ])?Pioneer P3!',
5193
- 11 => '(GIO-)?(GiONEE[- ])?Pioneer P4!',
5194
- 12 => 'PixelV1',
5195
- 13 => 'Pixel V2',
5196
- 14 => 'Pixel V2+',
5197
- 15 => 'PI2000',
5198
- 16 => 'PI2010',
5199
- 17 => 'PI2011',
5200
- 18 => 'PI3100',
5201
- 19 => 'PI3100-93',
5202
- 20 => 'PI3100Z3 93',
5203
- 21 => 'PI3105',
5204
- 22 => 'PI3106',
5205
- 23 => 'PI3110',
5206
- 24 => 'PI3205G',
5207
- 25 => 'PI3210G',
5208
- 26 => 'PI3900',
5209
- 27 => 'PI3900-93',
5210
- 28 => 'PI3910',
5211
- 29 => 'PI4010G',
5212
- 30 => 'PI7000',
5213
- 31 => 'PI7100 93',
5214
- 32 => '(PNR-)?Pioneer!!',
5215
- 33 => 'PIRANHA!!',
 
 
 
 
 
 
 
 
 
 
 
 
 
5216
  ),
5217
  '@PJ' =>
5218
  array (
@@ -5223,7 +5891,7 @@ DeviceModels::$ANDROID_INDEX = array (
5223
  array (
5224
  0 => 'PLE-701L',
5225
  1 => 'PLE-703L',
5226
- 2 => '(HW-|HUAWEI |HONOR )?(ATH|BLN|BKL|BND|CHE|CHM|COL|DUA|DUK|DLI|EDI|FRD|HN3|H30|H60|HOL|JMM|KIW|LLD|NEM|NMO|PE|PLK|RNE|SCL|KNT|CAM|STF|HDN)!!',
5227
  3 => 'Planet II v2',
5228
  4 => 'PLANET',
5229
  5 => 'Playboy PB-S3',
@@ -5256,99 +5924,108 @@ DeviceModels::$ANDROID_INDEX = array (
5256
  '@PO' =>
5257
  array (
5258
  0 => '(Highscreen|Alpha|Bay|Boost|Cosmo|Explosion|Power|Prime|Zera)!!',
5259
- 1 => 'PocketBook A7',
5260
- 2 => 'PocketBook A10',
5261
- 3 => 'PocketBook A10 3G',
5262
- 4 => 'PocketBook SURFpad2',
5263
- 5 => 'PocketBook SURFpad 3 (7,85")',
5264
- 6 => 'PocketBook SURFpad 4 S',
5265
- 7 => 'PocketBook SURFpad 4 M',
5266
- 8 => 'PocketBook SURFpad 4 L',
5267
- 9 => 'POV-Mobii-7',
5268
- 10 => 'POV Mobii 7',
5269
- 11 => 'POV TAB-P506!',
5270
- 12 => 'POV TAB-P517!',
5271
- 13 => 'POV TAB-P527!',
5272
- 14 => 'POV TAB-P629!',
5273
- 15 => 'POV TAB-P701!',
5274
- 16 => 'POV TAB-P703!',
5275
- 17 => 'POV TAB-P720!',
5276
- 18 => 'POV TAB-P721A!',
5277
- 19 => 'POV TAB-P721!',
5278
- 20 => 'POV TAB-P722C!',
5279
- 21 => 'POV TAB-P731N!',
5280
- 22 => 'POV TAB-P825!',
5281
- 23 => 'POV TAB-P925!',
5282
- 24 => 'POV TAB-PR945!',
5283
- 25 => 'POV TAB-P1025!',
5284
- 26 => 'POV TAB-P1030!',
5285
- 27 => 'POV TAB-PI1045!',
5286
- 28 => 'POV TAB-P1325!',
5287
- 29 => '(POV )?TAB-PLAYTABPRO!',
5288
- 30 => '(POV )?TAB-PROTAB25!',
5289
- 31 => '(POV )?TAB-PROTAB26!',
5290
- 32 => 'POV TAB-PROTAB27',
5291
- 33 => '(POV )?TAB-PROTAB30!',
5292
- 34 => '(POV )?TAB-PROTAB2XXL(4)!',
5293
- 35 => '(POV )?TAB NAVI7 3G M!',
5294
- 36 => 'POV_TAB-NAVI7-3G-M',
5295
- 37 => 'POV TAB-P547(v1.0)',
5296
- 38 => 'POV TV-HDMI-200BT',
5297
- 39 => 'POV TV-HDMI-200BT(V2.0)',
5298
- 40 => 'POV TV-HDMI-210',
5299
- 41 => 'POV TV-HDMI-KB-01',
5300
- 42 => 'POV TV-SMARTTV-500',
5301
- 43 => 'Polaroid PSPT401',
5302
- 44 => 'Polaroid PSPC505',
5303
- 45 => 'Polaroid PSPC550',
5304
- 46 => 'Polaroid P4005A',
5305
- 47 => 'Polaroid P5005A',
5306
- 48 => 'Polaroid P5046A',
5307
- 49 => 'Polaroid P5525A',
5308
- 50 => 'Polaroid P5526A',
5309
- 51 => 'POLY ?PAD!!',
5310
- 52 => 'POLYTRON!!',
5311
- 53 => 'POMP!!',
5312
- 54 => 'Positivo Mini',
5313
- 55 => 'POSITIVO YPY 07FTB',
5314
- 56 => 'Positivo Ypy AB7E',
5315
- 57 => 'Positivo Ypy AB7EC',
5316
- 58 => 'Positivo Ypy AB7F',
5317
- 59 => 'Positivo AB7F',
5318
- 60 => 'Positivo Ypy AB7H',
5319
- 61 => 'Positivo Ypy AB10E',
5320
- 62 => 'Positivo Ypy AB10EC',
5321
- 63 => 'Positivo Ypy AB10H',
5322
- 64 => 'Positivo BGH Ypy L700',
5323
- 65 => 'Positivo Ypy L700',
5324
- 66 => 'Positivo Ypy L700 Ed. Especial',
5325
- 67 => 'Positivo Ypy L700+',
5326
- 68 => 'Positivo Ypy L700 Kids',
5327
- 69 => 'Positivo BGH Ypy L700 Kids',
5328
- 70 => 'Positivo Ypy L700+ Kids',
5329
- 71 => 'Positivo Ypy L1000',
5330
- 72 => 'Positivo Ypy L1000AB',
5331
- 73 => 'Positivo Ypy L1000F',
5332
- 74 => 'Positivo Ypy L1050',
5333
- 75 => 'Positivo Ypy L1050E',
5334
- 76 => 'Positivo Ypy L1050F',
5335
- 77 => 'Positivo S380',
5336
- 78 => 'Positivo S440',
5337
- 79 => 'Positivo S480',
5338
- 80 => 'Positivo S550',
5339
- 81 => 'Positivo X400',
5340
- 82 => 'Positivo X800',
 
 
 
 
 
 
 
 
5341
  ),
5342
  '@PP' =>
5343
  array (
5344
- 0 => 'PP4MT-7',
5345
- 1 => 'PP4MT-9',
 
5346
  ),
5347
  '@PR' =>
5348
  array (
5349
  0 => 'Project Tango Tablet Development Kit',
5350
  1 => '(Highscreen|Alpha|Bay|Boost|Cosmo|Explosion|Power|Prime|Zera)!!',
5351
- 2 => '(HW-|HUAWEI )?(ALE|ANE|D2|DAV|EML|EVA|FIG|G6|G7|GRA|M100|P2|P6|P7|PRA|RIO|SC|Sophia|VIE|VKY|VNS|VTR|WAS)!!',
5352
  3 => 'Pro 10 dual core',
5353
  4 => 'Prada 3.0',
5354
  5 => 'PRO 5',
@@ -5637,9 +6314,10 @@ DeviceModels::$ANDROID_INDEX = array (
5637
  3 => 'R7i',
5638
  4 => 'R7kf',
5639
  5 => 'R7sf',
5640
- 6 => 'R7Plus',
5641
- 7 => 'R7plusf',
5642
- 8 => 'R7Plusm',
 
5643
  ),
5644
  '@R8' =>
5645
  array (
@@ -5775,6 +6453,13 @@ DeviceModels::$ANDROID_INDEX = array (
5775
  8 => '(Xiaomi )?(Redmi|HM)[ \\-]?Note!!',
5776
  9 => 'REVVLPLUS C3701A',
5777
  ),
 
 
 
 
 
 
 
5778
  '@RH' =>
5779
  array (
5780
  0 => '(?:RIVO )?RHYTHM RX ?([0-9]+)!',
@@ -5786,7 +6471,7 @@ DeviceModels::$ANDROID_INDEX = array (
5786
  2 => 'Rikomagic MK802III',
5787
  3 => 'Rikomagic MK802IIIS',
5788
  4 => '(Gsmart|Gigabyte|Rio)!!',
5789
- 5 => '(HW-|HUAWEI )?(ALE|ANE|D2|DAV|EML|EVA|FIG|G6|G7|GRA|M100|P2|P6|P7|PRA|RIO|SC|Sophia|VIE|VKY|VNS|VTR|WAS)!!',
5790
  6 => 'Rise',
5791
  7 => '(Ritmix )?RM[DP]-?[0-9]{3,3}!!',
5792
  8 => 'RIDGE',
@@ -5833,10 +6518,37 @@ DeviceModels::$ANDROID_INDEX = array (
5833
  2 => 'RM-1061',
5834
  3 => '(Ritmix )?RM[DP]-?[0-9]{3,3}!!',
5835
  4 => 'RMD-[0-9]{2,3}G!!',
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
5836
  ),
5837
  '@RN' =>
5838
  array (
5839
- 0 => '(HW-|HUAWEI |HONOR )?(ATH|BLN|BKL|BND|CHE|CHM|COL|DUA|DUK|DLI|EDI|FRD|HN3|H30|H60|HOL|JMM|KIW|LLD|NEM|NMO|PE|PLK|RNE|SCL|KNT|CAM|STF|HDN)!!',
5840
  ),
5841
  '@RO' =>
5842
  array (
@@ -5888,15 +6600,18 @@ DeviceModels::$ANDROID_INDEX = array (
5888
  array (
5889
  0 => 's3c6410',
5890
  1 => 'S30',
5891
- 2 => 'S308',
5892
- 3 => 'S3',
 
5893
  ),
5894
  '@S4' =>
5895
  array (
5896
  0 => 'S40',
5897
- 1 => 'S4503Q',
5898
- 2 => 'S4505M',
5899
- 3 => 'S4',
 
 
5900
  ),
5901
  '@S5' =>
5902
  array (
@@ -5904,29 +6619,41 @@ DeviceModels::$ANDROID_INDEX = array (
5904
  1 => 'S5-F',
5905
  2 => 'S50',
5906
  3 => 'S50c',
5907
- 4 => 'S5',
5908
- 5 => 'S5 Mini!',
5909
- 6 => 'S51SE',
 
 
 
5910
  ),
5911
  '@S6' =>
5912
  array (
5913
- 0 => 'S658t',
5914
- 1 => 'S6 Edge+!',
 
 
 
5915
  ),
5916
  '@S7' =>
5917
  array (
5918
- 0 => 'S710d',
5919
- 1 => 'S710D',
5920
- 2 => 'S720i',
5921
- 3 => 'S7',
5922
- 4 => 's732',
 
5923
  ),
5924
  '@S8' =>
5925
  array (
5926
- 0 => 'S8600',
5927
- 1 => 'S88 DISCOVERY',
5928
- 2 => 'S850',
5929
- 3 => 'S880',
 
 
 
 
 
5930
  ),
5931
  '@SA' =>
5932
  array (
@@ -5959,23 +6686,24 @@ DeviceModels::$ANDROID_INDEX = array (
5959
  ),
5960
  '@SC' =>
5961
  array (
5962
- 0 => '(HW-|HUAWEI |HONOR )?(ATH|BLN|BKL|BND|CHE|CHM|COL|DUA|DUK|DLI|EDI|FRD|HN3|H30|H60|HOL|JMM|KIW|LLD|NEM|NMO|PE|PLK|RNE|SCL|KNT|CAM|STF|HDN)!!',
5963
- 1 => '(HW-|HUAWEI )?(ALE|ANE|D2|DAV|EML|EVA|FIG|G6|G7|GRA|M100|P2|P6|P7|PRA|RIO|SC|Sophia|VIE|VKY|VNS|VTR|WAS)!!',
5964
- 2 => '(HW-|HUAWEI )?(CRO|LUA|CUN|SCC|SCU|CAM|LDN|LYO|MYA)!!',
5965
- 3 => 'SCH-[iI][0-9]{3,3}!!',
5966
- 4 => 'SCH-L710!',
5967
- 5 => 'SCH-M828!',
5968
- 6 => 'SCH-N719',
5969
- 7 => 'SCH-P[0-9]{3,3}!!',
5970
- 8 => 'SCH-R[0-9]{3,3}!!',
5971
- 9 => 'SCH-S[0-9]{3,3}!!',
5972
- 10 => 'SCH-V727',
5973
- 11 => 'SCH-W[0-9]{3,4}!!',
5974
- 12 => 'SC-?0[0-9][A-Z]!!',
5975
- 13 => 'SC[LTV][23][0-9]!!',
5976
- 14 => 'Scroll!!',
5977
- 15 => 'SC-!!',
5978
- 16 => 'scorpio',
 
5979
  ),
5980
  '@SD' =>
5981
  array (
@@ -6023,23 +6751,31 @@ DeviceModels::$ANDROID_INDEX = array (
6023
  9 => 'SHIELD Tablet X1',
6024
  10 => 'SHIELD Tablet II',
6025
  11 => 'Shine',
6026
- 12 => 'SH940C-LN',
6027
- 13 => 'SH940C-LN TV',
6028
- 14 => 'SH960C-LN',
6029
- 15 => 'Sholes',
6030
- 16 => 'SHV-E[0-9]{3,3}!!',
6031
- 17 => 'SHW-M[0-9]{3,3}!!',
6032
- 18 => 'SH01D',
6033
- 19 => 'SH-M01',
6034
- 20 => 'SH-M02',
6035
- 21 => 'SH-M02-EVA20',
6036
- 22 => 'SH-M03',
6037
- 23 => 'SH-M07',
6038
- 24 => 'SH-RM02',
6039
- 25 => 'SH-[01][0-9][A-Z]!!',
6040
- 26 => '(SHP-)?(SHARP )?SH[0-9]{2,3}!!',
6041
- 27 => 'SH[FLTV][0-9]{2,2}!!',
6042
- 28 => 'SHARP-ADS1',
 
 
 
 
 
 
 
 
6043
  ),
6044
  '@SI' =>
6045
  array (
@@ -6056,14 +6792,15 @@ DeviceModels::$ANDROID_INDEX = array (
6056
  3 => 'Skyworth!!',
6057
  4 => 'SK17(a|i|iv|i-o)!',
6058
  5 => 'SK-Mtek GT7305',
6059
- 6 => '(ZTE )?Skate!!',
 
6060
  ),
6061
  '@SL' =>
6062
  array (
6063
  0 => 'Slider SL101',
6064
  1 => 'SL930',
6065
  2 => '(HP|Slate)!!',
6066
- 3 => '(HW-|HUAWEI )?(DRA|FLA|TIT|TAG|NCE|TRT|SLA)!!',
6067
  4 => 'Slidepad!!',
6068
  5 => 'SLIDE',
6069
  ),
@@ -6093,33 +6830,42 @@ DeviceModels::$ANDROID_INDEX = array (
6093
  21 => 'SM-A[0-9]{3,3}!!',
6094
  22 => 'SM-C[0-9]{3,3}!!',
6095
  23 => 'SM-E[0-9]{3,3}!!',
6096
- 24 => 'SM-G[0-9]{3,3}!!',
6097
- 25 => 'SM-I9500',
6098
- 26 => 'SM-J[0-9]{3,3}!!',
6099
- 27 => 'SM-N[0-9]{3,4}!!',
6100
- 28 => 'SM-P[0-9]{3,3}!!',
6101
- 29 => 'SM-S[0-9]{3,3}!!',
6102
- 30 => 'SM-T[0-9]{3,3}!!',
6103
- 31 => 'SM-V700',
6104
- 32 => 'SM-W[0-9]{4,4}!!',
6105
- 33 => 'Smartphone Android by SFR STARADDICT II',
6106
- 34 => '(Smartfren|Andromax)!!',
6107
- 35 => 'Smartfren Tab 7',
6108
- 36 => 'SM919',
6109
- 37 => 'SM701',
6110
- 38 => 'SM801',
6111
- 39 => 'SmartQ!!',
6112
- 40 => 'SMART Sprint',
6113
- 41 => 'SMART Start',
6114
- 42 => 'SMART Surf2 4G',
6115
- 43 => 'SmartTab!!',
 
 
 
 
 
 
 
 
6116
  ),
6117
  '@SN' =>
6118
  array (
6119
  0 => 'SN[0-9]!!',
6120
- 1 => 'Snexian!!',
6121
- 2 => '(SNM\\-)?LT[0-9]{2,2}[a-z]?!!',
6122
- 3 => '(SNM\\-)?M[0-9]{2,2}[a-z]!!',
 
6123
  ),
6124
  '@SO' =>
6125
  array (
@@ -6133,7 +6879,7 @@ DeviceModels::$ANDROID_INDEX = array (
6133
  7 => 'Softwinerf900',
6134
  8 => 'SoftwinerEvbV13',
6135
  9 => 'soho',
6136
- 10 => '(HW-|HUAWEI )?(ALE|ANE|D2|DAV|EML|EVA|FIG|G6|G7|GRA|M100|P2|P6|P7|PRA|RIO|SC|Sophia|VIE|VKY|VNS|VTR|WAS)!!',
6137
  11 => 'SONIC',
6138
  12 => 'Sonim!!',
6139
  13 => 'SO-0[0-9][A-Z]!!',
@@ -6199,63 +6945,64 @@ DeviceModels::$ANDROID_INDEX = array (
6199
  12 => 'ST7001',
6200
  13 => 'ST8000',
6201
  14 => 'ST9001',
6202
- 15 => '(HW-|HUAWEI |HONOR )?(ATH|BLN|BKL|BND|CHE|CHM|COL|DUA|DUK|DLI|EDI|FRD|HN3|H30|H60|HOL|JMM|KIW|LLD|NEM|NMO|PE|PLK|RNE|SCL|KNT|CAM|STF|HDN)!!',
6203
- 16 => 'ST10',
6204
- 17 => 'ST940I-UP',
6205
- 18 => 'STM[0-9]{3,3}H!!',
6206
- 19 => 'Stylo',
6207
- 20 => 'STARACTIVE',
6208
- 21 => 'STARACTIVE 2',
6209
- 22 => 'STARADDICT II',
6210
- 23 => 'STARADDICT II Plus',
6211
- 24 => 'STARADDICT III',
6212
- 25 => 'STARADDICT 4',
6213
- 26 => 'STARADDICT 5',
6214
- 27 => 'STARADDICT 6',
6215
- 28 => 'STARNAUTE II',
6216
- 29 => 'STARNAUTE 3',
6217
- 30 => 'STARNAUTE3',
6218
- 31 => 'STARNAUTE4',
6219
- 32 => 'Starshine',
6220
- 33 => 'STARSHINE II',
6221
- 34 => 'STARSHINE III',
6222
- 35 => 'STARSHINE 4',
6223
- 36 => 'STARSHINE5',
6224
- 37 => 'STARTEXT II',
6225
- 38 => 'STARTRAIL II',
6226
- 39 => 'StarTrail III',
6227
- 40 => 'STARTRAIL4',
6228
- 41 => 'STARTRAIL 4',
6229
- 42 => 'STARTRAIL5',
6230
- 43 => 'STARTRAIL 6 4G',
6231
- 44 => 'STARTRAIL6',
6232
- 45 => 'STARTRAIL7',
6233
- 46 => 'STARTRAIL 8',
6234
- 47 => 'STARTRAIL 9',
6235
- 48 => 'STARXTREM',
6236
- 49 => 'STARXTREM II',
6237
- 50 => 'STARXTREM3',
6238
- 51 => 'STARXTREM 4',
6239
- 52 => 'STARXTREM5',
6240
- 53 => 'STARXTREM 6',
6241
- 54 => 'STARTAB',
6242
- 55 => 'ST[0-9]{2,2}[a-z]?!!',
6243
- 56 => 'Star N8000',
6244
- 57 => 'Star N9500',
6245
- 58 => 'Star N9589',
6246
- 59 => 'Star Q9000',
6247
- 60 => 'STAR S5',
6248
- 61 => 'STAR S7589',
6249
- 62 => 'Starmobile!!',
6250
- 63 => '(Starway )?Andromeda!!',
6251
- 64 => 'STX!!',
6252
- 65 => 'STOREX LinkBox',
6253
- 66 => 'StarTab 715x',
6254
- 67 => 'ST[0-9]{5,5}-[0-9]!!',
6255
- 68 => 'ST-PAD',
6256
- 69 => 'ST-PAD2',
6257
- 70 => 'STAIRWAY',
6258
- 71 => 'StarTrail TT',
 
6259
  ),
6260
  '@SU' =>
6261
  array (
@@ -6263,12 +7010,14 @@ DeviceModels::$ANDROID_INDEX = array (
6263
  1 => 'Surfing Tab C 3G',
6264
  2 => '(E-Boda|Eruption|Essential|Supreme|Storm|Revo)!!',
6265
  3 => '(Explay|X-tremer|ActiveD|Informer|Surfer)!!',
6266
- 4 => 'surnia',
6267
- 5 => 'SUGAR ([A-Z][0-9]?(?: Pro)?)!',
6268
- 6 => 'SUPRA (M[0-9]{2,3}[A-Z]{0,2})!',
6269
- 7 => 'SUBLIM',
6270
- 8 => 'SUNSET',
6271
- 9 => 'SUNSET2',
 
 
6272
  ),
6273
  '@SV' =>
6274
  array (
@@ -6279,8 +7028,9 @@ DeviceModels::$ANDROID_INDEX = array (
6279
  array (
6280
  0 => 'Swift',
6281
  1 => 'Swift Plus',
6282
- 2 => 'Swift 2 Plus',
6283
- 3 => 'Swift 2 X',
 
6284
  ),
6285
  '@SX' =>
6286
  array (
@@ -6359,7 +7109,8 @@ DeviceModels::$ANDROID_INDEX = array (
6359
  ),
6360
  '@T2' =>
6361
  array (
6362
- 0 => 'T20',
 
6363
  ),
6364
  '@T3' =>
6365
  array (
@@ -6371,12 +7122,16 @@ DeviceModels::$ANDROID_INDEX = array (
6371
  '@T6' =>
6372
  array (
6373
  0 => 'T6',
 
6374
  ),
6375
  '@T7' =>
6376
  array (
6377
  0 => '(OPPO-?)?T703!',
6378
- 1 => 'T720 SE',
6379
- 2 => 'T760 from moage.com',
 
 
 
6380
  ),
6381
  '@T8' =>
6382
  array (
@@ -6401,80 +7156,81 @@ DeviceModels::$ANDROID_INDEX = array (
6401
  5 => 'Tablet-P27',
6402
  6 => 'TA10CA3',
6403
  7 => '(tablet )?fnac!!',
6404
- 8 => '(HW-|HUAWEI )?(DRA|FLA|TIT|TAG|NCE|TRT|SLA)!!',
6405
- 9 => '(HW-|HUAWEI )?(BLL|CHC|TAG|KII)!!',
6406
- 10 => 'TA-FONE!!',
6407
- 11 => 'TAB1011',
6408
- 12 => 'TAB-1030',
6409
- 13 => '(Lenovo )?(Tab ?)?(2 ?)?[AS](7|8|10)!!',
6410
- 14 => 'TAB950',
6411
- 15 => 'TAB1062',
6412
- 16 => 'TAB192',
6413
- 17 => 'TA-10(07|29)!',
6414
- 18 => 'TA-10(84)!',
6415
- 19 => 'TA-10(20|28|32|38)!',
6416
- 20 => 'TA-10(24|27|44|53)!',
6417
- 21 => 'TA-10(61|75|81|88)!',
6418
- 22 => 'TA-10(00|03|21|25|33|39)!',
6419
- 23 => 'TA-10(43|50|54|68)!',
6420
- 24 => 'TA-10(41)!',
6421
- 25 => 'TA-10(62)!',
6422
- 26 => 'TA-10(04|12|52)!',
6423
- 27 => 'TA-10(99)!',
6424
- 28 => 'TA-11(03|16)!',
6425
- 29 => '(POV )?TAB-PLAYTABPRO!',
6426
- 30 => '(POV )?TAB-PROTAB25!',
6427
- 31 => '(POV )?TAB-PROTAB26!',
6428
- 32 => '(POV )?TAB-PROTAB30!',
6429
- 33 => 'TAB-PROTAB2-IPS9',
6430
- 34 => 'TAB-PROTAB2-IPS-3G',
6431
- 35 => 'TAB-PROTAB2-IPS-16',
6432
- 36 => 'TAB-PROTAB2.4',
6433
- 37 => 'TAB-PROTAB2XL',
6434
- 38 => 'TAB-PROTAB2.4XL',
6435
- 39 => 'TAB-PROTAB2XXL',
6436
- 40 => 'TAB-PROTAB2XXL(4)',
6437
- 41 => '(POV )?TAB-PROTAB2XXL(4)!',
6438
- 42 => '(POV )?TAB NAVI7 3G M!',
6439
- 43 => 'Tablet P',
6440
- 44 => 'Tablet S',
6441
- 45 => 'Tabra QAV801',
6442
- 46 => 'TAB 7 3G V8',
6443
- 47 => 'TAB 8 3G V8',
6444
- 48 => 'TAB9 3G',
6445
- 49 => 'TAB9 3G V8',
6446
- 50 => 'TAB 10 3G V16',
6447
- 51 => 'TAB 7i 3G',
6448
- 52 => 'TAB 10Q',
6449
- 53 => 'TAB09-410',
6450
- 54 => 'TAB10-410',
6451
- 55 => 'TAB07-485',
6452
- 56 => 'TAB07-200',
6453
- 57 => 'TAB9-200',
6454
- 58 => 'TAB10-201',
6455
- 59 => 'TAB210',
6456
- 60 => 'TAB220',
6457
- 61 => 'TAB224',
6458
- 62 => 'TAB250',
6459
- 63 => 'TAB275',
6460
- 64 => 'TAB260',
6461
- 65 => 'TAB264',
6462
- 66 => 'TAB360',
6463
- 67 => 'TAB364',
6464
- 68 => 'TAB410',
6465
- 69 => 'TAB411',
6466
- 70 => 'TAB420',
6467
- 71 => 'TAB424',
6468
- 72 => 'TAB450',
6469
- 73 => 'TAB460',
6470
- 74 => 'TAB461',
6471
- 75 => 'TAB464',
6472
- 76 => 'TAB465EUK',
6473
- 77 => 'TAB468',
6474
- 78 => 'TAB469',
6475
- 79 => 'TAB466EUK',
6476
- 80 => 'TAB467',
6477
- 81 => 'TAB462',
 
6478
  ),
6479
  '@TB' =>
6480
  array (
@@ -6511,6 +7267,7 @@ DeviceModels::$ANDROID_INDEX = array (
6511
  15 => 'TC70',
6512
  16 => 'TC75',
6513
  17 => 'TCL!!',
 
6514
  ),
6515
  '@TD' =>
6516
  array (
@@ -6542,16 +7299,19 @@ DeviceModels::$ANDROID_INDEX = array (
6542
  18 => 'Telpad Quad S',
6543
  19 => 'Telpad QS',
6544
  20 => 'Tensent S9000',
6545
- 21 => 'teXet X-alpha',
6546
- 22 => 'Texet TM-4083',
6547
- 23 => 'teXet X-start',
6548
- 24 => 'teXet iX-mini',
6549
- 25 => 'teXet X-navi',
6550
- 26 => 'TEXET TM-4677',
6551
- 27 => 'teXet X-medium plus',
6552
- 28 => 'teXet X-maxi qHD',
6553
- 29 => 'TeamDRH ICS for GTablet',
6554
- 30 => 'Telenor!!',
 
 
 
6555
  ),
6556
  '@TF' =>
6557
  array (
@@ -6582,12 +7342,14 @@ DeviceModels::$ANDROID_INDEX = array (
6582
  array (
6583
  0 => 'Tilapia',
6584
  1 => 'Titan TV S320',
6585
- 2 => '(HW-|HUAWEI )?(DRA|FLA|TIT|TAG|NCE|TRT|SLA)!!',
6586
- 3 => '(Karbonn|Titanium)!!',
6587
- 4 => 'TI320-DU',
6588
- 5 => 'TI320-DU TV',
6589
- 6 => 'TizzBird!!',
6590
- 7 => 'tiffany',
 
 
6591
  ),
6592
  '@TL' =>
6593
  array (
@@ -6647,6 +7409,10 @@ DeviceModels::$ANDROID_INDEX = array (
6647
  49 => 'TM-1058',
6648
  50 => 'tmn!!',
6649
  ),
 
 
 
 
6650
  '@TO' =>
6651
  array (
6652
  0 => 'Toro',
@@ -6698,19 +7464,21 @@ DeviceModels::$ANDROID_INDEX = array (
6698
  12 => '(Transformer )?(Pad )?TF700(T|K)!',
6699
  13 => 'Transformer (Pad )?Infinity!',
6700
  14 => 'TR720F',
6701
- 15 => 'TR10CS1',
6702
- 16 => 'TripNiCE Pyramid',
6703
- 17 => '(HW-|HUAWEI )?(DRA|FLA|TIT|TAG|NCE|TRT|SLA)!!',
6704
- 18 => 'TR10RS1',
6705
- 19 => '(KAZAM|Thunder|Tornado|Trooper)!!',
6706
- 20 => 'Triumph',
6707
- 21 => 'TRACER OXYGEN GS1',
6708
- 22 => 'Trevi PHABLET 4C',
6709
- 23 => 'Trevi PHABLET 5 S',
6710
- 24 => 'TREQ!!',
6711
- 25 => 'Trevi REVERSE 5.5Q',
6712
- 26 => 'Trevi PHABLET 6 S',
6713
- 27 => 'TRUE BEYOND 3G',
 
 
6714
  ),
6715
  '@TS' =>
6716
  array (
@@ -6744,6 +7512,12 @@ DeviceModels::$ANDROID_INDEX = array (
6744
  2 => 'TX85',
6745
  3 => 'TX18',
6746
  ),
 
 
 
 
 
 
6747
  '@U1' =>
6748
  array (
6749
  0 => '(CUBE ?)?(K8|U1|U2|U3|U5|U6|U8|U9)[0-9]?GT!!',
@@ -6812,11 +7586,12 @@ DeviceModels::$ANDROID_INDEX = array (
6812
  11 => 'Ultimate10',
6813
  12 => 'Ultimate10-Android4.0',
6814
  13 => 'Ultimate 10',
6815
- 14 => 'Ulefone Be Touch2',
6816
- 15 => 'ultrafone!!',
6817
- 16 => 'Ultym 5',
6818
- 17 => 'Ultym 5L',
6819
- 18 => 'Ultym 5.2',
 
6820
  ),
6821
  '@UM' =>
6822
  array (
@@ -6882,6 +7657,7 @@ DeviceModels::$ANDROID_INDEX = array (
6882
  16 => '(GIO-)?(GiONEE[- ])?V188!',
6883
  17 => 'V1',
6884
  18 => 'V1277',
 
6885
  ),
6886
  '@V2' =>
6887
  array (
@@ -6892,6 +7668,12 @@ DeviceModels::$ANDROID_INDEX = array (
6892
  4 => 'V2 Viper S',
6893
  5 => 'V2 Viper X',
6894
  6 => 'V2 Viper X plus',
 
 
 
 
 
 
6895
  ),
6896
  '@V3' =>
6897
  array (
@@ -6993,6 +7775,7 @@ DeviceModels::$ANDROID_INDEX = array (
6993
  16 => 'Venus_V3 5040',
6994
  17 => 'Venus V3 5570',
6995
  18 => 'Venus V3 5580',
 
6996
  ),
6997
  '@VF' =>
6998
  array (
@@ -7050,7 +7833,7 @@ DeviceModels::$ANDROID_INDEX = array (
7050
  20 => 'Vibo-A688',
7051
  21 => 'VitMod ExtraLite 1.6.5.fullodex for HTC HD7 Pro',
7052
  22 => 'Vivid 4G',
7053
- 23 => '(HW-|HUAWEI )?(ALE|ANE|D2|DAV|EML|EVA|FIG|G6|G7|GRA|M100|P2|P6|P7|PRA|RIO|SC|Sophia|VIE|VKY|VNS|VTR|WAS)!!',
7054
  24 => 'Vibe K5 Plus',
7055
  25 => 'VIBE X2 (X2)',
7056
  26 => 'VIBE X3',
@@ -7091,18 +7874,22 @@ DeviceModels::$ANDROID_INDEX = array (
7091
  61 => 'ViewSonic VB733',
7092
  62 => 'VINUS!!',
7093
  63 => '(BBG-|VIV-)?vivo!!',
7094
- 64 => 'Viettel i5',
7095
- 65 => 'Viettel I8',
7096
- 66 => 'VIETTEL V8404!',
7097
- 67 => 'Viettel V8410',
7098
- 68 => 'VIETTEL V8411',
7099
- 69 => 'Viettel V8502',
7100
- 70 => 'VIETTEL V8506',
7101
- 71 => 'VIETTEL V8509',
 
 
 
 
7102
  ),
7103
  '@VK' =>
7104
  array (
7105
- 0 => '(HW-|HUAWEI )?(ALE|ANE|D2|DAV|EML|EVA|FIG|G6|G7|GRA|M100|P2|P6|P7|PRA|RIO|SC|Sophia|VIE|VKY|VNS|VTR|WAS)!!',
7106
  1 => 'VK410',
7107
  2 => 'VK700',
7108
  3 => 'VK810 4G',
@@ -7120,7 +7907,7 @@ DeviceModels::$ANDROID_INDEX = array (
7120
  ),
7121
  '@VN' =>
7122
  array (
7123
- 0 => '(HW-|HUAWEI )?(ALE|ANE|D2|DAV|EML|EVA|FIG|G6|G7|GRA|M100|P2|P6|P7|PRA|RIO|SC|Sophia|VIE|VKY|VNS|VTR|WAS)!!',
7124
  ),
7125
  '@VO' =>
7126
  array (
@@ -7129,24 +7916,25 @@ DeviceModels::$ANDROID_INDEX = array (
7129
  2 => 'Volantisg',
7130
  3 => 'VOYAGER DG300',
7131
  4 => 'VOYAGER2 DG310',
7132
- 5 => 'Vox',
7133
- 6 => 'Vortex',
7134
- 7 => 'vollo Vi86',
7135
- 8 => 'VOTO GT2++',
7136
- 9 => 'VOTO GT7',
7137
- 10 => 'VOTO GT11',
7138
- 11 => 'VOTO GT11 Pro',
7139
- 12 => 'VOTO GT18',
7140
- 13 => 'VOTO V5',
7141
- 14 => 'VOTO VT868',
7142
- 15 => 'VOTO VT888',
7143
- 16 => 'VOTO VT898',
7144
- 17 => 'VOTO VT898S',
7145
- 18 => 'VOTO W5300',
7146
- 19 => 'VOTO X2',
7147
- 20 => 'VOYO A15',
7148
- 21 => 'voyo X6',
7149
- 22 => 'Vodafone!!',
 
7150
  ),
7151
  '@VS' =>
7152
  array (
@@ -7174,7 +7962,7 @@ DeviceModels::$ANDROID_INDEX = array (
7174
  ),
7175
  '@VT' =>
7176
  array (
7177
- 0 => '(HW-|HUAWEI )?(ALE|ANE|D2|DAV|EML|EVA|FIG|G6|G7|GRA|M100|P2|P6|P7|PRA|RIO|SC|Sophia|VIE|VKY|VNS|VTR|WAS)!!',
7178
  1 => 'VT6078',
7179
  2 => 'VT75C',
7180
  3 => 'VT77C',
@@ -7194,6 +7982,23 @@ DeviceModels::$ANDROID_INDEX = array (
7194
  2 => 'VX580W',
7195
  3 => 'VX610A',
7196
  ),
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
7197
  '@W1' =>
7198
  array (
7199
  0 => 'W10',
@@ -7269,7 +8074,7 @@ DeviceModels::$ANDROID_INDEX = array (
7269
  ),
7270
  '@WA' =>
7271
  array (
7272
- 0 => '(HW-|HUAWEI )?(ALE|ANE|D2|DAV|EML|EVA|FIG|G6|G7|GRA|M100|P2|P6|P7|PRA|RIO|SC|Sophia|VIE|VKY|VNS|VTR|WAS)!!',
7273
  1 => 'WA-U420D',
7274
  2 => 'WALSUN S1 Pro',
7275
  3 => 'WALSUN S2',
@@ -7348,12 +8153,13 @@ DeviceModels::$ANDROID_INDEX = array (
7348
  7 => 'WIKO-CINK SLIM',
7349
  8 => 'Wiko Rainbow',
7350
  9 => 'Wiko Stairway',
7351
- 10 => 'Wileyfox Spark',
7352
- 11 => 'Wileyfox Spark +',
7353
- 12 => 'Wileyfox Spark X',
7354
- 13 => 'Wileyfox Storm',
7355
- 14 => 'Wileyfox Swift',
7356
- 15 => 'Wink City S',
 
7357
  ),
7358
  '@WL' =>
7359
  array (
@@ -7420,16 +8226,27 @@ DeviceModels::$ANDROID_INDEX = array (
7420
  15 => 'X00DDB',
7421
  16 => 'X00HD',
7422
  17 => 'X00GD',
7423
- 18 => 'X013D',
7424
- 19 => 'X013DA',
7425
- 20 => 'X013DB',
7426
- 21 => 'X013DC',
7427
- 22 => 'X015D',
7428
- 23 => 'X014D',
7429
- 24 => 'X002',
7430
- 25 => 'X003',
7431
- 26 => 'X005',
7432
- 27 => 'X008',
 
 
 
 
 
 
 
 
 
 
 
7433
  ),
7434
  '@X1' =>
7435
  array (
@@ -7448,19 +8265,22 @@ DeviceModels::$ANDROID_INDEX = array (
7448
  12 => 'X1 mini',
7449
  13 => 'X1 Selfie',
7450
  14 => 'X1010',
7451
- 15 => 'X10(a|i|iv|i-o|s)?$!',
7452
- 16 => 'X10 ?(Mini ?Pro)$!',
7453
- 17 => 'X10 ?(Mini)$!',
7454
- 18 => 'X10H(G3C5)',
7455
- 19 => 'X10HD 3G(M6K6)',
7456
- 20 => 'X16 Plus(D3A5)',
7457
- 21 => 'X16 Power(D6F7)',
7458
- 22 => 'X16 PRO(D6F8)',
7459
- 23 => 'X16HD (K3J3)',
7460
- 24 => 'X16HD 3G(M5J4)',
7461
- 25 => 'X16HD 3G(M5J5)',
7462
- 26 => 'X16HD 3G(M5J5',
7463
- 27 => 'X16HD 3G(M5J6)',
 
 
 
7464
  ),
7465
  '@X2' =>
7466
  array (
@@ -7494,15 +8314,20 @@ DeviceModels::$ANDROID_INDEX = array (
7494
  ),
7495
  '@X5' =>
7496
  array (
7497
- 0 => 'X550',
7498
- 1 => 'X515d',
7499
- 2 => 'X515e',
7500
- 3 => 'X525a',
7501
- 4 => 'X527',
7502
- 5 => 'X505',
7503
- 6 => 'X506',
7504
- 7 => 'X506S',
7505
- 8 => 'X507Q',
 
 
 
 
 
7506
  ),
7507
  '@X7' =>
7508
  array (
@@ -7667,20 +8492,24 @@ DeviceModels::$ANDROID_INDEX = array (
7667
  2 => '(Xiaomi|Xiaomi Mi|MI) Note!!',
7668
  3 => '(Xiaomi )?(MI )?MAX$!',
7669
  4 => '(Xiaomi )?(MI )?MAX 2$!',
7670
- 5 => '(Xiaomi )?(MI )?MIX$!',
7671
- 6 => '(Xiaomi )?(MI )?MIX 2$!',
7672
- 7 => '(Xiaomi )?(MI )?MIX 2S$!',
7673
- 8 => '(Xiaomi )?20!!',
7674
- 9 => '(Xiaomi )?(Redmi|RedRice|HM)!!',
7675
- 10 => '(Xiaomi )?(Redmi|HM)[ \\-]?Note!!',
7676
- 11 => '(Xiaomi |HM)?20!!',
7677
- 12 => 'Xiaomi MDT2!',
7678
- 13 => 'Xiaomi MCT1!',
7679
- 14 => 'Xiaomi MAT136!',
7680
- 15 => 'Xiaomi MBT6A5!',
7681
- 16 => '(Xiaomi|Xiaomi Mi|MI) Pad!!',
7682
- 17 => '(Xiaomi|Xiaomi Mi|MI)Box!!',
7683
- 18 => '(Xiaomi|Xiaomi Mi|MI)TV!!',
 
 
 
 
7684
  ),
7685
  '@XL' =>
7686
  array (
@@ -7733,9 +8562,24 @@ DeviceModels::$ANDROID_INDEX = array (
7733
  array (
7734
  0 => 'Xperia Z Ultra',
7735
  1 => 'XPRESS PRO',
7736
- 2 => 'Xperia!!',
7737
- 3 => '(Symphony|Xplorer)!!',
7738
- 4 => 'xPAD-70',
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
7739
  ),
7740
  '@XT' =>
7741
  array (
@@ -7787,6 +8631,10 @@ DeviceModels::$ANDROID_INDEX = array (
7787
  0 => 'Y6 Max',
7788
  1 => 'Y6 Piano',
7789
  ),
 
 
 
 
7790
  '@YD' =>
7791
  array (
7792
  0 => 'YD201',
@@ -7963,14 +8811,17 @@ DeviceModels::$ANDROID_INDEX = array (
7963
  56 => 'Z01HDA',
7964
  57 => 'Z01KD',
7965
  58 => 'Z01KDA',
7966
- 59 => 'Z01MDA',
7967
- 60 => 'Z00YD',
 
 
 
7968
  ),
7969
  '@Z1' =>
7970
  array (
7971
  0 => '(BB )?Z10$!',
7972
  1 => 'Z1-H39LW',
7973
- 2 => '(HUAWEI )?(ALP|BLA|CRR|LON|MATE|MHA|MT1|MT2|MT7|M200|NXT|Z100)!!',
7974
  3 => 'Z1i',
7975
  ),
7976
  '@Z2' =>
@@ -8125,6 +8976,10 @@ DeviceModels::$ANDROID_INDEX = array (
8125
  array (
8126
  0 => '(Zopo )?ZP ?[0-9]{3,3}!!',
8127
  ),
 
 
 
 
8128
  '@ZT' =>
8129
  array (
8130
  0 => 'zt180',
@@ -8224,27 +9079,29 @@ DeviceModels::$ANDROID_INDEX = array (
8224
  94 => 'ZTE A2017',
8225
  95 => 'ZTE A2017G',
8226
  96 => 'ZTE A2017U',
8227
- 97 => 'ZTE B2015',
8228
- 98 => 'ZTE B2016',
8229
- 99 => 'ZTE B2017',
8230
- 100 => 'ZTE B2017G',
8231
- 101 => 'ZTE B2019G',
8232
- 102 => 'ZTE C2016',
8233
- 103 => 'ZTE C2017',
8234
- 104 => 'ZTE STAR',
8235
- 105 => 'ZTE Star 1',
8236
- 106 => 'ZTE S2004',
8237
- 107 => 'ZTE S2005',
8238
- 108 => 'ZTE S2007',
8239
- 109 => 'ZTE S2010',
8240
- 110 => 'ZTE S2014',
8241
- 111 => 'ZTE U9180',
8242
- 112 => 'ZTE U9370',
8243
- 113 => 'ZTE V6500',
8244
- 114 => 'ZTE V8110',
8245
- 115 => 'ZTE B860A',
8246
- 116 => 'ZTE B860AV1',
8247
- 117 => 'ZTE W1010',
 
 
8248
  ),
8249
  '@ZU' =>
8250
  array (
15
  7 => '(Hisense )?(LED[0-9]{2,2}(G|K|L|EC|XT)[0-9]{2,3})!',
16
  8 => '[SX06][0-9]{2,2}HT!!',
17
  9 => '(Huawei )?[MSTX](1|2|7|8|10)\\-[A-Z0-9][0-9]{2,2}!!',
18
+ 10 => '(HW-|HUAWEI )?(ATU|DRA|DVC|FLA|JKM|TIT|TAG||MRD|NCE|POT|TRT|SLA)!!',
19
+ 11 => 'G[0-9]{3,3}!!',
20
+ 12 => 'Y[0-9]{3,3}!!',
21
+ 13 => '[0-9AS][0-9]{2,2}HW!!',
22
+ 14 => '(USCC-|KYOCERA-)?E[0-9]{4,4}!!',
23
+ 15 => '(USCC-|KYOCERA-)?C[0-9]{4,4}!!',
24
+ 16 => '[0-9]0[0-9]KC?!!',
25
+ 17 => 'K\\-?Touch!!',
26
+ 18 => '(Lenovo ?)?(IdeaTab ?)?[AB][0-9]{4,4}!!',
27
+ 19 => '(Lenovo )?(Tab ?)?(2 ?)?[AS](7|8|10)!!',
28
+ 20 => '(Lenovo ?)?(IdeaTab ?)?[KSV][0-9]{4,4}!!',
29
+ 21 => '[0-9]0[0-9]LG!!',
30
+ 22 => 'M\\-PP!!',
31
+ 23 => 'M\\-MP!!',
32
+ 24 => 'M\\-IPRO!!',
33
+ 25 => '(MEDION|(MD )?LIFETAB)!!',
34
+ 26 => 'M\\.T\\.T\\.!!',
35
+ 27 => 'O\\+!!',
36
+ 28 => '[0-9]{2,2}PFH6[0-9]{3,3}!',
37
+ 29 => '(?:RIVO )?RHYTHM RX ?([0-9]+)!',
38
+ 30 => '[4567A]0[0-9]SH!!',
39
+ 31 => '(3|5|6|7)0[0-9]SH!!',
40
+ 32 => 'C[0-9]{4,4}!!',
41
+ 33 => 'D[0-9]{4,4}!!',
42
+ 34 => 'E[0-9]{4,4}!!',
43
+ 35 => 'F[0-9]{4,4}!!',
44
+ 36 => 'G[0-9]{4,4}!!',
45
+ 37 => 'H[0-9]{4,4}!!',
46
+ 38 => 'I[0-9]{4,4}!!',
47
+ 39 => 'J[0-9]{4,4}!!',
48
+ 40 => 'E[0-9]{2,2}[a-z]!!',
49
+ 41 => 'L[0-9]{2,2}[a-z]!!',
50
+ 42 => '(SNM\\-)?M[0-9]{2,2}[a-z]!!',
51
+ 43 => 'S[0-9]{2,2}[a-z]!!',
52
+ 44 => '(XOLO )?[ABQX][0-9]{3,4}!!',
53
+ 45 => '(ZTE ?)?N[0-9]{3,3}!!',
54
+ 46 => '(ZXY-)?(ZTE )?N[0-9]{4,4}!!',
55
+ 47 => '(ZTE ?)?U[0-9]{3,3}!!',
56
+ 48 => '(ZTE ?)?V[0-9]{3,3}[A-Z]!!',
57
+ 49 => '(ZTE ?)?V ?[0-9]{3,3}!!',
58
+ 50 => '(ZTE ?)?X[0-9]{3,3}!!',
59
+ 51 => '(ZTE )?Z[0-9]!!',
60
+ 52 => '[a-z][a-z](?:-[a-z][a-z])?, SmartTabII7!',
61
  ),
62
  '@00' =>
63
  array (
127
  1 => '(Xiaomi )?20!!',
128
  2 => '(Xiaomi |HM)?20!!',
129
  ),
130
+ '@21' =>
131
+ array (
132
+ 0 => '21061119DG',
133
+ 1 => '2107113SG',
134
+ 2 => '21081111RG',
135
+ 3 => '21091116AG',
136
+ 4 => '(Xiaomi |HM)?21!!',
137
+ 5 => '21051182G',
138
+ ),
139
+ '@22' =>
140
+ array (
141
+ 0 => '2201117TY',
142
+ 1 => '2201122G',
143
+ 2 => '2201123G',
144
+ 3 => '2201116PG',
145
+ ),
146
  '@2P' =>
147
  array (
148
  0 => '2PQ93',
152
  array (
153
  0 => '(3|5|6|7)0[0-9]SH!!',
154
  ),
155
+ '@30' =>
156
+ array (
157
+ 0 => 3007,
158
+ ),
159
  '@36' =>
160
  array (
161
  0 => '360 N4S',
185
  13 => '4027[ADNX]!',
186
  14 => '4028[AEJS]!',
187
  15 => '4032[ADEX]!',
188
+ 16 => '4033[ADLX]!',
189
  17 => '4034[ADEFGX]!',
190
  18 => '4035[ADYX]!',
191
  19 => '4036[E]!',
193
  21 => '4037[T]!',
194
  22 => '4037[V]!',
195
  23 => '4045[ADEFLOYX]!',
196
+ 24 => '4047[ADFGX]!',
197
+ 25 => '4049[DG]!',
198
+ 26 => '4055[JU]!',
199
+ 27 => '4060[A]!',
200
+ 28 => '4060[SW]!',
201
+ 29 => '40[0-9]SC!!',
202
+ 30 => '40[0-9]SO!!',
203
+ 31 => '402ZT',
204
  ),
205
  '@48' =>
206
  array (
212
  ),
213
  '@50' =>
214
  array (
215
+ 0 => '5001[D]!',
216
+ 1 => '5002[DH]!',
217
+ 2 => '5003[D]!',
218
+ 3 => '5009[D]!',
219
+ 4 => '5010[DEGSUX]!',
220
+ 5 => '5011[A]!',
221
+ 6 => '5012[G]!',
222
+ 7 => '5015[ADEX]!',
223
+ 8 => '5016[AJ]!',
224
+ 9 => '5017[B]!',
225
+ 10 => '5017[ADEOX]!',
226
+ 11 => '5019[D]!',
227
+ 12 => '5020[A]!',
228
+ 13 => '5022[DEX]!',
229
+ 14 => '5023[F]!',
230
+ 15 => '5024[DF]!',
231
+ 16 => '5025[DEGX]!',
232
+ 17 => '5027[B]!',
233
+ 18 => '5030[DF]!',
234
+ 19 => '5033[ADJOX]!',
235
+ 20 => '5034[D]!',
236
+ 21 => '5036[D]!',
237
+ 22 => '5038[ADEX]!',
238
+ 23 => '5039[D]!',
239
+ 24 => '5041[C]!',
240
+ 25 => '5042[ADEFGTWXY]!',
241
+ 26 => '5044[ADGIOSTY]!',
242
+ 27 => '5045[ADFGJTXY]!',
243
+ 28 => '5046[DGIJUY]!',
244
+ 29 => '5047[DIUY]!',
245
+ 30 => '5048[UY]!',
246
+ 31 => '5049[EGSWZ]!',
247
+ 32 => '5050[ASYX]!',
248
+ 33 => '5051[ADJMX]!',
249
+ 34 => '5052[DY]!',
250
+ 35 => '5053[DK]!',
251
+ 36 => '5054[ADOSTX]!',
252
+ 37 => '5054[NW]!',
253
+ 38 => '5056[ADEINUWX]!',
254
+ 39 => '5056[O]!',
255
+ 40 => '5057[M]!',
256
+ 41 => '5058[I]!',
257
+ 42 => '5059[ADJTXY]!',
258
+ 43 => '5060[D]!',
259
+ 44 => '5061[KU]!',
260
+ 45 => '5065[ADJNWX]!',
261
+ 46 => '5070[DJX]!',
262
+ 47 => '5080[A]!',
263
+ 48 => '5080[DFQX]!',
264
+ 49 => '5085[CDJNOYX]!',
265
+ 50 => '5086[ADY]!',
266
+ 51 => '5090[Y]!',
267
+ 52 => '5095[BIKY]!',
268
+ 53 => '5096[AI]!',
269
+ 54 => '5098[OS]!',
270
+ 55 => '5099[ADY]!',
271
+ 56 => '504Q',
272
+ 57 => '504Q+',
273
+ 58 => '504QP',
274
+ 59 => '501LV',
275
+ 60 => '(48|50|55)AX600C!',
276
+ 61 => '5080C Pro',
277
+ 62 => '50[0-9]SO!!',
278
+ 63 => '502ZT',
279
  ),
280
  '@55' =>
281
  array (
300
  array (
301
  0 => '6014[DX]!',
302
  1 => '6016[ADEX]!',
303
+ 2 => '6025[D]!',
304
+ 3 => '6031[X]!',
305
+ 4 => '6036[AYX]!',
306
+ 5 => '6037[BIKY]!',
307
+ 6 => '6039[AHJKSY]!',
308
+ 7 => '6042[D]!',
309
+ 8 => '6043[AD]!',
310
+ 9 => '6044D',
311
+ 10 => '6045[BFGIKOXY]!',
312
+ 11 => '6050[AFWY]!',
313
+ 12 => '6055[ABDHIKPUY]!',
314
+ 13 => '6056[D]!',
315
+ 14 => '6058[D]!',
316
+ 15 => '6060[S]!',
317
+ 16 => '6062[W]!',
318
+ 17 => '6070[KOY]!',
319
+ 18 => '602LV',
320
+ 19 => '60[0-9]SO!!',
321
+ 20 => '602ZT',
322
+ 21 => '6034R ORANGE Niva',
323
+ ),
324
+ '@66' =>
325
+ array (
326
+ 0 => 6607,
327
  ),
328
  '@70' =>
329
  array (
363
  array (
364
  0 => '8020[D]!',
365
  1 => '8030[BY]!',
366
+ 2 => 8063,
367
+ 3 => 8082,
368
+ 4 => '8082 EEA',
369
+ 5 => '8094[X]!',
370
+ 6 => 8022,
371
+ 7 => '801ES',
372
+ 8 => '80-1',
373
+ 9 => '801a',
374
+ 10 => '801s',
375
+ 11 => '802w',
376
+ 12 => '800P31C',
377
  ),
378
  '@81' =>
379
  array (
423
  9 => '9022[SX]!',
424
  10 => '9024[OW]!',
425
  11 => '9025[MQ]!',
426
+ 12 => '9026[X]!',
427
+ 13 => '9021[AM]!',
428
+ 14 => '909d',
429
+ 15 => 9088,
430
+ 16 => '9020[A]!',
431
  ),
432
  '@93' =>
433
  array (
442
  '@A0' =>
443
  array (
444
  0 => 'A001',
445
+ 1 => 'A007',
446
+ 2 => 'A0001',
447
+ 3 => 'A0002',
448
+ 4 => 'A05510',
449
  ),
450
  '@A1' =>
451
  array (
482
  30 => 'A11(M5A7)',
483
  31 => 'A11s(M5A7)',
484
  32 => 'A15(E6C2)',
485
+ 33 => 'A11 Pro Max',
486
  ),
487
  '@A2' =>
488
  array (
502
  7 => 'A31',
503
  8 => 'A31c',
504
  9 => 'A31t',
505
+ 10 => 'A31u',
506
+ 11 => 'A33f',
507
+ 12 => 'A33w',
508
+ 13 => 'A37f',
509
+ 14 => 'A37fw',
510
+ 15 => 'A3',
511
  ),
512
  '@A4' =>
513
  array (
548
  17 => 'A500CG',
549
  18 => 'A55i',
550
  19 => 'A52',
551
+ 20 => 'A51',
552
+ 21 => 'A51f',
553
+ 22 => 'A51w',
554
+ 23 => 'A5000',
555
+ 24 => 'a5',
556
  ),
557
  '@A6' =>
558
  array (
587
  16 => 'A750',
588
  17 => 'A7000-a',
589
  18 => 'A7010a48',
590
+ 19 => 'A73',
591
+ 20 => 'A7272+',
592
+ 21 => 'A70(CY6T)',
593
+ 22 => 'A78h四核(C1V3)',
594
  ),
595
  '@A8' =>
596
  array (
600
  3 => 'A862W',
601
  4 => 'A80KSC!',
602
  5 => 'A80HF',
603
+ 6 => 'A80Plus',
604
+ 7 => 'A80Pro',
605
+ 8 => 'A89',
606
+ 9 => 'A820t',
607
+ 10 => 'A87',
608
+ 11 => 'A853',
609
+ 12 => 'A853 Milestone',
610
+ 13 => 'A878 Duo',
611
+ 14 => 'A898 Duo',
612
+ 15 => 'A8HD',
613
+ 16 => 'A80h双核(A4P9)',
614
+ 17 => 'A80 se??(M5MA)',
615
+ 18 => 'A80 se四核(M5MC)',
616
+ 19 => 'A80HD四核(C4H6)',
617
+ 20 => 'A88 mini四核(M1C5)',
618
+ 21 => 'A81E',
619
  ),
620
  '@A9' =>
621
  array (
626
  4 => 'A90S',
627
  5 => 'A953',
628
  6 => 'A955',
629
+ 7 => 'A9 Pro',
630
  ),
631
  '@AA' =>
632
  array (
634
  ),
635
  '@AC' =>
636
  array (
637
+ 0 => 'Acer Chromebook R11!',
638
+ 1 => 'Acer Chromebook R13!',
639
+ 2 => 'Acer Chromebook 15!',
640
  3 => '(AC|BC|LC|MT|RC|QS|VM|TS|OC)[0-9]{4,4}[A-Z]!!',
641
  4 => 'AC45BHE',
642
  5 => 'AC50BHE',
643
  6 => 'AC50DHE',
644
  7 => 'AC45NE',
645
+ 8 => 'Action-X3',
646
+ 9 => 'ACM3066-8',
647
+ 10 => '(Explay|X-tremer|ActiveD|Informer|Surfer)!!',
648
+ 11 => 'AC2001',
649
+ 12 => 'AC2003',
650
+ 13 => 'ACT2000',
651
+ 14 => 'ACU Volvo',
652
+ 15 => 'Acqua',
653
  ),
654
  '@AD' =>
655
  array (
730
  3 => 'AG Go-Tab Access',
731
  4 => 'AG Chrome Go Tab 7.0',
732
  5 => 'AGS-(L09|W09)!',
733
+ 6 => 'AGS2-(L09|W09)!',
734
+ 7 => '(KATBL|Kogan|Agora)!!',
735
  ),
736
  '@AI' =>
737
  array (
803
  33 => '(Allview|Alldro)!!',
804
  34 => 'Allwinner A10',
805
  35 => '(Highscreen|Alpha|Bay|Boost|Cosmo|Explosion|Power|Prime|Zera)!!',
806
+ 36 => '(HUAWEI )?(ALP|BLA|CRR|EVR|HMA|LIO|LON|LYA|MATE|MHA|MT1|MT2|MT7|M200|NOH|NXT|SNE|TAS|Z100)!!',
807
+ 37 => '(HW-|HUAWEI )?(ALE|ANA|ANE|CDY|CLT|D2|DAV|ELE|ELS|EML|EVA|FIG|G6|G7|GRA|JNY|MAR|M100|P2|P6|P7|PPA|PRA|RIO|SC|Sophia|STK|VIE|VKY|VNS|VOG|VTR|WAS)!!',
808
  38 => 'Alfa A93 POP',
809
  39 => 'Alfa L',
810
  40 => 'Ally',
841
  25 => 'AMD120',
842
  26 => '(Amaze|Hitech)!!',
843
  27 => 'Amaze 4G',
844
+ 28 => '(HW-|HUAWEI )?(AMN|ART|AQM|CRO|LUA|CUN|DUB|SCC|SCU|CAM|LDN|LYO|MED|MYA)!!',
845
+ 29 => '(Amazing|Fantastic)!!',
846
  ),
847
  '@AN' =>
848
  array (
890
  41 => 'AN10G2-LZ',
891
  42 => 'AN10BG3-LZ',
892
  43 => 'AN7DG3C',
893
+ 44 => '(HW-|HUAWEI )?(ALE|ANA|ANE|CDY|CLT|D2|DAV|ELE|ELS|EML|EVA|FIG|G6|G7|GRA|JNY|MAR|M100|P2|P6|P7|PPA|PRA|RIO|SC|Sophia|STK|VIE|VKY|VNS|VOG|VTR|WAS)!!',
894
  45 => '(iBall )?Andi!!',
895
  46 => 'AND1',
896
  47 => 'AND1E',
951
  11 => 'Aquila 101-1008 3G',
952
  12 => 'Aquila LE 080-0508',
953
  13 => 'Aquila SE 090-0508',
954
+ 14 => '(HW-|HUAWEI )?(AMN|ART|AQM|CRO|LUA|CUN|DUB|SCC|SCU|CAM|LDN|LYO|MED|MYA)!!',
955
+ 15 => '(Intex )?Aqua!!',
956
+ 16 => 'AQUOS!!',
957
+ 17 => 'aqua',
958
+ 18 => 'AQT80',
959
  ),
960
  '@AR' =>
961
  array (
987
  25 => 'arrowsM03',
988
  26 => 'ARIES 101',
989
  27 => 'ARIES 785',
990
+ 28 => '(HW-|HUAWEI )?(AMN|ART|AQM|CRO|LUA|CUN|DUB|SCC|SCU|CAM|LDN|LYO|MED|MYA)!!',
991
+ 29 => 'ARA YS608',
992
+ 30 => 'Arctic450',
993
+ 31 => 'Arc',
994
+ 32 => 'Arc S',
995
+ 33 => 'Armor 2',
996
+ 34 => 'Armor 3W',
997
+ 35 => 'Armor 3WT',
998
+ 36 => 'Armor 5S',
999
+ 37 => 'Armor 6E',
1000
+ 38 => 'Armor 7',
1001
+ 39 => 'Armor 7E',
1002
+ 40 => 'Armor 8',
1003
+ 41 => 'Armor 9',
1004
+ 42 => 'Armor 9E',
1005
+ 43 => 'Armor 10 5G',
1006
+ 44 => 'Armor 11 5G',
1007
+ 45 => 'Armor 11T 5G',
1008
+ 46 => 'Armor X5',
1009
+ 47 => 'Armor X7',
1010
+ 48 => 'Armor X7 Pro',
1011
+ 49 => 'Armor X8',
1012
  ),
1013
  '@AS' =>
1014
  array (
1015
+ 0 => 'ASUS Chromebook Flip!',
1016
+ 1 => 'Astone A108',
1017
+ 2 => 'aspire1000s',
1018
+ 3 => 'Aspire!!',
1019
+ 4 => 'ASK SP[0-9]{3,3}!!',
1020
+ 5 => 'ASTRI',
1021
+ 6 => 'asus laptop',
1022
+ 7 => 'ASUS T20',
1023
+ 8 => 'ASUS Pad ME370T',
1024
+ 9 => 'Asus Fonepad ME371MG 8GB',
1025
+ 10 => 'AST21',
1026
+ 11 => 'asus google cube',
1027
+ 12 => 'ASP-4300W',
1028
+ 13 => 'ASP-4500Z',
1029
+ 14 => 'ASP-5000H',
1030
+ 15 => 'Asus A10',
1031
+ 16 => '(Huawei|Ascend|HW-)!!',
1032
+ 17 => 'AS740',
1033
+ 18 => 'AS870 4G',
1034
+ 19 => 'AS985',
1035
+ 20 => 'AS650C',
1036
+ 21 => 'Aster',
1037
+ 22 => 'Aster T',
 
1038
  ),
1039
  '@AT' =>
1040
  array (
1054
  13 => 'AT1G*',
1055
  14 => 'AT7E',
1056
  15 => 'ATP515CKIT',
1057
+ 16 => '(HW-|HUAWEI )?(ATU|DRA|DVC|FLA|JKM|TIT|TAG||MRD|NCE|POT|TRT|SLA)!!',
1058
+ 17 => '(HW-|HUAWEI |HONOR )?(ATH|AUM|BLN|BKL|BKK|BND|CHE|CHM|COL|COR|DUA|DUK|DLI|EDI|FRD|HLK|HN3|H30|H60|HOL|HRY|JAT|JMM|JSN|LRA|KIW|KSA|LLD|NEM|NMO|NTH|NTN|OXF|PE|PCT|PLK|RNE|SCL|TNY|KNT|CAM|STF|HDN|YAL)!!',
1059
+ 18 => 'aTab9.7 IPS',
1060
+ 19 => 'AT735',
1061
+ 20 => 'Atrix 2',
1062
+ 21 => 'Atrix 2 WeifanZ',
1063
+ 22 => 'Atrix 4G',
1064
+ 23 => 'Atrix 4G ME860',
1065
+ 24 => 'Atrix 4G MB860',
1066
+ 25 => 'Atrix HD',
1067
+ 26 => 'AtrixHD',
1068
+ 27 => 'ATLANTIS',
1069
+ 28 => 'ATP7526',
1070
+ 29 => 'ATP7683',
1071
+ 30 => 'AT1S0',
1072
+ 31 => 'AT7-A',
1073
+ 32 => 'AT7-B',
1074
+ 33 => 'AT7-C',
1075
+ 34 => 'AT10-A',
1076
+ 35 => 'AT10LE-A',
1077
+ 36 => 'AT10PE-A',
1078
+ 37 => 'AT100',
1079
+ 38 => 'AT200',
1080
+ 39 => 'AT270',
1081
+ 40 => 'AT300',
1082
+ 41 => 'AT300SE',
1083
+ 42 => 'AT330',
1084
+ 43 => 'AT374',
1085
+ 44 => 'AT400',
1086
+ 45 => 'AT470',
1087
+ 46 => 'AT500',
1088
+ 47 => 'AT500a',
1089
+ 48 => 'AT503',
1090
+ 49 => 'AT570',
1091
+ 50 => 'AT703',
1092
+ 51 => 'AT830',
1093
+ 52 => 'AT-A[QS][0-9]{2,2}!!',
1094
+ 53 => 'ATLAS W',
1095
  ),
1096
  '@AU' =>
1097
  array (
1098
  0 => 'Aurora-II',
1099
  1 => 'AUX!!',
1100
+ 2 => '(HW-|HUAWEI |HONOR )?(ATH|AUM|BLN|BKL|BKK|BND|CHE|CHM|COL|COR|DUA|DUK|DLI|EDI|FRD|HLK|HN3|H30|H60|HOL|HRY|JAT|JMM|JSN|LRA|KIW|KSA|LLD|NEM|NMO|NTH|NTN|OXF|PE|PCT|PLK|RNE|SCL|TNY|KNT|CAM|STF|HDN|YAL)!!',
1101
+ 3 => '(Aura|iberry|AUXUS)!!',
1102
+ 4 => 'AURUS III',
1103
  ),
1104
  '@AV' =>
1105
  array (
1127
  1 => 'B15',
1128
  2 => 'B15Q',
1129
  ),
1130
+ '@B2' =>
1131
+ array (
1132
+ 0 => 'B2021',
1133
+ ),
1134
  '@B3' =>
1135
  array (
1136
  0 => 'B3-A10',
1140
  4 => 'B3-A32',
1141
  5 => 'B3-A40',
1142
  6 => 'B3-A40FHD',
1143
+ 7 => 'B3-A50FHD',
1144
+ 8 => 'B3000',
1145
+ ),
1146
+ '@B5' =>
1147
+ array (
1148
+ 0 => 'B5532',
1149
  ),
1150
  '@B9' =>
1151
  array (
1161
  5 => 'Barnes & Noble Nook HD+',
1162
  6 => '(Highscreen|Alpha|Bay|Boost|Cosmo|Explosion|Power|Prime|Zera)!!',
1163
  7 => 'BAH-(W09|AL00|L09)!',
1164
+ 8 => 'BAH2-(AL10|L09|W09|W19)!',
1165
+ 9 => 'BAH3-(W09)!',
1166
+ 10 => '(HW-|HUAWEI )?BAC-(AL00|L03|L21|L22|TL00)!',
1167
+ 11 => 'Backflip',
1168
+ 12 => 'Backflip Me600',
1169
+ 13 => 'Bambook S1',
1170
+ 14 => 'BARRY',
1171
+ 15 => 'BASE!!',
1172
  ),
1173
  '@BB' =>
1174
  array (
1227
  13 => 'BePhone UN030',
1228
  14 => 'Best ?sonny!!',
1229
  15 => 'BEAN 454',
1230
+ 16 => 'BE202[69]!',
1231
+ 17 => 'BE2013',
1232
+ 18 => 'beetle',
1233
+ 19 => 'Be Touch 2',
1234
+ 20 => 'Beeline!!',
1235
  ),
1236
  '@BF' =>
1237
  array (
1247
  3 => 'bg2qa0v4 !',
1248
  4 => 'bg2qv4 !',
1249
  5 => 'BGO-(DL09|L03)!',
1250
+ 6 => 'BG2-(U01|W09)!',
1251
  ),
1252
  '@BH' =>
1253
  array (
1260
  2 => 'Bird!!',
1261
  3 => 'BizSmartPhone',
1262
  4 => 'BIP-6000',
1263
+ 5 => 'BISON',
1264
+ 6 => 'BISON Pro',
1265
+ 7 => 'BISON GT',
1266
+ 8 => 'BIRDY',
1267
  ),
1268
  '@BK' =>
1269
  array (
1270
  0 => '(BDS|BHX|BKO)\\-!!',
1271
+ 1 => '(HW-|HUAWEI |HONOR )?(ATH|AUM|BLN|BKL|BKK|BND|CHE|CHM|COL|COR|DUA|DUK|DLI|EDI|FRD|HLK|HN3|H30|H60|HOL|HRY|JAT|JMM|JSN|LRA|KIW|KSA|LLD|NEM|NMO|NTH|NTN|OXF|PE|PCT|PLK|RNE|SCL|TNY|KNT|CAM|STF|HDN|YAL)!!',
1272
  ),
1273
  '@BL' =>
1274
  array (
1277
  2 => 'BlueStacks!',
1278
  3 => 'BlackBerry Runtime for Android Apps',
1279
  4 => 'BLACKBERRY P\'9982',
1280
+ 5 => 'BL6000Pro',
1281
+ 6 => '(BLU|DASH|LIFE|NEO|STUDIO|VIVO)!!',
1282
+ 7 => 'Bluboo S1',
1283
+ 8 => 'Blaze S180',
1284
+ 9 => 'BLADE LE 70',
1285
+ 10 => '(HUAWEI )?(ALP|BLA|CRR|EVR|HMA|LIO|LON|LYA|MATE|MHA|MT1|MT2|MT7|M200|NOH|NXT|SNE|TAS|Z100)!!',
1286
+ 11 => '(HW-|HUAWEI |HONOR )?(ATH|AUM|BLN|BKL|BKK|BND|CHE|CHM|COL|COR|DUA|DUK|DLI|EDI|FRD|HLK|HN3|H30|H60|HOL|HRY|JAT|JMM|JSN|LRA|KIW|KSA|LLD|NEM|NMO|NTH|NTN|OXF|PE|PCT|PLK|RNE|SCL|TNY|KNT|CAM|STF|HDN|YAL)!!',
1287
+ 12 => '(HW-|HUAWEI )?(BLL|CHC|TAG|KII)!!',
1288
+ 13 => '(BLF-)?lephone!!',
1289
+ 14 => 'Blackphone 2',
1290
+ 15 => 'BLOOM',
1291
+ 16 => 'BLACK',
1292
+ 17 => '(ZTE )?Blade!!',
1293
  ),
1294
  '@BM' =>
1295
  array (
1309
  6 => '(NOOK )?BNTV(800)!',
1310
  7 => 'BN Nook HD',
1311
  8 => 'BN NookHD+',
1312
+ 9 => '(HW-|HUAWEI |HONOR )?(ATH|AUM|BLN|BKL|BKK|BND|CHE|CHM|COL|COR|DUA|DUK|DLI|EDI|FRD|HLK|HN3|H30|H60|HOL|HRY|JAT|JMM|JSN|LRA|KIW|KSA|LLD|NEM|NMO|NTH|NTN|OXF|PE|PCT|PLK|RNE|SCL|TNY|KNT|CAM|STF|HDN|YAL)!!',
1313
  ),
1314
  '@BO' =>
1315
  array (
1411
  ),
1412
  '@BV' =>
1413
  array (
1414
+ 0 => 'BV4900Pro',
1415
+ 1 => 'BV5500Plus',
1416
+ 2 => 'BV5900',
1417
+ 3 => 'BV6300Pro',
1418
+ 4 => 'BV6600',
1419
+ 5 => 'BV6900',
1420
+ 6 => 'BV8000Pro',
1421
+ 7 => 'BV9100',
1422
+ 8 => 'BV9500',
1423
+ 9 => 'BV9500Plus',
1424
+ 10 => 'BV9600E',
1425
+ 11 => 'BV9600Pro',
1426
+ 12 => 'BV9800Pro',
1427
+ 13 => 'BV9900E',
1428
+ 14 => 'BV9900Pro',
1429
+ ),
1430
+ '@C1' =>
1431
+ array (
1432
+ 0 => 'C15 Pro',
1433
  ),
1434
  '@C2' =>
1435
  array (
1436
+ 0 => 'C21 Pro',
1437
+ 1 => 'C2',
1438
  ),
1439
  '@C5' =>
1440
  array (
1473
  array (
1474
  0 => 'Cardhu',
1475
  1 => 'CA907AAC0G',
1476
+ 2 => 'Carbon 1 Mark II',
1477
+ 3 => 'Camangi-Mangrove7',
1478
+ 4 => 'CAPTIVA!!',
1479
+ 5 => 'Carpad T5',
1480
+ 6 => 'Carpad T61 2g',
1481
+ 7 => 'CAL21',
1482
+ 8 => 'CA201SP',
1483
+ 9 => 'CA-201L',
1484
+ 10 => 'Casper VIA!!',
1485
+ 11 => 'CAT!!',
1486
+ 12 => 'Candy TV',
1487
+ 13 => '(HW-|HUAWEI |HONOR )?(ATH|AUM|BLN|BKL|BKK|BND|CHE|CHM|COL|COR|DUA|DUK|DLI|EDI|FRD|HLK|HN3|H30|H60|HOL|HRY|JAT|JMM|JSN|LRA|KIW|KSA|LLD|NEM|NMO|NTH|NTN|OXF|PE|PCT|PLK|RNE|SCL|TNY|KNT|CAM|STF|HDN|YAL)!!',
1488
+ 14 => '(HW-|HUAWEI )?(AMN|ART|AQM|CRO|LUA|CUN|DUB|SCC|SCU|CAM|LDN|LYO|MED|MYA)!!',
1489
+ 15 => '(HW-|HUAWEI )?CAZ-(AL10|TL10|TL20)!',
1490
+ 16 => '(HW-|HUAWEI )?CAN-(L01|L11|L12)!',
1491
+ 17 => 'calgary',
1492
+ 18 => 'Captivate-I897',
1493
+ 19 => 'capricorn',
1494
  ),
1495
  '@CC' =>
1496
  array (
1497
  0 => 'CCE SK352',
1498
  ),
1499
+ '@CD' =>
1500
+ array (
1501
+ 0 => '(HW-|HUAWEI )?(ALE|ANA|ANE|CDY|CLT|D2|DAV|ELE|ELS|EML|EVA|FIG|G6|G7|GRA|JNY|MAR|M100|P2|P6|P7|PPA|PRA|RIO|SC|Sophia|STK|VIE|VKY|VNS|VOG|VTR|WAS)!!',
1502
+ ),
1503
  '@CE' =>
1504
  array (
1505
  0 => 'cedartrail',
1523
  11 => 'Cherry w500',
1524
  12 => 'CHUWI!!',
1525
  13 => 'CHONG!!',
1526
+ 14 => '(HW-|HUAWEI |HONOR )?(ATH|AUM|BLN|BKL|BKK|BND|CHE|CHM|COL|COR|DUA|DUK|DLI|EDI|FRD|HLK|HN3|H30|H60|HOL|HRY|JAT|JMM|JSN|LRA|KIW|KSA|LLD|NEM|NMO|NTH|NTN|OXF|PE|PCT|PLK|RNE|SCL|TNY|KNT|CAM|STF|HDN|YAL)!!',
1527
  15 => '(HW-|HUAWEI )?(BLL|CHC|TAG|KII)!!',
1528
  16 => 'chagall',
1529
  17 => 'chiron',
1558
  4 => 'Clanga SE 097-1008',
1559
  5 => 'CLP281X',
1560
  6 => 'Click',
1561
+ 7 => '(HW-|HUAWEI )?(ALE|ANA|ANE|CDY|CLT|D2|DAV|ELE|ELS|EML|EVA|FIG|G6|G7|GRA|JNY|MAR|M100|P2|P6|P7|PPA|PRA|RIO|SC|Sophia|STK|VIE|VKY|VNS|VOG|VTR|WAS)!!',
1562
+ 8 => '(Intex )?Cloud!!',
1563
+ 9 => 'CLIQ',
1564
+ 10 => 'CLIQ XT',
1565
+ 11 => 'CLIQ2',
1566
  ),
1567
  '@CM' =>
1568
  array (
1569
  0 => 'CMP!!',
1570
  1 => '(cm|aokp) tenderloin!',
1571
+ 2 => 'CMR-(AL09|AL19|W09|W19)!',
1572
+ 3 => 'CM980',
1573
+ 4 => 'CM990',
1574
  ),
1575
  '@CN' =>
1576
  array (
1592
  10 => 'COSHIP F2',
1593
  11 => 'COWON!!',
1594
  12 => 'COZCO C1 Plus',
1595
+ 13 => 'Core-M5',
1596
+ 14 => 'Collo DG100',
1597
+ 15 => 'Collo 2 DG120',
1598
+ 16 => 'Connect-2G-2.0',
1599
+ 17 => '(Highscreen|Alpha|Bay|Boost|Cosmo|Explosion|Power|Prime|Zera)!!',
1600
+ 18 => 'Coquettish Red',
1601
+ 19 => '(HW-|HUAWEI |HONOR )?(ATH|AUM|BLN|BKL|BKK|BND|CHE|CHM|COL|COR|DUA|DUK|DLI|EDI|FRD|HLK|HN3|H30|H60|HOL|HRY|JAT|JMM|JSN|LRA|KIW|KSA|LLD|NEM|NMO|NTH|NTN|OXF|PE|PCT|PLK|RNE|SCL|TNY|KNT|CAM|STF|HDN|YAL)!!',
1602
+ 20 => 'Comet',
1603
+ 21 => 'Corvair',
1604
+ 22 => 'COOLPIX S800c',
1605
+ 23 => 'COOLPIX S810c',
1606
+ 24 => 'Constellation V',
1607
  ),
1608
  '@CP' =>
1609
  array (
1612
  2 => 'CP8676!',
1613
  3 => 'CP8298!',
1614
  4 => 'CPN-(W09|AL00|L09)!',
1615
+ 5 => 'CPH1803',
1616
+ 6 => 'CPH1809',
1617
+ 7 => 'CPH1901',
1618
+ 8 => 'CPH1937',
1619
+ 9 => 'CPH1941',
1620
+ 10 => 'CPH1605',
1621
+ 11 => 'CPH1701',
1622
+ 12 => 'CPH1717',
1623
+ 13 => 'CPH1801',
1624
+ 14 => 'CPH1729',
1625
+ 15 => 'CPH1827',
1626
+ 16 => 'CPH1609',
1627
+ 17 => 'CPH1613',
1628
+ 18 => 'CPH1723',
1629
+ 19 => 'CPH1727',
1630
+ 20 => 'CPH1819',
1631
+ 21 => 'CPH1821',
1632
+ 22 => 'CPH1859',
1633
+ 23 => 'CPH1881',
1634
+ 24 => 'CPH1823',
1635
+ 25 => 'CPH1831',
1636
+ 26 => 'CPH1837',
1637
+ 27 => 'CPH1871',
1638
+ 28 => 'CPH1875',
1639
+ 29 => 'CPH1877',
1640
+ 30 => 'CPH1893',
1641
+ 31 => 'CPH1903',
1642
+ 32 => 'CPH1907',
1643
+ 33 => 'CPH1909',
1644
+ 34 => 'CPH1911',
1645
+ 35 => 'CPH1917',
1646
+ 36 => 'CPH1919',
1647
+ 37 => 'CPH1920',
1648
+ 38 => 'CPH1923',
1649
+ 39 => 'CPH1931',
1650
+ 40 => 'CPH1933',
1651
+ 41 => 'CPH1951',
1652
+ 42 => 'CPH1969',
1653
+ 43 => 'CPH1989',
1654
+ 44 => 'CPH2005',
1655
+ 45 => 'CPH2009',
1656
+ 46 => 'CPH2021',
1657
+ 47 => 'CPH2023',
1658
+ 48 => 'CPH2025',
1659
+ 49 => 'CPH2043',
1660
+ 50 => 'CPH2065',
1661
+ 51 => 'CPH2067',
1662
+ 52 => 'CPH2069',
1663
+ 53 => 'CPH2083',
1664
+ 54 => 'CPH2089',
1665
+ 55 => 'CPH2091',
1666
+ 56 => 'CPH2121',
1667
+ 57 => 'CPH2125',
1668
+ 58 => 'CPH2127',
1669
+ 59 => 'CPH2135',
1670
+ 60 => 'CPH2145',
1671
+ 61 => 'CPH2161',
1672
+ 62 => 'CPH2173',
1673
+ 63 => 'CPH2185',
1674
+ 64 => 'CPH2195',
1675
+ 65 => 'CPH2197',
1676
+ 66 => 'CPH2205',
1677
+ 67 => 'CPH2207',
1678
+ 68 => 'CPH2211',
1679
+ 69 => 'CPH2219',
1680
+ 70 => 'CPH2247',
1681
+ 71 => 'CPH2251',
1682
+ 72 => 'CPH2269',
1683
+ 73 => 'CPH2271',
1684
+ 74 => 'CPH2273',
1685
+ 75 => 'CPH2305',
1686
+ 76 => 'CPH2307',
1687
+ 77 => 'CPH2371',
1688
+ 78 => 'CPH1721',
1689
+ 79 => 'CPH1611',
1690
+ 80 => 'CPH1879',
1691
+ 81 => 'CPH1861',
1692
+ 82 => 'CPH1979',
1693
  ),
1694
  '@CR' =>
1695
  array (
1697
  1 => 'CRESTA.CTP888',
1698
  2 => 'Cross!!',
1699
  3 => 'Crosscall!!',
1700
+ 4 => '(HUAWEI )?(ALP|BLA|CRR|EVR|HMA|LIO|LON|LYA|MATE|MHA|MT1|MT2|MT7|M200|NOH|NXT|SNE|TAS|Z100)!!',
1701
+ 5 => '(HW-|HUAWEI )?(AMN|ART|AQM|CRO|LUA|CUN|DUB|SCC|SCU|CAM|LDN|LYO|MED|MYA)!!',
1702
  6 => 'CRONO 22',
1703
  7 => 'Crescent',
1704
  ),
1705
  '@CS' =>
1706
  array (
1707
+ 0 => 'CS45XA',
1708
+ 1 => 'CS-1A13',
1709
+ 2 => '(CSL[- ])?(Spice[- ]?)?Mi(-| )?[0-9]{3,3}!!',
1710
  ),
1711
  '@CT' =>
1712
  array (
1732
  0 => 'CUBOT!!',
1733
  1 => '(CUBE ?)?(K8|U1|U2|U3|U5|U6|U8|U9)[0-9]?GT!!',
1734
  2 => 'CUBE!!',
1735
+ 3 => '(HW-|HUAWEI )?(AMN|ART|AQM|CRO|LUA|CUN|DUB|SCC|SCU|CAM|LDN|LYO|MED|MYA)!!',
1736
  ),
1737
  '@CW' =>
1738
  array (
1771
  '@D2' =>
1772
  array (
1773
  0 => 'D2-[0-9]{3,3}!!',
1774
+ 1 => '(HW-|HUAWEI )?(ALE|ANA|ANE|CDY|CLT|D2|DAV|ELE|ELS|EML|EVA|FIG|G6|G7|GRA|JNY|MAR|M100|P2|P6|P7|PPA|PRA|RIO|SC|Sophia|STK|VIE|VKY|VNS|VOG|VTR|WAS)!!',
1775
  ),
1776
  '@D5' =>
1777
  array (
1804
  1 => '(BLU|DASH|LIFE|NEO|STUDIO|VIVO)!!',
1805
  2 => 'Dakele A380',
1806
  3 => 'DAKELE MC001',
1807
+ 4 => '(HW-|HUAWEI )?(ALE|ANA|ANE|CDY|CLT|D2|DAV|ELE|ELS|EML|EVA|FIG|G6|G7|GRA|JNY|MAR|M100|P2|P6|P7|PPA|PRA|RIO|SC|Sophia|STK|VIE|VKY|VNS|VOG|VTR|WAS)!!',
1808
  5 => 'DATAM803HC',
1809
  6 => 'DATAM805HC',
1810
  7 => 'DATAM819HD!',
1887
  1 => 'DL8006',
1888
  2 => 'DLX',
1889
  3 => 'DLXU',
1890
+ 4 => '(HW-|HUAWEI |HONOR )?(ATH|AUM|BLN|BKL|BKK|BND|CHE|CHM|COL|COR|DUA|DUK|DLI|EDI|FRD|HLK|HN3|H30|H60|HOL|HRY|JAT|JMM|JSN|LRA|KIW|KSA|LLD|NEM|NMO|NTH|NTN|OXF|PE|PCT|PLK|RNE|SCL|TNY|KNT|CAM|STF|HDN|YAL)!!',
1891
  5 => 'dL1',
1892
+ 6 => 'DLT-H0',
1893
  ),
1894
  '@DM' =>
1895
  array (
1896
  0 => 'DM0[0-9]{2,2}(K|SH)!!',
1897
+ 1 => 'DM001c Frozen',
1898
+ 2 => 'DM001c Mickey',
1899
+ 3 => 'DM001c Princess',
1900
+ 4 => 'DM-01G',
1901
+ 5 => 'DM-01K',
1902
+ 6 => 'DM-02H',
1903
+ 7 => 'DMC-CM1',
1904
+ 8 => 'DM-01H',
1905
+ 9 => 'DM-01J',
1906
  ),
1907
  '@DN' =>
1908
  array (
1911
  2 => 'DNS S!!',
1912
  3 => 'DNSS4003',
1913
  4 => 'DNS4502M',
1914
+ 5 => 'DN2101',
1915
+ 6 => 'DN2103',
1916
  ),
1917
  '@DO' =>
1918
  array (
1923
  4 => 'DOOV!!',
1924
  5 => 'Doro Liberto!!',
1925
  6 => 'Doro 8030',
1926
+ 7 => 'Doro 8040',
1927
+ 8 => 'Doro 824',
1928
+ 9 => 'Doro PhoneEasy 745',
1929
+ 10 => 'Dolphin 70e Black',
1930
+ 11 => 'Docomo HT-03A',
1931
  ),
1932
  '@DP' =>
1933
  array (
1941
  0 => 'Dream',
1942
  1 => '(GIO-)?(GiONEE[- ])?Dream D1!',
1943
  2 => 'Droid Incredible',
1944
+ 3 => '(HW-|HUAWEI )?(ATU|DRA|DVC|FLA|JKM|TIT|TAG||MRD|NCE|POT|TRT|SLA)!!',
1945
  4 => 'DroniX-0.5',
1946
  5 => 'Droid',
1947
  6 => 'DROID',
1977
  '@DS' =>
1978
  array (
1979
  0 => 'Dslide!!',
1980
+ 1 => 'DSB-0220',
1981
+ 2 => 'DSB-0230',
1982
  ),
1983
  '@DT' =>
1984
  array (
1987
  ),
1988
  '@DU' =>
1989
  array (
1990
+ 0 => '(HW-|HUAWEI |HONOR )?(ATH|AUM|BLN|BKL|BKK|BND|CHE|CHM|COL|COR|DUA|DUK|DLI|EDI|FRD|HLK|HN3|H30|H60|HOL|HRY|JAT|JMM|JSN|LRA|KIW|KSA|LLD|NEM|NMO|NTH|NTN|OXF|PE|PCT|PLK|RNE|SCL|TNY|KNT|CAM|STF|HDN|YAL)!!',
1991
+ 1 => '(HW-|HUAWEI )?(AMN|ART|AQM|CRO|LUA|CUN|DUB|SCC|SCU|CAM|LDN|LYO|MED|MYA)!!',
1992
+ ),
1993
+ '@DV' =>
1994
+ array (
1995
+ 0 => '(HW-|HUAWEI )?(ATU|DRA|DVC|FLA|JKM|TIT|TAG||MRD|NCE|POT|TRT|SLA)!!',
1996
  ),
1997
  '@DW' =>
1998
  array (
2030
  0 => 'E1 v360',
2031
  1 => 'E170BS',
2032
  2 => 'E1031',
2033
+ 3 => 'E1050X',
2034
+ 4 => 'E1051X',
2035
+ 5 => 'E1060X',
2036
+ 6 => 'e1808 v75!',
2037
+ 7 => 'e1109 v73!',
2038
  ),
2039
  '@E2' =>
2040
  array (
2088
  ),
2089
  '@E9' =>
2090
  array (
2091
+ 0 => 'E940-2795-00',
2092
+ 1 => 'E940-2796-00',
2093
+ 2 => 'E900',
2094
+ 3 => 'E912',
2095
  ),
2096
  '@EA' =>
2097
  array (
2103
  array (
2104
  0 => 'EBEN!!',
2105
  1 => 'EBEST!!',
2106
+ 2 => 'EB2101',
2107
+ 3 => 'EB2103',
2108
+ 4 => 'EB-4063-X',
2109
+ 5 => 'EB-A71GJ',
2110
+ 6 => 'EB-W51GJ',
2111
+ 7 => 'EB-WX1GJ',
2112
+ 8 => 'EB-L76G-B',
2113
  ),
2114
  '@EC' =>
2115
  array (
2122
  array (
2123
  0 => '(bq|Aquaris|Edison|Maxwell)!!',
2124
  1 => 'edgejr',
2125
+ 2 => '(HW-|HUAWEI |HONOR )?(ATH|AUM|BLN|BKL|BKK|BND|CHE|CHM|COL|COR|DUA|DUK|DLI|EDI|FRD|HLK|HN3|H30|H60|HOL|HRY|JAT|JMM|JSN|LRA|KIW|KSA|LLD|NEM|NMO|NTH|NTN|OXF|PE|PCT|PLK|RNE|SCL|TNY|KNT|CAM|STF|HDN|YAL)!!',
2126
  3 => 'edenTAB ET-701',
2127
  ),
2128
  '@EE' =>
2158
  4 => 'ELIFE-E3',
2159
  5 => 'Elife E5',
2160
  6 => 'ElifeE6',
2161
+ 7 => '(HW-|HUAWEI )?(ALE|ANA|ANE|CDY|CLT|D2|DAV|ELE|ELS|EML|EVA|FIG|G6|G7|GRA|JNY|MAR|M100|P2|P6|P7|PPA|PRA|RIO|SC|Sophia|STK|VIE|VKY|VNS|VOG|VTR|WAS)!!',
2162
+ 8 => 'Elektra L',
2163
+ 9 => 'Elektra XL',
2164
+ 10 => 'Electrify',
2165
+ 11 => 'Eluga A2',
2166
+ 12 => 'ELUGA A3',
2167
+ 13 => 'ELUGA A3 Pro',
2168
+ 14 => 'ELUGA I2',
2169
+ 15 => 'ELUGA I2 Activ',
2170
+ 16 => 'ELUGA I4',
2171
+ 17 => 'Eluga Arc 2',
2172
+ 18 => 'Eluga Mark 2',
2173
+ 19 => 'ELUGA Note',
2174
+ 20 => 'ELUGA Prim',
2175
+ 21 => 'ELUGA Pulse X',
2176
+ 22 => 'ELUGA Ray',
2177
+ 23 => 'ELUGA Ray Max',
2178
+ 24 => 'ELUGA Ray X',
2179
+ 25 => 'Eluga Ray 700',
2180
+ 26 => 'ELUGA Turbo',
2181
+ 27 => 'Elite',
2182
+ 28 => 'Elite 11',
2183
+ 29 => '(SENCOR )?ELEMENT!!',
2184
+ 30 => 'Elite 5.5L+',
2185
+ 31 => 'Elite 6.0L',
2186
  ),
2187
  '@EM' =>
2188
  array (
2189
  0 => 'EMBT3C',
2190
  1 => 'EM63',
2191
  2 => 'EM01F',
2192
+ 3 => '(HW-|HUAWEI )?(ALE|ANA|ANE|CDY|CLT|D2|DAV|ELE|ELS|EML|EVA|FIG|G6|G7|GRA|JNY|MAR|M100|P2|P6|P7|PPA|PRA|RIO|SC|Sophia|STK|VIE|VKY|VNS|VOG|VTR|WAS)!!',
2193
  4 => 'eMAX mini',
2194
  5 => 'EMR1879',
2195
  ),
2247
  3 => '(EVAS )?EVERCOSS[- ]A!!',
2248
  4 => 'EVERPAD SC-710',
2249
  5 => 'Ever!!',
2250
+ 6 => 'EVOLVEO StrongPhone G7',
2251
+ 7 => 'EVOLVEO StrongPhone G9',
2252
+ 8 => 'EVO',
2253
+ 9 => 'Evo HD2',
2254
+ 10 => 'EVO ?3D!',
2255
+ 11 => 'EVO 4G',
2256
+ 12 => 'Evo V 4G',
2257
+ 13 => '(HUAWEI )?(ALP|BLA|CRR|EVR|HMA|LIO|LON|LYA|MATE|MHA|MT1|MT2|MT7|M200|NOH|NXT|SNE|TAS|Z100)!!',
2258
+ 14 => '(HW-|HUAWEI )?(ALE|ANA|ANE|CDY|CLT|D2|DAV|ELE|ELS|EML|EVA|FIG|G6|G7|GRA|JNY|MAR|M100|P2|P6|P7|PPA|PRA|RIO|SC|Sophia|STK|VIE|VKY|VNS|VOG|VTR|WAS)!!',
2259
+ 15 => '(EV|KM)-[ES][0-9]{3,3}!!',
2260
+ 16 => 'Event',
2261
+ 17 => 'EVERY35',
2262
  ),
2263
  '@EX' =>
2264
  array (
2334
  array (
2335
  0 => 'FIH-FB0',
2336
  1 => 'FIH-!!',
2337
+ 2 => '(HW-|HUAWEI )?(ALE|ANA|ANE|CDY|CLT|D2|DAV|ELE|ELS|EML|EVA|FIG|G6|G7|GRA|JNY|MAR|M100|P2|P6|P7|PPA|PRA|RIO|SC|Sophia|STK|VIE|VKY|VNS|VOG|VTR|WAS)!!',
2338
  3 => 'Find 5',
2339
  4 => 'FIND7',
2340
+ 5 => 'FINNEY U1',
2341
  ),
2342
  '@FJ' =>
2343
  array (
2374
  25 => 'Flylife!!',
2375
  26 => 'Fly Flylife Web 7.85 Slim',
2376
  27 => 'Flyer',
2377
+ 28 => '(HW-|HUAWEI )?(ATU|DRA|DVC|FLA|JKM|TIT|TAG||MRD|NCE|POT|TRT|SLA)!!',
2378
  29 => 'Flair E1',
2379
  30 => 'Flair E2',
2380
  31 => 'FlairE3',
2416
  0 => 'FP1',
2417
  1 => 'FP1U',
2418
  2 => 'FP2',
2419
+ 3 => 'FP3',
2420
+ 4 => 'FP4',
2421
  ),
2422
  '@FR' =>
2423
  array (
2424
  0 => 'Freelander I20',
2425
+ 1 => '(HW-|HUAWEI |HONOR )?(ATH|AUM|BLN|BKL|BKK|BND|CHE|CHM|COL|COR|DUA|DUK|DLI|EDI|FRD|HLK|HN3|H30|H60|HOL|HRY|JAT|JMM|JSN|LRA|KIW|KSA|LLD|NEM|NMO|NTH|NTN|OXF|PE|PCT|PLK|RNE|SCL|TNY|KNT|CAM|STF|HDN|YAL)!!',
2426
  2 => '(MODECOM )?FreeTAB!!',
2427
  ),
2428
  '@FS' =>
2431
  1 => 'FS407',
2432
  2 => 'FS451',
2433
  3 => 'FS514',
2434
+ 4 => 'FS8032',
2435
  ),
2436
  '@FT' =>
2437
  array (
2504
  ),
2505
  '@G6' =>
2506
  array (
2507
+ 0 => '(HW-|HUAWEI )?(ALE|ANA|ANE|CDY|CLT|D2|DAV|ELE|ELS|EML|EVA|FIG|G6|G7|GRA|JNY|MAR|M100|P2|P6|P7|PPA|PRA|RIO|SC|Sophia|STK|VIE|VKY|VNS|VOG|VTR|WAS)!!',
2508
  ),
2509
  '@G7' =>
2510
  array (
2511
+ 0 => '(HW-|HUAWEI )?(ALE|ANA|ANE|CDY|CLT|D2|DAV|ELE|ELS|EML|EVA|FIG|G6|G7|GRA|JNY|MAR|M100|P2|P6|P7|PPA|PRA|RIO|SC|Sophia|STK|VIE|VKY|VNS|VOG|VTR|WAS)!!',
2512
  ),
2513
  '@G9' =>
2514
  array (
2675
  ),
2676
  '@GM' =>
2677
  array (
2678
+ 0 => 'GM190[0135]!',
2679
+ 1 => 'GM191[01357]!',
2680
+ 2 => 'Gm Discovery',
2681
+ 3 => 'GM Discovery II',
2682
+ 4 => 'GM Discovery II+',
2683
+ 5 => 'GM FOX',
2684
+ 6 => 'GM Ultimate Slim',
2685
+ 7 => 'GM 5',
2686
+ 8 => 'GM 5 d',
2687
+ 9 => 'GM 5 Plus',
2688
+ 10 => 'GM 5 Plus d',
2689
+ 11 => 'GM 6',
2690
+ 12 => 'GM 6 d',
2691
+ 13 => 'GM 8 d',
2692
+ 14 => 'GM8 go',
2693
+ 15 => 'GM Discovery tab 8',
2694
  ),
2695
  '@GN' =>
2696
  array (
2766
  10 => '(Google )?Nexus ?9!',
2767
  11 => '(Google )?Nexus ?10!',
2768
  12 => 'Google Pixel',
2769
+ 13 => 'Google Pixel 2',
2770
+ 14 => 'Google Pixel 2XL',
2771
+ 15 => 'Google Chromebook Pixel (2015)',
2772
+ 16 => 'google cube',
2773
+ 17 => 'GOCL!!',
2774
+ 18 => 'GO Live!!',
2775
+ 19 => 'GOOPHONE!!',
2776
+ 20 => 'GO !!',
2777
+ 21 => 'GOA',
2778
+ 22 => 'GO504',
2779
+ 23 => 'GO778',
2780
+ 24 => 'GO960',
2781
+ 25 => 'GO963',
2782
+ 26 => 'GO980',
2783
+ 27 => 'GO984',
2784
+ 28 => 'Gomobile GO1001',
 
2785
  ),
2786
  '@GP' =>
2787
  array (
2799
  array (
2800
  0 => 'Grouper',
2801
  1 => 'GR-TB!!',
2802
+ 2 => '(HW-|HUAWEI )?(ALE|ANA|ANE|CDY|CLT|D2|DAV|ELE|ELS|EML|EVA|FIG|G6|G7|GRA|JNY|MAR|M100|P2|P6|P7|PPA|PRA|RIO|SC|Sophia|STK|VIE|VKY|VNS|VOG|VTR|WAS)!!',
2803
  3 => 'greenridge',
2804
  4 => 'Graphos A10',
2805
  5 => '(ZTE )?(Grand|Mimosa)!!',
2808
  array (
2809
  0 => 'GS01',
2810
  1 => '(Gsmart|Gigabyte|Rio)!!',
2811
+ 2 => 'GS110',
2812
+ 3 => 'GS185',
2813
+ 4 => 'GS190',
2814
+ 5 => 'GS195',
2815
+ 6 => 'GS270',
2816
+ 7 => 'GS270 plus',
2817
+ 8 => 'GS280',
2818
+ 9 => 'GS290',
2819
+ 10 => 'GS370 Plus',
2820
+ 11 => 'GS02',
2821
+ 12 => 'GS03',
2822
  ),
2823
  '@GT' =>
2824
  array (
2858
  ),
2859
  '@GX' =>
2860
  array (
2861
+ 0 => 'GX290',
2862
+ 1 => 'GX1210V TV',
2863
  ),
2864
  '@H1' =>
2865
  array (
2871
  ),
2872
  '@H3' =>
2873
  array (
2874
+ 0 => '(HW-|HUAWEI |HONOR )?(ATH|AUM|BLN|BKL|BKK|BND|CHE|CHM|COL|COR|DUA|DUK|DLI|EDI|FRD|HLK|HN3|H30|H60|HOL|HRY|JAT|JMM|JSN|LRA|KIW|KSA|LLD|NEM|NMO|NTH|NTN|OXF|PE|PCT|PLK|RNE|SCL|TNY|KNT|CAM|STF|HDN|YAL)!!',
2875
  ),
2876
  '@H6' =>
2877
  array (
2878
+ 0 => '(HW-|HUAWEI |HONOR )?(ATH|AUM|BLN|BKL|BKK|BND|CHE|CHM|COL|COR|DUA|DUK|DLI|EDI|FRD|HLK|HN3|H30|H60|HOL|HRY|JAT|JMM|JSN|LRA|KIW|KSA|LLD|NEM|NMO|NTH|NTN|OXF|PE|PCT|PLK|RNE|SCL|TNY|KNT|CAM|STF|HDN|YAL)!!',
2879
  ),
2880
  '@H7' =>
2881
  array (
2902
  1 => '(Haier[- ])?H[ETW]- ?[A-Z][0-9]!!',
2903
  2 => 'Haier-W700',
2904
  3 => 'Haier-SY0880',
2905
+ 4 => 'Hammer Blade2 PRO',
2906
+ 5 => 'Hammer Blade 3',
2907
+ 6 => 'Hammer Energy',
2908
+ 7 => 'Hammer Energy 2',
2909
+ 8 => 'Hammer Energy 18x9',
2910
+ 9 => 'Hammer Explorer',
2911
+ 10 => 'Hammer Explorer Pro',
2912
+ 11 => 'Hasee E50 S1',
2913
+ 12 => 'Hasee H45 T2',
2914
+ 13 => 'Hasee W50 T2',
2915
+ 14 => 'Hasee-X50TS',
2916
+ 15 => 'HannsComb',
2917
+ 16 => 'Hannspadd',
2918
+ 17 => 'Hayabusa',
2919
+ 18 => 'HARRY',
2920
  ),
2921
  '@HB' =>
2922
  array (
2929
  0 => 'HD2',
2930
  1 => 'HD2 LEO',
2931
  2 => 'HD7 Pro',
2932
+ 3 => '(HW-|HUAWEI |HONOR )?(ATH|AUM|BLN|BKL|BKK|BND|CHE|CHM|COL|COR|DUA|DUK|DLI|EDI|FRD|HLK|HN3|H30|H60|HOL|HRY|JAT|JMM|JSN|LRA|KIW|KSA|LLD|NEM|NMO|NTH|NTN|OXF|PE|PCT|PLK|RNE|SCL|TNY|KNT|CAM|STF|HDN|YAL)!!',
2933
+ 4 => 'HD190[0135]!',
2934
+ 5 => 'HD191[0137]!',
2935
  ),
2936
  '@HE' =>
2937
  array (
2967
  '@HL' =>
2968
  array (
2969
  0 => 'HLV-T!!',
2970
+ 1 => '(HW-|HUAWEI |HONOR )?(ATH|AUM|BLN|BKL|BKK|BND|CHE|CHM|COL|COR|DUA|DUK|DLI|EDI|FRD|HLK|HN3|H30|H60|HOL|HRY|JAT|JMM|JSN|LRA|KIW|KSA|LLD|NEM|NMO|NTH|NTN|OXF|PE|PCT|PLK|RNE|SCL|TNY|KNT|CAM|STF|HDN|YAL)!!',
2971
  ),
2972
  '@HM' =>
2973
  array (
2974
+ 0 => '(HUAWEI )?(ALP|BLA|CRR|EVR|HMA|LIO|LON|LYA|MATE|MHA|MT1|MT2|MT7|M200|NOH|NXT|SNE|TAS|Z100)!!',
2975
+ 1 => 'HMP8100 ATV 93',
2976
+ 2 => 'HMP8100 ATV INT',
2977
+ 3 => '(Xiaomi )?(Redmi|RedRice|HM)!!',
2978
+ 4 => '(Xiaomi )?(Redmi|HM)[ \\-]?Note!!',
2979
+ 5 => '(Xiaomi |HM)?20!!',
2980
+ 6 => '(Xiaomi |HM)?21!!',
2981
  ),
2982
  '@HN' =>
2983
  array (
2984
+ 0 => '(HW-|HUAWEI |HONOR )?(ATH|AUM|BLN|BKL|BKK|BND|CHE|CHM|COL|COR|DUA|DUK|DLI|EDI|FRD|HLK|HN3|H30|H60|HOL|HRY|JAT|JMM|JSN|LRA|KIW|KSA|LLD|NEM|NMO|NTH|NTN|OXF|PE|PCT|PLK|RNE|SCL|TNY|KNT|CAM|STF|HDN|YAL)!!',
2985
  ),
2986
  '@HO' =>
2987
  array (
2988
  0 => 'HOSIN!!',
2989
+ 1 => '(HW-|HUAWEI |HONOR )?(ATH|AUM|BLN|BKL|BKK|BND|CHE|CHM|COL|COR|DUA|DUK|DLI|EDI|FRD|HLK|HN3|H30|H60|HOL|HRY|JAT|JMM|JSN|LRA|KIW|KSA|LLD|NEM|NMO|NTH|NTN|OXF|PE|PCT|PLK|RNE|SCL|TNY|KNT|CAM|STF|HDN|YAL)!!',
2990
  2 => 'Honor3c2G-T',
2991
  3 => 'Honor Bee',
2992
  4 => 'HOMESYNCT2WIFI',
2999
  3 => 'HP-TouchPad',
3000
  4 => '(HP )?Touchpad!',
3001
  ),
3002
+ '@HR' =>
3003
+ array (
3004
+ 0 => '(HW-|HUAWEI |HONOR )?(ATH|AUM|BLN|BKL|BKK|BND|CHE|CHM|COL|COR|DUA|DUK|DLI|EDI|FRD|HLK|HN3|H30|H60|HOL|HRY|JAT|JMM|JSN|LRA|KIW|KSA|LLD|NEM|NMO|NTH|NTN|OXF|PE|PCT|PLK|RNE|SCL|TNY|KNT|CAM|STF|HDN|YAL)!!',
3005
+ ),
3006
  '@HS' =>
3007
  array (
3008
  0 => 'HS-[0-9]{1,2}DTB!!',
3047
  6 => 'Huawei MediaPad T1 10 4G',
3048
  7 => '(Huawei )?[MSTX](1|2|7|8|10)\\-[A-Z0-9][0-9]{2,2}!!',
3049
  8 => 'HUAWEI GEM-703L',
3050
+ 9 => '(HUAWEI )?(ALP|BLA|CRR|EVR|HMA|LIO|LON|LYA|MATE|MHA|MT1|MT2|MT7|M200|NOH|NXT|SNE|TAS|Z100)!!',
3051
+ 10 => '(HW-|HUAWEI )?(ATU|DRA|DVC|FLA|JKM|TIT|TAG||MRD|NCE|POT|TRT|SLA)!!',
3052
+ 11 => '(HW-|HUAWEI |HONOR )?(ATH|AUM|BLN|BKL|BKK|BND|CHE|CHM|COL|COR|DUA|DUK|DLI|EDI|FRD|HLK|HN3|H30|H60|HOL|HRY|JAT|JMM|JSN|LRA|KIW|KSA|LLD|NEM|NMO|NTH|NTN|OXF|PE|PCT|PLK|RNE|SCL|TNY|KNT|CAM|STF|HDN|YAL)!!',
3053
  12 => '(HW-|HUAWEI )?(BLL|CHC|TAG|KII)!!',
3054
+ 13 => '(HW-|HUAWEI )?(ALE|ANA|ANE|CDY|CLT|D2|DAV|ELE|ELS|EML|EVA|FIG|G6|G7|GRA|JNY|MAR|M100|P2|P6|P7|PPA|PRA|RIO|SC|Sophia|STK|VIE|VKY|VNS|VOG|VTR|WAS)!!',
3055
  14 => 'HUAWEI A168-(AL10|DL09|L09|L29)!',
3056
+ 15 => '(HW-|HUAWEI )?(AMN|ART|AQM|CRO|LUA|CUN|DUB|SCC|SCU|CAM|LDN|LYO|MED|MYA)!!',
3057
  16 => '(HW-|HUAWEI )?CAZ-(AL10|TL10|TL20)!',
3058
  17 => '(HW-|HUAWEI )?CAN-(L01|L11|L12)!',
3059
  18 => '(HW-|HUAWEI )?MLA-(L01|L03|L11|L12|L13)!',
3060
  19 => '(HW-|HUAWEI )?DIG-(AL00|L01|L03|L21|TL10)!',
3061
+ 20 => '(HW-|HUAWEI )?PIC-(LX9)!',
3062
+ 21 => '(HW-|HUAWEI )?BAC-(AL00|L03|L21|L22|TL00)!',
3063
+ 22 => '(HW-|HUAWEI )?HWI-(AL00|TL00)!',
3064
+ 23 => '(HW-|HUAWEI )?PAR-(AL00|LX1|LX1M|LX9|TL00)!',
3065
+ 24 => '(HW-|HUAWEI )?INE-(AL00|LX1|LX1r|LX2||LX2r|TL00)!',
3066
+ 25 => '(HW-|HUAWEI )?MAR-(AL00|LX1A|LX1M|LX2|LX3A|TL00)!',
3067
+ 26 => '(HW-|HUAWEI )?MLA-(AL00|AL10)!',
3068
+ 27 => '(HW-|HUAWEI )?MLA-(TL00|TL10|UL00)!',
3069
+ 28 => 'Huawei P7 mini',
3070
+ 29 => 'Huawei P8max',
3071
+ 30 => '(Huawei|Ascend|HW-)!!',
3072
+ 31 => 'HUAWEI Honor 3c w',
3073
+ 32 => 'Huawei S7',
3074
+ 33 => 'Hudl HT7S3',
3075
+ 34 => 'Hudl 2',
3076
+ 35 => 'HUAWEI U8686',
3077
+ 36 => 'Huawei 858',
3078
  ),
3079
  '@HW' =>
3080
  array (
3081
+ 0 => '(HW-|HUAWEI )?(ATU|DRA|DVC|FLA|JKM|TIT|TAG||MRD|NCE|POT|TRT|SLA)!!',
3082
+ 1 => '(HW-|HUAWEI |HONOR )?(ATH|AUM|BLN|BKL|BKK|BND|CHE|CHM|COL|COR|DUA|DUK|DLI|EDI|FRD|HLK|HN3|H30|H60|HOL|HRY|JAT|JMM|JSN|LRA|KIW|KSA|LLD|NEM|NMO|NTH|NTN|OXF|PE|PCT|PLK|RNE|SCL|TNY|KNT|CAM|STF|HDN|YAL)!!',
3083
  2 => '(HW-|HUAWEI )?(BLL|CHC|TAG|KII)!!',
3084
+ 3 => '(HW-|HUAWEI )?(ALE|ANA|ANE|CDY|CLT|D2|DAV|ELE|ELS|EML|EVA|FIG|G6|G7|GRA|JNY|MAR|M100|P2|P6|P7|PPA|PRA|RIO|SC|Sophia|STK|VIE|VKY|VNS|VOG|VTR|WAS)!!',
3085
+ 4 => '(HW-|HUAWEI )?(AMN|ART|AQM|CRO|LUA|CUN|DUB|SCC|SCU|CAM|LDN|LYO|MED|MYA)!!',
3086
  5 => '(HW-|HUAWEI )?CAZ-(AL10|TL10|TL20)!',
3087
  6 => '(HW-|HUAWEI )?CAN-(L01|L11|L12)!',
3088
  7 => '(HW-|HUAWEI )?MLA-(L01|L03|L11|L12|L13)!',
3089
  8 => '(HW-|HUAWEI )?DIG-(AL00|L01|L03|L21|TL10)!',
3090
+ 9 => '(HW-|HUAWEI )?PIC-(LX9)!',
3091
+ 10 => '(HW-|HUAWEI )?BAC-(AL00|L03|L21|L22|TL00)!',
3092
+ 11 => '(HW-|HUAWEI )?HWI-(AL00|TL00)!',
3093
+ 12 => '(HW-|HUAWEI )?PAR-(AL00|LX1|LX1M|LX9|TL00)!',
3094
+ 13 => '(HW-|HUAWEI )?INE-(AL00|LX1|LX1r|LX2||LX2r|TL00)!',
3095
+ 14 => '(HW-|HUAWEI )?MAR-(AL00|LX1A|LX1M|LX2|LX3A|TL00)!',
3096
+ 15 => '(HW-|HUAWEI )?MLA-(AL00|AL10)!',
3097
+ 16 => '(HW-|HUAWEI )?MLA-(TL00|TL10|UL00)!',
3098
+ 17 => '(Huawei|Ascend|HW-)!!',
3099
+ 18 => 'hwu8812D',
3100
+ 19 => 'HW-01E',
3101
+ 20 => 'HW-01K',
3102
+ 21 => 'HW-03E',
3103
+ 22 => 'HWT31',
3104
+ 23 => 'HWV32',
3105
  ),
3106
  '@HY' =>
3107
  array (
3123
  3 => 'i-Call 504',
3124
  4 => '(i-mobile|i-style|IQ)!!',
3125
  ),
3126
+ '@I0' =>
3127
+ array (
3128
+ 0 => 'I01WDX',
3129
+ 1 => 'I001DC',
3130
+ 2 => 'I001DE',
3131
+ 3 => 'I002D',
3132
+ 4 => 'I003D',
3133
+ 5 => 'I003DD',
3134
+ 6 => 'I004D',
3135
+ 7 => 'I005D',
3136
+ 8 => 'I005DA',
3137
+ 9 => 'I006D',
3138
+ 10 => 'I01WD',
3139
+ ),
3140
  '@I1' =>
3141
  array (
3142
  0 => 'I110',
3239
  7 => 'Incredible ?2!',
3240
  8 => 'Incredible 4G LTE',
3241
  9 => 'Inspire 4G',
3242
+ 10 => '(HW-|HUAWEI )?INE-(AL00|LX1|LX1r|LX2||LX2r|TL00)!',
3243
+ 11 => 'INFOBAR!!',
3244
+ 12 => 'Infinix!!',
3245
+ 13 => 'IN[0-9]{3,3}!!',
3246
+ 14 => 'Infocus!!',
3247
+ 15 => 'INHON PAPILIO G1',
3248
+ 16 => 'intki E86',
3249
+ 17 => 'Innos!!',
3250
+ 18 => '(Intex )?Aqua!!',
3251
+ 19 => '(Intex )?Cloud!!',
3252
+ 20 => 'INTEX IRIS-II',
3253
+ 21 => 'INQ Cloud Touch',
3254
+ 22 => 'INQ Mayfair (EU)',
3255
+ 23 => '(iNote|itel)!!',
3256
+ 24 => 'Infinity',
3257
+ 25 => 'IN201[01357]!',
3258
+ 26 => 'IN202[0135]!',
3259
+ 27 => 'Internet TV',
3260
+ 28 => 'Internet TV Box',
3261
  ),
3262
  '@IO' =>
3263
  array (
3284
  0 => 'IS11CA',
3285
  1 => 'ISW?[0-9]{2,2}F!!',
3286
  2 => 'ISW[0-9]{2,2}HT!!',
3287
+ 3 => 'IS530',
3288
+ 4 => 'ISW11K',
3289
+ 5 => 'IS11LG',
3290
+ 6 => 'ISW11M',
3291
+ 7 => 'IS12M',
3292
+ 8 => 'IS11N',
3293
+ 9 => 'IS06',
3294
+ 10 => 'IS11PT',
3295
+ 11 => 'IS703C',
3296
+ 12 => 'IS801C',
3297
+ 13 => 'ISW11SC',
3298
+ 14 => 'IS0[0-9]!!',
3299
+ 15 => 'ISW?1[0-9]SH!!',
3300
+ 16 => 'IS[0-9]{2,2}S!!',
3301
+ 17 => 'IS04',
3302
+ 18 => 'IS11T',
3303
  ),
3304
  '@IT' =>
3305
  array (
3315
  '@IV' =>
3316
  array (
3317
  0 => 'IVIO!!',
3318
+ 1 => 'IV2201',
3319
  ),
3320
  '@IW' =>
3321
  array (
3329
  ),
3330
  '@JA' =>
3331
  array (
3332
+ 0 => '(HW-|HUAWEI |HONOR )?(ATH|AUM|BLN|BKL|BKK|BND|CHE|CHM|COL|COR|DUA|DUK|DLI|EDI|FRD|HLK|HN3|H30|H60|HOL|HRY|JAT|JMM|JSN|LRA|KIW|KSA|LLD|NEM|NMO|NTH|NTN|OXF|PE|PCT|PLK|RNE|SCL|TNY|KNT|CAM|STF|HDN|YAL)!!',
3333
+ 1 => 'Jaguar3',
3334
+ 2 => 'Jaguar7',
3335
  ),
3336
  '@JC' =>
3337
  array (
3342
  '@JD' =>
3343
  array (
3344
  0 => 'JDN-W09',
3345
+ 1 => 'JDN2-AL00HN',
3346
+ 2 => 'JDN2-W09HN',
3347
+ ),
3348
+ '@JE' =>
3349
+ array (
3350
+ 0 => 'Jelly2',
3351
  ),
3352
  '@JI' =>
3353
  array (
3358
  array (
3359
  0 => 'JJ5S+',
3360
  ),
3361
+ '@JK' =>
3362
+ array (
3363
+ 0 => '(HW-|HUAWEI )?(ATU|DRA|DVC|FLA|JKM|TIT|TAG||MRD|NCE|POT|TRT|SLA)!!',
3364
+ ),
3365
  '@JM' =>
3366
  array (
3367
+ 0 => '(HW-|HUAWEI |HONOR )?(ATH|AUM|BLN|BKL|BKK|BND|CHE|CHM|COL|COR|DUA|DUK|DLI|EDI|FRD|HLK|HN3|H30|H60|HOL|HRY|JAT|JMM|JSN|LRA|KIW|KSA|LLD|NEM|NMO|NTH|NTN|OXF|PE|PCT|PLK|RNE|SCL|TNY|KNT|CAM|STF|HDN|YAL)!!',
3368
+ ),
3369
+ '@JN' =>
3370
+ array (
3371
+ 0 => '(HW-|HUAWEI )?(ALE|ANA|ANE|CDY|CLT|D2|DAV|ELE|ELS|EML|EVA|FIG|G6|G7|GRA|JNY|MAR|M100|P2|P6|P7|PPA|PRA|RIO|SC|Sophia|STK|VIE|VKY|VNS|VOG|VTR|WAS)!!',
3372
  ),
3373
  '@JO' =>
3374
  array (
3376
  1 => 'Joy',
3377
  2 => 'JOIN',
3378
  ),
3379
+ '@JS' =>
3380
+ array (
3381
+ 0 => '(HW-|HUAWEI |HONOR )?(ATH|AUM|BLN|BKL|BKK|BND|CHE|CHM|COL|COR|DUA|DUK|DLI|EDI|FRD|HLK|HN3|H30|H60|HOL|HRY|JAT|JMM|JSN|LRA|KIW|KSA|LLD|NEM|NMO|NTH|NTN|OXF|PE|PCT|PLK|RNE|SCL|TNY|KNT|CAM|STF|HDN|YAL)!!',
3382
+ ),
3383
  '@JT' =>
3384
  array (
3385
  0 => 'JT SmartPC02',
3446
  2 => 'K30-W',
3447
  3 => 'K3 Note',
3448
  ),
3449
+ '@K6' =>
3450
+ array (
3451
+ 0 => 'K6000 Pro',
3452
+ ),
3453
  '@K8' =>
3454
  array (
3455
  0 => '(CUBE ?)?(K8|U1|U2|U3|U5|U6|U8|U9)[0-9]?GT!!',
3470
  '@KB' =>
3471
  array (
3472
  0 => 'KB901',
3473
+ 1 => 'KB200[01357]!',
3474
  ),
3475
  '@KC' =>
3476
  array (
3503
  14 => 'KFGIWI',
3504
  15 => 'KFDOWI',
3505
  16 => 'KFSUWI',
3506
+ 17 => 'KFMAWI',
3507
+ 18 => 'KFKAWI',
3508
+ 19 => 'KFMUWI',
3509
  ),
3510
  '@KI' =>
3511
  array (
3512
  0 => 'Kindle Fire',
3513
+ 1 => 'KINGKONG 5 Pro',
3514
+ 2 => 'KINGKONG MINI2',
3515
+ 3 => '(HW-|HUAWEI |HONOR )?(ATH|AUM|BLN|BKL|BKK|BND|CHE|CHM|COL|COR|DUA|DUK|DLI|EDI|FRD|HLK|HN3|H30|H60|HOL|HRY|JAT|JMM|JSN|LRA|KIW|KSA|LLD|NEM|NMO|NTH|NTN|OXF|PE|PCT|PLK|RNE|SCL|TNY|KNT|CAM|STF|HDN|YAL)!!',
3516
+ 4 => '(HW-|HUAWEI )?(BLL|CHC|TAG|KII)!!',
3517
+ 5 => 'KIOTO 793',
3518
+ 6 => 'KITE',
3519
+ 7 => '(ZTE )?Kis!!',
3520
  ),
3521
  '@KM' =>
3522
  array (
3524
  ),
3525
  '@KN' =>
3526
  array (
3527
+ 0 => '(HW-|HUAWEI |HONOR )?(ATH|AUM|BLN|BKL|BKK|BND|CHE|CHM|COL|COR|DUA|DUK|DLI|EDI|FRD|HLK|HN3|H30|H60|HOL|HRY|JAT|JMM|JSN|LRA|KIW|KSA|LLD|NEM|NMO|NTH|NTN|OXF|PE|PCT|PLK|RNE|SCL|TNY|KNT|CAM|STF|HDN|YAL)!!',
3528
  ),
3529
  '@KO' =>
3530
  array (
3531
  0 => 'Konka Amber3',
3532
  1 => 'KOB-(L09|W09)!',
3533
+ 2 => 'KOB2-(W09)!',
3534
+ 3 => '(KATBL|Kogan|Agora)!!',
3535
+ 4 => 'KOMU!!',
3536
+ 5 => 'KONKA!!',
3537
+ 6 => 'koobee-T550',
3538
+ 7 => 'Koobe!!',
3539
+ 8 => 'KORIDY H15',
3540
+ 9 => 'KORIDY H16',
3541
  ),
3542
  '@KP' =>
3543
  array (
3546
  ),
3547
  '@KS' =>
3548
  array (
3549
+ 0 => '(HW-|HUAWEI |HONOR )?(ATH|AUM|BLN|BKL|BKK|BND|CHE|CHM|COL|COR|DUA|DUK|DLI|EDI|FRD|HLK|HN3|H30|H60|HOL|HRY|JAT|JMM|JSN|LRA|KIW|KSA|LLD|NEM|NMO|NTH|NTN|OXF|PE|PCT|PLK|RNE|SCL|TNY|KNT|CAM|STF|HDN|YAL)!!',
3550
+ 1 => 'KSP8000',
3551
+ ),
3552
+ '@KT' =>
3553
+ array (
3554
+ 0 => 'KT-101-A',
3555
  ),
3556
  '@KU' =>
3557
  array (
3589
  '@LA' =>
3590
  array (
3591
  0 => 'LA-!!',
3592
+ 1 => 'Land Rover Explore',
3593
+ 2 => 'Land Rover Explore R',
3594
+ 3 => '(Lanix )?(Ilium|llium)!!',
3595
+ 4 => 'Lark!!',
3596
+ 5 => 'LAVA iris 351',
3597
+ 6 => 'LAVA iRIS 504q',
3598
+ 7 => 'LAVA A1',
3599
+ 8 => 'Lava A89',
3600
+ 9 => 'LAVA R1',
3601
+ 10 => 'LAVA R1s',
3602
+ 11 => 'LAVA S12',
3603
+ 12 => 'LAVA V5',
3604
+ 13 => 'LAP250U',
3605
+ 14 => 'LAP255U',
3606
+ 15 => 'LaVieTab!!',
3607
+ 16 => 'land',
3608
+ 17 => 'LA-I Dual core',
3609
+ 18 => 'LA-M3',
3610
+ 19 => 'LA1-L',
3611
+ 20 => 'LA2-E',
3612
+ 21 => 'LA2-E1',
3613
+ 22 => 'LA2-L',
3614
+ 23 => 'LA2-T',
3615
+ 24 => 'LA2-T1',
3616
+ 25 => 'LA2-S',
3617
+ 26 => 'LA2-SN',
3618
+ 27 => 'LA2-W',
3619
+ 28 => 'LA2-W1',
3620
+ 29 => 'LA3-W',
3621
+ 30 => 'LA3S',
3622
+ 31 => 'LA5-W',
3623
  ),
3624
  '@LC' =>
3625
  array (
3631
  ),
3632
  '@LD' =>
3633
  array (
3634
+ 0 => '(HW-|HUAWEI )?(AMN|ART|AQM|CRO|LUA|CUN|DUB|SCC|SCU|CAM|LDN|LYO|MED|MYA)!!',
3635
  1 => 'LDK-ICK v1.4',
3636
  ),
3637
  '@LE' =>
3707
  68 => 'Lenovo YT3-X50F',
3708
  69 => 'Lenovo YT3-X50L',
3709
  70 => 'Lenovo YT3-850F',
3710
+ 71 => 'Lenovo YT-J706F',
3711
+ 72 => 'Lenovo YT-X703F',
3712
+ 73 => 'Lenovo YT-X705F',
3713
+ 74 => 'Lenovo YT3-X90F',
3714
+ 75 => 'Lenovo YT3-X90L',
3715
+ 76 => '(Lenovo )?(Tab ?)?(2 ?)?[AS](7|8|10)!!',
3716
+ 77 => 'Lenovo TB-7304F',
3717
+ 78 => 'Lenovo TB-7305F',
3718
+ 79 => 'Lenovo TB-7305X',
3719
+ 80 => 'Lenovo TB-8304F1',
3720
+ 81 => 'Lenovo TB-8505FS',
3721
+ 82 => 'Lenovo TB-8704X',
3722
+ 83 => 'Lenovo TB-8705F',
3723
+ 84 => 'Lenovo TB-J606F',
3724
+ 85 => 'Lenovo TB-J606L',
3725
+ 86 => 'Lenovo TB-J607Z',
3726
+ 87 => 'Lenovo TB-J616F',
3727
+ 88 => 'Lenovo TB-J706F',
3728
+ 89 => 'Lenovo TB-J716F',
3729
+ 90 => 'Lenovo TB-X104F',
3730
+ 91 => 'Lenovo TB-X304L',
3731
+ 92 => 'Lenovo TB-X306F',
3732
+ 93 => 'Lenovo TB-X306X',
3733
+ 94 => 'Lenovo TB-X505F',
3734
+ 95 => 'Lenovo TB-X605F',
3735
+ 96 => 'Lenovo TB-X605L',
3736
+ 97 => 'Lenovo TB-X606F',
3737
+ 98 => 'Lenovo TB-X606X',
3738
+ 99 => 'Lenovo TB-X6C6F',
3739
+ 100 => 'Lenovo TB-X103F',
3740
+ 101 => 'Lenovo TB2-X30F',
3741
+ 102 => 'Lenovo TB2-X30L',
3742
+ 103 => 'Lenovo TB3-730X',
3743
+ 104 => 'Lenovo TB3-710F',
3744
+ 105 => 'Lenovo TB3-710I',
3745
+ 106 => 'Lenovo TB-7703X',
3746
+ 107 => 'Lenovo TB3-850F',
3747
+ 108 => 'Lenovo TB3-850M',
3748
+ 109 => 'Lenovo TB3-X70F',
3749
+ 110 => 'Lenovo TB3-X70L',
3750
+ 111 => 'Lenovo TB-8504F',
3751
+ 112 => 'Lenovo TB-8504X',
3752
+ 113 => 'Lenovo TB-8505F',
3753
+ 114 => 'Lenovo TB-8703F',
3754
+ 115 => 'Lenovo TB-8704F',
3755
+ 116 => 'Lenovo TB-X304F',
3756
+ 117 => 'Lenovo TB-X704F',
3757
+ 118 => 'Lenovo TB-X704L',
3758
+ 119 => 'Lenovo TB-X705F',
3759
+ 120 => 'Lenovo TB-X705L',
3760
+ 121 => '(Lenovo ?)?(IdeaTab ?)?[KSV][0-9]{4,4}!!',
3761
+ 122 => 'Lenovo Pad A4',
3762
+ 123 => 'Lenovo',
3763
+ 124 => 'lepad 001b',
3764
+ 125 => 'lepad 001n',
3765
+ 126 => '(Lenovo |Lephone )?3GC101!',
3766
+ 127 => '(Lenovo |Lephone )?3GW100!',
3767
+ 128 => '(Lenovo |Lephone )?3GW101!',
3768
+ 129 => '(Lenovo )?S1[- ]37AH0!',
3769
+ 130 => '(Lenovo )?S2[- ]38A(H0|T0)!',
3770
+ 131 => 'Lenovo!!',
3771
+ 132 => 'LenovoTV 40S9',
3772
+ 133 => 'LenovoTV 50S52',
3773
+ 134 => 'Lenovo Z2',
3774
+ 135 => '(BLF-)?lephone!!',
3775
+ 136 => 'Le Pan Mini',
3776
+ 137 => 'Le Pan TC802A',
3777
+ 138 => 'Le Pan TC1010',
3778
+ 139 => 'Le Pan TC1020',
3779
+ 140 => 'LePanII',
3780
+ 141 => 'Le Pan S',
3781
+ 142 => 'LE2101',
3782
+ 143 => 'LE211[0135]!',
3783
+ 144 => 'LE212[01357]!',
3784
+ 145 => 'LENNY',
3785
+ 146 => 'LENNY2',
3786
+ 147 => 'LENNY3',
3787
+ 148 => 'Lenny4',
3788
  ),
3789
  '@LG' =>
3790
  array (
3803
  12 => 'LG-DS1203',
3804
  13 => 'LG-?E[0-9]{3,3}!!',
3805
  14 => 'LG-F[0-9]{3,3}!!',
3806
+ 15 => 'LG-FL40L!',
3807
+ 16 => 'LG-GT540!',
3808
+ 17 => 'LG-GW620!',
3809
+ 18 => 'LG-H[0-9]{3,3}!!',
3810
+ 19 => 'LG-K[0-9]{3,3}!!',
3811
+ 20 => 'LG-KH5200',
3812
+ 21 => 'LG-KS1024',
3813
+ 22 => 'LG-KU[0-9]{4,4}!!',
3814
+ 23 => 'LG-?L[0-9]{2,3}[A-Z]!!',
3815
+ 24 => 'LG-LG[0-9]{3,3}!!',
3816
+ 25 => 'LGLK430',
3817
+ 26 => 'LG-LK460',
3818
+ 27 => 'LG-?LS[0-9]{3,3}!!',
3819
+ 28 => 'LG-LU[0-9]{4,4}!!',
3820
+ 29 => 'LG-LW690',
3821
+ 30 => 'LG-LW770',
3822
+ 31 => 'LG-M[0-9]{3,3}!!',
3823
+ 32 => 'LG-?MS[0-9]{3,3}!!',
3824
+ 33 => 'LGMP260',
3825
+ 34 => 'LG-P[0-9]{3,3}!!',
3826
+ 35 => 'LG-Q710!',
3827
+ 36 => 'LG-RS988!',
3828
+ 37 => 'LG-SP[0-9]{3,3}!!',
3829
+ 38 => 'LG-SU[0-9]{3,3}!!',
3830
+ 39 => 'LG-T480!',
3831
+ 40 => 'LG-T540!',
3832
+ 41 => 'LG-TP260',
3833
+ 42 => 'LG-TP450',
3834
+ 43 => 'LG-SU-760',
3835
+ 44 => 'LGUK410',
3836
+ 45 => 'LG-UK495',
3837
+ 46 => 'LGUK750',
3838
+ 47 => 'LGUK932',
3839
+ 48 => 'LG-UN350',
3840
+ 49 => 'LG-?US[0-9]{3,3}!!',
3841
+ 50 => 'LG-V[0-9]{3,3}!!',
3842
+ 51 => 'LG-VK[0-9]{3,3}!!',
3843
+ 52 => 'LG-VN[0-9]{3,3}!!',
3844
+ 53 => 'LG-VM[0-9]{3,3}!!',
3845
+ 54 => 'LG-VS[0-9]{3,3}!!',
3846
+ 55 => 'LG-X[0-9]{3,3}!!',
3847
+ 56 => 'LGM-[GKVX][0-9]{3,3}!!',
3848
+ 57 => 'LGMP450',
3849
+ 58 => 'lge-F160!',
3850
+ 59 => 'LGE-E988!',
3851
+ 60 => 'lgp-970',
3852
+ 61 => 'LG[LSTV][0-9]{2,2}!!',
3853
+ 62 => 'LG!!',
3854
+ 63 => 'LG-Google TV!!',
3855
+ 64 => 'LG-ANDROID MINI BOX',
3856
+ 65 => 'LG-P999',
3857
+ 66 => 'LG-E739',
3858
+ 67 => 'LG-C800',
3859
  ),
3860
  '@LI' =>
3861
  array (
3862
  0 => 'Liquid!!',
3863
  1 => '(BLU|DASH|LIFE|NEO|STUDIO|VIVO)!!',
3864
  2 => 'Liberty',
3865
+ 3 => '(HUAWEI )?(ALP|BLA|CRR|EVR|HMA|LIO|LON|LYA|MATE|MHA|MT1|MT2|MT7|M200|NOH|NXT|SNE|TAS|Z100)!!',
3866
+ 4 => '(MEDION|(MD )?LIFETAB)!!',
3867
+ 5 => 'Life',
3868
+ 6 => 'Liberty Tab G100',
3869
+ 7 => 'Live ?With ?Walkman!',
3870
+ 8 => 'libra',
3871
+ 9 => 'lithium',
3872
+ 10 => 'Light Tab',
3873
+ 11 => 'Light Tab 2',
3874
+ 12 => 'Light Tab 2W',
3875
  ),
3876
  '@LL' =>
3877
  array (
3878
+ 0 => '(HW-|HUAWEI |HONOR )?(ATH|AUM|BLN|BKL|BKK|BND|CHE|CHM|COL|COR|DUA|DUK|DLI|EDI|FRD|HLK|HN3|H30|H60|HOL|HRY|JAT|JMM|JSN|LRA|KIW|KSA|LLD|NEM|NMO|NTH|NTN|OXF|PE|PCT|PLK|RNE|SCL|TNY|KNT|CAM|STF|HDN|YAL)!!',
3879
  1 => '(Lanix )?(Ilium|llium)!!',
3880
  ),
3881
  '@LM' =>
3882
  array (
3883
+ 0 => 'LM-F100!',
3884
+ 1 => 'LM-G710!',
3885
+ 2 => 'LM-G715!',
3886
+ 3 => 'LM-G810!',
3887
+ 4 => 'LM-G820!',
3888
+ 5 => 'LM-G850!',
3889
+ 6 => 'LM-G900!',
3890
+ 7 => 'LM-G910!',
3891
+ 8 => 'LM-K200!',
3892
+ 9 => 'LM-K410!',
3893
+ 10 => 'LM-K420!',
3894
+ 11 => 'LM-K510!',
3895
+ 12 => 'LM-K520!',
3896
+ 13 => 'LM-Q610!',
3897
+ 14 => 'LM-Q617!',
3898
+ 15 => 'LM-Q630!',
3899
+ 16 => 'LM-Q710!',
3900
+ 17 => 'LM-Q720!',
3901
+ 18 => 'LM-Q725!',
3902
+ 19 => 'LM-Q815!',
3903
+ 20 => 'LM-Q850!',
3904
+ 21 => 'LM-Q910!',
3905
+ 22 => 'LM-Q925!',
3906
+ 23 => 'LM-V350!',
3907
+ 24 => 'LM-V40[59]!',
3908
+ 25 => 'LM-V450!',
3909
+ 26 => 'LM-V500!',
3910
+ 27 => 'LM-V510!',
3911
+ 28 => 'LM-V600!',
3912
+ 29 => 'LM-X120!',
3913
+ 30 => 'LM-X210!',
3914
+ 31 => 'LM-X212!',
3915
+ 32 => 'LM-X220!',
3916
+ 33 => 'LM-X320!',
3917
+ 34 => 'LM-X410!',
3918
+ 35 => 'LM-X415!',
3919
+ 36 => 'LM-X420!',
3920
+ 37 => 'LM-X430!',
3921
+ 38 => 'LM-X510!',
3922
+ 39 => 'LM-X520!',
3923
+ 40 => 'LM-X525!',
3924
+ 41 => 'LM-X540!',
3925
+ 42 => 'LM-X625!',
3926
+ 43 => 'LM-Y110!',
3927
  ),
3928
  '@LO' =>
3929
  array (
3930
  0 => 'LogicPD Zoom2',
3931
+ 1 => '(HUAWEI )?(ALP|BLA|CRR|EVR|HMA|LIO|LON|LYA|MATE|MHA|MT1|MT2|MT7|M200|NOH|NXT|SNE|TAS|Z100)!!',
3932
  2 => 'Loox',
3933
  ),
3934
+ '@LR' =>
3935
+ array (
3936
+ 0 => '(HW-|HUAWEI |HONOR )?(ATH|AUM|BLN|BKL|BKK|BND|CHE|CHM|COL|COR|DUA|DUK|DLI|EDI|FRD|HLK|HN3|H30|H60|HOL|HRY|JAT|JMM|JSN|LRA|KIW|KSA|LLD|NEM|NMO|NTH|NTN|OXF|PE|PCT|PLK|RNE|SCL|TNY|KNT|CAM|STF|HDN|YAL)!!',
3937
+ ),
3938
  '@LS' =>
3939
  array (
3940
  0 => 'LS670',
3989
  1 => 'LUXURY 3',
3990
  2 => 'LUXURY 4',
3991
  3 => 'LUXURY 5',
3992
+ 4 => '(HW-|HUAWEI )?(AMN|ART|AQM|CRO|LUA|CUN|DUB|SCC|SCU|CAM|LDN|LYO|MED|MYA)!!',
3993
  5 => 'Lucky Ultra Sonic U8650',
3994
  6 => 'LU2300',
3995
  7 => 'Lumia800',
4005
  ),
4006
  '@LY' =>
4007
  array (
4008
+ 0 => '(HUAWEI )?(ALP|BLA|CRR|EVR|HMA|LIO|LON|LYA|MATE|MHA|MT1|MT2|MT7|M200|NOH|NXT|SNE|TAS|Z100)!!',
4009
+ 1 => '(HW-|HUAWEI )?(AMN|ART|AQM|CRO|LUA|CUN|DUB|SCC|SCU|CAM|LDN|LYO|MED|MYA)!!',
4010
+ 2 => 'LYF LS-4006',
4011
+ 3 => 'LYF LS-5009',
4012
  ),
4013
  '@M' =>
4014
  array (
4039
  '@M1' =>
4040
  array (
4041
  0 => 'M19',
4042
+ 1 => '(HW-|HUAWEI )?(ALE|ANA|ANE|CDY|CLT|D2|DAV|ELE|ELS|EML|EVA|FIG|G6|G7|GRA|JNY|MAR|M100|P2|P6|P7|PPA|PRA|RIO|SC|Sophia|STK|VIE|VKY|VNS|VOG|VTR|WAS)!!',
4043
  2 => 'M1050S',
4044
  3 => 'M1',
4045
  4 => 'm1 metal',
4046
  5 => 'm1 note',
4047
  6 => 'M1001',
4048
  7 => 'M12',
4049
+ 8 => 'M1908C3JGG',
4050
  ),
4051
  '@M2' =>
4052
  array (
4053
+ 0 => '(HUAWEI )?(ALP|BLA|CRR|EVR|HMA|LIO|LON|LYA|MATE|MHA|MT1|MT2|MT7|M200|NOH|NXT|SNE|TAS|Z100)!!',
4054
  1 => 'M210',
4055
  2 => 'm2 note',
4056
  3 => 'm2',
4057
  4 => 'M2mini',
4058
+ 5 => 'M2002J9G',
4059
+ 6 => 'M2003J15SC',
4060
+ 7 => 'M2004J19C',
4061
+ 8 => 'M2004J7BC',
4062
+ 9 => 'M2006C3LG',
4063
+ 10 => 'M2006C3LVG',
4064
+ 11 => 'M2006C3MG',
4065
+ 12 => 'M2006C3MII',
4066
+ 13 => 'M2006C3MNG',
4067
+ 14 => 'M2007J17G',
4068
+ 15 => 'M2007J1SC',
4069
+ 16 => 'M2007J20CG',
4070
+ 17 => 'M2007J22G',
4071
+ 18 => 'M2007J3SG',
4072
+ 19 => 'M2007J3SY',
4073
+ 20 => 'M2010J19CG',
4074
+ 21 => 'M2010J19SG',
4075
+ 22 => 'M2010J19SY',
4076
+ 23 => 'M2011K2C',
4077
+ 24 => 'M2011K2G',
4078
+ 25 => 'M2012K11AG',
4079
+ 26 => 'M2012K11AC',
4080
+ 27 => 'M2012K10C',
4081
+ 28 => 'M2012K11G',
4082
+ 29 => 'M2101K6G',
4083
+ 30 => 'M2101K6P',
4084
+ 31 => 'M2101K7AG',
4085
+ 32 => 'M2101K7BG',
4086
+ 33 => 'M2101K7BNY',
4087
+ 34 => 'M2101K9AG',
4088
+ 35 => 'M2101K9C',
4089
+ 36 => 'M2101K9G',
4090
+ 37 => 'M2102J20SG',
4091
+ 38 => 'M2102J20SI',
4092
+ 39 => 'M2102K1AC',
4093
+ 40 => 'M2102K1C',
4094
+ 41 => 'M2102K1G',
4095
+ 42 => 'M2103K19G',
4096
+ 43 => 'M2103K19PG',
4097
  ),
4098
  '@M3' =>
4099
  array (
4119
  2 => 'M470BSE',
4120
  3 => 'M4',
4121
  4 => 'M4(TEL)? SS[0-9]{3,4}!!',
4122
+ 5 => 'M40 EEA',
4123
+ 6 => 'M40(N9H3)',
4124
  ),
4125
  '@M5' =>
4126
  array (
4179
  2 => 'manta',
4180
  3 => '(bq|Aquaris|Edison|Maxwell)!!',
4181
  4 => '(DNS )?(Airtab )?(E|ES|M|MA|MC|MF|MW|P|PC|PF)[0-9]{2,4}!!',
4182
+ 5 => '(HUAWEI )?(ALP|BLA|CRR|EVR|HMA|LIO|LON|LYA|MATE|MHA|MT1|MT2|MT7|M200|NOH|NXT|SNE|TAS|Z100)!!',
4183
+ 6 => '(HW-|HUAWEI )?(ALE|ANA|ANE|CDY|CLT|D2|DAV|ELE|ELS|EML|EVA|FIG|G6|G7|GRA|JNY|MAR|M100|P2|P6|P7|PPA|PRA|RIO|SC|Sophia|STK|VIE|VKY|VNS|VOG|VTR|WAS)!!',
4184
+ 7 => '(HW-|HUAWEI )?MAR-(AL00|LX1A|LX1M|LX2|LX3A|TL00)!',
4185
+ 8 => 'MAX FIND 5.0',
4186
+ 9 => 'Malata!!',
4187
+ 10 => 'Masstel!!',
4188
+ 11 => 'MASTONE!!',
4189
+ 12 => 'Maxtron!!',
4190
+ 13 => 'magi',
4191
+ 14 => 'MagicBox',
4192
+ 15 => '(Xiaomi )?(MI )?MAX$!',
4193
+ 16 => '(Xiaomi )?(MI )?MAX 2$!',
4194
+ 17 => '(Xiaomi )?(MI )?MAX 3$!',
4195
+ 18 => 'markf',
4196
+ 19 => 'markw',
4197
  ),
4198
  '@MB' =>
4199
  array (
4208
  array (
4209
  0 => 'MC002',
4210
  1 => '(DNS )?(Airtab )?(E|ES|M|MA|MC|MF|MW|P|PC|PF)[0-9]{2,4}!!',
4211
+ 2 => 'MC401 GWL',
4212
+ 3 => 'MC32N0',
4213
+ 4 => 'MC40N0',
4214
+ 5 => 'MC67NA',
4215
  ),
4216
  '@MD' =>
4217
  array (
4236
  13 => 'ME581CL',
4237
  14 => 'MeMO Pad 7',
4238
  15 => 'MediaPad!!',
4239
+ 16 => '(HW-|HUAWEI )?(AMN|ART|AQM|CRO|LUA|CUN|DUB|SCC|SCU|CAM|LDN|LYO|MED|MYA)!!',
4240
+ 17 => 'Mediacom 810C',
4241
+ 18 => '(MEDION|(MD )?LIFETAB)!!',
4242
+ 19 => 'MEEG!!',
4243
+ 20 => 'MEIZU E3',
4244
+ 21 => 'meizu m1note',
4245
+ 22 => 'MEIZU M5',
4246
+ 23 => 'MEIZU M9',
4247
+ 24 => 'MEIZU MX',
4248
+ 25 => 'Meizu S6',
4249
+ 26 => '(MEO )?Smart A!!',
4250
+ 27 => 'MEU AN!!',
4251
+ 28 => 'ME[0-9]{3,3}!!',
4252
+ 29 => 'MEM02',
4253
+ 30 => 'MegaFon SP-AI',
4254
+ 31 => 'MegaFon SP-A3',
4255
+ 32 => 'MegaFon SP-A5',
4256
+ 33 => 'MegaFon SP-A10',
4257
+ 34 => 'MegaFon V9',
4258
+ 35 => 'MegaFon V9+',
4259
+ 36 => 'MegaFon SIM+',
4260
+ 37 => 'MegaFon Login 3',
4261
  ),
4262
  '@MF' =>
4263
  array (
4269
  '@MH' =>
4270
  array (
4271
  0 => 'MH350',
4272
+ 1 => '(HUAWEI )?(ALP|BLA|CRR|EVR|HMA|LIO|LON|LYA|MATE|MHA|MT1|MT2|MT7|M200|NOH|NXT|SNE|TAS|Z100)!!',
4273
  ),
4274
  '@MI' =>
4275
  array (
4309
  33 => '(CSL[- ])?(Spice[- ]?)?Mi(-| )?[0-9]{3,3}!!',
4310
  34 => 'miTab!!',
4311
  35 => '(Xiaomi )?(Xiaomi|Xiaomi M|MI)!!',
4312
+ 36 => 'MI 8',
4313
+ 37 => 'MI 8 SE',
4314
+ 38 => 'MI 8 UD',
4315
+ 39 => 'MI 8 Lite',
4316
+ 40 => 'MI 8 Pro',
4317
+ 41 => 'MI 9',
4318
+ 42 => 'Mi 9 Lite',
4319
+ 43 => 'Mi9 Pro 5G',
4320
+ 44 => 'Mi 9 SE',
4321
+ 45 => 'Mi 9T',
4322
+ 46 => 'Mi 9T Pro',
4323
+ 47 => 'Mi 10',
4324
+ 48 => 'Mi 10 Pro',
4325
+ 49 => 'Mi 10 Lite 5G',
4326
+ 50 => 'Mi 10T Lite',
4327
+ 51 => 'Mi 11',
4328
+ 52 => 'Mi 11 Lite 5G',
4329
+ 53 => 'Mi Note 10',
4330
+ 54 => 'Mi Note 10 Lite',
4331
+ 55 => 'Mi Note 10 Pro',
4332
+ 56 => '(Xiaomi|Xiaomi Mi|MI) Note!!',
4333
+ 57 => '(Xiaomi )?(MI )?MAX$!',
4334
+ 58 => '(Xiaomi )?(MI )?MAX 2$!',
4335
+ 59 => '(Xiaomi )?(MI )?MAX 3$!',
4336
+ 60 => '(Xiaomi )?(MI )?MIX$!',
4337
+ 61 => '(Xiaomi )?(MI )?MIX 2$!',
4338
+ 62 => '(Xiaomi )?(MI )?MIX 2S$!',
4339
+ 63 => 'MIX 3',
4340
+ 64 => 'Mi MIX 3',
4341
+ 65 => 'Mi MIX 3 5G',
4342
+ 66 => 'MI PLAY',
4343
+ 67 => 'mido',
4344
+ 68 => '(Xiaomi|Xiaomi Mi|MI) Pad!!',
4345
+ 69 => '(Xiaomi|Xiaomi Mi|MI)Box!!',
4346
+ 70 => '(Xiaomi|Xiaomi Mi|MI)TV!!',
4347
+ 71 => '(ZTE )?(Grand|Mimosa)!!',
4348
  ),
4349
  '@MK' =>
4350
  array (
4387
  13 => 'MOGU!!',
4388
  14 => 'moii!!',
4389
  15 => 'MORAL N01',
4390
+ 16 => 'motorola one',
4391
+ 17 => 'motorola one 5G ace',
4392
+ 18 => 'motorola one action',
4393
+ 19 => 'motorola one fusion+',
4394
+ 20 => 'motorola one hyper',
4395
+ 21 => 'motorola one macro',
4396
+ 22 => 'motorola one power',
4397
+ 23 => 'motorola one vision',
4398
+ 24 => 'motorola one zoom',
4399
+ 25 => 'motorola edge',
4400
+ 26 => 'motorola edge plus',
4401
+ 27 => 'motorola edge 20',
4402
+ 28 => 'motorola edge 20 lite',
4403
+ 29 => 'motorola edge 20 pro',
4404
+ 30 => 'motorola edge 30 pro',
4405
+ 31 => 'Moto Droid',
4406
+ 32 => 'Motorola Pro XT610',
4407
+ 33 => 'Motorola Milestone MAXX',
4408
+ 34 => 'Motorola Backflip Me600',
4409
+ 35 => 'Moto ME860',
4410
+ 36 => 'Moto C',
4411
+ 37 => 'Moto C Plus',
4412
+ 38 => '(Moto)?E2$!',
4413
+ 39 => '(Moto)?E2\\(4G-LTE\\)$!',
4414
+ 40 => 'Motorola MotoE2!',
4415
+ 41 => 'Moto E4',
4416
+ 42 => 'Moto E (4)',
4417
+ 43 => 'Moto E (4) Plus',
4418
+ 44 => 'moto e5',
4419
+ 45 => 'moto e5 cruise',
4420
+ 46 => 'moto e5 play',
4421
+ 47 => 'moto e5 plus',
4422
+ 48 => 'moto e(6i)',
4423
+ 49 => 'moto e6s',
4424
+ 50 => 'moto e6 play',
4425
+ 51 => 'moto e(6) plus',
4426
+ 52 => 'moto e(7)',
4427
+ 53 => 'moto e(7) plus',
4428
+ 54 => 'moto e(7) power',
4429
+ 55 => 'moto e(7i) power',
4430
+ 56 => 'moto e20',
4431
+ 57 => 'moto e30',
4432
+ 58 => 'moto e40',
4433
+ 59 => '(Moto)?G3$!',
4434
+ 60 => '(Moto)?G3-TE$!',
4435
+ 61 => 'Moto G 2015',
4436
+ 62 => 'Moto G (2015)',
4437
+ 63 => 'Moto G (2014',
4438
+ 64 => 'MOTOROLA MOTOG',
4439
+ 65 => 'Moto G Play',
4440
+ 66 => 'moto g power',
4441
+ 67 => 'Moto G Turbo',
4442
+ 68 => 'moto g 5G',
4443
+ 69 => 'moto g 5G plus',
4444
+ 70 => 'moto g pro',
4445
+ 71 => 'Moto G4',
4446
+ 72 => 'Moto G (4',
4447
+ 73 => 'Moto G (4)',
4448
+ 74 => 'Moto G4 Plus',
4449
+ 75 => 'Moto G 5',
4450
+ 76 => 'Moto G (5',
4451
+ 77 => 'Moto G (5)',
4452
+ 78 => 'Moto G (5) Plus',
4453
+ 79 => 'Moto G (5S',
4454
+ 80 => 'Moto G (5S)',
4455
+ 81 => 'Moto G (5S) Plus',
4456
+ 82 => 'Moto G (5S) Plus (XT1805)',
4457
+ 83 => 'moto g(6',
4458
+ 84 => 'moto g(6)',
4459
+ 85 => 'moto g(6) (XT1925DL)',
4460
+ 86 => 'moto g(6) forge',
4461
+ 87 => 'moto g(6) play',
4462
+ 88 => 'moto g(6) plus',
4463
+ 89 => 'moto g(7',
4464
+ 90 => 'moto g(7)',
4465
+ 91 => 'moto g(7) optimo (XT1952DL)',
4466
+ 92 => 'moto g(7) play',
4467
+ 93 => 'moto g(7) plus',
4468
+ 94 => 'moto g(7) power',
4469
+ 95 => 'moto g(7) supra',
4470
+ 96 => 'moto g(8',
4471
+ 97 => 'moto g(8)',
4472
+ 98 => 'moto g(8) plus',
4473
+ 99 => 'moto g(8) power',
4474
+ 100 => 'moto g(8) power lite',
4475
+ 101 => 'moto g(9) play',
4476
+ 102 => 'moto g(9) plus',
4477
+ 103 => 'moto g(9) power',
4478
+ 104 => 'moto g(10)',
4479
+ 105 => 'moto g(20)',
4480
+ 106 => 'moto g(30)',
4481
+ 107 => 'moto g31(w)',
4482
+ 108 => 'moto g(50)',
4483
+ 109 => 'moto g51 5G',
4484
+ 110 => 'moto g(60)',
4485
+ 111 => 'moto g(60)s',
4486
+ 112 => 'moto g(100)',
4487
+ 113 => 'moto g200 5G',
4488
+ 114 => 'Moto Z (2)',
4489
+ 115 => 'Moto Z2 Play',
4490
+ 116 => 'Moto Z3 Play',
4491
+ 117 => 'Moto X Pro',
4492
+ 118 => 'moto x4',
4493
+ 119 => 'moto z4',
4494
+ 120 => 'Moto Backflip',
4495
+ 121 => 'motorola razr 5G',
4496
+ 122 => 'MOTOROLA XOOM MZ606',
4497
+ 123 => 'MOTOROLA RAZR',
4498
+ 124 => 'MOTWX435KT',
4499
+ 125 => '(PLOYER-)?MOMO!!',
4500
+ 126 => 'MOB-5045',
4501
+ 127 => 'Mobii 7',
4502
+ 128 => 'MoFing',
4503
+ 129 => 'mocha',
4504
+ 130 => 'MO-01J',
4505
+ 131 => 'MO-01K',
4506
+ 132 => 'Movistar Express',
4507
+ 133 => 'Movistar Link',
4508
+ 134 => 'Movistar Motion',
4509
+ 135 => 'Movistar Prime',
4510
+ 136 => 'MOVE',
4511
  ),
4512
  '@MP' =>
4513
  array (
4531
  17 => 'MPQC804HD',
4532
  18 => 'MPQC1010',
4533
  ),
4534
+ '@MR' =>
4535
+ array (
4536
+ 0 => '(HW-|HUAWEI )?(ATU|DRA|DVC|FLA|JKM|TIT|TAG||MRD|NCE|POT|TRT|SLA)!!',
4537
+ ),
4538
  '@MS' =>
4539
  array (
4540
  0 => 'MStar Amber3',
4591
  28 => 'mt8580!',
4592
  29 => 'mt8658!',
4593
  30 => '(AC|BC|LC|MT|RC|QS|VM|TS|OC)[0-9]{4,4}[A-Z]!!',
4594
+ 31 => '(HUAWEI )?(ALP|BLA|CRR|EVR|HMA|LIO|LON|LYA|MATE|MHA|MT1|MT2|MT7|M200|NOH|NXT|SNE|TAS|Z100)!!',
4595
  32 => 'MTC Android',
4596
  33 => 'MT791',
4597
  34 => 'MT70[0-9]{2,2}!!',
4645
  ),
4646
  '@MY' =>
4647
  array (
4648
+ 0 => '(HW-|HUAWEI )?(AMN|ART|AQM|CRO|LUA|CUN|DUB|SCC|SCU|CAM|LDN|LYO|MED|MYA)!!',
4649
  1 => 'MyPhone A818g Duo',
4650
  2 => 'MyPhone A818 Slim Duo',
4651
  3 => 'MyPhone A848 Duo',
4802
  ),
4803
  '@NC' =>
4804
  array (
4805
+ 0 => '(HW-|HUAWEI )?(ATU|DRA|DVC|FLA|JKM|TIT|TAG||MRD|NCE|POT|TRT|SLA)!!',
4806
  ),
4807
  '@NE' =>
4808
  array (
4839
  30 => '(BLU|DASH|LIFE|NEO|STUDIO|VIVO)!!',
4840
  31 => 'NexusHD2',
4841
  32 => 'Nexus HD2',
4842
+ 33 => '(HW-|HUAWEI |HONOR )?(ATH|AUM|BLN|BKL|BKK|BND|CHE|CHM|COL|COR|DUA|DUK|DLI|EDI|FRD|HLK|HN3|H30|H60|HOL|HRY|JAT|JMM|JSN|LRA|KIW|KSA|LLD|NEM|NMO|NTH|NTN|OXF|PE|PCT|PLK|RNE|SCL|TNY|KNT|CAM|STF|HDN|YAL)!!',
4843
  34 => 'Neon7',
4844
  35 => 'Neon9',
4845
  36 => '(NetTab|NT-)!!',
4889
  80 => 'Next9P',
4890
  81 => 'Next10P12',
4891
  82 => 'NEXT',
4892
+ 83 => 'NE2213',
4893
+ 84 => 'New Andromax-i',
4894
+ 85 => 'Neo V',
4895
+ 86 => 'NEBULA6.9',
4896
  ),
4897
  '@NG' =>
4898
  array (
4931
  ),
4932
  '@NM' =>
4933
  array (
4934
+ 0 => '(HW-|HUAWEI |HONOR )?(ATH|AUM|BLN|BKL|BKK|BND|CHE|CHM|COL|COR|DUA|DUK|DLI|EDI|FRD|HLK|HN3|H30|H60|HOL|HRY|JAT|JMM|JSN|LRA|KIW|KSA|LLD|NEM|NMO|NTH|NTN|OXF|PE|PCT|PLK|RNE|SCL|TNY|KNT|CAM|STF|HDN|YAL)!!',
4935
  1 => '(NMP|MBR|XDK|XDS|XMP)\\-!!',
4936
  ),
4937
  '@NO' =>
4987
  48 => 'Nook HD',
4988
  49 => 'Nook HD+',
4989
  50 => 'Novapad!!',
4990
+ 51 => '(HUAWEI )?(ALP|BLA|CRR|EVR|HMA|LIO|LON|LYA|MATE|MHA|MT1|MT2|MT7|M200|NOH|NXT|SNE|TAS|Z100)!!',
4991
+ 52 => 'Nova!!',
4992
+ 53 => 'Now',
4993
+ 54 => 'NO1 S6',
4994
+ 55 => 'NOAIN!!',
4995
+ 56 => 'Nokia 1 Plus',
4996
+ 57 => 'Nokia 1',
4997
+ 58 => 'Nokia 2.1',
4998
+ 59 => 'Nokia 2',
4999
+ 60 => 'Nokia 3.1 Plus',
5000
+ 61 => 'Nokia 3.1',
5001
+ 62 => 'Nokia 4.2',
5002
+ 63 => 'Nokia 5.1 Plus',
5003
+ 64 => 'Nokia 5.1',
5004
+ 65 => 'Nokia 6.1 Plus',
5005
+ 66 => 'Nokia 6.1',
5006
+ 67 => 'Nokia 6.2',
5007
+ 68 => 'Nokia 6',
5008
+ 69 => 'Nokia 7.1',
5009
+ 70 => 'Nokia 7 Plus',
5010
+ 71 => 'Nokia 8.1',
5011
+ 72 => 'Nokia 8 Sirocco',
5012
+ 73 => 'Nokia 8',
5013
+ 74 => 'Nokia 9',
5014
+ 75 => 'Nokia 10.1',
5015
+ 76 => 'Nokia N9',
5016
+ 77 => 'Nokia N900',
5017
+ 78 => 'Nokia X',
5018
+ 79 => 'Nokia X Dual SIM',
5019
+ 80 => 'Nokia X+',
5020
+ 81 => 'Nokia Xplus',
5021
+ 82 => 'Nokia XL 4G',
5022
+ 83 => 'Nokia XL',
5023
+ 84 => 'Nokia XL Dual SIM',
5024
+ 85 => 'Nokia X2',
5025
+ 86 => 'NokiaX2DS',
5026
+ 87 => 'Notion Ink ADAM',
5027
+ 88 => 'Note III',
5028
+ 89 => 'Nozomi',
5029
+ 90 => 'Note 7P',
5030
+ 91 => 'Note 8P',
5031
+ 92 => 'Note 9P',
5032
+ 93 => 'Note 11P',
5033
+ 94 => 'Noble TAB07-485',
5034
+ 95 => '(QMobile|QTab|Q-Smart|Noir)!!',
5035
  ),
5036
  '@NP' =>
5037
  array (
5047
  ),
5048
  '@NT' =>
5049
  array (
5050
+ 0 => '(HW-|HUAWEI |HONOR )?(ATH|AUM|BLN|BKL|BKK|BND|CHE|CHM|COL|COR|DUA|DUK|DLI|EDI|FRD|HLK|HN3|H30|H60|HOL|HRY|JAT|JMM|JSN|LRA|KIW|KSA|LLD|NEM|NMO|NTH|NTN|OXF|PE|PCT|PLK|RNE|SCL|TNY|KNT|CAM|STF|HDN|YAL)!!',
5051
+ 1 => '(NetTab|NT-)!!',
5052
  ),
5053
  '@NU' =>
5054
  array (
5066
  ),
5067
  '@NX' =>
5068
  array (
5069
+ 0 => '(HUAWEI )?(ALP|BLA|CRR|EVR|HMA|LIO|LON|LYA|MATE|MHA|MT1|MT2|MT7|M200|NOH|NXT|SNE|TAS|Z100)!!',
5070
  1 => '(Nexian )?NX-A[0-9]{3,3}!!',
5071
  2 => 'NXA8QC116',
5072
  3 => 'NX16A8116K',
5100
  '@OB' =>
5101
  array (
5102
  0 => 'OB-OPPO A31c',
5103
+ 1 => 'OB-OPPO R8205',
5104
+ 2 => 'OB-OPPO R7005',
5105
+ 3 => 'OB-OPPO R7c',
5106
+ 4 => 'OB-OPPO 1105',
5107
+ 5 => 'OB-OPPO 3005',
5108
+ 6 => 'Obreey SURFpad',
5109
  ),
5110
  '@OC' =>
5111
  array (
5281
  121 => 'One V',
5282
  122 => 'One',
5283
  123 => 'One M7',
5284
+ 124 => 'One Max',
5285
+ 125 => 'one m8',
5286
+ 126 => 'One A0001',
5287
+ 127 => 'OnePlus One',
5288
+ 128 => 'OnePlus One A0001',
5289
+ 129 => 'ONE A2001',
5290
+ 130 => 'ONE A2003',
5291
+ 131 => 'ONE A2005',
5292
+ 132 => 'OnePlus2',
5293
+ 133 => 'ONE A3000',
5294
+ 134 => 'ONE A3003',
5295
+ 135 => 'ONEPLUS A3000',
5296
+ 136 => 'ONEPLUS A3003',
5297
+ 137 => 'OnePlus3',
5298
+ 138 => 'ONEPLUS A3010',
5299
+ 139 => 'ONEPLUS A5000',
5300
+ 140 => 'ONEPLUS A5010',
5301
+ 141 => 'ONEPLUS A6000',
5302
+ 142 => 'ONEPLUS A6003',
5303
+ 143 => 'ONEPLUS A6010',
5304
+ 144 => 'ONEPLUS A6013',
5305
+ 145 => 'OnePlus 7T Pro',
5306
+ 146 => 'ONE E1000',
5307
+ 147 => 'ONE E1001',
5308
+ 148 => 'ONE E1003',
5309
+ 149 => 'ONE E1005',
5310
+ 150 => 'oneplus Nord 2 5G',
5311
+ 151 => 'ONDA MID',
5312
+ 152 => 'ONDA A9 Core4',
5313
+ 153 => 'ONDA VI10',
5314
+ 154 => 'Onda V812',
5315
+ 155 => 'ONDA v975m',
5316
+ 156 => 'ONDA V989',
5317
+ 157 => 'ONDA V989 Core8',
5318
  ),
5319
  '@OP' =>
5320
  array (
5323
  2 => 'Opus One',
5324
  3 => 'OPS-DRD Digital Signage Player',
5325
  4 => 'OP110',
5326
+ 5 => 'OPPO PBAM00',
5327
+ 6 => 'OPPO PBFT00',
5328
+ 7 => 'OPPO A30',
5329
+ 8 => 'OPPO A31',
5330
+ 9 => 'OPPO A31t',
5331
+ 10 => 'OPPO A33',
5332
+ 11 => 'OPPO A33m',
5333
+ 12 => 'OPPO A37m',
5334
+ 13 => 'OPPO A53',
5335
+ 14 => 'OPPO A53m',
5336
+ 15 => 'OPPO A53t',
5337
+ 16 => 'OPPO A57',
5338
+ 17 => 'OPPO A57t',
5339
+ 18 => 'OPPO A59m',
5340
+ 19 => 'OPPO A59s',
5341
+ 20 => 'OPPO A59st',
5342
+ 21 => 'OPPO A73',
5343
+ 22 => 'OPPO A73t',
5344
+ 23 => 'OPPO A77',
5345
+ 24 => 'OPPO A77t',
5346
+ 25 => 'OPPO A79',
5347
+ 26 => 'OPPO A79kt',
5348
+ 27 => 'OPPO A79t',
5349
+ 28 => 'OPPO A83',
5350
+ 29 => 'OPPO A83t',
5351
+ 30 => 'OPPO A800',
5352
+ 31 => 'OPPOX905',
5353
+ 32 => 'OPPOX907',
5354
+ 33 => 'OPPO Find5',
5355
+ 34 => 'OPPOX909',
5356
+ 35 => 'OPPO X909',
5357
+ 36 => 'OPPO X9007',
5358
+ 37 => 'OPPOX9015',
5359
+ 38 => 'OPPOX9017',
5360
+ 39 => 'OPPO find7',
5361
+ 40 => 'OPPOR601',
5362
+ 41 => 'OPPOR801',
5363
+ 42 => 'OPPOR803',
5364
+ 43 => 'OPPOR805',
5365
+ 44 => 'OPPOR807',
5366
+ 45 => 'OPPO R811',
5367
+ 46 => 'OPPO R813T',
5368
+ 47 => 'OPPO R815',
5369
+ 48 => 'OPPOR817',
5370
+ 49 => 'Oppo R819',
5371
+ 50 => 'OPPO R821',
5372
+ 51 => 'OPPO R831',
5373
+ 52 => 'Oppo R831 Limited Edition',
5374
+ 53 => 'OPPO R1001',
5375
+ 54 => 'OPPOR8015',
5376
+ 55 => 'OPPOR8111',
5377
+ 56 => 'OPPOT29',
5378
+ 57 => '(OPPO-?)?T703!',
5379
+ 58 => 'OPPOU701',
5380
+ 59 => 'OPPOU7011',
5381
+ 60 => 'OPPOU7015',
5382
+ 61 => 'OPPO PBCM30',
5383
+ 62 => 'OPPO PBCT10',
5384
+ 63 => 'OPPO N1',
5385
+ 64 => 'OPPO R7',
5386
+ 65 => 'OPPO R7Plus',
5387
+ 66 => 'OPPO R7s',
5388
+ 67 => 'OPPO R7sm',
5389
+ 68 => 'OPPO R7st',
5390
+ 69 => 'OPPO R7t',
5391
+ 70 => 'OPPO R9k',
5392
+ 71 => 'OPPO R9m',
5393
+ 72 => 'OPPO R9tm',
5394
+ 73 => 'OPPO R9km',
5395
+ 74 => 'OPPO R9s',
5396
+ 75 => 'OPPO R9sk',
5397
+ 76 => 'OPPO R9st',
5398
+ 77 => 'OPPO R9skt',
5399
+ 78 => 'OPPO R9t',
5400
+ 79 => 'OPPO R11',
5401
+ 80 => 'OPPO R11t',
5402
+ 81 => 'OPPO R7 Plus',
5403
+ 82 => 'OPPO R7sPlus',
5404
+ 83 => 'OPPO R9 Plusm A',
5405
+ 84 => 'OPPO R9 Plustm A',
5406
+ 85 => 'OPPO R9s Plus',
5407
+ 86 => 'OPPO R9s Plust',
5408
+ 87 => 'OPPO R11 Plus',
5409
+ 88 => 'OPPO R11 Plusk',
5410
+ 89 => 'OPPO R11 Pluskt',
5411
+ 90 => 'OPPO R11s',
5412
+ 91 => 'OPPO R11s Plus',
5413
+ 92 => 'OPPO R11st',
5414
+ 93 => 'OPPO R11s Plust',
5415
+ 94 => 'OPPO PAAM00',
5416
+ 95 => 'OPPO PACM00',
5417
+ 96 => 'OPPO PACT00',
5418
+ 97 => 'OPPO PBDM00',
5419
+ 98 => 'OPPO PAFM00',
5420
+ 99 => 'OPSSON!!',
5421
+ 100 => 'OP0118-12',
5422
+ 101 => 'Optimus Barcelona',
5423
+ 102 => 'Optimus Boston',
5424
+ 103 => 'Optimus Madrid',
5425
+ 104 => 'Optimus Monte Carlo',
5426
+ 105 => 'Optimus San Francisco',
5427
+ 106 => 'Optimus San Remo',
5428
+ 107 => 'Optimus Zali',
5429
  ),
5430
  '@OR' =>
5431
  array (
5476
  '@OV' =>
5477
  array (
5478
  0 => '(OV-|Overmax|Vertis)!!',
5479
+ 1 => 'OV10274G',
5480
+ ),
5481
+ '@OX' =>
5482
+ array (
5483
+ 0 => '(HW-|HUAWEI |HONOR )?(ATH|AUM|BLN|BKL|BKK|BND|CHE|CHM|COL|COR|DUA|DUK|DLI|EDI|FRD|HLK|HN3|H30|H60|HOL|HRY|JAT|JMM|JSN|LRA|KIW|KSA|LLD|NEM|NMO|NTH|NTN|OXF|PE|PCT|PLK|RNE|SCL|TNY|KNT|CAM|STF|HDN|YAL)!!',
5484
  ),
5485
  '@OY' =>
5486
  array (
5511
  0 => 'P001',
5512
  1 => 'P001 2',
5513
  2 => 'P002',
5514
+ 3 => 'P00A',
5515
+ 4 => 'P00C',
5516
+ 5 => 'P00I',
5517
+ 6 => 'P01M',
5518
+ 7 => 'P01MA',
5519
+ 8 => 'P01T',
5520
+ 9 => 'P01T 1',
5521
+ 10 => 'P01V',
5522
+ 11 => 'P01W',
5523
+ 12 => 'P01Y',
5524
+ 13 => 'P01Z',
5525
+ 14 => 'P021',
5526
+ 15 => 'P022',
5527
+ 16 => 'P023',
5528
+ 17 => 'P024',
5529
+ 18 => 'P027',
5530
+ 19 => 'P028',
5531
  ),
5532
  '@P1' =>
5533
  array (
5535
  1 => 'P105',
5536
  2 => 'P1m',
5537
  3 => 'P1ma40',
5538
+ 4 => 'P1035X',
5539
+ 5 => 'P1050X',
5540
+ 6 => 'P1060X',
5541
+ 7 => 'P1061X',
5542
+ 8 => 'P10HD??(E6NA)',
5543
+ 9 => 'P11HD',
5544
+ 10 => 'P11HD四核(G9X6)',
5545
+ 11 => 'P11HD??(G9X6)',
5546
+ 12 => 'P11HD四核(G9X7)',
5547
+ 13 => 'P19HD(E1K3)',
5548
+ 14 => 'P19HD(E1K5)',
5549
  ),
5550
  '@P2' =>
5551
  array (
5552
  0 => 'P2A700',
5553
  1 => 'P2Lite',
5554
+ 2 => '(HW-|HUAWEI )?(ALE|ANA|ANE|CDY|CLT|D2|DAV|ELE|ELS|EML|EVA|FIG|G6|G7|GRA|JNY|MAR|M100|P2|P6|P7|PPA|PRA|RIO|SC|Sophia|STK|VIE|VKY|VNS|VOG|VTR|WAS)!!',
5555
+ 3 => 'P20HD EEA',
5556
  ),
5557
  '@P3' =>
5558
  array (
5581
  2 => 'P6 Pro',
5582
  3 => 'P6 Qmax',
5583
  4 => 'P6 Quad',
5584
+ 5 => '(HW-|HUAWEI )?(ALE|ANA|ANE|CDY|CLT|D2|DAV|ELE|ELS|EML|EVA|FIG|G6|G7|GRA|JNY|MAR|M100|P2|P6|P7|PPA|PRA|RIO|SC|Sophia|STK|VIE|VKY|VNS|VOG|VTR|WAS)!!',
5585
  ),
5586
  '@P7' =>
5587
  array (
5588
+ 0 => '(HW-|HUAWEI )?(ALE|ANA|ANE|CDY|CLT|D2|DAV|ELE|ELS|EML|EVA|FIG|G6|G7|GRA|JNY|MAR|M100|P2|P6|P7|PPA|PRA|RIO|SC|Sophia|STK|VIE|VKY|VNS|VOG|VTR|WAS)!!',
5589
  1 => 'P700i',
5590
  2 => 'P701',
5591
  3 => 'P7',
5651
  ),
5652
  '@P9' =>
5653
  array (
5654
+ 0 => 'P9 Energy',
5655
+ 1 => 'P940',
5656
+ 2 => 'P990',
5657
+ 3 => 'P90(H3U6)',
5658
+ 4 => 'P90(H3U7)',
5659
+ 5 => 'P98(F2K9)',
5660
+ 6 => 'P98 八核(B9A3)',
5661
+ 7 => 'P98 3Gk8(A4HY)',
5662
+ 8 => 'P98 3G??(A4HY)',
5663
+ 9 => 'P98 3G(M1Q2)',
5664
+ 10 => 'P98 3G八核(A3HY)',
5665
+ 11 => 'P98 3G八核(A4HY)',
5666
+ 12 => 'P98 4G??(A8H6)',
5667
+ 13 => 'P98 Air?? (C6V8)',
5668
+ 14 => 'P98Air(C6V8)',
5669
+ 15 => 'P98HD(A2Q6)',
5670
+ 16 => 'P98HD+M6',
5671
+ 17 => 'P98T(K3C4)',
5672
  ),
5673
  '@PA' =>
5674
  array (
5690
  15 => 'Patio100',
5691
  16 => 'Patio100 3G',
5692
  17 => 'PAD[0-9]{3,3}!!',
5693
+ 18 => '(HW-|HUAWEI )?PAR-(AL00|LX1|LX1M|LX9|TL00)!',
5694
+ 19 => 'PADM00',
5695
+ 20 => 'PADT00',
5696
+ 21 => 'PAAM00',
5697
+ 22 => 'PACM00',
5698
+ 23 => 'PACT00',
5699
+ 24 => 'PAAT00',
5700
+ 25 => 'PAFM00',
5701
+ 26 => 'PAHM00',
5702
+ 27 => 'Panasonic!!',
5703
+ 28 => 'pandigital9hr',
5704
+ 29 => 'pandigital9hr2',
5705
+ 30 => 'pandigitalopc1',
5706
+ 31 => 'pandigitalopp1',
5707
+ 32 => 'pandigitalp1hr',
5708
+ 33 => 'PantechP!!',
5709
+ 34 => 'PAT712W',
5710
+ 35 => 'PATG7506HD',
5711
+ 36 => 'PAP[0-9]{4,4}!!',
5712
+ 37 => 'PAD1001',
5713
  ),
5714
  '@PB' =>
5715
  array (
5716
  0 => 'PB99400',
5717
+ 1 => 'PBAM00',
5718
+ 2 => 'PBAT00',
5719
+ 3 => 'PBFT00',
5720
+ 4 => 'PBBM00',
5721
+ 5 => 'PBCM30',
5722
+ 6 => 'PBEM00',
5723
+ 7 => 'PBET00',
5724
+ 8 => 'PBDM00',
5725
  ),
5726
  '@PC' =>
5727
  array (
5729
  1 => '(DNS )?(Airtab )?(E|ES|M|MA|MC|MF|MW|P|PC|PF)[0-9]{2,4}!!',
5730
  2 => '(HTC|PCD|USCC)?ADR[0-9]{4,4}!!',
5731
  3 => 'PC36100!',
5732
+ 4 => '(HW-|HUAWEI |HONOR )?(ATH|AUM|BLN|BKL|BKK|BND|CHE|CHM|COL|COR|DUA|DUK|DLI|EDI|FRD|HLK|HN3|H30|H60|HOL|HRY|JAT|JMM|JSN|LRA|KIW|KSA|LLD|NEM|NMO|NTH|NTN|OXF|PE|PCT|PLK|RNE|SCL|TNY|KNT|CAM|STF|HDN|YAL)!!',
5733
+ 5 => 'PC-TE307N1W',
5734
+ 6 => 'PC-TE508BAW',
5735
+ 7 => 'PC-TS508FAM',
5736
+ 8 => 'PC-TS508T1W',
5737
+ 9 => 'PC-TS708T1W',
5738
+ 10 => 'PCGM00',
5739
+ 11 => 'PCAM00',
5740
+ 12 => 'PCAM10',
5741
+ 13 => 'PCCM00',
5742
  ),
5743
  '@PD' =>
5744
  array (
5747
  ),
5748
  '@PE' =>
5749
  array (
5750
+ 0 => '(HW-|HUAWEI |HONOR )?(ATH|AUM|BLN|BKL|BKK|BND|CHE|CHM|COL|COR|DUA|DUK|DLI|EDI|FRD|HLK|HN3|H30|H60|HOL|HRY|JAT|JMM|JSN|LRA|KIW|KSA|LLD|NEM|NMO|NTH|NTN|OXF|PE|PCT|PLK|RNE|SCL|TNY|KNT|CAM|STF|HDN|YAL)!!',
5751
  1 => 'PEDI',
5752
  2 => 'Penta!!',
5753
  3 => 'Pentagram!!',
5840
  3 => 'Pixel 2',
5841
  4 => 'Pixel 2XL',
5842
  5 => 'Pixel 2 XL',
5843
+ 6 => 'Pixel 3',
5844
+ 7 => 'Pixel 3 XL',
5845
+ 8 => 'Pixel 3a',
5846
+ 9 => 'Pixel 3a XL',
5847
+ 10 => 'Pixel 4',
5848
+ 11 => 'Pixel 4a',
5849
+ 12 => 'Pixel 4a (5G)',
5850
+ 13 => 'Pixel 4 XL',
5851
+ 14 => 'Pixel 5',
5852
+ 15 => 'Pixel 5a',
5853
+ 16 => 'Pixel 6',
5854
+ 17 => 'Pixel 6 Pro',
5855
+ 18 => '(Axioo[\\- ])?PICO!!',
5856
+ 19 => 'picoBit-L',
5857
+ 20 => '(GIO-)?(GiONEE[- ])?Pioneer P1!',
5858
+ 21 => '(GIO-)?(GiONEE[- ])?Pioneer P2!',
5859
+ 22 => '(GIO-)?(GiONEE[- ])?Pioneer P3!',
5860
+ 23 => '(GIO-)?(GiONEE[- ])?Pioneer P4!',
5861
+ 24 => '(HW-|HUAWEI )?PIC-(LX9)!',
5862
+ 25 => 'PixelV1',
5863
+ 26 => 'Pixel V2',
5864
+ 27 => 'Pixel V2+',
5865
+ 28 => 'PI2000',
5866
+ 29 => 'PI2010',
5867
+ 30 => 'PI2011',
5868
+ 31 => 'PI3100',
5869
+ 32 => 'PI3100-93',
5870
+ 33 => 'PI3100Z3 93',
5871
+ 34 => 'PI3105',
5872
+ 35 => 'PI3106',
5873
+ 36 => 'PI3110',
5874
+ 37 => 'PI3205G',
5875
+ 38 => 'PI3210G',
5876
+ 39 => 'PI3900',
5877
+ 40 => 'PI3900-93',
5878
+ 41 => 'PI3910',
5879
+ 42 => 'PI4010G',
5880
+ 43 => 'PI7000',
5881
+ 44 => 'PI7100 93',
5882
+ 45 => '(PNR-)?Pioneer!!',
5883
+ 46 => 'PIRANHA!!',
5884
  ),
5885
  '@PJ' =>
5886
  array (
5891
  array (
5892
  0 => 'PLE-701L',
5893
  1 => 'PLE-703L',
5894
+ 2 => '(HW-|HUAWEI |HONOR )?(ATH|AUM|BLN|BKL|BKK|BND|CHE|CHM|COL|COR|DUA|DUK|DLI|EDI|FRD|HLK|HN3|H30|H60|HOL|HRY|JAT|JMM|JSN|LRA|KIW|KSA|LLD|NEM|NMO|NTH|NTN|OXF|PE|PCT|PLK|RNE|SCL|TNY|KNT|CAM|STF|HDN|YAL)!!',
5895
  3 => 'Planet II v2',
5896
  4 => 'PLANET',
5897
  5 => 'Playboy PB-S3',
5924
  '@PO' =>
5925
  array (
5926
  0 => '(Highscreen|Alpha|Bay|Boost|Cosmo|Explosion|Power|Prime|Zera)!!',
5927
+ 1 => '(HW-|HUAWEI )?(ATU|DRA|DVC|FLA|JKM|TIT|TAG||MRD|NCE|POT|TRT|SLA)!!',
5928
+ 2 => 'PocketBook A7',
5929
+ 3 => 'PocketBook A10',
5930
+ 4 => 'PocketBook A10 3G',
5931
+ 5 => 'PocketBook SURFpad2',
5932
+ 6 => 'PocketBook SURFpad 3 (7,85")',
5933
+ 7 => 'PocketBook SURFpad 4 S',
5934
+ 8 => 'PocketBook SURFpad 4 M',
5935
+ 9 => 'PocketBook SURFpad 4 L',
5936
+ 10 => 'POV-Mobii-7',
5937
+ 11 => 'POV Mobii 7',
5938
+ 12 => 'POV TAB-P506!',
5939
+ 13 => 'POV TAB-P517!',
5940
+ 14 => 'POV TAB-P527!',
5941
+ 15 => 'POV TAB-P629!',
5942
+ 16 => 'POV TAB-P701!',
5943
+ 17 => 'POV TAB-P703!',
5944
+ 18 => 'POV TAB-P720!',
5945
+ 19 => 'POV TAB-P721A!',
5946
+ 20 => 'POV TAB-P721!',
5947
+ 21 => 'POV TAB-P722C!',
5948
+ 22 => 'POV TAB-P731N!',
5949
+ 23 => 'POV TAB-P825!',
5950
+ 24 => 'POV TAB-P925!',
5951
+ 25 => 'POV TAB-PR945!',
5952
+ 26 => 'POV TAB-P1025!',
5953
+ 27 => 'POV TAB-P1030!',
5954
+ 28 => 'POV TAB-PI1045!',
5955
+ 29 => 'POV TAB-P1325!',
5956
+ 30 => '(POV )?TAB-PLAYTABPRO!',
5957
+ 31 => '(POV )?TAB-PROTAB25!',
5958
+ 32 => '(POV )?TAB-PROTAB26!',
5959
+ 33 => 'POV TAB-PROTAB27',
5960
+ 34 => '(POV )?TAB-PROTAB30!',
5961
+ 35 => '(POV )?TAB-PROTAB2XXL(4)!',
5962
+ 36 => '(POV )?TAB NAVI7 3G M!',
5963
+ 37 => 'POV_TAB-NAVI7-3G-M',
5964
+ 38 => 'POV TAB-P547(v1.0)',
5965
+ 39 => 'POV TV-HDMI-200BT',
5966
+ 40 => 'POV TV-HDMI-200BT(V2.0)',
5967
+ 41 => 'POV TV-HDMI-210',
5968
+ 42 => 'POV TV-HDMI-KB-01',
5969
+ 43 => 'POV TV-SMARTTV-500',
5970
+ 44 => 'Polaroid PSPT401',
5971
+ 45 => 'Polaroid PSPC505',
5972
+ 46 => 'Polaroid PSPC550',
5973
+ 47 => 'Polaroid P4005A',
5974
+ 48 => 'Polaroid P5005A',
5975
+ 49 => 'Polaroid P5046A',
5976
+ 50 => 'Polaroid P5525A',
5977
+ 51 => 'Polaroid P5526A',
5978
+ 52 => 'POLY ?PAD!!',
5979
+ 53 => 'POLYTRON!!',
5980
+ 54 => 'POMP!!',
5981
+ 55 => 'Positivo Mini',
5982
+ 56 => 'POSITIVO YPY 07FTB',
5983
+ 57 => 'Positivo Ypy AB7E',
5984
+ 58 => 'Positivo Ypy AB7EC',
5985
+ 59 => 'Positivo Ypy AB7F',
5986
+ 60 => 'Positivo AB7F',
5987
+ 61 => 'Positivo Ypy AB7H',
5988
+ 62 => 'Positivo Ypy AB10E',
5989
+ 63 => 'Positivo Ypy AB10EC',
5990
+ 64 => 'Positivo Ypy AB10H',
5991
+ 65 => 'Positivo BGH Ypy L700',
5992
+ 66 => 'Positivo Ypy L700',
5993
+ 67 => 'Positivo Ypy L700 Ed. Especial',
5994
+ 68 => 'Positivo Ypy L700+',
5995
+ 69 => 'Positivo Ypy L700 Kids',
5996
+ 70 => 'Positivo BGH Ypy L700 Kids',
5997
+ 71 => 'Positivo Ypy L700+ Kids',
5998
+ 72 => 'Positivo Ypy L1000',
5999
+ 73 => 'Positivo Ypy L1000AB',
6000
+ 74 => 'Positivo Ypy L1000F',
6001
+ 75 => 'Positivo Ypy L1050',
6002
+ 76 => 'Positivo Ypy L1050E',
6003
+ 77 => 'Positivo Ypy L1050F',
6004
+ 78 => 'Positivo S380',
6005
+ 79 => 'Positivo S440',
6006
+ 80 => 'Positivo S480',
6007
+ 81 => 'Positivo S550',
6008
+ 82 => 'Positivo X400',
6009
+ 83 => 'Positivo X800',
6010
+ 84 => 'Power Armor 13',
6011
+ 85 => 'POCOPHONE F1',
6012
+ 86 => 'POCO F1',
6013
+ 87 => 'POCO F2 Pro',
6014
+ 88 => 'POCO X2',
6015
+ 89 => 'POCO X3 NFC',
6016
+ 90 => 'POCO X3 Pro',
6017
  ),
6018
  '@PP' =>
6019
  array (
6020
+ 0 => '(HW-|HUAWEI )?(ALE|ANA|ANE|CDY|CLT|D2|DAV|ELE|ELS|EML|EVA|FIG|G6|G7|GRA|JNY|MAR|M100|P2|P6|P7|PPA|PRA|RIO|SC|Sophia|STK|VIE|VKY|VNS|VOG|VTR|WAS)!!',
6021
+ 1 => 'PP4MT-7',
6022
+ 2 => 'PP4MT-9',
6023
  ),
6024
  '@PR' =>
6025
  array (
6026
  0 => 'Project Tango Tablet Development Kit',
6027
  1 => '(Highscreen|Alpha|Bay|Boost|Cosmo|Explosion|Power|Prime|Zera)!!',
6028
+ 2 => '(HW-|HUAWEI )?(ALE|ANA|ANE|CDY|CLT|D2|DAV|ELE|ELS|EML|EVA|FIG|G6|G7|GRA|JNY|MAR|M100|P2|P6|P7|PPA|PRA|RIO|SC|Sophia|STK|VIE|VKY|VNS|VOG|VTR|WAS)!!',
6029
  3 => 'Pro 10 dual core',
6030
  4 => 'Prada 3.0',
6031
  5 => 'PRO 5',
6314
  3 => 'R7i',
6315
  4 => 'R7kf',
6316
  5 => 'R7sf',
6317
+ 6 => 'R7t',
6318
+ 7 => 'R7Plus',
6319
+ 8 => 'R7plusf',
6320
+ 9 => 'R7Plusm',
6321
  ),
6322
  '@R8' =>
6323
  array (
6453
  8 => '(Xiaomi )?(Redmi|HM)[ \\-]?Note!!',
6454
  9 => 'REVVLPLUS C3701A',
6455
  ),
6456
+ '@RG' =>
6457
+ array (
6458
+ 0 => 'RG650',
6459
+ 1 => 'RG655',
6460
+ 2 => 'RG725',
6461
+ 3 => 'RG850',
6462
+ ),
6463
  '@RH' =>
6464
  array (
6465
  0 => '(?:RIVO )?RHYTHM RX ?([0-9]+)!',
6471
  2 => 'Rikomagic MK802III',
6472
  3 => 'Rikomagic MK802IIIS',
6473
  4 => '(Gsmart|Gigabyte|Rio)!!',
6474
+ 5 => '(HW-|HUAWEI )?(ALE|ANA|ANE|CDY|CLT|D2|DAV|ELE|ELS|EML|EVA|FIG|G6|G7|GRA|JNY|MAR|M100|P2|P6|P7|PPA|PRA|RIO|SC|Sophia|STK|VIE|VKY|VNS|VOG|VTR|WAS)!!',
6475
  6 => 'Rise',
6476
  7 => '(Ritmix )?RM[DP]-?[0-9]{3,3}!!',
6477
  8 => 'RIDGE',
6518
  2 => 'RM-1061',
6519
  3 => '(Ritmix )?RM[DP]-?[0-9]{3,3}!!',
6520
  4 => 'RMD-[0-9]{2,3}G!!',
6521
+ 5 => 'RMX1911',
6522
+ 6 => 'RMX1931',
6523
+ 7 => 'RMX1971',
6524
+ 8 => 'RMX1993',
6525
+ 9 => 'RMX2001',
6526
+ 10 => 'RMX2002',
6527
+ 11 => 'RMX2020',
6528
+ 12 => 'RMX2030',
6529
+ 13 => 'RMX2063',
6530
+ 14 => 'RMX2075',
6531
+ 15 => 'RMX2086',
6532
+ 16 => 'RMX2111',
6533
+ 17 => 'RMX2144',
6534
+ 18 => 'RMX2155',
6535
+ 19 => 'RMX2170',
6536
+ 20 => 'RMX2185',
6537
+ 21 => 'RMX2202',
6538
+ 22 => 'RMX3081',
6539
+ 23 => 'RMX3085',
6540
+ 24 => 'RMX3201',
6541
+ 25 => 'RMX3241',
6542
+ 26 => 'RMX3242',
6543
+ 27 => 'RMX3263',
6544
+ 28 => 'RMX3301',
6545
+ 29 => 'RMX3311',
6546
+ 30 => 'RMX3363',
6547
+ 31 => 'RMX3370',
6548
  ),
6549
  '@RN' =>
6550
  array (
6551
+ 0 => '(HW-|HUAWEI |HONOR )?(ATH|AUM|BLN|BKL|BKK|BND|CHE|CHM|COL|COR|DUA|DUK|DLI|EDI|FRD|HLK|HN3|H30|H60|HOL|HRY|JAT|JMM|JSN|LRA|KIW|KSA|LLD|NEM|NMO|NTH|NTN|OXF|PE|PCT|PLK|RNE|SCL|TNY|KNT|CAM|STF|HDN|YAL)!!',
6552
  ),
6553
  '@RO' =>
6554
  array (
6600
  array (
6601
  0 => 's3c6410',
6602
  1 => 'S30',
6603
+ 2 => 'S31',
6604
+ 3 => 'S308',
6605
+ 4 => 'S3',
6606
  ),
6607
  '@S4' =>
6608
  array (
6609
  0 => 'S40',
6610
+ 1 => 'S41',
6611
+ 2 => 'S42',
6612
+ 3 => 'S4503Q',
6613
+ 4 => 'S4505M',
6614
+ 5 => 'S4',
6615
  ),
6616
  '@S5' =>
6617
  array (
6619
  1 => 'S5-F',
6620
  2 => 'S50',
6621
  3 => 'S50c',
6622
+ 4 => 'S52',
6623
+ 5 => 'S58Pro',
6624
+ 6 => 'S5 Pro',
6625
+ 7 => 'S5',
6626
+ 8 => 'S5 Mini!',
6627
+ 9 => 'S51SE',
6628
  ),
6629
  '@S6' =>
6630
  array (
6631
+ 0 => 'S61',
6632
+ 1 => 'S62 Pro',
6633
+ 2 => 'S68Pro',
6634
+ 3 => 'S658t',
6635
+ 4 => 'S6 Edge+!',
6636
  ),
6637
  '@S7' =>
6638
  array (
6639
+ 0 => 'S70Lite',
6640
+ 1 => 'S710d',
6641
+ 2 => 'S710D',
6642
+ 3 => 'S720i',
6643
+ 4 => 'S7',
6644
+ 5 => 's732',
6645
  ),
6646
  '@S8' =>
6647
  array (
6648
+ 0 => 'S88Pro',
6649
+ 1 => 'S8600',
6650
+ 2 => 'S88 DISCOVERY',
6651
+ 3 => 'S850',
6652
+ 4 => 'S880',
6653
+ ),
6654
+ '@S9' =>
6655
+ array (
6656
+ 0 => 'S96Pro',
6657
  ),
6658
  '@SA' =>
6659
  array (
6686
  ),
6687
  '@SC' =>
6688
  array (
6689
+ 0 => 'SCM-(AL09|W09)!',
6690
+ 1 => '(HW-|HUAWEI |HONOR )?(ATH|AUM|BLN|BKL|BKK|BND|CHE|CHM|COL|COR|DUA|DUK|DLI|EDI|FRD|HLK|HN3|H30|H60|HOL|HRY|JAT|JMM|JSN|LRA|KIW|KSA|LLD|NEM|NMO|NTH|NTN|OXF|PE|PCT|PLK|RNE|SCL|TNY|KNT|CAM|STF|HDN|YAL)!!',
6691
+ 2 => '(HW-|HUAWEI )?(ALE|ANA|ANE|CDY|CLT|D2|DAV|ELE|ELS|EML|EVA|FIG|G6|G7|GRA|JNY|MAR|M100|P2|P6|P7|PPA|PRA|RIO|SC|Sophia|STK|VIE|VKY|VNS|VOG|VTR|WAS)!!',
6692
+ 3 => '(HW-|HUAWEI )?(AMN|ART|AQM|CRO|LUA|CUN|DUB|SCC|SCU|CAM|LDN|LYO|MED|MYA)!!',
6693
+ 4 => 'SCH-[iI][0-9]{3,3}!!',
6694
+ 5 => 'SCH-L710!',
6695
+ 6 => 'SCH-M828!',
6696
+ 7 => 'SCH-N719',
6697
+ 8 => 'SCH-P[0-9]{3,3}!!',
6698
+ 9 => 'SCH-R[0-9]{3,3}!!',
6699
+ 10 => 'SCH-S[0-9]{3,3}!!',
6700
+ 11 => 'SCH-V727',
6701
+ 12 => 'SCH-W[0-9]{3,4}!!',
6702
+ 13 => 'SC-?0[0-9][A-Z]!!',
6703
+ 14 => 'SC[LTV][23][0-9]!!',
6704
+ 15 => 'Scroll!!',
6705
+ 16 => 'SC-!!',
6706
+ 17 => 'scorpio',
6707
  ),
6708
  '@SD' =>
6709
  array (
6751
  9 => 'SHIELD Tablet X1',
6752
  10 => 'SHIELD Tablet II',
6753
  11 => 'Shine',
6754
+ 12 => 'SHT-W09',
6755
+ 13 => 'SH940C-LN',
6756
+ 14 => 'SH940C-LN TV',
6757
+ 15 => 'SH960C-LN',
6758
+ 16 => 'Sholes',
6759
+ 17 => 'SHV-E[0-9]{3,3}!!',
6760
+ 18 => 'SHW-M[0-9]{3,3}!!',
6761
+ 19 => 'SH01D',
6762
+ 20 => 'SH-A01',
6763
+ 21 => 'SH-C02',
6764
+ 22 => 'SH-D01',
6765
+ 23 => 'SH-M01',
6766
+ 24 => 'SH-M02',
6767
+ 25 => 'SH-M02-EVA20',
6768
+ 26 => 'SH-M03',
6769
+ 27 => 'SH-M05',
6770
+ 28 => 'SH-M07',
6771
+ 29 => 'SH-RM02',
6772
+ 30 => 'SH-Z01',
6773
+ 31 => 'SH-[01][0-9][A-Z]!!',
6774
+ 32 => '(SHP-)?(SHARP )?SH[0-9]{2,3}!!',
6775
+ 33 => 'SH[FLTV][0-9]{2,2}!!',
6776
+ 34 => 'SHARP-ADS1',
6777
+ 35 => 'SHIFT6m',
6778
+ 36 => 'SHARK PRS-H0',
6779
  ),
6780
  '@SI' =>
6781
  array (
6792
  3 => 'Skyworth!!',
6793
  4 => 'SK17(a|i|iv|i-o)!',
6794
  5 => 'SK-Mtek GT7305',
6795
+ 6 => 'SKR-H0',
6796
+ 7 => '(ZTE )?Skate!!',
6797
  ),
6798
  '@SL' =>
6799
  array (
6800
  0 => 'Slider SL101',
6801
  1 => 'SL930',
6802
  2 => '(HP|Slate)!!',
6803
+ 3 => '(HW-|HUAWEI )?(ATU|DRA|DVC|FLA|JKM|TIT|TAG||MRD|NCE|POT|TRT|SLA)!!',
6804
  4 => 'Slidepad!!',
6805
  5 => 'SLIDE',
6806
  ),
6830
  21 => 'SM-A[0-9]{3,3}!!',
6831
  22 => 'SM-C[0-9]{3,3}!!',
6832
  23 => 'SM-E[0-9]{3,3}!!',
6833
+ 24 => 'SM-F[0-9]{3,3}!!',
6834
+ 25 => 'SM-G[0-9]{3,3}!!',
6835
+ 26 => 'SM-I9500',
6836
+ 27 => 'SM-J[0-9]{3,3}!!',
6837
+ 28 => 'SM-M[0-9]{3,4}!!',
6838
+ 29 => 'SM-N[0-9]{3,4}!!',
6839
+ 30 => 'SM-P[0-9]{3,3}!!',
6840
+ 31 => 'SM-S[0-9]{3,3}!!',
6841
+ 32 => 'SM-T[0-9]{3,3}!!',
6842
+ 33 => 'SM-X200',
6843
+ 34 => 'SM-X205',
6844
+ 35 => 'SM-X700',
6845
+ 36 => 'SM-X800',
6846
+ 37 => 'SM-X900',
6847
+ 38 => 'SM-X906!',
6848
+ 39 => 'SM-V700',
6849
+ 40 => 'SM-W[0-9]{4,4}!!',
6850
+ 41 => 'Smartphone Android by SFR STARADDICT II',
6851
+ 42 => '(Smartfren|Andromax)!!',
6852
+ 43 => 'Smartfren Tab 7',
6853
+ 44 => 'SM919',
6854
+ 45 => 'SM701',
6855
+ 46 => 'SM801',
6856
+ 47 => 'SmartQ!!',
6857
+ 48 => 'SMART Sprint',
6858
+ 49 => 'SMART Start',
6859
+ 50 => 'SMART Surf2 4G',
6860
+ 51 => 'SmartTab!!',
6861
  ),
6862
  '@SN' =>
6863
  array (
6864
  0 => 'SN[0-9]!!',
6865
+ 1 => '(HUAWEI )?(ALP|BLA|CRR|EVR|HMA|LIO|LON|LYA|MATE|MHA|MT1|MT2|MT7|M200|NOH|NXT|SNE|TAS|Z100)!!',
6866
+ 2 => 'Snexian!!',
6867
+ 3 => '(SNM\\-)?LT[0-9]{2,2}[a-z]?!!',
6868
+ 4 => '(SNM\\-)?M[0-9]{2,2}[a-z]!!',
6869
  ),
6870
  '@SO' =>
6871
  array (
6879
  7 => 'Softwinerf900',
6880
  8 => 'SoftwinerEvbV13',
6881
  9 => 'soho',
6882
+ 10 => '(HW-|HUAWEI )?(ALE|ANA|ANE|CDY|CLT|D2|DAV|ELE|ELS|EML|EVA|FIG|G6|G7|GRA|JNY|MAR|M100|P2|P6|P7|PPA|PRA|RIO|SC|Sophia|STK|VIE|VKY|VNS|VOG|VTR|WAS)!!',
6883
  11 => 'SONIC',
6884
  12 => 'Sonim!!',
6885
  13 => 'SO-0[0-9][A-Z]!!',
6945
  12 => 'ST7001',
6946
  13 => 'ST8000',
6947
  14 => 'ST9001',
6948
+ 15 => '(HW-|HUAWEI |HONOR )?(ATH|AUM|BLN|BKL|BKK|BND|CHE|CHM|COL|COR|DUA|DUK|DLI|EDI|FRD|HLK|HN3|H30|H60|HOL|HRY|JAT|JMM|JSN|LRA|KIW|KSA|LLD|NEM|NMO|NTH|NTN|OXF|PE|PCT|PLK|RNE|SCL|TNY|KNT|CAM|STF|HDN|YAL)!!',
6949
+ 16 => '(HW-|HUAWEI )?(ALE|ANA|ANE|CDY|CLT|D2|DAV|ELE|ELS|EML|EVA|FIG|G6|G7|GRA|JNY|MAR|M100|P2|P6|P7|PPA|PRA|RIO|SC|Sophia|STK|VIE|VKY|VNS|VOG|VTR|WAS)!!',
6950
+ 17 => 'ST10',
6951
+ 18 => 'ST940I-UP',
6952
+ 19 => 'STM[0-9]{3,3}H!!',
6953
+ 20 => 'Stylo',
6954
+ 21 => 'STARACTIVE',
6955
+ 22 => 'STARACTIVE 2',
6956
+ 23 => 'STARADDICT II',
6957
+ 24 => 'STARADDICT II Plus',
6958
+ 25 => 'STARADDICT III',
6959
+ 26 => 'STARADDICT 4',
6960
+ 27 => 'STARADDICT 5',
6961
+ 28 => 'STARADDICT 6',
6962
+ 29 => 'STARNAUTE II',
6963
+ 30 => 'STARNAUTE 3',
6964
+ 31 => 'STARNAUTE3',
6965
+ 32 => 'STARNAUTE4',
6966
+ 33 => 'Starshine',
6967
+ 34 => 'STARSHINE II',
6968
+ 35 => 'STARSHINE III',
6969
+ 36 => 'STARSHINE 4',
6970
+ 37 => 'STARSHINE5',
6971
+ 38 => 'STARTEXT II',
6972
+ 39 => 'STARTRAIL II',
6973
+ 40 => 'StarTrail III',
6974
+ 41 => 'STARTRAIL4',
6975
+ 42 => 'STARTRAIL 4',
6976
+ 43 => 'STARTRAIL5',
6977
+ 44 => 'STARTRAIL 6 4G',
6978
+ 45 => 'STARTRAIL6',
6979
+ 46 => 'STARTRAIL7',
6980
+ 47 => 'STARTRAIL 8',
6981
+ 48 => 'STARTRAIL 9',
6982
+ 49 => 'STARXTREM',
6983
+ 50 => 'STARXTREM II',
6984
+ 51 => 'STARXTREM3',
6985
+ 52 => 'STARXTREM 4',
6986
+ 53 => 'STARXTREM5',
6987
+ 54 => 'STARXTREM 6',
6988
+ 55 => 'STARTAB',
6989
+ 56 => 'ST[0-9]{2,2}[a-z]?!!',
6990
+ 57 => 'Star N8000',
6991
+ 58 => 'Star N9500',
6992
+ 59 => 'Star N9589',
6993
+ 60 => 'Star Q9000',
6994
+ 61 => 'STAR S5',
6995
+ 62 => 'STAR S7589',
6996
+ 63 => 'Starmobile!!',
6997
+ 64 => '(Starway )?Andromeda!!',
6998
+ 65 => 'STX!!',
6999
+ 66 => 'STOREX LinkBox',
7000
+ 67 => 'StarTab 715x',
7001
+ 68 => 'ST[0-9]{5,5}-[0-9]!!',
7002
+ 69 => 'ST-PAD',
7003
+ 70 => 'ST-PAD2',
7004
+ 71 => 'STAIRWAY',
7005
+ 72 => 'StarTrail TT',
7006
  ),
7007
  '@SU' =>
7008
  array (
7010
  1 => 'Surfing Tab C 3G',
7011
  2 => '(E-Boda|Eruption|Essential|Supreme|Storm|Revo)!!',
7012
  3 => '(Explay|X-tremer|ActiveD|Informer|Surfer)!!',
7013
+ 4 => 'Surface Duo',
7014
+ 5 => 'Surface Duo 2',
7015
+ 6 => 'surnia',
7016
+ 7 => 'SUGAR ([A-Z][0-9]?(?: Pro)?)!',
7017
+ 8 => 'SUPRA (M[0-9]{2,3}[A-Z]{0,2})!',
7018
+ 9 => 'SUBLIM',
7019
+ 10 => 'SUNSET',
7020
+ 11 => 'SUNSET2',
7021
  ),
7022
  '@SV' =>
7023
  array (
7028
  array (
7029
  0 => 'Swift',
7030
  1 => 'Swift Plus',
7031
+ 2 => 'Swift 2',
7032
+ 3 => 'Swift 2 Plus',
7033
+ 4 => 'Swift 2 X',
7034
  ),
7035
  '@SX' =>
7036
  array (
7109
  ),
7110
  '@T2' =>
7111
  array (
7112
+ 0 => 'T20-Plus',
7113
+ 1 => 'T20',
7114
  ),
7115
  '@T3' =>
7116
  array (
7122
  '@T6' =>
7123
  array (
7124
  0 => 'T6',
7125
+ 1 => 'T671H',
7126
  ),
7127
  '@T7' =>
7128
  array (
7129
  0 => '(OPPO-?)?T703!',
7130
+ 1 => 'T774H',
7131
+ 2 => 'T775H',
7132
+ 3 => 'T790Y',
7133
+ 4 => 'T720 SE',
7134
+ 5 => 'T760 from moage.com',
7135
  ),
7136
  '@T8' =>
7137
  array (
7156
  5 => 'Tablet-P27',
7157
  6 => 'TA10CA3',
7158
  7 => '(tablet )?fnac!!',
7159
+ 8 => '(HUAWEI )?(ALP|BLA|CRR|EVR|HMA|LIO|LON|LYA|MATE|MHA|MT1|MT2|MT7|M200|NOH|NXT|SNE|TAS|Z100)!!',
7160
+ 9 => '(HW-|HUAWEI )?(ATU|DRA|DVC|FLA|JKM|TIT|TAG||MRD|NCE|POT|TRT|SLA)!!',
7161
+ 10 => '(HW-|HUAWEI )?(BLL|CHC|TAG|KII)!!',
7162
+ 11 => 'TA-FONE!!',
7163
+ 12 => 'TAB1011',
7164
+ 13 => 'TAB-1030',
7165
+ 14 => '(Lenovo )?(Tab ?)?(2 ?)?[AS](7|8|10)!!',
7166
+ 15 => 'TAB950',
7167
+ 16 => 'TAB1062',
7168
+ 17 => 'TAB192',
7169
+ 18 => 'TA-10(07|29)!',
7170
+ 19 => 'TA-10(84)!',
7171
+ 20 => 'TA-10(20|28|32|38)!',
7172
+ 21 => 'TA-10(24|27|44|53)!',
7173
+ 22 => 'TA-10(61|75|81|88)!',
7174
+ 23 => 'TA-10(00|03|21|25|33|39)!',
7175
+ 24 => 'TA-10(43|50|54|68)!',
7176
+ 25 => 'TA-10(41)!',
7177
+ 26 => 'TA-10(62)!',
7178
+ 27 => 'TA-10(04|12|52)!',
7179
+ 28 => 'TA-10(99)!',
7180
+ 29 => 'TA-11(03|16)!',
7181
+ 30 => '(POV )?TAB-PLAYTABPRO!',
7182
+ 31 => '(POV )?TAB-PROTAB25!',
7183
+ 32 => '(POV )?TAB-PROTAB26!',
7184
+ 33 => '(POV )?TAB-PROTAB30!',
7185
+ 34 => 'TAB-PROTAB2-IPS9',
7186
+ 35 => 'TAB-PROTAB2-IPS-3G',
7187
+ 36 => 'TAB-PROTAB2-IPS-16',
7188
+ 37 => 'TAB-PROTAB2.4',
7189
+ 38 => 'TAB-PROTAB2XL',
7190
+ 39 => 'TAB-PROTAB2.4XL',
7191
+ 40 => 'TAB-PROTAB2XXL',
7192
+ 41 => 'TAB-PROTAB2XXL(4)',
7193
+ 42 => '(POV )?TAB-PROTAB2XXL(4)!',
7194
+ 43 => '(POV )?TAB NAVI7 3G M!',
7195
+ 44 => 'Tablet P',
7196
+ 45 => 'Tablet S',
7197
+ 46 => 'Tabra QAV801',
7198
+ 47 => 'TAB 7 3G V8',
7199
+ 48 => 'TAB 8 3G V8',
7200
+ 49 => 'TAB9 3G',
7201
+ 50 => 'TAB9 3G V8',
7202
+ 51 => 'TAB 10 3G V16',
7203
+ 52 => 'TAB 7i 3G',
7204
+ 53 => 'TAB 10Q',
7205
+ 54 => 'TAB09-410',
7206
+ 55 => 'TAB10-410',
7207
+ 56 => 'TAB07-485',
7208
+ 57 => 'TAB07-200',
7209
+ 58 => 'TAB9-200',
7210
+ 59 => 'TAB10-201',
7211
+ 60 => 'TAB210',
7212
+ 61 => 'TAB220',
7213
+ 62 => 'TAB224',
7214
+ 63 => 'TAB250',
7215
+ 64 => 'TAB275',
7216
+ 65 => 'TAB260',
7217
+ 66 => 'TAB264',
7218
+ 67 => 'TAB360',
7219
+ 68 => 'TAB364',
7220
+ 69 => 'TAB410',
7221
+ 70 => 'TAB411',
7222
+ 71 => 'TAB420',
7223
+ 72 => 'TAB424',
7224
+ 73 => 'TAB450',
7225
+ 74 => 'TAB460',
7226
+ 75 => 'TAB461',
7227
+ 76 => 'TAB464',
7228
+ 77 => 'TAB465EUK',
7229
+ 78 => 'TAB468',
7230
+ 79 => 'TAB469',
7231
+ 80 => 'TAB466EUK',
7232
+ 81 => 'TAB467',
7233
+ 82 => 'TAB462',
7234
  ),
7235
  '@TB' =>
7236
  array (
7267
  15 => 'TC70',
7268
  16 => 'TC75',
7269
  17 => 'TCL!!',
7270
+ 18 => 'TC26',
7271
  ),
7272
  '@TD' =>
7273
  array (
7299
  18 => 'Telpad Quad S',
7300
  19 => 'Telpad QS',
7301
  20 => 'Tensent S9000',
7302
+ 21 => 'Teracube 2e',
7303
+ 22 => 'teXet X-alpha',
7304
+ 23 => 'Texet TM-4083',
7305
+ 24 => 'teXet X-start',
7306
+ 25 => 'teXet iX-mini',
7307
+ 26 => 'teXet X-navi',
7308
+ 27 => 'TEXET TM-4677',
7309
+ 28 => 'teXet X-medium plus',
7310
+ 29 => 'teXet X-maxi qHD',
7311
+ 30 => 'TeamDRH ICS for GTablet',
7312
+ 31 => 'TERRA PAD 1004',
7313
+ 32 => 'TERRA PAD 1005',
7314
+ 33 => 'Telenor!!',
7315
  ),
7316
  '@TF' =>
7317
  array (
7342
  array (
7343
  0 => 'Tilapia',
7344
  1 => 'Titan TV S320',
7345
+ 2 => 'TIQ-1049',
7346
+ 3 => '(HW-|HUAWEI )?(ATU|DRA|DVC|FLA|JKM|TIT|TAG||MRD|NCE|POT|TRT|SLA)!!',
7347
+ 4 => '(Karbonn|Titanium)!!',
7348
+ 5 => 'TI320-DU',
7349
+ 6 => 'TI320-DU TV',
7350
+ 7 => 'TizzBird!!',
7351
+ 8 => 'Titan pocket',
7352
+ 9 => 'tiffany',
7353
  ),
7354
  '@TL' =>
7355
  array (
7409
  49 => 'TM-1058',
7410
  50 => 'tmn!!',
7411
  ),
7412
+ '@TN' =>
7413
+ array (
7414
+ 0 => '(HW-|HUAWEI |HONOR )?(ATH|AUM|BLN|BKL|BKK|BND|CHE|CHM|COL|COR|DUA|DUK|DLI|EDI|FRD|HLK|HN3|H30|H60|HOL|HRY|JAT|JMM|JSN|LRA|KIW|KSA|LLD|NEM|NMO|NTH|NTN|OXF|PE|PCT|PLK|RNE|SCL|TNY|KNT|CAM|STF|HDN|YAL)!!',
7415
+ ),
7416
  '@TO' =>
7417
  array (
7418
  0 => 'Toro',
7464
  12 => '(Transformer )?(Pad )?TF700(T|K)!',
7465
  13 => 'Transformer (Pad )?Infinity!',
7466
  14 => 'TR720F',
7467
+ 15 => 'TREKKER-X3',
7468
+ 16 => 'Trekker-X4',
7469
+ 17 => 'TR10CS1',
7470
+ 18 => 'TripNiCE Pyramid',
7471
+ 19 => '(HW-|HUAWEI )?(ATU|DRA|DVC|FLA|JKM|TIT|TAG||MRD|NCE|POT|TRT|SLA)!!',
7472
+ 20 => 'TR10RS1',
7473
+ 21 => '(KAZAM|Thunder|Tornado|Trooper)!!',
7474
+ 22 => 'Triumph',
7475
+ 23 => 'TRACER OXYGEN GS1',
7476
+ 24 => 'Trevi PHABLET 4C',
7477
+ 25 => 'Trevi PHABLET 5 S',
7478
+ 26 => 'TREQ!!',
7479
+ 27 => 'Trevi REVERSE 5.5Q',
7480
+ 28 => 'Trevi PHABLET 6 S',
7481
+ 29 => 'TRUE BEYOND 3G',
7482
  ),
7483
  '@TS' =>
7484
  array (
7512
  2 => 'TX85',
7513
  3 => 'TX18',
7514
  ),
7515
+ '@U ' =>
7516
+ array (
7517
+ 0 => 'U FEEL LITE',
7518
+ 1 => 'U FEEL PRIME',
7519
+ 2 => 'U PULSE LITE',
7520
+ ),
7521
  '@U1' =>
7522
  array (
7523
  0 => '(CUBE ?)?(K8|U1|U2|U3|U5|U6|U8|U9)[0-9]?GT!!',
7586
  11 => 'Ultimate10',
7587
  12 => 'Ultimate10-Android4.0',
7588
  13 => 'Ultimate 10',
7589
+ 14 => 'Ulefone Armor 5',
7590
+ 15 => 'Ulefone Be Touch2',
7591
+ 16 => 'ultrafone!!',
7592
+ 17 => 'Ultym 5',
7593
+ 18 => 'Ultym 5L',
7594
+ 19 => 'Ultym 5.2',
7595
  ),
7596
  '@UM' =>
7597
  array (
7657
  16 => '(GIO-)?(GiONEE[- ])?V188!',
7658
  17 => 'V1',
7659
  18 => 'V1277',
7660
+ 19 => 'V1916A',
7661
  ),
7662
  '@V2' =>
7663
  array (
7668
  4 => 'V2 Viper S',
7669
  5 => 'V2 Viper X',
7670
  6 => 'V2 Viper X plus',
7671
+ 7 => 'V2023',
7672
+ 8 => 'V2028',
7673
+ 9 => 'V2041',
7674
+ 10 => 'V2056A',
7675
+ 11 => 'V2109',
7676
+ 12 => 'V2141A',
7677
  ),
7678
  '@V3' =>
7679
  array (
7775
  16 => 'Venus_V3 5040',
7776
  17 => 'Venus V3 5570',
7777
  18 => 'Venus V3 5580',
7778
+ 19 => 'Venus Z20',
7779
  ),
7780
  '@VF' =>
7781
  array (
7833
  20 => 'Vibo-A688',
7834
  21 => 'VitMod ExtraLite 1.6.5.fullodex for HTC HD7 Pro',
7835
  22 => 'Vivid 4G',
7836
+ 23 => '(HW-|HUAWEI )?(ALE|ANA|ANE|CDY|CLT|D2|DAV|ELE|ELS|EML|EVA|FIG|G6|G7|GRA|JNY|MAR|M100|P2|P6|P7|PPA|PRA|RIO|SC|Sophia|STK|VIE|VKY|VNS|VOG|VTR|WAS)!!',
7837
  24 => 'Vibe K5 Plus',
7838
  25 => 'VIBE X2 (X2)',
7839
  26 => 'VIBE X3',
7874
  61 => 'ViewSonic VB733',
7875
  62 => 'VINUS!!',
7876
  63 => '(BBG-|VIV-)?vivo!!',
7877
+ 64 => 'View',
7878
+ 65 => 'View XL',
7879
+ 66 => 'View2 Go',
7880
+ 67 => 'View2 Plus',
7881
+ 68 => 'Viettel i5',
7882
+ 69 => 'Viettel I8',
7883
+ 70 => 'VIETTEL V8404!',
7884
+ 71 => 'Viettel V8410',
7885
+ 72 => 'VIETTEL V8411',
7886
+ 73 => 'Viettel V8502',
7887
+ 74 => 'VIETTEL V8506',
7888
+ 75 => 'VIETTEL V8509',
7889
  ),
7890
  '@VK' =>
7891
  array (
7892
+ 0 => '(HW-|HUAWEI )?(ALE|ANA|ANE|CDY|CLT|D2|DAV|ELE|ELS|EML|EVA|FIG|G6|G7|GRA|JNY|MAR|M100|P2|P6|P7|PPA|PRA|RIO|SC|Sophia|STK|VIE|VKY|VNS|VOG|VTR|WAS)!!',
7893
  1 => 'VK410',
7894
  2 => 'VK700',
7895
  3 => 'VK810 4G',
7907
  ),
7908
  '@VN' =>
7909
  array (
7910
+ 0 => '(HW-|HUAWEI )?(ALE|ANA|ANE|CDY|CLT|D2|DAV|ELE|ELS|EML|EVA|FIG|G6|G7|GRA|JNY|MAR|M100|P2|P6|P7|PPA|PRA|RIO|SC|Sophia|STK|VIE|VKY|VNS|VOG|VTR|WAS)!!',
7911
  ),
7912
  '@VO' =>
7913
  array (
7916
  2 => 'Volantisg',
7917
  3 => 'VOYAGER DG300',
7918
  4 => 'VOYAGER2 DG310',
7919
+ 5 => '(HW-|HUAWEI )?(ALE|ANA|ANE|CDY|CLT|D2|DAV|ELE|ELS|EML|EVA|FIG|G6|G7|GRA|JNY|MAR|M100|P2|P6|P7|PPA|PRA|RIO|SC|Sophia|STK|VIE|VKY|VNS|VOG|VTR|WAS)!!',
7920
+ 6 => 'Vox',
7921
+ 7 => 'Vortex',
7922
+ 8 => 'vollo Vi86',
7923
+ 9 => 'VOTO GT2++',
7924
+ 10 => 'VOTO GT7',
7925
+ 11 => 'VOTO GT11',
7926
+ 12 => 'VOTO GT11 Pro',
7927
+ 13 => 'VOTO GT18',
7928
+ 14 => 'VOTO V5',
7929
+ 15 => 'VOTO VT868',
7930
+ 16 => 'VOTO VT888',
7931
+ 17 => 'VOTO VT898',
7932
+ 18 => 'VOTO VT898S',
7933
+ 19 => 'VOTO W5300',
7934
+ 20 => 'VOTO X2',
7935
+ 21 => 'VOYO A15',
7936
+ 22 => 'voyo X6',
7937
+ 23 => 'Vodafone!!',
7938
  ),
7939
  '@VS' =>
7940
  array (
7962
  ),
7963
  '@VT' =>
7964
  array (
7965
+ 0 => '(HW-|HUAWEI )?(ALE|ANA|ANE|CDY|CLT|D2|DAV|ELE|ELS|EML|EVA|FIG|G6|G7|GRA|JNY|MAR|M100|P2|P6|P7|PPA|PRA|RIO|SC|Sophia|STK|VIE|VKY|VNS|VOG|VTR|WAS)!!',
7966
  1 => 'VT6078',
7967
  2 => 'VT75C',
7968
  3 => 'VT77C',
7982
  2 => 'VX580W',
7983
  3 => 'VX610A',
7984
  ),
7985
+ '@W ' =>
7986
+ array (
7987
+ 0 => 'W K300',
7988
+ 1 => 'W K400',
7989
+ 2 => 'W P200',
7990
+ 3 => 'W C800',
7991
+ 4 => 'W C860',
7992
+ ),
7993
+ '@W-' =>
7994
+ array (
7995
+ 0 => 'W-V600',
7996
+ 1 => 'W-P311-EEA',
7997
+ 2 => 'W-V800-EEA',
7998
+ 3 => 'W-V830-EEA',
7999
+ 4 => 'W-V730-EEA',
8000
+ 5 => 'W-V851-EEA',
8001
+ ),
8002
  '@W1' =>
8003
  array (
8004
  0 => 'W10',
8074
  ),
8075
  '@WA' =>
8076
  array (
8077
+ 0 => '(HW-|HUAWEI )?(ALE|ANA|ANE|CDY|CLT|D2|DAV|ELE|ELS|EML|EVA|FIG|G6|G7|GRA|JNY|MAR|M100|P2|P6|P7|PPA|PRA|RIO|SC|Sophia|STK|VIE|VKY|VNS|VOG|VTR|WAS)!!',
8078
  1 => 'WA-U420D',
8079
  2 => 'WALSUN S1 Pro',
8080
  3 => 'WALSUN S2',
8153
  7 => 'WIKO-CINK SLIM',
8154
  8 => 'Wiko Rainbow',
8155
  9 => 'Wiko Stairway',
8156
+ 10 => 'WIM Lite',
8157
+ 11 => 'Wileyfox Spark',
8158
+ 12 => 'Wileyfox Spark +',
8159
+ 13 => 'Wileyfox Spark X',
8160
+ 14 => 'Wileyfox Storm',
8161
+ 15 => 'Wileyfox Swift',
8162
+ 16 => 'Wink City S',
8163
  ),
8164
  '@WL' =>
8165
  array (
8226
  15 => 'X00DDB',
8227
  16 => 'X00HD',
8228
  17 => 'X00GD',
8229
+ 18 => 'X00LD',
8230
+ 19 => 'X00T',
8231
+ 20 => 'X00TD',
8232
+ 21 => 'X00TDB',
8233
+ 22 => 'X00DE',
8234
+ 23 => 'X00QD',
8235
+ 24 => 'X00QSA',
8236
+ 25 => 'X01AD',
8237
+ 26 => 'X01BDA',
8238
+ 27 => 'X013D',
8239
+ 28 => 'X013DA',
8240
+ 29 => 'X013DB',
8241
+ 30 => 'X013DC',
8242
+ 31 => 'X015D',
8243
+ 32 => 'X00ID',
8244
+ 33 => 'X014D',
8245
+ 34 => 'X018D',
8246
+ 35 => 'X002',
8247
+ 36 => 'X003',
8248
+ 37 => 'X005',
8249
+ 38 => 'X008',
8250
  ),
8251
  '@X1' =>
8252
  array (
8265
  12 => 'X1 mini',
8266
  13 => 'X1 Selfie',
8267
  14 => 'X1010',
8268
+ 15 => 'X1030X',
8269
+ 16 => 'X1031X',
8270
+ 17 => 'X1060X',
8271
+ 18 => 'X10(a|i|iv|i-o|s)?$!',
8272
+ 19 => 'X10 ?(Mini ?Pro)$!',
8273
+ 20 => 'X10 ?(Mini)$!',
8274
+ 21 => 'X10H(G3C5)',
8275
+ 22 => 'X10HD 3G(M6K6)',
8276
+ 23 => 'X16 Plus(D3A5)',
8277
+ 24 => 'X16 Power(D6F7)',
8278
+ 25 => 'X16 PRO(D6F8)',
8279
+ 26 => 'X16HD (K3J3)',
8280
+ 27 => 'X16HD 3G(M5J4)',
8281
+ 28 => 'X16HD 3G(M5J5)',
8282
+ 29 => 'X16HD 3G(M5J5',
8283
+ 30 => 'X16HD 3G(M5J6)',
8284
  ),
8285
  '@X2' =>
8286
  array (
8314
  ),
8315
  '@X5' =>
8316
  array (
8317
+ 0 => 'X5 Soul Pro',
8318
+ 1 => 'X550',
8319
+ 2 => 'X515d',
8320
+ 3 => 'X515e',
8321
+ 4 => 'X525a',
8322
+ 5 => 'X527',
8323
+ 6 => 'X505',
8324
+ 7 => 'X506',
8325
+ 8 => 'X506S',
8326
+ 9 => 'X507Q',
8327
+ ),
8328
+ '@X6' =>
8329
+ array (
8330
+ 0 => 'X67 5G',
8331
  ),
8332
  '@X7' =>
8333
  array (
8492
  2 => '(Xiaomi|Xiaomi Mi|MI) Note!!',
8493
  3 => '(Xiaomi )?(MI )?MAX$!',
8494
  4 => '(Xiaomi )?(MI )?MAX 2$!',
8495
+ 5 => '(Xiaomi )?(MI )?MAX 3$!',
8496
+ 6 => '(Xiaomi )?(MI )?MIX$!',
8497
+ 7 => '(Xiaomi )?(MI )?MIX 2$!',
8498
+ 8 => '(Xiaomi )?(MI )?MIX 2S$!',
8499
+ 9 => '(Xiaomi )?20!!',
8500
+ 10 => '(Xiaomi )?(Redmi|RedRice|HM)!!',
8501
+ 11 => '(Xiaomi )?(Redmi|HM)[ \\-]?Note!!',
8502
+ 12 => '(Xiaomi |HM)?20!!',
8503
+ 13 => '(Xiaomi |HM)?21!!',
8504
+ 14 => 'Xiaomi MDT2!',
8505
+ 15 => 'Xiaomi MCT1!',
8506
+ 16 => 'Xiaomi MAT136!',
8507
+ 17 => 'Xiaomi MBT6A5!',
8508
+ 18 => 'Xiaomi 11 Lite 5G NE',
8509
+ 19 => 'Xiaomi 11T Pro',
8510
+ 20 => '(Xiaomi|Xiaomi Mi|MI) Pad!!',
8511
+ 21 => '(Xiaomi|Xiaomi Mi|MI)Box!!',
8512
+ 22 => '(Xiaomi|Xiaomi Mi|MI)TV!!',
8513
  ),
8514
  '@XL' =>
8515
  array (
8562
  array (
8563
  0 => 'Xperia Z Ultra',
8564
  1 => 'XPRESS PRO',
8565
+ 2 => 'XP8800',
8566
+ 3 => 'Xperia!!',
8567
+ 4 => '(Symphony|Xplorer)!!',
8568
+ 5 => 'xPAD-70',
8569
+ ),
8570
+ '@XQ' =>
8571
+ array (
8572
+ 0 => 'XQ-AT51',
8573
+ 1 => 'XQ-AT52',
8574
+ 2 => 'XQ-BC52',
8575
+ 3 => 'XQ-BC72',
8576
+ 4 => 'XQ-AS52',
8577
+ 5 => 'XQ-BQ52',
8578
+ 6 => 'XQ-AU52',
8579
+ 7 => 'XQ-BT52',
8580
+ 8 => 'XQ-AD51',
8581
+ 9 => 'XQ-AD52',
8582
+ 10 => 'XQ-BE52',
8583
  ),
8584
  '@XT' =>
8585
  array (
8631
  0 => 'Y6 Max',
8632
  1 => 'Y6 Piano',
8633
  ),
8634
+ '@YA' =>
8635
+ array (
8636
+ 0 => '(HW-|HUAWEI |HONOR )?(ATH|AUM|BLN|BKL|BKK|BND|CHE|CHM|COL|COR|DUA|DUK|DLI|EDI|FRD|HLK|HN3|H30|H60|HOL|HRY|JAT|JMM|JSN|LRA|KIW|KSA|LLD|NEM|NMO|NTH|NTN|OXF|PE|PCT|PLK|RNE|SCL|TNY|KNT|CAM|STF|HDN|YAL)!!',
8637
+ ),
8638
  '@YD' =>
8639
  array (
8640
  0 => 'YD201',
8811
  56 => 'Z01HDA',
8812
  57 => 'Z01KD',
8813
  58 => 'Z01KDA',
8814
+ 59 => 'Z01MD',
8815
+ 60 => 'Z01MDA',
8816
+ 61 => 'Z01RD',
8817
+ 62 => 'Z01QD',
8818
+ 63 => 'Z00YD',
8819
  ),
8820
  '@Z1' =>
8821
  array (
8822
  0 => '(BB )?Z10$!',
8823
  1 => 'Z1-H39LW',
8824
+ 2 => '(HUAWEI )?(ALP|BLA|CRR|EVR|HMA|LIO|LON|LYA|MATE|MHA|MT1|MT2|MT7|M200|NOH|NXT|SNE|TAS|Z100)!!',
8825
  3 => 'Z1i',
8826
  ),
8827
  '@Z2' =>
8976
  array (
8977
  0 => '(Zopo )?ZP ?[0-9]{3,3}!!',
8978
  ),
8979
+ '@ZS' =>
8980
+ array (
8981
+ 0 => 'ZS671KS',
8982
+ ),
8983
  '@ZT' =>
8984
  array (
8985
  0 => 'zt180',
9079
  94 => 'ZTE A2017',
9080
  95 => 'ZTE A2017G',
9081
  96 => 'ZTE A2017U',
9082
+ 97 => 'ZTE A2020G Pro',
9083
+ 98 => 'ZTE A2022PG',
9084
+ 99 => 'ZTE B2015',
9085
+ 100 => 'ZTE B2016',
9086
+ 101 => 'ZTE B2017',
9087
+ 102 => 'ZTE B2017G',
9088
+ 103 => 'ZTE B2019G',
9089
+ 104 => 'ZTE C2016',
9090
+ 105 => 'ZTE C2017',
9091
+ 106 => 'ZTE STAR',
9092
+ 107 => 'ZTE Star 1',
9093
+ 108 => 'ZTE S2004',
9094
+ 109 => 'ZTE S2005',
9095
+ 110 => 'ZTE S2007',
9096
+ 111 => 'ZTE S2010',
9097
+ 112 => 'ZTE S2014',
9098
+ 113 => 'ZTE U9180',
9099
+ 114 => 'ZTE U9370',
9100
+ 115 => 'ZTE V6500',
9101
+ 116 => 'ZTE V8110',
9102
+ 117 => 'ZTE B860A',
9103
+ 118 => 'ZTE B860AV1',
9104
+ 119 => 'ZTE W1010',
9105
  ),
9106
  '@ZU' =>
9107
  array (
includes/vendor/whichbrowser/parser/data/models-android.php CHANGED
@@ -261,12 +261,23 @@ DeviceModels::$ANDROID_MODELS = [
261
  'Pixel' => [ 'Google', 'Pixel' ],
262
  'Google Pixel' => [ 'Google', 'Pixel' ],
263
  'Pixel XL' => [ 'Google', 'Pixel XL' ],
264
- 'Google Pixel XL' => [ 'Google', 'Pixel XL' ],
265
  'Pixel 2' => [ 'Google', 'Pixel 2' ],
266
  'Google Pixel 2' => [ 'Google', 'Pixel 2' ],
267
  'Pixel 2XL' => [ 'Google', 'Pixel 2 XL' ],
268
  'Pixel 2 XL' => [ 'Google', 'Pixel 2 XL' ],
269
  'Google Pixel 2XL' => [ 'Google', 'Pixel 2 XL' ],
 
 
 
 
 
 
 
 
 
 
 
 
270
 
271
  /* Google Edition */
272
  'HTC One' => [ 'HTC', 'One (Google Edition)' ],
@@ -313,11 +324,10 @@ DeviceModels::$ANDROID_MODELS = [
313
 
314
  /* Chromebook */
315
 
316
- 'Acer Chromebook R11' => [ 'Acer', 'Chromebook R11', DeviceType::DESKTOP ],
317
- 'Acer Chromebook R11 (CB5-132T / C738T)' => [ 'Acer', 'Chromebook R11', DeviceType::DESKTOP ],
318
- 'Acer Chromebook 15 (CB3-532)' => [ 'Acer', 'Chromebook 15', DeviceType::DESKTOP ],
319
- 'ASUS Chromebook Flip C100PA' => [ 'Asus', 'Chromebook Flip', DeviceType::DESKTOP ],
320
- 'ASUS Chromebook Flip C302' => [ 'Asus', 'Chromebook Flip', DeviceType::DESKTOP ],
321
  'Google Chromebook Pixel (2015)' => [ 'Google', 'Chromebook Pixel (2015)', DeviceType::DESKTOP ],
322
  'HP Chromebook x360 11 G1 EE' => [ 'Google', 'Chromebook x360 11 G1 EE', DeviceType::DESKTOP ],
323
  'Samsung Chromebook 3' => [ 'Samsung', 'Chromebook 3', DeviceType::DESKTOP ],
@@ -568,6 +578,7 @@ DeviceModels::$ANDROID_MODELS = [
568
  'B3-A32' => [ 'Acer', 'Iconia One 10 B3-A32', DeviceType::TABLET ],
569
  'B3-A40' => [ 'Acer', 'Iconia One 10 B3-A40', DeviceType::TABLET ],
570
  'B3-A40FHD' => [ 'Acer', 'Iconia One 10 B3-A40FHD', DeviceType::TABLET ],
 
571
 
572
  'One 7 M77GHG' => [ 'Acer', 'Iconia One 7 M77GHG', DeviceType::TABLET ],
573
  'TD070VA1' => [ 'Acer', 'Iconia One 7 TD070VA1', DeviceType::TABLET ],
@@ -959,7 +970,7 @@ DeviceModels::$ANDROID_MODELS = [
959
  'one ?touch 4032!' => [ 'Alcatel', 'One Touch Pop C2' ],
960
  '4032[ADEX]!' => [ 'Alcatel', 'One Touch Pop C2' ],
961
  'one ?touch 4033!' => [ 'Alcatel', 'One Touch Pop C3' ],
962
- '4033[AL]!' => [ 'Alcatel', 'One Touch Pop C3' ],
963
  'ONETOUCH POPC3' => [ 'Alcatel', 'One Touch Pop C3' ],
964
  '4034[ADEFGX]!' => [ 'Alcatel', 'One Touch Pixi 4 (4)' ],
965
  'one ?touch 40(35|36|37)!' => [ 'Alcatel', 'One Touch Pop D3' ],
@@ -970,10 +981,17 @@ DeviceModels::$ANDROID_MODELS = [
970
  '4037[V]!' => [ 'Alcatel', 'One Touch Elevate' ],
971
  'one ?touch 5045!' => [ 'Alcatel', 'One Touch Pop 2 (4)' ],
972
  '4045[ADEFLOYX]!' => [ 'Alcatel', 'One Touch Pop 2 (4)' ],
 
 
973
  '4055[JU]!' => [ 'Alcatel', 'One Touch Pixi 5 (4)' ],
974
  '4060[A]!' => [ 'Alcatel', 'IDEAL' ],
975
- '4060[W]!' => [ 'Alcatel', 'One Touch Pixi 4 (5)' ],
 
 
 
 
976
  '5010[DEGSUX]!' => [ 'Alcatel', 'One Touch Pixi 4 (5)' ],
 
977
  '5012[G]!' => [ 'Alcatel', 'One Touch Pixi 4 (5.5)' ],
978
  '5015[ADEX]!' => [ 'Alcatel', 'One Touch Pixi 3 (5)' ],
979
  '5016[AJ]!' => [ 'Alcatel', 'One Touch Pixi 3 (5)' ],
@@ -988,34 +1006,48 @@ DeviceModels::$ANDROID_MODELS = [
988
  'one ?touch 5021!' => [ 'Alcatel', 'One Touch Soleil' ],
989
  '5022[DEX]!' => [ 'Alcatel', 'One Touch Pop Star' ],
990
  '5023[F]!' => [ 'Alcatel', 'One Touch Pixi 4 Plus Power' ],
 
991
  '5025[DEGX]!' => [ 'Alcatel', 'One Touch Pop 3' ],
992
  '5027[B]!' => [ 'Alcatel', 'One Touch Dawn' ],
 
 
 
993
  'one ?touch 5035!' => [ 'Alcatel', 'One Touch X\'Pop' ],
994
  '5036[D]!' => [ 'Alcatel', 'One Touch Pop C5' ],
995
  'one ?touch 50(36|37)!' => [ 'Alcatel', 'One Touch Pop C5' ],
996
  'ONETOUCH POPC5' => [ 'Alcatel', 'One Touch Pop C5' ],
997
  'one ?touch 50(38)!' => [ 'Alcatel', 'One Touch Pop D5' ],
998
  '5038[ADEX]!' => [ 'Alcatel', 'One Touch Pop D5' ],
 
 
999
  'one ?touch 5042!' => [ 'Alcatel', 'One Touch Pop 2 (4.5)' ],
1000
  '5042[ADEFGTWXY]!' => [ 'Alcatel', 'One Touch Pop 2 (4.5)' ],
1001
- '5044[ADOY]!' => [ 'Alcatel', 'U5' ],
1002
- '5045[ADGJTX]!' => [ 'Alcatel', 'One Touch Pixi 4 (5.0)' ],
1003
- '5046[DGJY]!' => [ 'Alcatel', 'A3' ],
1004
- '5047[DUY]!' => [ 'Alcatel', 'U5 HD' ],
 
1005
  '5049[EGSWZ]!' => [ 'Alcatel', 'A30 Fierce' ],
1006
  'one ?touch 5050!' => [ 'Alcatel', 'One Touch Pop S3' ],
1007
  '5050[ASYX]!' => [ 'Alcatel', 'One Touch Pop S3' ],
1008
  '5051[ADJMX]!' => [ 'Alcatel', 'One Touch Pop 4 (5.0)' ],
1009
- '5052[D]!' => [ 'Alcatel', '3' ],
 
1010
  '5054[ADOSTX]!' => [ 'Alcatel', 'One Touch Pixi 3 (5.5)' ],
1011
  '5054[NW]!' => [ 'Alcatel', 'One Touch Fierce XL' ],
1012
- '5056[ADENUWX]!' => [ 'Alcatel', 'One Touch Pop 4+' ],
1013
  '5056[O]!' => [ 'Alcatel', 'One Touch Allura' ],
1014
  '5057[M]!' => [ 'Alcatel', 'One Touch Pop Mirage' ],
 
 
 
 
1015
  '5065[ADJNWX]!' => [ 'Alcatel', 'One Touch Pixi 3 (5)' ],
1016
  '5070[DJX]!' => [ 'Alcatel', 'One Touch Pop Star' ],
 
1017
  '5080[DFQX]!' => [ 'Alcatel', 'One Touch Pixi 4 (6)' ],
1018
- '5085[CDJNY]!' => [ 'Alcatel', 'A5 LED' ],
 
1019
  '5090[Y]!' => [ 'Alcatel', 'A7' ],
1020
  '5095[BIKY]!' => [ 'Alcatel', 'One Touch Pop 4S' ],
1021
  '5096[AI]!' => [ 'Alcatel', 'One Touch Net' ],
@@ -1029,6 +1061,7 @@ DeviceModels::$ANDROID_MODELS = [
1029
  '6014[DX]!' => [ 'Alcatel', 'One Touch Idol Mini' ],
1030
  'one ?touch 6016!' => [ 'Alcatel', 'One Touch Idol 2 Mini' ],
1031
  '6016[ADEX]!' => [ 'Alcatel', 'One Touch Idol 2 Mini' ],
 
1032
  'one ?touch 6030!' => [ 'Alcatel', 'One Touch Idol' ],
1033
  '6031[X]!' => [ 'Alcatel', 'One Touch Idol Ultra' ],
1034
  'one ?touch 6032!' => [ 'Alcatel', 'One Touch Idol α' ],
@@ -1050,6 +1083,10 @@ DeviceModels::$ANDROID_MODELS = [
1050
  'one ?touch 6050!' => [ 'Alcatel', 'One Touch Idol 2S' ],
1051
  '6050[AFWY]!' => [ 'Alcatel', 'One Touch Idol 2S' ],
1052
  '6055[ABDHIKPUY]!' => [ 'Alcatel', 'One Touch Idol 4' ],
 
 
 
 
1053
  '6070[KOY]!' => [ 'Alcatel', 'One Touch Idol 4s' ],
1054
  'one ?touch 7024!' => [ 'Alcatel', 'One Touch Fierce' ],
1055
  'one touch fierce!' => [ 'Alcatel', 'One Touch Fierce' ],
@@ -1082,6 +1119,10 @@ DeviceModels::$ANDROID_MODELS = [
1082
  '8020[D]!' => [ 'Alcatel', 'One Touch Hero' ],
1083
  'one ?touch 8030!' => [ 'Alcatel', 'One Touch Hero 2' ],
1084
  '8030[BY]!' => [ 'Alcatel', 'One Touch Hero 2' ],
 
 
 
 
1085
  '9001[DIX]!' => [ 'Alcatel', 'One Touch Pixi 4 (6)' ],
1086
  '9002[AWX]!' => [ 'Alcatel', 'One Touch Pixi 3 (7)', DeviceType::TABLET ],
1087
  '9003[AX]!' => [ 'Alcatel', 'One Touch Pixi 4 (7)', DeviceType::TABLET ],
@@ -1094,6 +1135,7 @@ DeviceModels::$ANDROID_MODELS = [
1094
  '9022[SX]!' => [ 'Alcatel', 'One Touch Pixi 3 (8)', DeviceType::TABLET ],
1095
  '9024[OW]!' => [ 'Alcatel', 'A30', DeviceType::TABLET ],
1096
  '9025[MQ]!' => [ 'Alcatel', 'One Touch Pop 4 (7)', DeviceType::TABLET ],
 
1097
  'one ?touch T10!' => [ 'Alcatel', 'One Touch T10', DeviceType::TABLET ],
1098
  'one ?touch T20!' => [ 'Alcatel', 'One Touch T20', DeviceType::TABLET ],
1099
  'one ?touch T60!' => [ 'Alcatel', 'One Touch T60', DeviceType::TABLET ],
@@ -1165,6 +1207,7 @@ DeviceModels::$ANDROID_MODELS = [
1165
  'P8 Energy' => [ 'Allview', 'P8 Energy' ],
1166
  'P8 Energy mini' => [ 'Allview', 'P8 Energy Mini' ],
1167
  'P8 Energy mini TM' => [ 'Allview', 'P8 Energy Mini' ],
 
1168
  'ALLVIEW TX1 Quasar' => [ 'Allview', 'TX1 Quasar' ],
1169
  'V1 Viper' => [ 'Allview', 'V1 Viper' ],
1170
  'V1 Viper E' => [ 'Allview', 'V1 Viper E' ],
@@ -1220,6 +1263,7 @@ DeviceModels::$ANDROID_MODELS = [
1220
  'X3 Soul PLUS' => [ 'Allview', 'X3 Soul Plus' ],
1221
  'X3 Soul PRO' => [ 'Allview', 'X3 Soul Pro' ],
1222
  'X3 Soul Style' => [ 'Allview', 'X3 Soul Style' ],
 
1223
 
1224
  '(Allview|Alldro)!!' => [
1225
  'Allview AX1 Shine' => [ 'Allview', 'AX1 Shine', DeviceType::TABLET ],
@@ -1299,9 +1343,9 @@ DeviceModels::$ANDROID_MODELS = [
1299
  'KFGIWI' => [ 'Amazon', 'Fire HD 8 (2016)', DeviceType::TABLET, Flag::FIREOS ], // xth generation 8" HD (1280 x 800)
1300
  'KFDOWI' => [ 'Amazon', 'Fire HD 8 (2017)', DeviceType::TABLET, Flag::FIREOS ], // xth generation 8" HD (1280 x 800)
1301
  'KFSUWI' => [ 'Amazon', 'Fire HD 10 (2017)', DeviceType::TABLET, Flag::FIREOS ], // 5th generation 10" HD (1280 x 800)
1302
- // 'KFSLWI'
1303
- // 'KFBJWI'
1304
- // 'KFHDX'
1305
  'SD4930UR' => [ 'Amazon', 'Fire Phone', DeviceType::MOBILE, Flag::FIREOS ],
1306
  'AFTB' => [ 'Amazon', 'Fire TV', DeviceType::TELEVISION, Flag::FIREOS ],
1307
  'AFTS' => [ 'Amazon', 'Fire TV (2015)', DeviceType::TELEVISION, Flag::FIREOS ],
@@ -1477,6 +1521,7 @@ DeviceModels::$ANDROID_MODELS = [
1477
  'Archos!!' => [
1478
  'ARCHOS 80G9' => [ 'Archos', '80 G9', DeviceType::TABLET ],
1479
  'ARCHOS 101G9' => [ 'Archos', '101 G9', DeviceType::TABLET ],
 
1480
  'ARCHOS 97XSLG10' => [ 'Archos', '97 XS', DeviceType::TABLET ],
1481
  'ARCHOS 80XSK' => [ 'Archos', '80 XS', DeviceType::TABLET ],
1482
  'ARCHOS 101G10' => [ 'Archos', '101 XS', DeviceType::TABLET ],
@@ -1566,6 +1611,7 @@ DeviceModels::$ANDROID_MODELS = [
1566
  'Archos 70 Oxygen' => [ 'Archos', '70 Oxygen', DeviceType::TABLET ],
1567
  'Archos 80 Oxygen' => [ 'Archos', '80 Oxygen', DeviceType::TABLET ],
1568
  'Archos 101 Oxygen' => [ 'Archos', '101 Oxygen', DeviceType::TABLET ],
 
1569
  'Archos 101b Oxygen' => [ 'Archos', '101b Oxygen', DeviceType::TABLET ],
1570
  'Archos 133 Oxygen' => [ 'Archos', '133 Oxygen', DeviceType::TABLET ],
1571
  'Archos 156 Oxygen' => [ 'Archos', '156 Oxygen', DeviceType::TABLET ],
@@ -1639,6 +1685,7 @@ DeviceModels::$ANDROID_MODELS = [
1639
  'ARCHOS 97 XENON' => [ 'Archos', '97 Xenon', DeviceType::TABLET ],
1640
  'Archos 101 Xenon' => [ 'Archos', '101 Xenon', DeviceType::TABLET ],
1641
  'Archos 101 Xenon v2' => [ 'Archos', '101 Xenon', DeviceType::TABLET ],
 
1642
  'Archos 101b Xenon v2' => [ 'Archos', '101b Xenon', DeviceType::TABLET ],
1643
  'Archos 101c Xenon' => [ 'Archos', '101c Xenon', DeviceType::TABLET ],
1644
  'ARCHOS 101 Xenon Lite' => [ 'Archos', '101 Xenon Lite', DeviceType::TABLET ],
@@ -1657,12 +1704,20 @@ DeviceModels::$ANDROID_MODELS = [
1657
  'Archos Access 70 3G' => [ 'Archos', 'Access 70', DeviceType::TABLET ],
1658
  'Archos Access 101 3G' => [ 'Archos', 'Access 101', DeviceType::TABLET ],
1659
  'Archos Access 101 3G V2' => [ 'Archos', 'Access 101', DeviceType::TABLET ],
 
1660
  'Archos Core 55 4G' => [ 'Archos', 'Core 55' ],
 
1661
  'Archos Core 70 3G' => [ 'Archos', 'Core 70', DeviceType::TABLET ],
 
1662
  'Archos Core 101 3G' => [ 'Archos', 'Core 101', DeviceType::TABLET ],
 
 
1663
  'Archos Sense 55 DC' => [ 'Archos', 'Sense 55' ],
 
1664
  ],
1665
 
 
 
1666
  'Artes D708' => [ 'Artes', 'D708', DeviceType::TABLET ],
1667
  'Artes D821' => [ 'Artes', 'D821', DeviceType::TABLET ],
1668
  'D9702' => [ 'Artes', 'D9702', DeviceType::TABLET ],
@@ -1747,6 +1802,17 @@ DeviceModels::$ANDROID_MODELS = [
1747
  'PadFone X' => [ 'Asus', 'PadFone X', DeviceType::TABLET ],
1748
  'PadFone X mini' => [ 'Asus', 'PadFone X mini (PF450CL)', DeviceType::TABLET ],
1749
  'ETBW11AA' => [ 'Asus', 'Tough' ],
 
 
 
 
 
 
 
 
 
 
 
1750
  'K00C' => [ 'Asus', 'Transformer Pad Infinity', DeviceType::TABLET ],
1751
  'K010' => [ 'Asus', 'Transformer Pad TF103', DeviceType::TABLET ],
1752
  'K010E' => [ 'Asus', 'Transformer Pad TF103', DeviceType::TABLET ],
@@ -1804,6 +1870,7 @@ DeviceModels::$ANDROID_MODELS = [
1804
  'P001' => [ 'Asus', 'ZenPad C 7.0 (Z170MG)', DeviceType::TABLET ],
1805
  'P001 2' => [ 'Asus', 'ZenPad C 7.0 (Z170MG)', DeviceType::TABLET ],
1806
  'P002' => [ 'Asus', 'ZenPad 7.0 (Z370KL)', DeviceType::TABLET ],
 
1807
  'P00C' => [ 'Asus', 'ZenPad 10 (Z300M)', DeviceType::TABLET ],
1808
  'P00I' => [ 'Asus', 'ZenPad Z10 (Z500KL)', DeviceType::TABLET ],
1809
  'P01M' => [ 'Asus', 'ZenPad S 8.0 (Z580C)', DeviceType::TABLET ],
@@ -1818,8 +1885,11 @@ DeviceModels::$ANDROID_MODELS = [
1818
  'P022' => [ 'Asus', 'ZenPad 8.0 (Z380C)', DeviceType::TABLET ],
1819
  'P023' => [ 'Asus', 'ZenPad 10 (Z300C)', DeviceType::TABLET ],
1820
  'P024' => [ 'Asus', 'ZenPad 8.0 (Z380KL)', DeviceType::TABLET ],
 
 
1821
  // '' => [ 'Asus', 'ZenPad 10 (Z300CNL)', DeviceType::TABLET ],
1822
  'A001' => [ 'Asus', 'ZenFone 3 Ultra (ZU680KL)' ],
 
1823
  'X007D' => [ 'Asus', 'ZenFone Go (ZB552KL)' ],
1824
  'X008D' => [ 'Asus', 'ZenFone 3 Max (ZC520TL)' ],
1825
  'X008DA' => [ 'Asus', 'ZenFone 3 Max (ZC520TL)' ],
@@ -1838,6 +1908,15 @@ DeviceModels::$ANDROID_MODELS = [
1838
  'X00DDB' => [ 'Asus', 'ZenFone 3 Max (ZC553KL)' ],
1839
  'X00HD' => [ 'Asus', 'ZenFone 4 Max (ZC520KL)' ],
1840
  'X00GD' => [ 'Asus', 'ZenFone 3S Max (ZC521TL)' ],
 
 
 
 
 
 
 
 
 
1841
  'X013D' => [ 'Asus', 'ZenFone Go (ZB551KL)' ],
1842
  'X013DA' => [ 'Asus', 'ZenFone Go (ZB551KL)' ],
1843
  'X013DB' => [ 'Asus', 'ZenFone Go (ZB551KL)' ],
@@ -1846,7 +1925,9 @@ DeviceModels::$ANDROID_MODELS = [
1846
  'X013DB' => [ 'Asus', 'ZenFone Go TV (ZB551KL)' ],
1847
  'X013DC' => [ 'Asus', 'ZenFone Go (ZB551KL)' ],
1848
  'ZB551KL' => [ 'Asus', 'ZenFone Go (ZB551KL)' ],
 
1849
  'X014D' => [ 'Asus', 'ZenFone Go (ZB452KG)' ],
 
1850
  'Z002' => [ 'Asus', 'ZenFone 6 (A601CG)' ],
1851
  'Z007' => [ 'Asus', 'ZenFone C (ZC451CG)' ],
1852
  'ZenFone 2' => [ 'Asus', 'ZenFone 2 (ZE550ML)' ],
@@ -1908,7 +1989,10 @@ DeviceModels::$ANDROID_MODELS = [
1908
  'Z01HDA' => [ 'Asus', 'ZenFone 3 Zoom (ZE553KL)' ],
1909
  'Z01KD' => [ 'Asus', 'ZenFone 4 (ZE554KL)' ],
1910
  'Z01KDA' => [ 'Asus', 'ZenFone 4 (ZE554KL)' ],
 
1911
  'Z01MDA' => [ 'Asus', 'ZenFone 4 Selfie Pro (ZD552KL)' ],
 
 
1912
 
1913
  'ZB500KG' => [ 'Asus', 'ZenFone Go (ZB500KG)' ],
1914
  'ZB500KL' => [ 'Asus', 'ZenFone Go (ZB500KL)' ],
@@ -1921,6 +2005,7 @@ DeviceModels::$ANDROID_MODELS = [
1921
  'ZE552KL' => [ 'Asus', 'ZenFone 3 (ZE552KL)' ],
1922
  'ZE553KL' => [ 'Asus', 'ZenFone 3 Zoom (ZE553KL)' ],
1923
  'ZE554KL' => [ 'Asus', 'ZenFone 4 (ZE554KL)' ],
 
1924
 
1925
  'Z00YD' => [ 'Asus', 'Live' ],
1926
  'X002' => [ 'Asus', 'Pegasus' ],
@@ -2214,7 +2299,24 @@ DeviceModels::$ANDROID_MODELS = [
2214
  'BBE100-[0-9]!' => [ 'BlackBerry', '"BBE100"' ],
2215
  'BBF100-[0-9]!' => [ 'BlackBerry', 'KEY2' ],
2216
 
 
 
 
 
 
 
 
 
 
2217
  'BV8000Pro' => [ 'Blackview', 'BV8000 Pro' ],
 
 
 
 
 
 
 
 
2218
  'P2Lite' => [ 'Blackview', 'P2 Lite' ],
2219
 
2220
  'Endeavour!!' => [
@@ -2388,6 +2490,7 @@ DeviceModels::$ANDROID_MODELS = [
2388
  'BLU VIVO SELFIE' => [ 'BLU', 'Vivo Selfie' ],
2389
  'VIVO XL' => [ 'BLU', 'Vivo XL' ],
2390
  'Vivo XL2' => [ 'BLU', 'Vivo XL2' ],
 
2391
  ],
2392
 
2393
  'R1 HD' => [ 'BLU', 'R1 HD' ],
@@ -2558,6 +2661,7 @@ DeviceModels::$ANDROID_MODELS = [
2558
  'Aquaris U Lite' => [ 'bq', 'Aquaris U Lite' ],
2559
  'Aquaris U Plus' => [ 'bq', 'Aquaris U Plus' ],
2560
  'Aquaris X' => [ 'bq', 'Aquaris X' ],
 
2561
  'Aquaris X5' => [ 'bq', 'Aquaris X5' ],
2562
  'Aquaris X5 Plus' => [ 'bq', 'Aquaris X5 Plus' ],
2563
  'bq Curie' => [ 'bq', 'Curie', DeviceType::TABLET ],
@@ -2610,6 +2714,8 @@ DeviceModels::$ANDROID_MODELS = [
2610
  'Bush Mytablet 2' => [ 'Bush', 'MyTablet 2', DeviceType::TABLET ],
2611
  ],
2612
 
 
 
2613
  'CT[0-9]{3,4}!!' => [
2614
  'CT700' => [ 'Carrefour', 'Touch Tablet CT700', DeviceType::TABLET ],
2615
  'CT701' => [ 'Carrefour', 'Touch Tablet CT701', DeviceType::TABLET ],
@@ -2671,9 +2777,15 @@ DeviceModels::$ANDROID_MODELS = [
2671
  'B15' => [ 'CAT', 'B15' ],
2672
  'B15Q' => [ 'CAT', 'B15Q' ],
2673
  'S30' => [ 'CAT', 'S30' ],
 
2674
  'S40' => [ 'CAT', 'S40' ],
 
 
2675
  'S50' => [ 'CAT', 'S50' ],
2676
  'S50c' => [ 'CAT', 'S50c' ],
 
 
 
2677
 
2678
  'CAT!!' => [
2679
  'Cat Comet' => [ 'CAT', 'COMET', DeviceType::TABLET ],
@@ -3407,6 +3519,11 @@ DeviceModels::$ANDROID_MODELS = [
3407
  'CROSSCALL WILD' => [ 'Crosscall', 'WILD' ],
3408
  ],
3409
 
 
 
 
 
 
3410
  'Novapad!!' => [
3411
  'Novapad 70 D124 FC' => [ 'Crypto', 'NovaPad 70 D124', DeviceType::TABLET ],
3412
  'Novapad 70 S124 FC' => [ 'Crypto', 'NovaPad 70 S124', DeviceType::TABLET ],
@@ -3429,13 +3546,18 @@ DeviceModels::$ANDROID_MODELS = [
3429
  'CUBOT ONE-S' => [ 'Cubot', 'One S' ],
3430
  'CUBOT P7' => [ 'Cubot', 'P7' ],
3431
  'CUBOT P9' => [ 'Cubot', 'P9' ],
 
3432
  'CUBOT S108' => [ 'Cubot', 'S108' ],
3433
  'CUBOT S222' => [ 'Cubot', 'S222' ],
3434
  'CUBOT X6' => [ 'Cubot', 'X6' ],
 
 
3435
  ],
3436
 
3437
  'S222' => [ 'Cubot', 'S222' ],
3438
  'S308' => [ 'Cubot', 'S308' ],
 
 
3439
 
3440
  '(CUBE ?)?(K8|U1|U2|U3|U5|U6|U8|U9)[0-9]?GT!!' => [
3441
  'CUBE K8GT' => [ 'Cube', 'K8GT', DeviceType::TABLET ],
@@ -3560,6 +3682,7 @@ DeviceModels::$ANDROID_MODELS = [
3560
  ],
3561
 
3562
  'Cydle M7!' => [ 'Cydle', 'M7 MultiPAD', DeviceType::TABLET ],
 
3563
  'EVDO1000' => [ 'Cyrus', 'EVDO 1000' ],
3564
  'GloryG1000' => [ 'Cyrus', 'Glory G1000' ],
3565
  'TVPAD Slim K3409' => [ 'Cyrus', 'TVPad Slim K3409', DeviceType::TABLET ],
@@ -3683,6 +3806,7 @@ DeviceModels::$ANDROID_MODELS = [
3683
  'Dell XCD35' => [ 'Dell', 'XCD35' ],
3684
  'XCD35' => [ 'Dell', 'XCD35' ],
3685
  'DEM752HCF' => [ 'Denver', 'TAC-7018', DeviceType::TABLET ],
 
3686
 
3687
  '(DENVER-)?TA[CD]-[0-9]{4,5}!!' => [
3688
  'TAC-7028' => [ 'Denver', 'TAC-7028', DeviceType::TABLET ],
@@ -3823,6 +3947,10 @@ DeviceModels::$ANDROID_MODELS = [
3823
  'DM016SH' => [ 'Sharp', 'DM016SH', 'carrier' => 'Disney Mobile' ],
3824
  ],
3825
 
 
 
 
 
3826
  'DJC Touchtab3' => [ 'DJC', 'Touchtab3', DeviceType::TABLET ],
3827
  'DJC Touchtab4' => [ 'DJC', 'Touchtab4', DeviceType::TABLET ],
3828
  'AirBook TTJ702' => [ 'DNS', 'Airbook TTJ702', DeviceType::TABLET ],
@@ -3900,6 +4028,11 @@ DeviceModels::$ANDROID_MODELS = [
3900
  'Discovery2-DG500C' => [ 'Doogee', 'Discovery 2 DG500C' ],
3901
  'DG750 Iron Bone' => [ 'Doogee', 'Iron Bone DG750' ],
3902
  'TURBO DG2014' => [ 'Doogee', 'Turbo DG2014' ],
 
 
 
 
 
3903
 
3904
  'DOOV!!' => [
3905
  'DOOV C1' => [ 'DOOV', 'C1' ],
@@ -3950,9 +4083,12 @@ DeviceModels::$ANDROID_MODELS = [
3950
  ],
3951
 
3952
  'Doro 8030' => [ 'Doro', 'Liberto 822' ],
 
3953
  'Doro 824' => [ 'Doro', 'Liberto 824' ],
3954
  '825 T-Mobile' => [ 'Doro', 'Liberto 825' ],
3955
  'Doro PhoneEasy 745' => [ 'Doro', 'PhoneEasy 745' ],
 
 
3956
  'M975' => [ 'Double Power', 'M975', DeviceType::TABLET ],
3957
  'TD-1010' => [ 'Double Power', 'TD-1010', DeviceType::TABLET ],
3958
  'Tablet-P27' => [ 'DracoTek', 'P27 Tablet', DeviceType::TABLET ],
@@ -4185,6 +4321,9 @@ DeviceModels::$ANDROID_MODELS = [
4185
  'E8051HD' => [ 'Evertek', 'Everpad E8051HD', DeviceType::TABLET ],
4186
  ],
4187
 
 
 
 
4188
  'P10AN' => [ 'Exper', 'Easypad P10AN', DeviceType::TABLET ],
4189
 
4190
  '(Explay|X-tremer|ActiveD|Informer|Surfer)!!' => [
@@ -4241,6 +4380,8 @@ DeviceModels::$ANDROID_MODELS = [
4241
  'FP1' => [ 'Fairphone', '1' ],
4242
  'FP1U' => [ 'Fairphone', '1' ],
4243
  'FP2' => [ 'Fairphone', '2' ],
 
 
4244
 
4245
  'FDT!!' => [
4246
  'FDT C838' => [ 'FDT', 'C838' ],
@@ -4450,11 +4591,13 @@ DeviceModels::$ANDROID_MODELS = [
4450
  'F-01H' => [ 'Fujitsu', 'arrows Fit F-01H', 'carrier' => 'DoCoMo' ],
4451
  'F-01J' => [ 'Fujitsu', 'arrows NX F-01J', 'carrier' => 'DoCoMo' ],
4452
  'F-01K' => [ 'Fujitsu', 'arrows NX F-01K', 'carrier' => 'DoCoMo' ],
 
4453
  'F-02E' => [ 'Fujitsu', 'ARROWS X F-02E', 'carrier' => 'DoCoMo' ],
4454
  'F-02F' => [ 'Fujitsu', 'ARROWS Tab F-02F', DeviceType::TABLET, 'carrier' => 'DoCoMo' ],
4455
  'F-02G' => [ 'Fujitsu', 'ARROWS NX F-02G', 'carrier' => 'DoCoMo' ],
4456
  'F-02H' => [ 'Fujitsu', 'arrows NX F-02H', 'carrier' => 'DoCoMo' ],
4457
  'F-02K' => [ 'Fujitsu', 'ARROWS Tab F-02K', DeviceType::TABLET, 'carrier' => 'DoCoMo' ],
 
4458
  'F-03D' => [ 'Fujitsu', 'ARROWS Kiss F-03D', 'carrier' => 'DoCoMo' ],
4459
  'F-03E' => [ 'Fujitsu', 'ARROWS Kiss with JILL STUART F-03E', 'carrier' => 'DoCoMo' ],
4460
  'F-03F' => [ 'Fujitsu', 'F-03F', 'carrier' => 'Disney Mobile' ],
@@ -4683,6 +4826,19 @@ DeviceModels::$ANDROID_MODELS = [
4683
  'Gigaset QV1030' => [ 'Gigaset', 'QV1030', DeviceType::TABLET ],
4684
  ],
4685
 
 
 
 
 
 
 
 
 
 
 
 
 
 
4686
  '80-1' => [ 'Gigaset', 'Maxwell 10', DeviceType::DECT ],
4687
  'SL930' => [ 'Gigaset', 'SL930', DeviceType::DECT ],
4688
 
@@ -4938,6 +5094,14 @@ DeviceModels::$ANDROID_MODELS = [
4938
  'X710d' => [ 'Haipai', 'X710D' ],
4939
  'X720D' => [ 'Haipai', 'X720D' ],
4940
 
 
 
 
 
 
 
 
 
4941
  'SN[0-9]!!' => [
4942
  'SN10T1' => [ 'HANNspree', 'HANNSpad SN10T1', DeviceType::TABLET ],
4943
  'SN10T2' => [ 'HANNspree', 'HANNSpad SN10T2', DeviceType::TABLET ],
@@ -5167,7 +5331,9 @@ DeviceModels::$ANDROID_MODELS = [
5167
  'Hisense HS-E910' => [ 'Hisense', 'E910' ],
5168
  'Hisense EG909' => [ 'Hisense', 'EG909' ],
5169
  'HS-Hisense F20T' => [ 'Hisense', 'F20T' ],
 
5170
  'Hisense F31' => [ 'Hisense', 'F31' ],
 
5171
  'HS-Hisense I632T' => [ 'Hisense', 'I632T' ],
5172
  'HS-Hisense I635T' => [ 'Hisense', 'I635T' ],
5173
  'HS-Hisense I639T' => [ 'Hisense', 'I639T' ],
@@ -5755,6 +5921,7 @@ DeviceModels::$ANDROID_MODELS = [
5755
  'HTC M9(e|pt|px|u|w)!' => [ 'HTC', 'One (M9)' ],
5756
  'HTC One M9PLUS' => [ 'HTC', 'One (M9 Plus)' ],
5757
  'HTC One M9PLUS Prime Camera Edition' => [ 'HTC', 'One (M9 Plus)' ],
 
5758
  'HTC M9pw' => [ 'HTC', 'One (M9 Plus)' ],
5759
  'HTC 0PK71' => [ 'HTC', 'One (M9 Plus)' ],
5760
  'HTC 0PK72' => [ 'HTC', 'One (M9 Plus)' ],
@@ -5851,9 +6018,13 @@ DeviceModels::$ANDROID_MODELS = [
5851
  'HTC U-3w' => [ 'HTC', 'U11'],
5852
  'HTC U-3u' => [ 'HTC', 'U11'],
5853
  'HTC 2PZC100' => [ 'HTC', 'U11'],
 
 
5854
  'HTC 2Q4D200' => [ 'HTC', 'U11 Plus'],
5855
  'HTC 2Q3F2' => [ 'HTC', 'U11 Plus'],
5856
  'HTC 2Q3F3' => [ 'HTC', 'U11 Plus'],
 
 
5857
  'HTC Velocity!' => [ 'HTC', 'Velocity 4G'],
5858
  'HTCVelocity 4G' => [ 'HTC', 'Velocity 4G'],
5859
  'HTC Vivid' => [ 'HTC', 'Vivid'],
@@ -5954,6 +6125,7 @@ DeviceModels::$ANDROID_MODELS = [
5954
  'One V' => [ 'HTC', 'One V' ],
5955
  'One' => [ 'HTC', 'One' ],
5956
  'One M7' => [ 'HTC', 'One' ],
 
5957
  'EndeavorU' => [ 'HTC', 'One X' ],
5958
  '2PQ93' => [ 'HTC', 'One (A9)' ],
5959
  'm8wl' => [ 'HTC', 'One (M8)' ],
@@ -6088,7 +6260,7 @@ DeviceModels::$ANDROID_MODELS = [
6088
  'Huawei MediaPad T1 7.0 3G' => [ 'Huawei', 'MediaPad T1', DeviceType::TABLET ],
6089
  'Huawei MediaPad T1 8.0 4G' => [ 'Huawei', 'MediaPad T1', DeviceType::TABLET ],
6090
  'Huawei MediaPad T1 10 4G' => [ 'Huawei', 'MediaPad T1', DeviceType::TABLET ],
6091
-
6092
  'MediaPad!!' => [
6093
  'MediaPad' => [ 'Huawei', 'MediaPad', DeviceType::TABLET ],
6094
  'MediaPad 7 FHD' => [ 'Huawei', 'MediaPad 7', DeviceType::TABLET ],
@@ -6158,14 +6330,24 @@ DeviceModels::$ANDROID_MODELS = [
6158
  'BGO-(DL09|L03)!' => [ 'Huawei', 'MediaPad T2', DeviceType::TABLET ],
6159
  'KOB-(L09|W09)!' => [ 'Huawei', 'MediaPad T3', DeviceType::TABLET ],
6160
  'AGS-(L09|W09)!' => [ 'Huawei', 'MediaPad T3', DeviceType::TABLET ],
6161
- 'BG2-(U01)!' => [ 'Huawei', 'MediaPad T3', DeviceType::TABLET ],
 
 
6162
  'BTV-(DL09|W09)!' => [ 'Huawei', 'MediaPad M3', DeviceType::TABLET ],
6163
  'CPN-(W09|AL00|L09)!' => [ 'Huawei', 'MediaPad M3 Lite', DeviceType::TABLET ],
6164
  'BAH-(W09|AL00|L09)!' => [ 'Huawei', 'MediaPad M3 Lite', DeviceType::TABLET ],
 
 
 
 
 
 
6165
 
6166
  'JDN-W09' => [ 'Huawei', 'Honor Pad 2', DeviceType::TABLET ],
 
 
6167
 
6168
- '(HUAWEI )?(ALP|BLA|CRR|LON|MATE|MHA|MT1|MT2|MT7|M200|NXT|Z100)!!' => [
6169
  '(HW-|HUAWEI )?MT1-(T00|U06)!' => [ 'Huawei', 'Ascend Mate' ],
6170
  '(HW-|HUAWEI )?MATE-U06!' => [ 'Huawei', 'Ascend Mate' ],
6171
  '(HW-|HUAWEI )?MT2-?(C00|L01|L02|L03|L05)!' => [ 'Huawei', 'Ascend Mate 2' ],
@@ -6177,20 +6359,32 @@ DeviceModels::$ANDROID_MODELS = [
6177
  '(HW-|HUAWEI )?LON-(AL00|L29)!' => [ 'Huawei', 'Mate 9 Pro' ],
6178
  '(HW-|HUAWEI )?ALP-(AL00|L09|L29|TL00)!' => [ 'Huawei', 'Mate 10' ],
6179
  '(HW-|HUAWEI )?BLA-(A09|AL00|L09|L29|L30|TL00)!' => [ 'Huawei', 'Mate 10 Pro' ],
 
 
 
 
 
 
 
6180
  '(HW-|HUAWEI )?CRR-(L09|CL00|CL20|TL00|UL00|UL20)!' => [ 'Huawei', 'Mate S' ],
6181
  ],
6182
 
6183
- '(HW-|HUAWEI )?(DRA|FLA|TIT|TAG|NCE|TRT|SLA)!!' => [
6184
  '(HW-|HUAWEI )?TIT-(AL00|CL00|CL10|L01|TL00|U02)!' => [ 'Huawei', 'Enjoy 5' ],
6185
  '(HW-|HUAWEI )?TAG-(AL00|CL00|L13|TL00)!' => [ 'Huawei', 'Enjoy 5S' ],
6186
  '(HW-|HUAWEI )?NCE-(AL00|AL10|TL10)!' => [ 'Huawei', 'Enjoy 6' ],
6187
  '(HW-|HUAWEI )?SLA-(AL00|L02|L03|L22|TL10)!' => [ 'Huawei', 'Enjoy 7' ],
6188
  '(HW-|HUAWEI )?TRT-(AL00|L21|L53|LX1|LX2|LX3|TL10)!' => [ 'Huawei', 'Enjoy 7 Plus' ],
6189
  '(HW-|HUAWEI )?FLA-(AL10|AL20|LX1|LX2|LX3|TL10)!' => [ 'Huawei', 'Enjoy 8 Plus' ],
6190
- '(HW-|HUAWEI )?DRA-(AL00|L01|L21|LX2)!' => [ 'Huawei', 'Enjoy 8e' ],
 
 
 
 
 
6191
  ],
6192
 
6193
- '(HW-|HUAWEI |HONOR )?(ATH|BLN|BKL|BND|CHE|CHM|COL|DUA|DUK|DLI|EDI|FRD|HN3|H30|H60|HOL|JMM|KIW|LLD|NEM|NMO|PE|PLK|RNE|SCL|KNT|CAM|STF|HDN)!!' => [
6194
  'H30 U10' => [ 'Huawei', 'Honor 3C' ],
6195
  '(HW-|HUAWEI )?HN3-(U00|U01)!' => [ 'Huawei', 'Honor 3' ],
6196
  '(HW-|HUAWEI |HONOR )?H30[- ](C00|L01|L02|T00|T10|U10)!' => [ 'Huawei', 'Honor 3C' ],
@@ -6209,19 +6403,35 @@ DeviceModels::$ANDROID_MODELS = [
6209
  '(HW-|HUAWEI )?PE-(CL00|TL00|TL00M|TL10|TL20|UL00)!' => [ 'Huawei', 'Honor 6 Plus' ],
6210
  '(HW-|HUAWEI |HONOR )?PLK-(L01|AL10|CL00|UL00|TL00|TL01H)!' => [ 'Huawei', 'Honor 7' ],
6211
  '(HW-|HUAWEI )?ATH-(AL00|CL00|TL00|TL00H|UL00)!' => [ 'Huawei', 'Honor 7i' ],
 
 
6212
  '(HW-|HUAWEI )?BND-(AL00|AL10|L21|L24|L31|L34|TL10)!' => [ 'Huawei', 'Honor 7X' ],
6213
- '(HW-|HUAWEI )?DUA-(AL00)!' => [ 'Huawei', 'Honor 7 Play' ],
6214
  '(HW-|HUAWEI )?FRD-(AL00|AL10|DL00|L02|L04|L09|L14|L19)!' => [ 'Huawei', 'Honor 8' ],
 
 
 
 
6215
  '(HW-|HUAWEI )?ATH-(UL01|UL06)!' => [ 'Huawei', 'Honor ShotX' ],
6216
  '(HW-|HUAWEI )?KNT-(AL10|AL20|TL10|UL10)!' => [ 'Huawei', 'Honor V8' ],
6217
  '(HW-|HUAWEI )?EDI-(AL10)!' => [ 'Huawei', 'Honor Note 8' ],
6218
  '(HW-|HUAWEI )?STF-(AL00|AL10|L09|TL10)!' => [ 'Huawei', 'Honor 9' ],
6219
- '(HW-|HUAWEI )?LLD-(AL00|AL10|AL20|L21|L31)!' => [ 'Huawei', 'Honor 9 Lite' ],
6220
  '(HW-|HUAWEI )?RNE-(AL00|L01|L02|L03|L21|L22|L23|L31)!' => [ 'Huawei', 'Honor 9i' ],
 
6221
  '(HW-|HUAWEI )?COL-(AL00|AL10|L29|TL00|TL10)!' => [ 'Huawei', 'Honor 10' ],
 
 
 
 
 
6222
  '(HW-|HUAWEI )?DUK-(AL20|L09|TL30)!' => [ 'Huawei', 'Honor V9' ],
6223
  '(HW-|HUAWEI )?JMM-(AL00|AL10|L22|L22HN|TL00)!' => [ 'Huawei', 'Honor V9 Play' ],
6224
  '(HW-|HUAWEI )?BKL-(AL00|AL20|L04|L09)!' => [ 'Huawei', 'Honor V10' ],
 
 
 
 
6225
  '(HW-|HUAWEI )?HDN-(L09|W09)!' => [ 'Huawei', 'Honor WaterPlay', DeviceType::TABLET ],
6226
  ],
6227
 
@@ -6232,7 +6442,7 @@ DeviceModels::$ANDROID_MODELS = [
6232
  '(HW-|HUAWEI )?BLL-(L21|L22|L23)!' => [ 'Huawei', 'GR5 (2017)' ],
6233
  ],
6234
 
6235
- '(HW-|HUAWEI )?(ALE|ANE|D2|DAV|EML|EVA|FIG|G6|G7|GRA|M100|P2|P6|P7|PRA|RIO|SC|Sophia|VIE|VKY|VNS|VTR|WAS)!!' => [
6236
  'HUAWEI D2' => [ 'Huawei', 'Ascend D2' ],
6237
  '(HW-|HUAWEI )?D2-(0082|2010|5000|6070|6114)!' => [ 'Huawei', 'Ascend D2' ],
6238
  '(HW-|HUAWEI )?G6-(C00|L11|L22|L33|T00|U00|U10|U34|U251)!' => [ 'Huawei', 'Ascend G6' ],
@@ -6257,31 +6467,50 @@ DeviceModels::$ANDROID_MODELS = [
6257
  '(HW-|HUAWEI )?WAS-?(AL00|L03T|LX1|LX1A|LX2|LX2J|LX3|TL10)!' => [ 'Huawei', 'P10 Lite' ],
6258
  '(HW-|HUAWEI )?VKY-?(AL00|L09|L29|TL00)!' => [ 'Huawei', 'P10 Plus' ],
6259
  '(HW-|HUAWEI )?FIG-?(AL00|AL10|LA1|LX1|LX3|TL00)!' => [ 'Huawei', 'P Smart' ],
 
 
6260
  '(HW-|HUAWEI )?EML-?(AL00|L09|L29|TL00)!' => [ 'Huawei', 'P20' ],
6261
- '(HW-|HUAWEI )?ANE-?(AL00|L21|LX1|LX2|LX2J|LX3)!' => [ 'Huawei', 'P20 lite' ],
 
 
 
 
 
 
 
 
6262
  ],
6263
 
6264
  'Rock-(AL00|CL00|L01|L03)!' => [ 'Huawei', 'Ascend G7' ],
6265
  'HUAWEI A168-(AL10|DL09|L09|L29)!' => [ 'Huawei', 'P9' ],
6266
 
6267
- '(HW-|HUAWEI )?(CRO|LUA|CUN|SCC|SCU|CAM|LDN|LYO|MYA)!!' => [
6268
  '(HW-|HUAWEI )?CRO-(L02|L03|L22|U00)!' => [ 'Huawei', 'Y3 (2017)' ],
6269
  '(HW-|HUAWEI )?LUA-(L01|L02|L03|L13|L21|L22|L23|U02|U03|U22|U23)!' => [ 'Huawei', 'Y3 II' ],
6270
  '(HW-|HUAWEI )?CUN-(AL00|L01|L02|L03|L21|L22|L23|L33|TL00|U29)!' => [ 'Huawei', 'Y5 II' ],
6271
  '(HW-|HUAWEI )?MYA-(AL10|L02|L03|L11|L13|L22|L23|L41|TL10)!' => [ 'Huawei', 'Y5 (2017)' ],
 
6272
  '(HW-|HUAWEI )?SCC-(U21)!' => [ 'Huawei', 'Y6' ],
6273
  '(HW-|HUAWEI )?SCU-(U31)!' => [ 'Huawei', 'Y6C' ],
6274
  '(HW-|HUAWEI )?CAM-(L01|L03|L11|L21|L23|L32|AL00|CL00|TL00|UL00)!' => [ 'Huawei', 'Y6 II' ],
6275
  '(HW-|HUAWEI )?LYO-(L01|L02|L21)!' => [ 'Huawei', 'Y6 II Compact' ],
 
6276
  '(HW-|HUAWEI )?LDN-(AL00|L01|L21|LX2|LX3|TL00)!' => [ 'Huawei', 'Y7 Prime (2018)' ],
 
 
 
6277
  ],
6278
 
6279
  '(HW-|HUAWEI )?CAZ-(AL10|TL10|TL20)!' => [ 'Huawei', 'Nova' ],
6280
  '(HW-|HUAWEI )?CAN-(L01|L11|L12)!' => [ 'Huawei', 'Nova' ],
6281
  '(HW-|HUAWEI )?MLA-(L01|L03|L11|L12|L13)!' => [ 'Huawei', 'Nova Plus' ],
6282
  '(HW-|HUAWEI )?DIG-(AL00|L01|L03|L21|TL10)!' => [ 'Huawei', 'Nova Smart' ],
 
6283
  '(HW-|HUAWEI )?BAC-(AL00|L03|L21|L22|TL00)!' => [ 'Huawei', 'Nova 2 Plus' ],
6284
  '(HW-|HUAWEI )?HWI-(AL00|TL00)!' => [ 'Huawei', 'Nova 2S' ],
 
 
 
6285
  '(HW-|HUAWEI )?MLA-(AL00|AL10)!' => [ 'Huawei', 'Maimang 5' ],
6286
  '(HW-|HUAWEI )?MLA-(TL00|TL10|UL00)!' => [ 'Huawei', 'G9 Plus' ],
6287
 
@@ -6708,6 +6937,7 @@ DeviceModels::$ANDROID_MODELS = [
6708
  'Ultra Wave' => [ 'Hyundai', 'Ultra Wave' ],
6709
  'A7 HD' => [ 'Hyundai', 'A7 HD', DeviceType::TABLET ],
6710
  'MW1031' => [ 'Hyundai', 'MW1031', DeviceType::TABLET ],
 
6711
  'Elektra L' => [ 'i-Joy', 'Elektra L' ],
6712
  'Elektra XL' => [ 'i-Joy', 'Elektra XL' ],
6713
  'i-Joy i-Call' => [ 'i-Joy', 'i-Call' ],
@@ -7071,6 +7301,8 @@ DeviceModels::$ANDROID_MODELS = [
7071
  'Infinix X1000' => [ 'Infinix', 'Joypad 10 X1000', DeviceType::TABLET ],
7072
  ],
7073
 
 
 
7074
  'IN[0-9]{3,3}!!' => [
7075
  'IN260' => [ 'InFocus', 'IN260' ],
7076
  'IN330' => [ 'InFocus', 'IN330' ],
@@ -7436,6 +7668,7 @@ DeviceModels::$ANDROID_MODELS = [
7436
  'IVIO DE38' => [ 'Ivio', 'DE38' ],
7437
  ],
7438
 
 
7439
  'iwoo i900' => [ 'iwoo', 'i900' ],
7440
 
7441
  '(JIAYU|JY)!!' => [
@@ -7859,6 +8092,7 @@ DeviceModels::$ANDROID_MODELS = [
7859
 
7860
  'KY[FLTYV][0-9]{2,2}!!' => [
7861
  'KYF31' => [ 'Kyocera', 'GRATINA KYF31', 'carrier' => 'au' ],
 
7862
  'KYF37' => [ 'Kyocera', 'GRATINA KYF37', 'carrier' => 'au' ],
7863
  'KYL23' => [ 'Kyocera', 'miraie KYL23', 'carrier' => 'au' ],
7864
  'KYY21' => [ 'Kyocera', 'URBANO L01', 'carrier' => 'au' ],
@@ -7872,11 +8106,16 @@ DeviceModels::$ANDROID_MODELS = [
7872
  'KYV36' => [ 'Kyocera', 'DIGNO rafre KYV36', 'carrier' => 'au' ],
7873
  'KYV37' => [ 'Kyocera', 'Qua phone', 'carrier' => 'au' ],
7874
  'KYV38' => [ 'Kyocera', 'URBANO V03 KYV38', 'carrier' => 'au' ],
 
7875
  'KYV40' => [ 'Kyocera', 'rafre KYV40', 'carrier' => 'au' ],
7876
  'KYV40U' => [ 'Kyocera', 'DIGNO W KYV40U', 'carrier' => 'UQ mobile' ],
7877
  'KYV41' => [ 'Kyocera', 'TORQUE G03 KYV41', 'carrier' => 'au' ],
7878
  'KYV42' => [ 'Kyocera', 'Qua phone QX', 'carrier' => 'au' ],
 
 
 
7879
  'KYT31' => [ 'Kyocera', 'Qua tab', DeviceType::TABLET, 'carrier' => 'au' ],
 
7880
  'KYT33' => [ 'Kyocera', 'Qua tab QZ10', DeviceType::TABLET, 'carrier' => 'au' ],
7881
  ],
7882
 
@@ -8016,6 +8255,9 @@ DeviceModels::$ANDROID_MODELS = [
8016
  'W810' => [ 'K-Touch', 'W810' ],
8017
  'W880' => [ 'K-Touch', 'W880' ],
8018
 
 
 
 
8019
  '(Lanix )?(Ilium|llium)!!' => [
8020
  'ILIUM L400' => [ 'Lanix', 'Ilium L400' ],
8021
  'Ilium L820' => [ 'Lanix', 'Ilium L820' ],
@@ -8360,7 +8602,9 @@ DeviceModels::$ANDROID_MODELS = [
8360
  'Lenovo YT3-X50F' => [ 'Lenovo', 'Yoga Tablet 3', DeviceType::TABLET ],
8361
  'Lenovo YT3-X50L' => [ 'Lenovo', 'Yoga Tablet 3', DeviceType::TABLET ],
8362
  'Lenovo YT3-850F' => [ 'Lenovo', 'Yoga Tablet 3', DeviceType::TABLET ],
 
8363
  'Lenovo YT-X703F' => [ 'Lenovo', 'Yoga Tablet 3 Plus', DeviceType::TABLET ],
 
8364
  'Lenovo YT3-X90F' => [ 'Lenovo', 'Yoga Tablet 3 Pro', DeviceType::TABLET ],
8365
  'Lenovo YT3-X90L' => [ 'Lenovo', 'Yoga Tablet 3 Pro', DeviceType::TABLET ],
8366
 
@@ -8379,6 +8623,28 @@ DeviceModels::$ANDROID_MODELS = [
8379
  ],
8380
 
8381
  'Lenovo TB-7304F' => [ 'Lenovo', 'Tab 7 Essential', DeviceType::TABLET ],
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
8382
  'Lenovo TB-X103F' => [ 'Lenovo', 'Tab 10', DeviceType::TABLET ],
8383
  'TB-X103F' => [ 'Lenovo', 'Tab 10', DeviceType::TABLET ],
8384
  'Lenovo TB2-X30F' => [ 'Lenovo', 'Tab 2 A10', DeviceType::TABLET ],
@@ -8392,11 +8658,15 @@ DeviceModels::$ANDROID_MODELS = [
8392
  'Lenovo TB3-X70F' => [ 'Lenovo', 'Tab 3 10 Business', DeviceType::TABLET ],
8393
  'Lenovo TB3-X70L' => [ 'Lenovo', 'Tab 3 10 Business', DeviceType::TABLET ],
8394
  'Lenovo TB-8504F' => [ 'Lenovo', 'Tab 4 8', DeviceType::TABLET ],
 
 
8395
  'Lenovo TB-8703F' => [ 'Lenovo', 'Tab 4 8 Plus', DeviceType::TABLET ],
8396
  'Lenovo TB-8704F' => [ 'Lenovo', 'Tab 4 8 Plus', DeviceType::TABLET ],
8397
  'Lenovo TB-X304F' => [ 'Lenovo', 'Tab 4 10', DeviceType::TABLET ],
8398
  'Lenovo TB-X704F' => [ 'Lenovo', 'Tab 4 10 Plus', DeviceType::TABLET ],
8399
  'Lenovo TB-X704L' => [ 'Lenovo', 'Tab 4 10 Plus', DeviceType::TABLET ],
 
 
8400
 
8401
  '(Lenovo ?)?(IdeaTab ?)?[KSV][0-9]{4,4}!!' => [
8402
  'IdeaTab ?K2110A-(F)!' => [ 'Lenovo', 'IdeaTab K2110', DeviceType::TABLET ],
@@ -8569,7 +8839,11 @@ DeviceModels::$ANDROID_MODELS = [
8569
  'Lenovo K50-t3s' => [ 'Lenovo', 'K3 Note' ],
8570
  'Lenovo K50-T5' => [ 'Lenovo', 'K3 Note' ],
8571
  'Lenovo K50t5' => [ 'Lenovo', 'K3 Note' ],
 
8572
  'Lenovo K6' => [ 'Lenovo', 'K6' ],
 
 
 
8573
  'Lenovo N300' => [ 'Lenovo', 'N300', DeviceType::DESKTOP ],
8574
  'Lenovo N308' => [ 'Lenovo', 'N308', DeviceType::DESKTOP ],
8575
  'Lenovo N908' => [ 'Lenovo', 'N908' ],
@@ -8793,7 +9067,9 @@ DeviceModels::$ANDROID_MODELS = [
8793
  'LGAS991' => [ 'LG', 'G4' ],
8794
  'LG-AS9(91)!' => [ 'LG', 'G4' ],
8795
  'LGAS992' => [ 'LG', 'G5' ],
 
8796
  'LGAS995' => [ 'LG', 'G Flex 2' ],
 
8797
  ],
8798
 
8799
  'LG-?C[0-9]{3,3}!!' => [
@@ -8932,6 +9208,7 @@ DeviceModels::$ANDROID_MODELS = [
8932
  'LG-F820!' => [ 'LG', 'U' ],
8933
  ],
8934
 
 
8935
  'LG-GT540!' => [ 'LG', 'Optimus' ],
8936
  'LG-GW620!' => [ 'LG', 'GW620 Eve' ],
8937
 
@@ -9046,6 +9323,8 @@ DeviceModels::$ANDROID_MODELS = [
9046
  'LGL86C!' => [ 'LG', 'Optimus Showtime' ],
9047
  'LG-L95G!' => [ 'LG', 'L95G' ],
9048
  'LGL96G' => [ 'LG', 'Ultimate' ],
 
 
9049
  'LG-L160L' => [ 'LG', 'Optimus LTE2' ],
9050
  'LGL163BL' => [ 'LG', 'Fiesta 2' ],
9051
  'LGL164VL' => [ 'LG', 'Fiesta' ],
@@ -9133,6 +9412,7 @@ DeviceModels::$ANDROID_MODELS = [
9133
  'LG-M4(30)!' => [ 'LG', 'Stylo 3' ],
9134
  'LG-M4(70)!' => [ 'LG', 'Stylo 3 Plus' ],
9135
  'LG-M7(00|03)!' => [ 'LG', 'Q6' ],
 
9136
  ],
9137
 
9138
  'LG-?MS[0-9]{3,3}!!' => [
@@ -9146,6 +9426,7 @@ DeviceModels::$ANDROID_MODELS = [
9146
  'LGMS500' => [ 'LG', 'Optimus F6' ],
9147
  'LG-MS500' => [ 'LG', 'Optimus F6' ],
9148
  'LGMS550' => [ 'LG', 'G Stylo 2' ],
 
9149
  'LGMS631' => [ 'LG', 'G Stylo' ],
9150
  'LG-MS659' => [ 'LG', 'Optimus F3' ],
9151
  'LGMS659' => [ 'LG', 'Optimus F3' ],
@@ -9200,6 +9481,16 @@ DeviceModels::$ANDROID_MODELS = [
9200
  'LG-P815!' => [ 'LG', 'G Pad II 8.3', DeviceType::TABLET ],
9201
  ],
9202
 
 
 
 
 
 
 
 
 
 
 
9203
  'LG-SU[0-9]{3,3}!!' => [
9204
  'LG-SU370' => [ 'LG', 'Optimus One' ],
9205
  'LG-SU540' => [ 'LG', 'PRADA 3.0' ],
@@ -9216,8 +9507,6 @@ DeviceModels::$ANDROID_MODELS = [
9216
  'LG-TP260' => [ 'LG', 'K20 Plus' ],
9217
  'LG-TP450' => [ 'LG', 'Stylo 3 Plus' ],
9218
 
9219
- 'RS988' => [ 'LG', 'G5' ],
9220
-
9221
  'LG-SU-760' => [ 'LG', 'Optimus 3D' ],
9222
  'LGUK410' => [ 'LG', 'G Pad 7.0', DeviceType::TABLET ],
9223
  'LG-UK495' => [ 'LG', 'G Pad F 8.0', DeviceType::TABLET ],
@@ -9230,9 +9519,11 @@ DeviceModels::$ANDROID_MODELS = [
9230
  'LGUS215' => [ 'LG', 'K8 2017' ],
9231
  'LGUS375' => [ 'LG', 'K8' ],
9232
  'LGUS550' => [ 'LG', 'Logos' ],
 
9233
  'LGUS610' => [ 'LG', 'X Power' ],
9234
  'LG-US670' => [ 'LG', 'Optimus U' ],
9235
- 'LG-US701' => [ 'LG', 'X venture' ],
 
9236
  'LG-US730' => [ 'LG', 'Splendor' ],
9237
  'LG-US780' => [ 'LG', 'Optimus F7' ],
9238
  'LGUS990!' => [ 'LG', 'G3' ],
@@ -9242,6 +9533,7 @@ DeviceModels::$ANDROID_MODELS = [
9242
  'LGUS995!' => [ 'LG', 'G Flex 2' ],
9243
  'LG-US996!' => [ 'LG', 'V20' ],
9244
  'LG-US997' => [ 'LG', 'G6' ],
 
9245
  ],
9246
 
9247
  'LG-V[0-9]{3,3}!!' => [
@@ -9328,21 +9620,56 @@ DeviceModels::$ANDROID_MODELS = [
9328
  'LGM-K120[KLS]!' => [ 'LG', 'X300' ],
9329
  'LGM-K121[KLS]!' => [ 'LG', 'X400' ],
9330
  'LGM-V300[KLS]!' => [ 'LG', 'V30' ],
 
9331
  'LGM-X320[KLS]!' => [ 'LG', 'X500' ],
9332
  'LGM-X401[S]!' => [ 'LG', 'X401' ],
9333
  'LGM-X600[KLS]!' => [ 'LG', 'Q6' ],
9334
  'LGM-X800[KLS]!' => [ 'LG', 'Q8' ],
9335
  ],
9336
 
 
9337
  'LM-G710!' => [ 'LG', 'G7 ThinQ' ],
9338
  'LM-G715!' => [ 'LG', 'G7 ThinQ' ],
 
 
 
 
 
 
 
 
 
 
9339
  'LM-Q610!' => [ 'LG', 'Q7' ],
 
 
9340
  'LM-Q710!' => [ 'LG', 'Q Stylus+' ],
 
 
 
 
 
 
9341
  'LM-V350!' => [ 'LG', 'V35 ThinQ' ],
 
 
 
 
 
 
9342
  'LM-X210!' => [ 'LG', 'Aristo 2' ],
 
 
 
9343
  'LM-X410!' => [ 'LG', 'X4' ],
9344
  'LM-X415!' => [ 'LG', 'X4+' ],
 
 
9345
  'LM-X510!' => [ 'LG', 'X5' ],
 
 
 
 
9346
  'LM-Y110!' => [ 'LG', 'Folder' ],
9347
 
9348
  'LGMP450' => [ 'LG', 'Stylo 3 Plus' ],
@@ -9366,6 +9693,7 @@ DeviceModels::$ANDROID_MODELS = [
9366
  'LGL24' => [ 'LG', 'isai FL LGL24', 'carrier' => 'au' ],
9367
  'LGL25' => [ 'LG', 'Fx0 LGL25', 'carrier' => 'au' ],
9368
  'LGS01' => [ 'LG', 'Wine Smart LGS01', 'carrier' => 'J:COM' ],
 
9369
  'LGV31' => [ 'LG', 'isai VL LGV31', 'carrier' => 'au' ],
9370
  'LGV32' => [ 'LG', 'isai vivid LGV32', 'carrier' => 'au' ],
9371
  'LGV33' => [ 'LG', 'Qua phone PX LGV33', 'carrier' => 'au' ],
@@ -9816,12 +10144,19 @@ DeviceModels::$ANDROID_MODELS = [
9816
  'LIFETAB E10312' => [ 'Medion', 'Lifetab E10312', DeviceType::TABLET ],
9817
  'LIFETAB E10316' => [ 'Medion', 'Lifetab E10316', DeviceType::TABLET ],
9818
  'LIFETAB E10320' => [ 'Medion', 'Lifetab E10320', DeviceType::TABLET ],
 
 
 
 
 
 
9819
  'LIFETAB P733X' => [ 'Medion', 'Lifetab P733X', DeviceType::TABLET ],
9820
  'LIFETAB P831X' => [ 'Medion', 'Lifetab P831X', DeviceType::TABLET ],
9821
  'LIFETAB P831X.2' => [ 'Medion', 'Lifetab P831X', DeviceType::TABLET ],
9822
  'LIFETAB P891X' => [ 'Medion', 'Lifetab P891X', DeviceType::TABLET ],
 
9823
  'LIFETAB P1034X' => [ 'Medion', 'Lifetab P1034X', DeviceType::TABLET ],
9824
- 'P1035X' => [ 'Medion', 'Lifetab P1035X', DeviceType::TABLET ],
9825
  'LIFETAB S7316' => [ 'Medion', 'Lifetab S7316', DeviceType::TABLET ],
9826
  'LIFETAB S732X' => [ 'Medion', 'Lifetab S732X', DeviceType::TABLET ],
9827
  'LIFETAB S785X' => [ 'Medion', 'Lifetab S785X', DeviceType::TABLET ],
@@ -9844,7 +10179,17 @@ DeviceModels::$ANDROID_MODELS = [
9844
  'MD LIFETAB P9516' => [ 'Medion', 'Lifetab P9516', DeviceType::TABLET ],
9845
  ],
9846
 
 
 
 
 
 
9847
  'P1050X' => [ 'Medion', 'Lifetab P1050X', DeviceType::TABLET ],
 
 
 
 
 
9848
 
9849
  'MEEG!!' => [
9850
  'MEEG 101' => [ 'MEEG', '101' ],
@@ -10179,6 +10524,9 @@ DeviceModels::$ANDROID_MODELS = [
10179
  'P300(Funbook)' => [ 'Micromax', 'Funbook P300', DeviceType::TABLET ],
10180
  'P701' => [ 'Micromax', 'Canvas Tab P701', DeviceType::TABLET ],
10181
 
 
 
 
10182
  'MLLED!!' => [
10183
  'MLLED M1B' => [ 'MLLED', 'M1B' ],
10184
  'MLLED M2+' => [ 'MLLED', 'M2+' ],
@@ -10570,10 +10918,27 @@ DeviceModels::$ANDROID_MODELS = [
10570
  'XT17(89)!' => [ 'Motorola', 'Moto Z2 Force' ],
10571
  'XT17(90)!' => [ 'Motorola', 'Moto G5S' ],
10572
  'XT18(02)!' => [ 'Motorola', 'Moto G5S Plus TV' ],
10573
- 'XT18(06)!' => [ 'Motorola', 'Moto G5S Plus' ],
10574
  'XT19(02)!' => [ 'Lenovo', 'K8 Note' ],
10575
  ],
10576
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
10577
  'Atrix 2' => [ 'Motorola', 'ATRIX 2' ],
10578
  'Atrix 2 WeifanZ' => [ 'Motorola', 'ATRIX 2' ],
10579
  'Atrix 4G' => [ 'Motorola', 'ATRIX 4G' ],
@@ -10628,31 +10993,92 @@ DeviceModels::$ANDROID_MODELS = [
10628
  '(Moto)?E2\(4G-LTE\)$!' => [ 'Motorola', 'Moto E (2015)' ],
10629
  'surnia' => [ 'Motorola', 'Moto E (2015)' ],
10630
  'Motorola MotoE2!' => [ 'Motorola', 'Moto E2' ],
 
10631
  'Moto E (4)' => [ 'Motorola', 'Moto E4' ],
10632
  'Moto E (4) Plus' => [ 'Motorola', 'Moto E4 Plus' ],
 
10633
  'moto e5 cruise' => [ 'Motorola', 'Moto E5 Cruise' ],
 
 
 
 
 
 
 
 
 
 
 
 
 
10634
  '(Moto)?G3$!' => [ 'Motorola', 'Moto G (2015)' ],
10635
  '(Moto)?G3-TE$!' => [ 'Motorola', 'Moto G (2015)' ],
 
 
 
10636
  'MOTOROLA MOTOG' => [ 'Motorola', 'Moto G' ],
10637
  'Moto G Play' => [ 'Motorola', 'Moto G Play' ],
 
 
 
 
 
10638
  'Moto G4' => [ 'Motorola', 'Moto G4' ],
 
10639
  'Moto G (4)' => [ 'Motorola', 'Moto G4' ],
10640
  'Moto G4 Plus' => [ 'Motorola', 'Moto G4 Plus' ],
 
 
10641
  'Moto G (5)' => [ 'Motorola', 'Moto G5' ],
10642
  'Moto G (5) Plus' => [ 'Motorola', 'Moto G5 Plus' ],
 
 
10643
  'Moto G (5S) Plus' => [ 'Motorola', 'Moto G5S Plus' ],
 
 
10644
  'moto g(6)' => [ 'Motorola', 'Moto G6' ],
 
 
 
10645
  'moto g(6) plus' => [ 'Motorola', 'Moto G6 Plus' ],
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
10646
  'Moto Z (2)' => [ 'Motorola', 'Moto Z2' ],
10647
  'Moto Z2 Play' => [ 'Motorola', 'Moto Z2 Play' ],
 
10648
  'Moto X Pro' => [ 'Motorola', 'Moto X Pro' ],
10649
  'moto x4' => [ 'Motorola', 'Moto X4' ],
 
10650
  'roiX' => [ 'Motorola', 'Droid X' ],
10651
  'Moto Backflip' => [ 'Motorola', 'BACKFLIP' ],
10652
  'RAZR' => [ 'Motorola', 'RAZR' ],
10653
  'RAZR HD' => [ 'Motorola', 'RAZR HD' ],
10654
  'RAZR M' => [ 'Motorola', 'RAZR M' ],
10655
  'RAZR MAXX' => [ 'Motorola', 'RAZR MAXX' ],
 
10656
  'Triumph' => [ 'Motorola', 'TRIUMPH' ],
10657
  'Opus One' => [ 'Motorola', 'i1' ],
10658
  'Photon' => [ 'Motorola', 'PHOTON' ],
@@ -11049,12 +11475,33 @@ DeviceModels::$ANDROID_MODELS = [
11049
  'TA-10(00|03|21|25|33|39)!' => [ 'Nokia', '6' ],
11050
  'TA-10(43|50|54|68)!' => [ 'Nokia', '6.1' ],
11051
  'TA-10(41)!' => [ 'Nokia', '7' ],
11052
- 'TA-10(62)!' => [ 'Nokia', '7 plus' ],
11053
  'TA-10(04|12|52)!' => [ 'Nokia', '8' ],
11054
  'TA-10(99)!' => [ 'Nokia', 'X6' ],
11055
  'TA-11(03|16)!' => [ 'Nokia', 'X6' ],
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
11056
  'Nokia N9' => [ 'Nokia', 'N9' ],
11057
  'Nokia N900' => [ 'Nokia', 'N900' ],
 
11058
  'Nokia X' => [ 'Nokia', 'X', DeviceType::MOBILE, Flag::NOKIAX ],
11059
  'Nokia X Dual SIM' => [ 'Nokia', 'X', DeviceType::MOBILE, Flag::NOKIAX ],
11060
  'RM-980' => [ 'Nokia', 'X', DeviceType::MOBILE, Flag::NOKIAX ],
@@ -11184,10 +11631,35 @@ DeviceModels::$ANDROID_MODELS = [
11184
  'ONEPLUS A5000' => [ 'OnePlus', '5' ],
11185
  'ONEPLUS A5010' => [ 'OnePlus', '5T' ],
11186
  'ONEPLUS A6000' => [ 'OnePlus', '6' ],
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
11187
  'ONE E1000' => [ 'OnePlus', 'X' ],
11188
  'ONE E1001' => [ 'OnePlus', 'X' ],
11189
  'ONE E1003' => [ 'OnePlus', 'X' ],
11190
  'ONE E1005' => [ 'OnePlus', 'X' ],
 
 
 
 
 
 
 
 
 
 
11191
  'ONDA MID' => [ 'Onda', 'MID', DeviceType::TABLET ],
11192
  'ONDA A9 Core4' => [ 'Onda', 'A9 Quad Core', DeviceType::TABLET ],
11193
  'ONDA VI10' => [ 'Onda', 'VI10', DeviceType::TABLET ],
@@ -11228,6 +11700,19 @@ DeviceModels::$ANDROID_MODELS = [
11228
  'N2T' => [ 'ONN', 'N2T', DeviceType::TABLET ],
11229
  'Renesas!' => [ 'Opad', 'Renesas', DeviceType::TABLET ],
11230
  'A11w' => [ 'Oppo', 'Joy 3' ],
 
 
 
 
 
 
 
 
 
 
 
 
 
11231
  'OPPO A30' => [ 'Oppo', 'A30' ],
11232
  'A31' => [ 'Oppo', 'A31' ],
11233
  'OPPO A31' => [ 'Oppo', 'A31' ],
@@ -11235,6 +11720,7 @@ DeviceModels::$ANDROID_MODELS = [
11235
  'A31c' => [ 'Oppo', 'A31c' ],
11236
  'A31t' => [ 'Oppo', 'A31t' ],
11237
  'OPPO A31t' => [ 'Oppo', 'A31t' ],
 
11238
  'OPPO A33' => [ 'Oppo', 'A33' ],
11239
  'A33f' => [ 'Oppo', 'A33f' ],
11240
  'OPPO A33m' => [ 'Oppo', 'A33m' ],
@@ -11243,9 +11729,11 @@ DeviceModels::$ANDROID_MODELS = [
11243
  'A37fw' => [ 'Oppo', 'A37fw' ],
11244
  'OPPO A37m' => [ 'Oppo', 'A37m' ],
11245
  'CPH1605' => [ 'Oppo', 'A39' ],
 
11246
  'A51f' => [ 'Oppo', 'A51f' ],
11247
  'OPPO A53' => [ 'Oppo', 'A53' ],
11248
  'OPPO A53m' => [ 'Oppo', 'A53m' ],
 
11249
  'CPH1701' => [ 'Oppo', 'A57' ],
11250
  'OPPO A57' => [ 'Oppo', 'A57' ],
11251
  'OPPO A57t' => [ 'Oppo', 'A57t' ],
@@ -11253,8 +11741,19 @@ DeviceModels::$ANDROID_MODELS = [
11253
  'OPPO A59s' => [ 'Oppo', 'A59s' ],
11254
  'OPPO A59st' => [ 'Oppo', 'A59st' ],
11255
  'CPH1717' => [ 'Oppo', 'A71' ],
 
 
 
 
11256
  'OPPO A77' => [ 'Oppo', 'A77' ],
11257
  'OPPO A77t' => [ 'Oppo', 'A77t' ],
 
 
 
 
 
 
 
11258
  'OPPO A800' => [ 'Oppo', 'A800' ],
11259
  'A1603' => [ 'Oppo', 'C1' ],
11260
  'F1f' => [ 'Oppo', 'F1f' ],
@@ -11263,6 +11762,65 @@ DeviceModels::$ANDROID_MODELS = [
11263
  'CPH1609' => [ 'Oppo', 'F3' ],
11264
  'CPH1613' => [ 'Oppo', 'F3 Plus' ],
11265
  'CPH1723' => [ 'Oppo', 'F5' ],
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
11266
  'Find 5' => [ 'Oppo', 'Find 5' ],
11267
  'X903' => [ 'Oppo', 'Find Me X903' ],
11268
  'X903S' => [ 'Oppo', 'Find X903S' ],
@@ -11279,6 +11837,7 @@ DeviceModels::$ANDROID_MODELS = [
11279
  'X9000' => [ 'Oppo', 'Find 7a X9000' ],
11280
  'X9006' => [ 'Oppo', 'Find 7a X9006' ],
11281
  'X9007' => [ 'Oppo', 'Find 7a X9007' ],
 
11282
  'X9009' => [ 'Oppo', 'F1 Plus X9009' ],
11283
  'X9015' => [ 'Oppo', 'Find X9015' ],
11284
  'OPPOX9015' => [ 'Oppo', 'Find X9015' ],
@@ -11380,10 +11939,18 @@ DeviceModels::$ANDROID_MODELS = [
11380
  'OPPOU7015' => [ 'Oppo', 'Find Way U7015' ],
11381
  'U7015' => [ 'Oppo', 'Find Way U7015' ],
11382
  'A51w' => [ 'Oppo', 'Mirror 5' ],
 
 
 
 
11383
  'OPPO N1' => [ 'Oppo', 'N1' ],
11384
  'N51(10|11|16|17)!' => [ 'Oppo', 'N1 mini' ],
11385
  'N52(06|07|09)!' => [ 'Oppo', 'N3' ],
 
 
11386
  'OPPO R7' => [ 'Oppo', 'R7' ],
 
 
11387
  'R7f' => [ 'Oppo', 'R7f' ],
11388
  'R7i' => [ 'Oppo', 'R7i' ],
11389
  'R7kf' => [ 'Oppo', 'R7kf' ],
@@ -11392,15 +11959,19 @@ DeviceModels::$ANDROID_MODELS = [
11392
  'OPPO R7sm' => [ 'Oppo', 'R7sm' ],
11393
  'OPPO R7st' => [ 'Oppo', 'R7st' ],
11394
  'OPPO R7t' => [ 'Oppo', 'R7t' ],
 
 
11395
  'OPPO R9m' => [ 'Oppo', 'R9m' ],
11396
  'OPPO R9tm' => [ 'Oppo', 'R9tm' ],
11397
  'OPPO R9km' => [ 'Oppo', 'R9km' ],
11398
  'OPPO R9s' => [ 'Oppo', 'R9s' ],
11399
  'OPPO R9sk' => [ 'Oppo', 'R9sk' ],
11400
  'OPPO R9st' => [ 'Oppo', 'R9st' ],
 
11401
  'OPPO R9t' => [ 'Oppo', 'R9t' ],
11402
  'OPPO R9tm' => [ 'Oppo', 'R9tm' ],
11403
  'OPPO R11' => [ 'Oppo', 'R11' ],
 
11404
  'OPPO R11t' => [ 'Oppo', 'R11t' ],
11405
  'OPPO R7 Plus' => [ 'Oppo', 'R7 Plus' ],
11406
  'R7Plus' => [ 'Oppo', 'R7 Plus' ],
@@ -11411,14 +11982,41 @@ DeviceModels::$ANDROID_MODELS = [
11411
  'OPPO R9 Plustm A' => [ 'Oppo', 'R9 Plus' ],
11412
  'CPH1611' => [ 'Oppo', 'R9s Plus' ],
11413
  'OPPO R9s Plus' => [ 'Oppo', 'R9s Plus' ],
 
11414
  'OPPO R11 Plus' => [ 'Oppo', 'R11 Plus' ],
11415
- 'OPPO R11 Plusk' => [ 'Oppo', 'R11 Plus' ],
11416
- 'OPPO R11 Pluskt' => [ 'Oppo', 'R11 Plus' ],
 
11417
  'OPPO R11s Plus' => [ 'Oppo', 'R11s Plus' ],
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
11418
  'W8' => [ 'Oppo', 'W8' ],
 
11419
  '1105' => [ 'Oppo', '1105' ],
11420
  '1107' => [ 'Oppo', '1107' ],
11421
  'OB-OPPO 3005' => [ 'Oppo', '3005' ],
 
 
 
 
 
 
 
 
 
11422
 
11423
  'OPSSON!!' => [
11424
  'OPSSON D1' => [ 'Opsson', 'D1' ],
@@ -11446,6 +12044,10 @@ DeviceModels::$ANDROID_MODELS = [
11446
  'Bucare Y330-U05' => [ 'Orinoquia', 'Bucare Y330' ],
11447
  'Kavak Y625-U03' => [ 'Orinoquia', 'Kavak Y625' ],
11448
 
 
 
 
 
11449
  'K10000 Pro' => [ 'Oukitel', 'K10000 Pro' ],
11450
 
11451
  '(OV-|Overmax|Vertis)!!' => [
@@ -11474,6 +12076,7 @@ DeviceModels::$ANDROID_MODELS = [
11474
  'Vertis Famy' => [ 'Overmax', 'Vertis Famy' ],
11475
  ],
11476
 
 
11477
  'Arctic450' => [ 'Oysters', 'Arctic 450' ],
11478
  'Oysters Pacific 800' => [ 'Oysters', 'Pacific 800' ],
11479
  'Oysters T3 3G' => [ 'Oysters', 'T3' ],
@@ -12584,6 +13187,10 @@ DeviceModels::$ANDROID_MODELS = [
12584
  ],
12585
 
12586
  'RoverPad 3W T71D' => [ 'RoverPad', '3W T71D', DeviceType::TABLET ],
 
 
 
 
12587
 
12588
  'Snexian!!' => [
12589
  'Snexian Mi320' => [ 'S Nexian', 'Chronos Mi320' ],
@@ -13014,27 +13621,75 @@ DeviceModels::$ANDROID_MODELS = [
13014
  'SMT-i9100' => [ 'Samsung', 'Galaxy Tab 7.0', DeviceType::TABLET ],
13015
 
13016
  'SM-A[0-9]{3,3}!!' => [
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
13017
  'SM-A300!' => [ 'Samsung', 'Galaxy A3' ],
 
 
13018
  'SM-A310!' => [ 'Samsung', 'Galaxy A3 (2016)' ],
 
13019
  'SM-A320!' => [ 'Samsung', 'Galaxy A3 (2017)' ],
 
 
 
 
 
13020
  'SM-A430!' => [ 'Samsung', 'Galaxy A4' ],
13021
  'SM-A450!' => [ 'Samsung', 'Galaxy A4 (2017)' ],
 
13022
  'SM-A500!' => [ 'Samsung', 'Galaxy A5' ],
 
 
13023
  'SM-A510!' => [ 'Samsung', 'Galaxy A5 (2016)' ],
 
 
13024
  'SM-A520!' => [ 'Samsung', 'Galaxy A5 (2017)' ],
 
 
 
13025
  'SM-A530!' => [ 'Samsung', 'Galaxy A8 (2018)' ],
 
13026
  'SM-A600!' => [ 'Samsung', 'Galaxy A6 (2018)' ],
13027
  'SM-A6050!' => [ 'Samsung', 'Galaxy A9 Star Lite' ],
13028
  'SM-A605!' => [ 'Samsung', 'Galaxy A6+ (2018)' ],
 
13029
  'SM-A700!' => [ 'Samsung', 'Galaxy A7' ],
 
13030
  'SM-A710!' => [ 'Samsung', 'Galaxy A7 (2016)' ],
 
 
13031
  'SM-A720!' => [ 'Samsung', 'Galaxy A7 (2017)' ],
 
13032
  'SM-A730!' => [ 'Samsung', 'Galaxy A8+ (2018)' ],
 
13033
  'SM-A800!' => [ 'Samsung', 'Galaxy A8' ],
 
13034
  'SM-A810!' => [ 'Samsung', 'Galaxy A8 (2016)' ],
13035
  'SM-A850!' => [ 'Samsung', 'Galaxy Alpha' ],
13036
  'SM-A900!' => [ 'Samsung', 'Galaxy A9 (2016)' ],
 
13037
  'SM-A910!' => [ 'Samsung', 'Galaxy A9 Pro' ],
 
13038
  ],
13039
 
13040
  'SM-C[0-9]{3,3}!!' => [
@@ -13053,6 +13708,18 @@ DeviceModels::$ANDROID_MODELS = [
13053
  'SM-E700!' => [ 'Samsung', 'Galaxy E7' ],
13054
  ],
13055
 
 
 
 
 
 
 
 
 
 
 
 
 
13056
  'SM-G[0-9]{3,3}!!' => [
13057
  'SM-G110!' => [ 'Samsung', 'Galaxy Pocket 2' ],
13058
  'SM-G130BT' => [ 'Samsung', 'Galaxy Young 2' ],
@@ -13093,11 +13760,13 @@ DeviceModels::$ANDROID_MODELS = [
13093
  'SM-G388!' => [ 'Samsung', 'Galaxy Xcover 3' ],
13094
  'SM-G389!' => [ 'Samsung', 'Galaxy Xcover 3 VE' ],
13095
  'SM-G390!' => [ 'Samsung', 'Galaxy Xcover 4' ],
 
13096
  'SM-G420!' => [ 'Samsung', 'SM-G420' ], // Unknown
13097
  'SM-G430!' => [ 'Samsung', 'SM-G430' ], // Unknown
13098
  'SM-G480!' => [ 'Samsung', 'Galaxy S8' ],
13099
  'SM-G485!' => [ 'Samsung', 'Galaxy S8+' ],
13100
  'SM-G510!' => [ 'Samsung', 'Galaxy Core Max' ],
 
13101
  'SM-G530!' => [ 'Samsung', 'Galaxy Grand Prime' ],
13102
  'SM-G531!' => [ 'Samsung', 'Galaxy Grand Prime VE' ],
13103
  'SM-G532!' => [ 'Samsung', 'Galaxy Grand Prime+' ],
@@ -13110,17 +13779,23 @@ DeviceModels::$ANDROID_MODELS = [
13110
  'SM-G615!' => [ 'Samsung', 'Galaxy J7 Max' ],
13111
  'SM-G620!' => [ 'Samsung', 'Galaxy J7 Prime (2018)' ],
13112
  'SM-G710!' => [ 'Samsung', 'Galaxy Grand 2' ],
 
13113
  'SM-G720!' => [ 'Samsung', 'Galaxy Grand 3' ],
13114
  'SM-G730!' => [ 'Samsung', 'Galaxy S III Mini' ],
13115
  'SM-G750!' => [ 'Samsung', 'Galaxy Mega 2 ' ],
13116
- 'SM-G770!' => [ 'Samsung', 'Galaxy On7' ],
 
 
13117
  'SM-G800!' => [ 'Samsung', 'Galaxy S5 Mini' ],
13118
  'SM-G850!' => [ 'Samsung', 'Galaxy Alpha' ],
13119
  'SM-G860!' => [ 'Samsung', 'Galaxy S5 Sport' ],
13120
  'SM-G870!' => [ 'Samsung', 'Galaxy S5 Active' ],
 
13121
  'SM-G880!' => [ 'Samsung', 'Galaxy S7 mini' ],
13122
- 'SM-G885Y!' => [ 'Samsung', 'Galaxy A8 Star' ],
13123
  'SM-G8850!' => [ 'Samsung', 'Galaxy A9 Star' ],
 
 
13124
  'SM-G890!' => [ 'Samsung', 'Galaxy S6 Active' ],
13125
  'SM-G891!' => [ 'Samsung', 'Galaxy S7 Active' ],
13126
  'SM-G892!' => [ 'Samsung', 'Galaxy S8 Active' ],
@@ -13141,6 +13816,19 @@ DeviceModels::$ANDROID_MODELS = [
13141
  'SM-G955!' => [ 'Samsung', 'Galaxy S8+' ],
13142
  'SM-G960!' => [ 'Samsung', 'Galaxy S9' ],
13143
  'SM-G965!' => [ 'Samsung', 'Galaxy S9+' ],
 
 
 
 
 
 
 
 
 
 
 
 
 
13144
  ],
13145
 
13146
  'SM-I9500' => [ 'Samsung', 'Galaxy S4' ],
@@ -13154,6 +13842,7 @@ DeviceModels::$ANDROID_MODELS = [
13154
  'SM-J200!' => [ 'Samsung', 'Galaxy J2' ],
13155
  'SM-J210!' => [ 'Samsung', 'Galaxy J2 (2016)' ],
13156
  'SM-J250!' => [ 'Samsung', 'Galaxy J2 (2018)' ],
 
13157
  'SM-J3(10|20)!' => [ 'Samsung', 'Galaxy J3' ],
13158
  'SM-J311!' => [ 'Samsung', 'Galaxy J3 (2016)' ],
13159
  'SM-J321!' => [ 'Samsung', 'Galaxy Sol' ],
@@ -13161,12 +13850,18 @@ DeviceModels::$ANDROID_MODELS = [
13161
  'SM-J327!' => [ 'Samsung', 'Galaxy J3 Emerge' ],
13162
  'SM-J330!' => [ 'Samsung', 'Galaxy J3 (2017)' ],
13163
  'SM-J337!' => [ 'Samsung', 'Galaxy J3 (2018)' ],
 
 
 
13164
  'SM-J500!' => [ 'Samsung', 'Galaxy J5' ],
13165
  'SM-J510!' => [ 'Samsung', 'Galaxy J5 (2016)' ],
13166
  'SM-J530!' => [ 'Samsung', 'Galaxy J5 (2017)' ],
 
 
13167
  'SM-J700!' => [ 'Samsung', 'Galaxy J7' ],
13168
  'SM-J701!' => [ 'Samsung', 'Galaxy J7 Core' ],
13169
  'SM-J710!' => [ 'Samsung', 'Galaxy J7 (2016)' ],
 
13170
  'SM-J727!' => [ 'Samsung', 'Galaxy J7 Perx' ],
13171
  'SM-J730!' => [ 'Samsung', 'Galaxy J7 (2017)' ],
13172
  'SM-J737!' => [ 'Samsung', 'Galaxy Wide 3' ],
@@ -13175,9 +13870,26 @@ DeviceModels::$ANDROID_MODELS = [
13175
  'SM-J900!' => [ 'Samsung', 'Galaxy J9' ],
13176
  ],
13177
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
13178
  'SM-N[0-9]{3,4}!!' => [
13179
  'SM-N750[025789][QV]?!' => [ 'Samsung', 'Galaxy Note 3 Neo' ],
13180
  'SM-N750[LS]?!' => [ 'Samsung', 'Galaxy Note 3 Neo' ],
 
13181
  'SM-N8000' => [ 'Samsung', 'Galaxy Note 800', DeviceType::TABLET ],
13182
  'SM-N900[0256789]?!' => [ 'Samsung', 'Galaxy Note 3' ],
13183
  'SM-N900!' => [ 'Samsung', 'Galaxy Note 3' ],
@@ -13189,6 +13901,12 @@ DeviceModels::$ANDROID_MODELS = [
13189
  'SM-N935!' => [ 'Samsung', 'Galaxy Note FE' ],
13190
  'SM-N95[05]!' => [ 'Samsung', 'Galaxy Note 8' ],
13191
  'SM-N960!' => [ 'Samsung', 'Galaxy Note 9' ],
 
 
 
 
 
 
13192
  ],
13193
 
13194
  'SM-P[0-9]{3,3}!!' => [
@@ -13196,6 +13914,7 @@ DeviceModels::$ANDROID_MODELS = [
13196
  'SM-P55[015]!' => [ 'Samsung', 'Galaxy Tab A Plus 9.7', DeviceType::TABLET ],
13197
  'SM-P58[058]!' => [ 'Samsung', 'Galaxy Tab A 10.1 with S Pen (2016)', DeviceType::TABLET ],
13198
  'SM-P60[01257]!' => [ 'Samsung', 'Galaxy Note 10.1 (2014)', DeviceType::TABLET ],
 
13199
  'SM-P90[01257]!' => [ 'Samsung', 'Galaxy Note Pro', DeviceType::TABLET ],
13200
  ],
13201
 
@@ -13204,19 +13923,25 @@ DeviceModels::$ANDROID_MODELS = [
13204
  'SM-S320VL' => [ 'Samsung', 'Galaxy Sky' ],
13205
  'SM-S327VL' => [ 'Samsung', 'Galaxy J3 Luna Pro' ],
13206
  'SM-S337TL' => [ 'Samsung', 'Galaxy J3 Luna Pro' ],
 
13207
  'SM-S550TL' => [ 'Samsung', 'Galaxy On5' ],
13208
  'SM-S727VL' => [ 'Samsung', 'Galaxy J7 Sky Pro' ],
13209
  'SM-S737TL' => [ 'Samsung', 'Galaxy J7 Sky Pro' ],
 
13210
  'SM-S765C' => [ 'Samsung', 'Galaxy Ace Style' ],
13211
  'SM-S766C' => [ 'Samsung', 'Galaxy Stardust' ],
 
13212
  'SM-S777C' => [ 'Samsung', 'Galaxy J1' ],
13213
  'SM-S780L' => [ 'Samsung', 'Galaxy Mega 6.3' ],
13214
  'SM-S820L' => [ 'Samsung', 'Galaxy Core Prime' ],
13215
  'SM-S890L' => [ 'Samsung', 'Galaxy S4 Mini' ],
 
13216
  'SM-S902L' => [ 'Samsung', 'Galaxy S5' ],
13217
  'SM-S903VL' => [ 'Samsung', 'Galaxy S5' ],
13218
  'SM-S906L' => [ 'Samsung', 'Galaxy S6' ],
 
13219
  'SM-S907VL' => [ 'Samsung', 'Galaxy S6' ],
 
13220
  'SM-S920L' => [ 'Samsung', 'Galaxy Grand Prime' ],
13221
  'SM-S975L' => [ 'Samsung', 'Galaxy S4' ],
13222
  'SM-S978L' => [ 'Samsung', 'Galaxy E5' ],
@@ -13227,10 +13952,13 @@ DeviceModels::$ANDROID_MODELS = [
13227
  'SM-T11[36]!' => [ 'Samsung', 'Galaxy Tab 3V 7.0', DeviceType::TABLET ],
13228
  'SM-T2105' => [ 'Samsung', 'Galaxy Tab 3 Kids', DeviceType::TABLET ],
13229
  'SM-T21[01257]!' => [ 'Samsung', 'Galaxy Tab 3 7.0', DeviceType::TABLET ],
 
13230
  'SM-T2519' => [ 'Samsung', 'Galaxy Tab Q' ],
13231
  'SM-T255[68S]!' => [ 'Samsung', 'Galaxy Tab Q' ],
13232
  'SM-T23[012579]!' => [ 'Samsung', 'Galaxy Tab 4 7.0', DeviceType::TABLET ],
13233
  'SM-T28[057]!' => [ 'Samsung', 'Galaxy Tab A 7.0', DeviceType::TABLET ],
 
 
13234
  'SM-T31[0125]!' => [ 'Samsung', 'Galaxy Tab 3 8.0', DeviceType::TABLET ],
13235
  'SM-T32[0125]!' => [ 'Samsung', 'Galaxy Tab Pro 8.4', DeviceType::TABLET ],
13236
  'SM-T33[01257]!' => [ 'Samsung', 'Galaxy Tab 4 8.0', DeviceType::TABLET ],
@@ -13239,29 +13967,50 @@ DeviceModels::$ANDROID_MODELS = [
13239
  'SM-T36[05]!' => [ 'Samsung', 'Galaxy Tab Active 8.0', DeviceType::TABLET ],
13240
  'SM-T37[578]!' => [ 'Samsung', 'Galaxy Tab E 8.0', DeviceType::TABLET ],
13241
  'SM-T38[05]!' => [ 'Samsung', 'Galaxy Tab A 8.0 (2017)', DeviceType::TABLET ],
13242
- 'SM-T39[5]!' => [ 'Samsung', 'Galaxy Tab Active2 8.0', DeviceType::TABLET ],
 
 
 
13243
  'SM-T520CC' => [ 'Samsung', 'Galaxy Tab Pro 10.1 Chef Collection', DeviceType::TABLET ],
13244
  'SM-T52[057]!' => [ 'Samsung', 'Galaxy Tab Pro 10.1', DeviceType::TABLET ],
13245
  'SM-T530NU' => [ 'Samsung', 'Galaxy Tab 4 Nook 10.1', DeviceType::TABLET ],
13246
  'SM-T53[023]!' => [ 'Samsung', 'Galaxy Tab 4 10.1', DeviceType::TABLET ],
13247
  'SM-T53[6]!' => [ 'Samsung', 'Galaxy Tab 4 10.1 Advanced', DeviceType::TABLET ],
13248
  'SM-T53[157]!' => [ 'Samsung', 'Galaxy Tab 4 10.0', DeviceType::TABLET ],
 
13249
  'SM-T55[015]!' => [ 'Samsung', 'Galaxy Tab A 9.7', DeviceType::TABLET ],
 
13250
  'SM-T58[057]!' => [ 'Samsung', 'Galaxy Tab A 10.1 (2016)', DeviceType::TABLET ],
 
13251
  'SM-T56[0127]!' => [ 'Samsung', 'Galaxy Tab E 9.6', DeviceType::TABLET ],
 
13252
  'SM-T67[07]!' => [ 'Samsung', 'Galaxy View', DeviceType::TABLET ],
13253
  'SM-T70[057]!' => [ 'Samsung', 'Galaxy Tab S 8.4', DeviceType::TABLET ],
13254
  'SM-T71[05]!' => [ 'Samsung', 'Galaxy Tab S2 8.0', DeviceType::TABLET ],
13255
  'SM-T71[39]!' => [ 'Samsung', 'Galaxy Tab S2 8.0 (2016)', DeviceType::TABLET ],
 
 
13256
  'SM-T80[0157]!' => [ 'Samsung', 'Galaxy Tab S 10.5', DeviceType::TABLET ],
13257
  'SM-T81[057]!' => [ 'Samsung', 'Galaxy Tab S2 9.7', DeviceType::TABLET ],
13258
  'SM-T81[39]!' => [ 'Samsung', 'Galaxy Tab S2 9.7 (2016)', DeviceType::TABLET ],
13259
  'SM-T81[8]!' => [ 'Samsung', 'Galaxy Tab S2 Plus 9.7', DeviceType::TABLET ],
13260
  'SM-T82[057]!' => [ 'Samsung', 'Galaxy Tab S3 9.7', DeviceType::TABLET ],
13261
  'SM-T83[057]!' => [ 'Samsung', 'Galaxy Tab S4 10.5', DeviceType::TABLET ],
 
 
13262
  'SM-T90[05]!' => [ 'Samsung', 'Galaxy Tab Pro 12.2', DeviceType::TABLET ],
 
 
 
13263
  ],
13264
 
 
 
 
 
 
 
 
13265
  'SM-V700' => [ 'Samsung', 'Galaxy Gear', DeviceType::WATCH ],
13266
 
13267
  'SM-W[0-9]{4,4}!!' => [
@@ -13401,6 +14150,8 @@ DeviceModels::$ANDROID_MODELS = [
13401
  'SC-01G' => [ 'Samsung', 'GALAXY Note Edge SC-01G', 'carrier' => 'DoCoMo' ],
13402
  'SC-01H' => [ 'Samsung', 'GALAXY Active neo SC-01H', 'carrier' => 'DoCoMo' ],
13403
  'SC-01K' => [ 'Samsung', 'GALAXY Note 8 SC-01K', 'carrier' => 'DoCoMo' ],
 
 
13404
  'SC-02B' => [ 'Samsung', 'GALAXY S SC-02B', 'carrier' => 'DoCoMo' ],
13405
  'SC-02C' => [ 'Samsung', 'GALAXY S II SC-02C', 'carrier' => 'DoCoMo' ],
13406
  'SC-02D' => [ 'Samsung', 'GALAXY Tab 7.0 Plus SC-02D', DeviceType::TABLET, 'carrier' => 'DoCoMo' ],
@@ -13410,17 +14161,20 @@ DeviceModels::$ANDROID_MODELS = [
13410
  'SC-02H' => [ 'Samsung', 'Galaxy S7 Edge SC-02H', 'carrier' => 'DoCoMo' ],
13411
  'SC-02J' => [ 'Samsung', 'Galaxy S8 SC-02J', 'carrier' => 'DoCoMo' ],
13412
  'SC-02K' => [ 'Samsung', 'Galaxy S9 SC-02K', 'carrier' => 'DoCoMo' ],
 
13413
  'SC-03D' => [ 'Samsung', 'GALAXY S II LTE SC-03D', 'carrier' => 'DoCoMo' ],
13414
  'SC-03E' => [ 'Samsung', 'GALAXY S III α SC-03E', 'carrier' => 'DoCoMo' ],
13415
  'SC03E' => [ 'Samsung', 'GALAXY S III α SC-03E', 'carrier' => 'DoCoMo' ],
13416
  'SC-03G' => [ 'Samsung', 'GALAXY Tab S 8.4 SC-03G', DeviceType::TABLET, 'carrier' => 'DoCoMo' ],
13417
  'SC-03J' => [ 'Samsung', 'GALAXY S8+ SC-03J', 'carrier' => 'DoCoMo' ],
13418
  'SC-03K' => [ 'Samsung', 'GALAXY S9+ SC-03K', 'carrier' => 'DoCoMo' ],
 
13419
  'SC-04D' => [ 'Samsung', 'GALAXY NEXUS SC-04D', 'carrier' => 'DoCoMo' ],
13420
  'SC-04E' => [ 'Samsung', 'GALAXY S4 SC-04E', 'carrier' => 'DoCoMo' ],
13421
  'SC-04F' => [ 'Samsung', 'GALAXY S5 SC-04F', 'carrier' => 'DoCoMo' ],
13422
  'SC-04G' => [ 'Samsung', 'GALAXY S6 Edge SC-04G', 'carrier' => 'DoCoMo' ],
13423
  'SC-04J' => [ 'Samsung', 'GALAXY Feel SC-04J', 'carrier' => 'DoCoMo' ],
 
13424
  'SC-05D' => [ 'Samsung', 'GALAXY Note SC-05D', 'carrier' => 'DoCoMo' ],
13425
  'SC-05G' => [ 'Samsung', 'GALAXY S6 SC-05G', 'carrier' => 'DoCoMo' ],
13426
  'SC-06D' => [ 'Samsung', 'GALAXY S III SC-06D', 'carrier' => 'DoCoMo' ],
@@ -13435,9 +14189,14 @@ DeviceModels::$ANDROID_MODELS = [
13435
  'SCV31' => [ 'Samsung', 'GALAXY S6 Edge SCV31', 'carrier' => 'au' ],
13436
  'SCV32' => [ 'Samsung', 'GALAXY A8 SCV32', 'carrier' => 'au' ],
13437
  'SCV33' => [ 'Samsung', 'GALAXY S7 edge Injustice Edition SCV33', 'carrier' => 'au' ],
 
13438
  'SCV35' => [ 'Samsung', 'GALAXY S8+ SCV35', 'carrier' => 'au' ],
13439
  'SCV36' => [ 'Samsung', 'GALAXY S8 SCV36', 'carrier' => 'au' ],
13440
  'SCV37' => [ 'Samsung', 'GALAXY Note8 SCV37', 'carrier' => 'au' ],
 
 
 
 
13441
  ],
13442
 
13443
  'ISW11SC' => [ 'Samsung', 'GALAXY S II WiMAX ISW11SC', 'carrier' => 'au' ],
@@ -13545,6 +14304,8 @@ DeviceModels::$ANDROID_MODELS = [
13545
  'EB-L76G-B' => [ 'Sharp', 'EB-L76G-B', DeviceType::TABLET ],
13546
  'RW107' => [ 'Sharp', 'RW-T107', DeviceType::TABLET ],
13547
 
 
 
13548
  'SBM[0-9]0[0-9]SH!!' => [
13549
  'SBM003SH' => [ 'Sharp', 'GALAPAGOS 003SH', 'carrier' => 'Softbank' ],
13550
  'SBM005SH' => [ 'Sharp', 'GALAPAGOS 005SH', 'carrier' => 'Softbank' ],
@@ -13589,12 +14350,17 @@ DeviceModels::$ANDROID_MODELS = [
13589
  'DM-01H' => [ 'Sharp', 'DM-01H', 'carrier' => 'Disney Mobile' ],
13590
  'DM-01J' => [ 'Sharp', 'DM-01J', 'carrier' => 'Disney Mobile' ],
13591
 
 
 
 
13592
  'SH-M01' => [ 'Sharp', 'AQUOS SH-M01' ],
13593
  'SH-M02' => [ 'Sharp', 'AQUOS SH-M02' ],
13594
  'SH-M02-EVA20' => [ 'Sharp', 'AQUOS SH-M02' ],
13595
  'SH-M03' => [ 'Sharp', 'AQUOS mini SH-M03' ],
 
13596
  'SH-M07' => [ 'Sharp', 'AQUOS sense plus SH-M07' ],
13597
  'SH-RM02' => [ 'Sharp', 'AQUOS SH-RM02' ],
 
13598
 
13599
  'SH-[01][0-9][A-Z]!!' => [
13600
  'SH-01D' => [ 'Sharp', 'AQUOS PHONE SH-01D', 'carrier' => 'DoCoMo' ],
@@ -13606,6 +14372,7 @@ DeviceModels::$ANDROID_MODELS = [
13606
  'SH-01H' => [ 'Sharp', 'AQUOS PHONE ZETA SH-01H', 'carrier' => 'DoCoMo' ],
13607
  'SH-01J' => [ 'Sharp', 'AQUOS ケータイ SH-01J', 'carrier' => 'DoCoMo' ],
13608
  'SH-01K' => [ 'Sharp', 'AQUOS sense SH-01K', 'carrier' => 'DoCoMo' ],
 
13609
  'SH-02D' => [ 'Sharp', 'AQUOS PHONE slider SH-02D', 'carrier' => 'DoCoMo' ],
13610
  'SH-02E' => [ 'Sharp', 'AQUOS PHONE ZETA SH-02E', 'carrier' => 'DoCoMo' ],
13611
  'SH-02F' => [ 'Sharp', 'AQUOS PHONE EX SH-02F', 'carrier' => 'DoCoMo' ],
@@ -13694,9 +14461,11 @@ DeviceModels::$ANDROID_MODELS = [
13694
  'SHV35' => [ 'Sharp', 'AQUOS U SHV35', 'carrier' => 'au' ],
13695
  'SHV36' => [ 'Sharp', 'BASIO2 SHV36', 'carrier' => 'au' ],
13696
  'SHV37' => [ 'Sharp', 'AQUOS U SHV37', 'carrier' => 'au' ],
 
13697
  'SHV38' => [ 'Sharp', 'AQUOS SERIE mini SHV38', 'carrier' => 'au' ],
13698
  'SHV39' => [ 'Sharp', 'AQUOS R SHV39', 'carrier' => 'au' ],
13699
  'SHV40' => [ 'Sharp', 'AQUOS sense SHV40', 'carrier' => 'au' ],
 
13700
  'SHV41' => [ 'Sharp', 'AQUOS R compact SHV41', 'carrier' => 'au' ],
13701
  'SHV42' => [ 'Sharp', 'AQUOS R2 SHV42', 'carrier' => 'au' ],
13702
  ],
@@ -13723,6 +14492,8 @@ DeviceModels::$ANDROID_MODELS = [
13723
  'LC-((A|S|LX)[0-9]{1,3}[A-Z])!' => [ 'Sharp', 'Aquos $1', DeviceType::TELEVISION ],
13724
  'LCD-((S|V|LX|UF)[0-9]{1,3}[A-Z])!' => [ 'Sharp', 'Aquos $1', DeviceType::TELEVISION ],
13725
 
 
 
13726
  'X-treme PQ11' => [ 'Sigma Mobile', 'X-treme PQ11' ],
13727
  'X-treme PQ15' => [ 'Sigma Mobile', 'X-treme PQ15' ],
13728
  'X-tremePQ22' => [ 'Sigma Mobile', 'X-treme PQ22' ],
@@ -13736,6 +14507,7 @@ DeviceModels::$ANDROID_MODELS = [
13736
  'SPX-6' => [ 'Simvalley', 'SPX-6' ],
13737
  'SPX-12' => [ 'Simvalley', 'SPX-12' ],
13738
  'X720' => [ 'Simmtronics', 'XPAD X-720', DeviceType::TABLET ],
 
13739
  'HYPER X BLADE' => [ 'SKK Mobile', 'Hyper X Blade' ],
13740
 
13741
  'Elite 5.5L+' => [ 'Sky Devices', 'Elite 5.5L+' ],
@@ -13861,6 +14633,8 @@ DeviceModels::$ANDROID_MODELS = [
13861
  'sonim/XP7700' => [ 'Sonim', 'XP7700' ],
13862
  ],
13863
 
 
 
13864
  'OMS1 6' => [ 'Sony Ericsson', 'A8i' ],
13865
 
13866
  'C[0-9]{4,4}!!' => [
@@ -13938,7 +14712,7 @@ DeviceModels::$ANDROID_MODELS = [
13938
  ],
13939
 
13940
  'G[0-9]{4,4}!!' => [
13941
- 'G31(12|16|21|23|25)!' => [ 'Sony', 'Xperia XA1' ],
13942
  'G32(12|21|23|26)!' => [ 'Sony', 'Xperia XA1 Ultra' ],
13943
  'G33(11|12|13)!' => [ 'Sony', 'Xperia L1' ],
13944
  'G34(12|16|21|23|26)!' => [ 'Sony', 'Xperia XA1 Plus' ],
@@ -13949,8 +14723,49 @@ DeviceModels::$ANDROID_MODELS = [
13949
  ],
13950
 
13951
  'H[0-9]{4,4}!!' => [
13952
- 'H42(33)!' => [ 'Sony', 'Xperia XA2 Ultra' ],
13953
- ],
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
13954
 
13955
  'E[0-9]{2,2}[a-z]!!' => [
13956
  'E10(a|i|iv)!' => [ 'Sony Ericsson', 'Xperia X10 Mini' ], // Robyn
@@ -14056,6 +14871,7 @@ DeviceModels::$ANDROID_MODELS = [
14056
  'SO-01H' => [ 'Sony', 'Xperia Z5 SO-01H', 'carrier' => 'DoCoMo' ], // ...
14057
  'SO-01J' => [ 'Sony', 'Xperia XZ SO-01J', 'carrier' => 'DoCoMo' ], // ...
14058
  'SO-01K' => [ 'Sony', 'Xperia XZ1 SO-01K', 'carrier' => 'DoCoMo' ], // ...
 
14059
  'SO-02C' => [ 'Sony Ericsson', 'Xperia acro SO-02C', 'carrier' => 'DoCoMo' ], // Azusa
14060
  'SO-02D' => [ 'Sony Ericsson', 'Xperia NX SO-02D', 'carrier' => 'DoCoMo' ], // Nozomi
14061
  'SO-02E' => [ 'Sony', 'Xperia Z SO-02E', 'carrier' => 'DoCoMo' ], // Yuga
@@ -14072,6 +14888,7 @@ DeviceModels::$ANDROID_MODELS = [
14072
  'SO-03H' => [ 'Sony', 'Xperia Z5 Premium SO-03H', 'carrier' => 'DoCoMo' ],
14073
  'SO-03J' => [ 'Sony', 'Xperia XZs SO-03J', 'carrier' => 'DoCoMo' ],
14074
  'SO-03K' => [ 'Sony', 'Xperia XZ2 SO-03K', 'carrier' => 'DoCoMo' ],
 
14075
  'SO-04D' => [ 'Sony', 'Xperia GX SO-04D', 'carrier' => 'DoCoMo' ], // Hayabusa
14076
  'SO-04E' => [ 'Sony', 'Xperia A SO-04E', 'carrier' => 'DoCoMo' ], // Dogo
14077
  'SO-04EM' => [ 'Sony', 'Xperia feat. HATSUNE MIKU SO-04E', 'carrier' => 'DoCoMo' ],
@@ -14079,6 +14896,7 @@ DeviceModels::$ANDROID_MODELS = [
14079
  'SO-04G' => [ 'Sony', 'Xperia A4 SO-04G', 'carrier' => 'DoCoMo' ],
14080
  'SO-04H' => [ 'Sony', 'Xperia X Performance SO-04H', 'carrier' => 'DoCoMo' ],
14081
  'SO-04J' => [ 'Sony', 'Xperia XZ Premium SO-04J', 'carrier' => 'DoCoMo' ],
 
14082
  'SO-05D' => [ 'Sony', 'Xperia SX SO-05D', 'carrier' => 'DoCoMo' ], // Komachi
14083
  'SO-05F' => [ 'Sony', 'Xperia Tablet Z2 SO-05F', DeviceType::TABLET, 'carrier' => 'DoCoMo' ], // Castor
14084
  'SO-05G' => [ 'Sony', 'Xperia Tablet Z4 SO-05G', DeviceType::TABLET, 'carrier' => 'DoCoMo' ], // ...
@@ -14101,7 +14919,10 @@ DeviceModels::$ANDROID_MODELS = [
14101
  'SOV34' => [ 'Sony', 'Xperia XZ SOV34', 'carrier' => 'au' ], // ...
14102
  'SOV35' => [ 'Sony', 'Xperia XZs SOV35', 'carrier' => 'au' ], // ...
14103
  'SOV36' => [ 'Sony', 'Xperia XZ1 SOV36', 'carrier' => 'au' ], // ...
14104
- 'SOV37' => [ 'Sony', 'Xperia XZ2 SOV37', 'carrier' => 'au' ], // ...
 
 
 
14105
  ],
14106
 
14107
  '40[0-9]SO!!' => [
@@ -14645,6 +15466,11 @@ DeviceModels::$ANDROID_MODELS = [
14645
 
14646
  'Tabra QAV801' => [ 'Tabra', 'QAV801', DeviceType::TABLET ],
14647
 
 
 
 
 
 
14648
  'TCL!!' => [
14649
  'TCL-309T' => [ 'TCL', '309T' ],
14650
  'TCL-550' => [ 'TCL', '550' ],
@@ -14843,6 +15669,7 @@ DeviceModels::$ANDROID_MODELS = [
14843
  'TECNO-J7' => [ 'Tecno', 'J7' ],
14844
  'TECNO J7' => [ 'Tecno', 'J7' ],
14845
  'TECNO-J8' => [ 'Tecno', 'J8' ],
 
14846
  'TECNO L3' => [ 'Tecno', 'L3' ],
14847
  'TECNO-L5' => [ 'Tecno', 'L5' ],
14848
  'TECNO L6' => [ 'Tecno', 'L6' ],
@@ -14946,6 +15773,8 @@ DeviceModels::$ANDROID_MODELS = [
14946
  'G18mini(C5B9)' => [ 'Teclast', 'G18 mini', DeviceType::TABLET ],
14947
  'G18d 3G四核(D3A2)' => [ 'Teclast', 'G18d', DeviceType::TABLET ],
14948
  'G18d mini(FV2C)' => [ 'Teclast', 'G18d mini', DeviceType::TABLET ],
 
 
14949
  'P10HD??(E6NA)' => [ 'Teclast', 'P10HD', DeviceType::TABLET ],
14950
  'P11HD' => [ 'Teclast', 'P11HD', DeviceType::TABLET ],
14951
  'P11HD四核(G9X6)' => [ 'Teclast', 'P11HD', DeviceType::TABLET ],
@@ -14953,6 +15782,7 @@ DeviceModels::$ANDROID_MODELS = [
14953
  'P11HD四核(G9X7)' => [ 'Teclast', 'P11HD', DeviceType::TABLET ],
14954
  'P19HD(E1K3)' => [ 'Teclast', 'P19HD', DeviceType::TABLET ],
14955
  'P19HD(E1K5)' => [ 'Teclast', 'P19HD', DeviceType::TABLET ],
 
14956
  'P70 3G八核(C2B7)' => [ 'Teclast', 'P70 3G', DeviceType::TABLET ],
14957
  'P70h(A5C2)' => [ 'Teclast', 'P70h', DeviceType::TABLET ],
14958
  'P72' => [ 'Teclast', 'P72', DeviceType::TABLET ],
@@ -15124,6 +15954,7 @@ DeviceModels::$ANDROID_MODELS = [
15124
  'Telpad QS' => [ 'Telpad', 'Quad S', DeviceType::TABLET ],
15125
  'T3696' => [ 'Telsda', 'T3696' ],
15126
  'Tensent S9000' => [ 'Tensent', 'S9000' ],
 
15127
  'Hudl HT7S3' => [ 'Tesco', 'Hudl', DeviceType::TABLET ],
15128
  'Hudl 2' => [ 'Tesco', 'Hudl 2', DeviceType::TABLET ],
15129
  'TM-3200R' => [ 'teXet', 'TM-3200R' ],
@@ -15471,8 +16302,31 @@ DeviceModels::$ANDROID_MODELS = [
15471
  ],
15472
 
15473
  'A6S' => [ 'TWM', 'Amazing A6S' ],
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
15474
  'Be Touch 2' => [ 'Ulefone', 'Be Touch 2' ],
15475
  'Ulefone Be Touch2' => [ 'Ulefone', 'Be Touch 2' ],
 
 
 
 
15476
  'TB100' => [ 'Unitech', 'TB100', DeviceType::TABLET ],
15477
  'M70014' => [ 'United Star Technology', 'M70014', DeviceType::TABLET ],
15478
  'QOOQ' => [ 'Unowhy', 'QOOQ', DeviceType::TABLET ],
@@ -15482,6 +16336,7 @@ DeviceModels::$ANDROID_MODELS = [
15482
  'UMI-R1' => [ 'UMI', 'R1' ],
15483
  'UMI-R1(TD)' => [ 'UMI', 'R1' ],
15484
  'UMI S1' => [ 'UMI', 'S1' ],
 
15485
  'UMI X1' => [ 'UMI', 'X1' ],
15486
  'UMI X1S' => [ 'UMI', 'X1s' ],
15487
  'UMI X1-PRO' => [ 'UMI', 'X1' ],
@@ -15504,9 +16359,17 @@ DeviceModels::$ANDROID_MODELS = [
15504
  'UMI ZERO' => [ 'UMI', 'Zero' ],
15505
  ],
15506
 
 
 
 
 
 
15507
  'eMAX mini' => [ 'UMI', 'eMax mini' ],
15508
  'Plus E' => [ 'UMI', 'Plus E' ],
 
 
15509
  'U1203' => [ 'Uniscope', 'U1203' ],
 
15510
 
15511
  'Unusual!!' => [
15512
  'UNUSUAL U7X' => [ 'Unusual', 'U7X', DeviceType::TABLET ],
@@ -15666,6 +16529,7 @@ DeviceModels::$ANDROID_MODELS = [
15666
  'Venus V3 5580' => [ 'Vestel', 'Venus V3 5580' ],
15667
  'VSP250g' => [ 'Vestel', 'Venus V5' ],
15668
  'VSP250s' => [ 'Vestel', 'Venus V5' ],
 
15669
 
15670
  'VT6078' => [ 'VIA', 'ALTA DS', DeviceType::SIGNAGE ],
15671
  'victorys s8' => [ 'Victory\'s', 'S8' ],
@@ -15814,6 +16678,7 @@ DeviceModels::$ANDROID_MODELS = [
15814
  'vivo E1t' => [ 'Vivo', 'E1t' ],
15815
  'vivo E3' => [ 'Vivo', 'E3' ],
15816
  'vivo E5' => [ 'Vivo', 'E5' ],
 
15817
  'vivo S1' => [ 'Vivo', 'S1' ],
15818
  'vivo S3' => [ 'Vivo', 'S3' ],
15819
  'vivo S3+' => [ 'Vivo', 'S3+' ],
@@ -15846,6 +16711,12 @@ DeviceModels::$ANDROID_MODELS = [
15846
  'vivo 1611' => [ 'Vivo', 'V5 Plus' ],
15847
  'vivo 1718' => [ 'Vivo', 'V7' ],
15848
  'vivo 1716' => [ 'Vivo', 'V7 Plus' ],
 
 
 
 
 
 
15849
  'vivo X1' => [ 'Vivo', 'X1' ],
15850
  'vivo X1S' => [ 'Vivo', 'X1S' ],
15851
  'vivo X1St' => [ 'Vivo', 'X1S' ],
@@ -16015,6 +16886,14 @@ DeviceModels::$ANDROID_MODELS = [
16015
  'vivo Y937' => [ 'Vivo', 'Y937' ],
16016
  ],
16017
 
 
 
 
 
 
 
 
 
16018
  'VTAB1008' => [ 'Vizio', 'VTAB1008', DeviceType::TABLET ],
16019
  'VTAB3010' => [ 'Vizio', 'VTAB3010', DeviceType::TABLET ],
16020
  'VAP430' => [ 'Vizio', 'Co-Star', DeviceType::TELEVISION, Flag::GOOGLETV ],
@@ -16276,15 +17155,20 @@ DeviceModels::$ANDROID_MODELS = [
16276
  'FEVER' => [ 'Wiko', 'Fever' ],
16277
  'GETAWAY' => [ 'Wiko', 'Getaway' ],
16278
  'GOA' => [ 'Wiko', 'Goa' ],
 
 
16279
  'HIGHWAY' => [ 'Wiko', 'Highway' ],
16280
  'HIGHWAY PURE' => [ 'Wiko', 'Highway Pure' ],
16281
  'HIGHWAY SIGNS' => [ 'Wiko', 'Highway Signs' ],
16282
  'IGGY' => [ 'Wiko', 'Iggy' ],
16283
  'JIMMY' => [ 'Wiko', 'Jimmy' ],
 
16284
  'KITE' => [ 'Wiko', 'Kite' ],
16285
  'LENNY' => [ 'Wiko', 'Lenny' ],
16286
  'LENNY2' => [ 'Wiko', 'Lenny 2' ],
16287
  'LENNY3' => [ 'Wiko', 'Lenny 3' ],
 
 
16288
  'OZZY' => [ 'Wiko', 'Ozzy' ],
16289
  'PULP' => [ 'Wiko', 'Pulp' ],
16290
  'PULP 4G' => [ 'Wiko', 'Pulp' ],
@@ -16301,12 +17185,29 @@ DeviceModels::$ANDROID_MODELS = [
16301
  'SUBLIM' => [ 'Wiko', 'Sublim' ],
16302
  'SUNSET' => [ 'Wiko', 'Sunset' ],
16303
  'SUNSET2' => [ 'Wiko', 'Sunset 2' ],
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
16304
  'WAX' => [ 'Wiko', 'Wax' ],
 
16305
  'Wileyfox Spark' => [ 'Wileyfox', 'Spark' ],
16306
  'Wileyfox Spark +' => [ 'Wileyfox', 'Spark +' ],
16307
  'Wileyfox Spark X' => [ 'Wileyfox', 'Spark X' ],
16308
  'Wileyfox Storm' => [ 'Wileyfox', 'Storm' ],
16309
  'Wileyfox Swift' => [ 'Wileyfox', 'Swift' ],
 
16310
  'Swift 2 Plus' => [ 'Wileyfox', 'Swift 2 Plus' ],
16311
  'Swift 2 X' => [ 'Wileyfox', 'Swift 2 X' ],
16312
  'N5PRO2jingying' => [ 'Window', 'N5 Pro 2', DeviceType::MEDIA ],
@@ -16400,6 +17301,8 @@ DeviceModels::$ANDROID_MODELS = [
16400
  'wm8710-tvbox' => [ 'WonderMedia', 'WM8710', DeviceType::TELEVISION ],
16401
  'WM8850-mid' => [ 'WonderMedia', 'WM8850', DeviceType::TABLET ],
16402
  'PAD1001' => [ 'Wortmann', 'TERRA MOBILE PAD 1001', DeviceType::TABLET ],
 
 
16403
 
16404
  'Woxter!!' => [
16405
  'Woxter android box 500' => [ 'Woxter', 'Android TV 500', DeviceType::TELEVISION ],
@@ -16492,9 +17395,35 @@ DeviceModels::$ANDROID_MODELS = [
16492
  '(Xiaomi )?(Xiaomi|Xiaomi M|MI)[ \-]?5s Plus$!' => [ 'Xiaomi', 'Mi 5s Plus' ],
16493
  '(Xiaomi )?(Xiaomi|Xiaomi M|MI)[ \-]?5x$!' => [ 'Xiaomi', 'Mi 5x' ],
16494
  '(Xiaomi )?(Xiaomi|Xiaomi M|MI)[ \-]?6$!' => [ 'Xiaomi', 'Mi 6' ],
 
 
16495
  '(Xiaomi )?(Xiaomi|Xiaomi M|MI)[ \-]?A1$!' => [ 'Xiaomi', 'Mi A1' ],
16496
- ],
16497
-
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
16498
  '(Xiaomi|Xiaomi Mi|MI) Note!!' => [
16499
  '(Xiaomi|Xiaomi Mi|MI) Note (LTE|4G)$!' => [ 'Xiaomi', 'Mi Note' ],
16500
  '(Xiaomi|Xiaomi Mi|MI) Note ?2!' => [ 'Xiaomi', 'Mi Note 2' ],
@@ -16505,9 +17434,15 @@ DeviceModels::$ANDROID_MODELS = [
16505
 
16506
  '(Xiaomi )?(MI )?MAX$!' => [ 'Xiaomi', 'Mi Max' ],
16507
  '(Xiaomi )?(MI )?MAX 2$!' => [ 'Xiaomi', 'Mi Max 2' ],
 
16508
  '(Xiaomi )?(MI )?MIX$!' => [ 'Xiaomi', 'Mi MIX' ],
16509
  '(Xiaomi )?(MI )?MIX 2$!' => [ 'Xiaomi', 'Mi MIX 2' ],
16510
  '(Xiaomi )?(MI )?MIX 2S$!' => [ 'Xiaomi', 'Mi MIX 2S' ],
 
 
 
 
 
16511
 
16512
  '(Xiaomi )?20!!' => [
16513
  '(Xiaomi )?20130(61)!' => [ 'Xiaomi', 'Mi 3' ],
@@ -16536,9 +17471,24 @@ DeviceModels::$ANDROID_MODELS = [
16536
  '(Xiaomi )?(Redmi|HM) ?5$!' => [ 'Xiaomi', 'Redmi 5' ],
16537
  '(Xiaomi )?(Redmi|HM) ?5 Plus!' => [ 'Xiaomi', 'Redmi 5 Plus' ],
16538
  '(Xiaomi )?(Redmi|HM) ?5A!' => [ 'Xiaomi', 'Redmi 5A' ],
 
 
 
 
 
 
 
 
 
 
 
 
 
16539
  '(Xiaomi )?Redmi[ \-]S2$!' => [ 'Xiaomi', 'Redmi S2' ],
16540
  '(Xiaomi )?Redmi[ \-]Y1$!' => [ 'Xiaomi', 'Redmi Y1' ],
16541
  '(Xiaomi )?Redmi[ \-]Y1 Lite!' => [ 'Xiaomi', 'Redmi Y1 Lite' ],
 
 
16542
  ],
16543
 
16544
  '(Xiaomi )?(Redmi|HM)[ \-]?Note!!' => [
@@ -16551,6 +17501,15 @@ DeviceModels::$ANDROID_MODELS = [
16551
  '(Xiaomi )?Redmi[ \-]Note ?5$!' => [ 'Xiaomi', 'Redmi Note 5' ],
16552
  '(Xiaomi )?Redmi[ \-]Note ?5A!' => [ 'Xiaomi', 'Redmi Note 5A' ],
16553
  '(Xiaomi )?Redmi[ \-]Note 5 Pro!' => [ 'Xiaomi', 'Redmi Note 5 Pro' ],
 
 
 
 
 
 
 
 
 
16554
  ],
16555
 
16556
  '(Xiaomi |HM)?20!!' => [
@@ -16573,10 +17532,79 @@ DeviceModels::$ANDROID_MODELS = [
16573
  '(Xiaomi |HM)?20160(51)!' => [ 'Xiaomi', 'Redmi Note 4' ],
16574
  ],
16575
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
16576
  'Xiaomi MDT2!' => [ 'Xiaomi', 'Mi 5x' ],
16577
  'Xiaomi MCT1!' => [ 'Xiaomi', 'Mi 6' ],
16578
  'Xiaomi MAT136!' => [ 'Xiaomi', 'Redmi 4X' ],
16579
  'Xiaomi MBT6A5!' => [ 'Xiaomi', 'Redmi Note 4X' ],
 
 
16580
 
16581
  'aqua' => [ 'Xiaomi', 'Mi 4s' ],
16582
  'capricorn' => [ 'Xiaomi', 'Mi 5s' ],
@@ -16608,8 +17636,12 @@ DeviceModels::$ANDROID_MODELS = [
16608
  '(Xiaomi|Xiaomi Mi|MI) Pad$!' => [ 'Xiaomi', 'Mi Pad', DeviceType::TABLET ],
16609
  '(Xiaomi|Xiaomi Mi|MI) Pad 2!' => [ 'Xiaomi', 'Mi Pad 2', DeviceType::TABLET ],
16610
  '(Xiaomi|Xiaomi Mi|MI) Pad 3!' => [ 'Xiaomi', 'Mi Pad 3', DeviceType::TABLET ],
 
 
16611
  ],
16612
 
 
 
16613
  '(Xiaomi|Xiaomi Mi|MI)Box!!' => [
16614
  'MiBOX iCNTV' => [ 'Xiaomi', 'Mi Box 1', DeviceType::TELEVISION ],
16615
  '(Xiaomi|Xiaomi Mi|MI)Box1S!' => [ 'Xiaomi', 'Mi Box 1S', DeviceType::TELEVISION ],
@@ -17179,6 +18211,9 @@ DeviceModels::$ANDROID_MODELS = [
17179
  'NX569H' => [ 'ZTE', 'Nubia Z17 Mini' ],
17180
  'NX513J' => [ 'ZTE', 'Nubia My Prague' ],
17181
  'NX601J' => [ 'ZTE', 'Nubia X6' ],
 
 
 
17182
  ],
17183
 
17184
  'ZTE K813' => [ 'ZTE', 'K813' ],
@@ -17841,6 +18876,8 @@ DeviceModels::$ANDROID_MODELS = [
17841
  'ZTE A2017' => [ 'ZTE', 'Axon 7' ],
17842
  'ZTE A2017G' => [ 'ZTE', 'Axon 7' ],
17843
  'ZTE A2017U' => [ 'ZTE', 'Axon 7' ],
 
 
17844
  'ZTE B2015' => [ 'ZTE', 'Axon Mini' ],
17845
  'ZTE B2016' => [ 'ZTE', 'Axon Mini' ],
17846
  'ZTE B2017' => [ 'ZTE', 'Axon Mini' ],
@@ -18083,6 +19120,8 @@ DeviceModels::$ANDROID_MODELS = [
18083
  'GM 5 Plus d' => [ 'General Mobile', 'GM5 Plus' ],
18084
  'GM 6' => [ 'General Mobile', 'GM6' ],
18085
  'GM 6 d' => [ 'General Mobile', 'GM6' ],
 
 
18086
  'GM Discovery tab 8' => [ 'General Mobile', 'tab 8', DeviceType::TABLET ],
18087
  'etab5' => [ 'General Mobile', 'Etab 5', DeviceType::TABLET ],
18088
 
@@ -18486,6 +19525,35 @@ DeviceModels::$ANDROID_MODELS = [
18486
  ],
18487
 
18488
  'Z4 mini' => [ 'Q-Mobile', 'Noir Quatro Z4 mini' ],
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
18489
  'Soshphone 4G' => [ 'SoshPhone', '4G' ],
18490
 
18491
  'AQT80' => [ 'Sprint', 'Slate 8', DeviceType::TABLET ],
@@ -18688,4 +19756,6 @@ DeviceModels::$ANDROID_MODELS = [
18688
  'VFD 1300' => [ 'Vodafone', 'Tab N8', DeviceType::TABLET ],
18689
  'VFD 1400' => [ 'Vodafone', 'Tab Prime 7', DeviceType::TABLET ],
18690
  'VFD1400' => [ 'Vodafone', 'Tab Prime 7', DeviceType::TABLET ],
18691
- ];
 
 
261
  'Pixel' => [ 'Google', 'Pixel' ],
262
  'Google Pixel' => [ 'Google', 'Pixel' ],
263
  'Pixel XL' => [ 'Google', 'Pixel XL' ],
 
264
  'Pixel 2' => [ 'Google', 'Pixel 2' ],
265
  'Google Pixel 2' => [ 'Google', 'Pixel 2' ],
266
  'Pixel 2XL' => [ 'Google', 'Pixel 2 XL' ],
267
  'Pixel 2 XL' => [ 'Google', 'Pixel 2 XL' ],
268
  'Google Pixel 2XL' => [ 'Google', 'Pixel 2 XL' ],
269
+ 'Pixel 3' => [ 'Google', 'Pixel 3' ],
270
+ 'Pixel 3 XL' => [ 'Google', 'Pixel 3 XL' ],
271
+ 'Pixel 3a' => [ 'Google', 'Pixel 3a' ],
272
+ 'Pixel 3a XL' => [ 'Google', 'Pixel 3a XL' ],
273
+ 'Pixel 4' => [ 'Google', 'Pixel 4' ],
274
+ 'Pixel 4a' => [ 'Google', 'Pixel 4a' ],
275
+ 'Pixel 4a (5G)' => [ 'Google', 'Pixel 4a 5G' ],
276
+ 'Pixel 4 XL' => [ 'Google', 'Pixel 4 XL' ],
277
+ 'Pixel 5' => [ 'Google', 'Pixel 5' ],
278
+ 'Pixel 5a' => [ 'Google', 'Pixel 5a' ],
279
+ 'Pixel 6' => [ 'Google', 'Pixel 6' ],
280
+ 'Pixel 6 Pro' => [ 'Google', 'Pixel 6 Pro' ],
281
 
282
  /* Google Edition */
283
  'HTC One' => [ 'HTC', 'One (Google Edition)' ],
324
 
325
  /* Chromebook */
326
 
327
+ 'Acer Chromebook R11!' => [ 'Acer', 'Chromebook R11', DeviceType::DESKTOP ],
328
+ 'Acer Chromebook R13!' => [ 'Acer', 'Chromebook R13', DeviceType::DESKTOP ],
329
+ 'Acer Chromebook 15!' => [ 'Acer', 'Chromebook 15', DeviceType::DESKTOP ],
330
+ 'ASUS Chromebook Flip!' => [ 'Asus', 'Chromebook Flip', DeviceType::DESKTOP ],
 
331
  'Google Chromebook Pixel (2015)' => [ 'Google', 'Chromebook Pixel (2015)', DeviceType::DESKTOP ],
332
  'HP Chromebook x360 11 G1 EE' => [ 'Google', 'Chromebook x360 11 G1 EE', DeviceType::DESKTOP ],
333
  'Samsung Chromebook 3' => [ 'Samsung', 'Chromebook 3', DeviceType::DESKTOP ],
578
  'B3-A32' => [ 'Acer', 'Iconia One 10 B3-A32', DeviceType::TABLET ],
579
  'B3-A40' => [ 'Acer', 'Iconia One 10 B3-A40', DeviceType::TABLET ],
580
  'B3-A40FHD' => [ 'Acer', 'Iconia One 10 B3-A40FHD', DeviceType::TABLET ],
581
+ 'B3-A50FHD' => [ 'Acer', 'Iconia One 10 B3-A50FHD', DeviceType::TABLET ],
582
 
583
  'One 7 M77GHG' => [ 'Acer', 'Iconia One 7 M77GHG', DeviceType::TABLET ],
584
  'TD070VA1' => [ 'Acer', 'Iconia One 7 TD070VA1', DeviceType::TABLET ],
970
  'one ?touch 4032!' => [ 'Alcatel', 'One Touch Pop C2' ],
971
  '4032[ADEX]!' => [ 'Alcatel', 'One Touch Pop C2' ],
972
  'one ?touch 4033!' => [ 'Alcatel', 'One Touch Pop C3' ],
973
+ '4033[ADLX]!' => [ 'Alcatel', 'One Touch Pop C3' ],
974
  'ONETOUCH POPC3' => [ 'Alcatel', 'One Touch Pop C3' ],
975
  '4034[ADEFGX]!' => [ 'Alcatel', 'One Touch Pixi 4 (4)' ],
976
  'one ?touch 40(35|36|37)!' => [ 'Alcatel', 'One Touch Pop D3' ],
981
  '4037[V]!' => [ 'Alcatel', 'One Touch Elevate' ],
982
  'one ?touch 5045!' => [ 'Alcatel', 'One Touch Pop 2 (4)' ],
983
  '4045[ADEFLOYX]!' => [ 'Alcatel', 'One Touch Pop 2 (4)' ],
984
+ '4047[ADFGX]!' => [ 'Alcatel', 'U5' ],
985
+ '4049[DG]!' => [ 'Alcatel', 'U3' ],
986
  '4055[JU]!' => [ 'Alcatel', 'One Touch Pixi 5 (4)' ],
987
  '4060[A]!' => [ 'Alcatel', 'IDEAL' ],
988
+ '4060[SW]!' => [ 'Alcatel', 'One Touch Pixi 4 (5)' ],
989
+ '5001[D]!' => [ 'Alcatel', '1V (2019)' ],
990
+ '5002[DH]!' => [ 'Alcatel', '1B (2020)' ],
991
+ '5003[D]!' => [ 'Alcatel', '1C (2019)' ],
992
+ '5009[D]!' => [ 'Alcatel', '1C' ],
993
  '5010[DEGSUX]!' => [ 'Alcatel', 'One Touch Pixi 4 (5)' ],
994
+ '5011[A]!' => [ 'Alcatel', 'A3 Plus' ],
995
  '5012[G]!' => [ 'Alcatel', 'One Touch Pixi 4 (5.5)' ],
996
  '5015[ADEX]!' => [ 'Alcatel', 'One Touch Pixi 3 (5)' ],
997
  '5016[AJ]!' => [ 'Alcatel', 'One Touch Pixi 3 (5)' ],
1006
  'one ?touch 5021!' => [ 'Alcatel', 'One Touch Soleil' ],
1007
  '5022[DEX]!' => [ 'Alcatel', 'One Touch Pop Star' ],
1008
  '5023[F]!' => [ 'Alcatel', 'One Touch Pixi 4 Plus Power' ],
1009
+ '5024[DF]!' => [ 'Alcatel', '1S' ],
1010
  '5025[DEGX]!' => [ 'Alcatel', 'One Touch Pop 3' ],
1011
  '5027[B]!' => [ 'Alcatel', 'One Touch Dawn' ],
1012
+ '5030[DF]!' => [ 'Alcatel', '1SE' ],
1013
+ '5033[ADJOX]!' => [ 'Alcatel', '1' ],
1014
+ '5034[D]!' => [ 'Alcatel', '3L' ],
1015
  'one ?touch 5035!' => [ 'Alcatel', 'One Touch X\'Pop' ],
1016
  '5036[D]!' => [ 'Alcatel', 'One Touch Pop C5' ],
1017
  'one ?touch 50(36|37)!' => [ 'Alcatel', 'One Touch Pop C5' ],
1018
  'ONETOUCH POPC5' => [ 'Alcatel', 'One Touch Pop C5' ],
1019
  'one ?touch 50(38)!' => [ 'Alcatel', 'One Touch Pop D5' ],
1020
  '5038[ADEX]!' => [ 'Alcatel', 'One Touch Pop D5' ],
1021
+ '5039[D]!' => [ 'Alcatel', 'One Touch 3L' ],
1022
+ '5041[C]!' => [ 'Alcatel', 'TETRA' ],
1023
  'one ?touch 5042!' => [ 'Alcatel', 'One Touch Pop 2 (4.5)' ],
1024
  '5042[ADEFGTWXY]!' => [ 'Alcatel', 'One Touch Pop 2 (4.5)' ],
1025
+ '5044[ADGIOSTY]!' => [ 'Alcatel', 'U5' ],
1026
+ '5045[ADFGJTXY]!' => [ 'Alcatel', 'One Touch Pixi 4 (5.0)' ],
1027
+ '5046[DGIJUY]!' => [ 'Alcatel', 'A3' ],
1028
+ '5047[DIUY]!' => [ 'Alcatel', 'U5 HD' ],
1029
+ '5048[UY]!' => [ 'Alcatel', '3X (2019)' ],
1030
  '5049[EGSWZ]!' => [ 'Alcatel', 'A30 Fierce' ],
1031
  'one ?touch 5050!' => [ 'Alcatel', 'One Touch Pop S3' ],
1032
  '5050[ASYX]!' => [ 'Alcatel', 'One Touch Pop S3' ],
1033
  '5051[ADJMX]!' => [ 'Alcatel', 'One Touch Pop 4 (5.0)' ],
1034
+ '5052[DY]!' => [ 'Alcatel', '3' ],
1035
+ '5053[DK]!' => [ 'Alcatel', '3 (2019)' ],
1036
  '5054[ADOSTX]!' => [ 'Alcatel', 'One Touch Pixi 3 (5.5)' ],
1037
  '5054[NW]!' => [ 'Alcatel', 'One Touch Fierce XL' ],
1038
+ '5056[ADEINUWX]!' => [ 'Alcatel', 'One Touch Pop 4+' ],
1039
  '5056[O]!' => [ 'Alcatel', 'One Touch Allura' ],
1040
  '5057[M]!' => [ 'Alcatel', 'One Touch Pop Mirage' ],
1041
+ '5058[I]!' => [ 'Alcatel', '3X' ],
1042
+ '5059[ADJTXY]!' => [ 'Alcatel', '1X' ],
1043
+ '5060[D]!' => [ 'Alcatel', '5V' ],
1044
+ '5061[KU]!' => [ 'Alcatel', '3X' ],
1045
  '5065[ADJNWX]!' => [ 'Alcatel', 'One Touch Pixi 3 (5)' ],
1046
  '5070[DJX]!' => [ 'Alcatel', 'One Touch Pop Star' ],
1047
+ '5080[A]!' => [ 'Alcatel', 'Shine Lite' ],
1048
  '5080[DFQX]!' => [ 'Alcatel', 'One Touch Pixi 4 (6)' ],
1049
+ '5085[CDJNOYX]!' => [ 'Alcatel', 'A5 LED' ],
1050
+ '5086[ADY]!' => [ 'Alcatel', '5' ],
1051
  '5090[Y]!' => [ 'Alcatel', 'A7' ],
1052
  '5095[BIKY]!' => [ 'Alcatel', 'One Touch Pop 4S' ],
1053
  '5096[AI]!' => [ 'Alcatel', 'One Touch Net' ],
1061
  '6014[DX]!' => [ 'Alcatel', 'One Touch Idol Mini' ],
1062
  'one ?touch 6016!' => [ 'Alcatel', 'One Touch Idol 2 Mini' ],
1063
  '6016[ADEX]!' => [ 'Alcatel', 'One Touch Idol 2 Mini' ],
1064
+ '6025[D]!' => [ 'Alcatel', '1S (2021)' ],
1065
  'one ?touch 6030!' => [ 'Alcatel', 'One Touch Idol' ],
1066
  '6031[X]!' => [ 'Alcatel', 'One Touch Idol Ultra' ],
1067
  'one ?touch 6032!' => [ 'Alcatel', 'One Touch Idol α' ],
1083
  'one ?touch 6050!' => [ 'Alcatel', 'One Touch Idol 2S' ],
1084
  '6050[AFWY]!' => [ 'Alcatel', 'One Touch Idol 2S' ],
1085
  '6055[ABDHIKPUY]!' => [ 'Alcatel', 'One Touch Idol 4' ],
1086
+ '6056[D]!' => [ 'Alcatel', '3L' ],
1087
+ '6058[D]!' => [ 'Alcatel', 'One Touch Idol 5' ],
1088
+ '6060[S]!' => [ 'Alcatel', 'One Touch Idol 5s' ],
1089
+ '6062[W]!' => [ 'Alcatel', '7' ],
1090
  '6070[KOY]!' => [ 'Alcatel', 'One Touch Idol 4s' ],
1091
  'one ?touch 7024!' => [ 'Alcatel', 'One Touch Fierce' ],
1092
  'one touch fierce!' => [ 'Alcatel', 'One Touch Fierce' ],
1119
  '8020[D]!' => [ 'Alcatel', 'One Touch Hero' ],
1120
  'one ?touch 8030!' => [ 'Alcatel', 'One Touch Hero 2' ],
1121
  '8030[BY]!' => [ 'Alcatel', 'One Touch Hero 2' ],
1122
+ '8063' => [ 'Alcatel', 'Pixi 4' ],
1123
+ '8082' => [ 'Alcatel', '1T', DeviceType::TABLET ],
1124
+ '8082 EEA' => [ 'Alcatel', '1T', DeviceType::TABLET ],
1125
+ '8094[X]!' => [ 'Alcatel', '3T 10', DeviceType::TABLET ],
1126
  '9001[DIX]!' => [ 'Alcatel', 'One Touch Pixi 4 (6)' ],
1127
  '9002[AWX]!' => [ 'Alcatel', 'One Touch Pixi 3 (7)', DeviceType::TABLET ],
1128
  '9003[AX]!' => [ 'Alcatel', 'One Touch Pixi 4 (7)', DeviceType::TABLET ],
1135
  '9022[SX]!' => [ 'Alcatel', 'One Touch Pixi 3 (8)', DeviceType::TABLET ],
1136
  '9024[OW]!' => [ 'Alcatel', 'A30', DeviceType::TABLET ],
1137
  '9025[MQ]!' => [ 'Alcatel', 'One Touch Pop 4 (7)', DeviceType::TABLET ],
1138
+ '9026[X]!' => [ 'Alcatel', 'A3 10', DeviceType::TABLET ],
1139
  'one ?touch T10!' => [ 'Alcatel', 'One Touch T10', DeviceType::TABLET ],
1140
  'one ?touch T20!' => [ 'Alcatel', 'One Touch T20', DeviceType::TABLET ],
1141
  'one ?touch T60!' => [ 'Alcatel', 'One Touch T60', DeviceType::TABLET ],
1207
  'P8 Energy' => [ 'Allview', 'P8 Energy' ],
1208
  'P8 Energy mini' => [ 'Allview', 'P8 Energy Mini' ],
1209
  'P8 Energy mini TM' => [ 'Allview', 'P8 Energy Mini' ],
1210
+ 'P9 Energy' => [ 'Allview', 'P9 Energy' ],
1211
  'ALLVIEW TX1 Quasar' => [ 'Allview', 'TX1 Quasar' ],
1212
  'V1 Viper' => [ 'Allview', 'V1 Viper' ],
1213
  'V1 Viper E' => [ 'Allview', 'V1 Viper E' ],
1263
  'X3 Soul PLUS' => [ 'Allview', 'X3 Soul Plus' ],
1264
  'X3 Soul PRO' => [ 'Allview', 'X3 Soul Pro' ],
1265
  'X3 Soul Style' => [ 'Allview', 'X3 Soul Style' ],
1266
+ 'X5 Soul Pro' => [ 'Allview', 'X5 Soul Pro' ],
1267
 
1268
  '(Allview|Alldro)!!' => [
1269
  'Allview AX1 Shine' => [ 'Allview', 'AX1 Shine', DeviceType::TABLET ],
1343
  'KFGIWI' => [ 'Amazon', 'Fire HD 8 (2016)', DeviceType::TABLET, Flag::FIREOS ], // xth generation 8" HD (1280 x 800)
1344
  'KFDOWI' => [ 'Amazon', 'Fire HD 8 (2017)', DeviceType::TABLET, Flag::FIREOS ], // xth generation 8" HD (1280 x 800)
1345
  'KFSUWI' => [ 'Amazon', 'Fire HD 10 (2017)', DeviceType::TABLET, Flag::FIREOS ], // 5th generation 10" HD (1280 x 800)
1346
+ 'KFMAWI' => [ 'Amazon', 'Fire HD 8 (2018)', DeviceType::TABLET, Flag::FIREOS ],
1347
+ 'KFKAWI' => [ 'Amazon', 'Fire HD 8 (2018)', DeviceType::TABLET, Flag::FIREOS ],
1348
+ 'KFMUWI' => [ 'Amazon', 'Fire 7 (2019)', DeviceType::TABLET, Flag::FIREOS ],
1349
  'SD4930UR' => [ 'Amazon', 'Fire Phone', DeviceType::MOBILE, Flag::FIREOS ],
1350
  'AFTB' => [ 'Amazon', 'Fire TV', DeviceType::TELEVISION, Flag::FIREOS ],
1351
  'AFTS' => [ 'Amazon', 'Fire TV (2015)', DeviceType::TELEVISION, Flag::FIREOS ],
1521
  'Archos!!' => [
1522
  'ARCHOS 80G9' => [ 'Archos', '80 G9', DeviceType::TABLET ],
1523
  'ARCHOS 101G9' => [ 'Archos', '101 G9', DeviceType::TABLET ],
1524
+ 'Archos G9' => [ 'Archos', '101 G9', DeviceType::TABLET ],
1525
  'ARCHOS 97XSLG10' => [ 'Archos', '97 XS', DeviceType::TABLET ],
1526
  'ARCHOS 80XSK' => [ 'Archos', '80 XS', DeviceType::TABLET ],
1527
  'ARCHOS 101G10' => [ 'Archos', '101 XS', DeviceType::TABLET ],
1611
  'Archos 70 Oxygen' => [ 'Archos', '70 Oxygen', DeviceType::TABLET ],
1612
  'Archos 80 Oxygen' => [ 'Archos', '80 Oxygen', DeviceType::TABLET ],
1613
  'Archos 101 Oxygen' => [ 'Archos', '101 Oxygen', DeviceType::TABLET ],
1614
+ 'Archos 101 Oxygen 4G' => [ 'Archos', '101 Oxygen', DeviceType::TABLET ],
1615
  'Archos 101b Oxygen' => [ 'Archos', '101b Oxygen', DeviceType::TABLET ],
1616
  'Archos 133 Oxygen' => [ 'Archos', '133 Oxygen', DeviceType::TABLET ],
1617
  'Archos 156 Oxygen' => [ 'Archos', '156 Oxygen', DeviceType::TABLET ],
1685
  'ARCHOS 97 XENON' => [ 'Archos', '97 Xenon', DeviceType::TABLET ],
1686
  'Archos 101 Xenon' => [ 'Archos', '101 Xenon', DeviceType::TABLET ],
1687
  'Archos 101 Xenon v2' => [ 'Archos', '101 Xenon', DeviceType::TABLET ],
1688
+ 'Archos 101b Xenon' => [ 'Archos', '101b Xenon', DeviceType::TABLET ],
1689
  'Archos 101b Xenon v2' => [ 'Archos', '101b Xenon', DeviceType::TABLET ],
1690
  'Archos 101c Xenon' => [ 'Archos', '101c Xenon', DeviceType::TABLET ],
1691
  'ARCHOS 101 Xenon Lite' => [ 'Archos', '101 Xenon Lite', DeviceType::TABLET ],
1704
  'Archos Access 70 3G' => [ 'Archos', 'Access 70', DeviceType::TABLET ],
1705
  'Archos Access 101 3G' => [ 'Archos', 'Access 101', DeviceType::TABLET ],
1706
  'Archos Access 101 3G V2' => [ 'Archos', 'Access 101', DeviceType::TABLET ],
1707
+ 'Archos Core 50 4G' => [ 'Archos', 'Core 50' ],
1708
  'Archos Core 55 4G' => [ 'Archos', 'Core 55' ],
1709
+ 'Archos Core 57S' => [ 'Archos', 'Core 57S' ],
1710
  'Archos Core 70 3G' => [ 'Archos', 'Core 70', DeviceType::TABLET ],
1711
+ 'ARCHOS Core 101 Wifi' => [ 'Archos', 'Core 101', DeviceType::TABLET ],
1712
  'Archos Core 101 3G' => [ 'Archos', 'Core 101', DeviceType::TABLET ],
1713
+ 'Archos Oxygen 63' => [ 'Archos', 'Oxygen 63' ],
1714
+ 'Archos Saphir 50X' => [ 'Archos', 'Saphir 50X' ],
1715
  'Archos Sense 55 DC' => [ 'Archos', 'Sense 55' ],
1716
+ 'Archos Sense 55 S' => [ 'Archos', 'Sense 55' ],
1717
  ],
1718
 
1719
+ 'X67 5G' => [ 'Archos', 'X67 5G' ],
1720
+
1721
  'Artes D708' => [ 'Artes', 'D708', DeviceType::TABLET ],
1722
  'Artes D821' => [ 'Artes', 'D821', DeviceType::TABLET ],
1723
  'D9702' => [ 'Artes', 'D9702', DeviceType::TABLET ],
1802
  'PadFone X' => [ 'Asus', 'PadFone X', DeviceType::TABLET ],
1803
  'PadFone X mini' => [ 'Asus', 'PadFone X mini (PF450CL)', DeviceType::TABLET ],
1804
  'ETBW11AA' => [ 'Asus', 'Tough' ],
1805
+ 'I01WDX' => [ 'Asus', 'ZenFone 8' ],
1806
+ 'I001DC' => [ 'Asus', 'ROG Phone 2' ],
1807
+ 'I001DE' => [ 'Asus', 'ROG Phone 2' ],
1808
+ 'I002D' => [ 'Asus', 'ZenFone 7' ],
1809
+ 'I003D' => [ 'Asus', 'ROG Phone 3' ],
1810
+ 'I003DD' => [ 'Asus', 'ROG Phone 3' ],
1811
+ 'I004D' => [ 'Asus', 'ZenFone 8 Flip' ],
1812
+ 'I005D' => [ 'Asus', 'ROG Phone 5 Pro' ],
1813
+ 'I005DA' => [ 'Asus', 'ROG Phone 5 Pro' ],
1814
+ 'I006D' => [ 'Asus', 'ZenFone 8 Mini' ],
1815
+ 'I01WD' => [ 'Asus', 'ZenFone 6 (ZS630KL)' ],
1816
  'K00C' => [ 'Asus', 'Transformer Pad Infinity', DeviceType::TABLET ],
1817
  'K010' => [ 'Asus', 'Transformer Pad TF103', DeviceType::TABLET ],
1818
  'K010E' => [ 'Asus', 'Transformer Pad TF103', DeviceType::TABLET ],
1870
  'P001' => [ 'Asus', 'ZenPad C 7.0 (Z170MG)', DeviceType::TABLET ],
1871
  'P001 2' => [ 'Asus', 'ZenPad C 7.0 (Z170MG)', DeviceType::TABLET ],
1872
  'P002' => [ 'Asus', 'ZenPad 7.0 (Z370KL)', DeviceType::TABLET ],
1873
+ 'P00A' => [ 'Asus', 'ZenPad 8.0 (Z380M)', DeviceType::TABLET ],
1874
  'P00C' => [ 'Asus', 'ZenPad 10 (Z300M)', DeviceType::TABLET ],
1875
  'P00I' => [ 'Asus', 'ZenPad Z10 (Z500KL)', DeviceType::TABLET ],
1876
  'P01M' => [ 'Asus', 'ZenPad S 8.0 (Z580C)', DeviceType::TABLET ],
1885
  'P022' => [ 'Asus', 'ZenPad 8.0 (Z380C)', DeviceType::TABLET ],
1886
  'P023' => [ 'Asus', 'ZenPad 10 (Z300C)', DeviceType::TABLET ],
1887
  'P024' => [ 'Asus', 'ZenPad 8.0 (Z380KL)', DeviceType::TABLET ],
1888
+ 'P027' => [ 'Asus', 'ZenPad 3S 10 (Z500M)', DeviceType::TABLET ],
1889
+ 'P028' => [ 'Asus', 'ZenPad 10 (Z301M)', DeviceType::TABLET ],
1890
  // '' => [ 'Asus', 'ZenPad 10 (Z300CNL)', DeviceType::TABLET ],
1891
  'A001' => [ 'Asus', 'ZenFone 3 Ultra (ZU680KL)' ],
1892
+ 'A007' => [ 'Asus', 'ZenFone Live (ZB501KL)' ],
1893
  'X007D' => [ 'Asus', 'ZenFone Go (ZB552KL)' ],
1894
  'X008D' => [ 'Asus', 'ZenFone 3 Max (ZC520TL)' ],
1895
  'X008DA' => [ 'Asus', 'ZenFone 3 Max (ZC520TL)' ],
1908
  'X00DDB' => [ 'Asus', 'ZenFone 3 Max (ZC553KL)' ],
1909
  'X00HD' => [ 'Asus', 'ZenFone 4 Max (ZC520KL)' ],
1910
  'X00GD' => [ 'Asus', 'ZenFone 3S Max (ZC521TL)' ],
1911
+ 'X00LD' => [ 'Asus', 'ZenFone 4 Selfie (ZD553KL)' ],
1912
+ 'X00T' => [ 'Asus', 'ZenFone Max Pro M1 (ZB601KL)' ],
1913
+ 'X00TD' => [ 'Asus', 'ZenFone Max Pro M1 (ZB601KL)' ],
1914
+ 'X00TDB' => [ 'Asus', 'ZenFone Max Pro M1 (ZB601KL)' ],
1915
+ 'X00DE' => [ 'Asus', 'ZenFone Max Pro M1 (ZB601KL)' ],
1916
+ 'X00QD' => [ 'Asus', 'ZenFone 5 (ZE620KL)' ],
1917
+ 'X00QSA' => [ 'Asus', 'ZenFone 5 (ZE620KL)' ],
1918
+ 'X01AD' => [ 'Asus', 'ZenFone Max M2 (ZB633KL)' ],
1919
+ 'X01BDA' => [ 'Asus', 'ZenFone Max Pro M2 (ZB631KL)' ],
1920
  'X013D' => [ 'Asus', 'ZenFone Go (ZB551KL)' ],
1921
  'X013DA' => [ 'Asus', 'ZenFone Go (ZB551KL)' ],
1922
  'X013DB' => [ 'Asus', 'ZenFone Go (ZB551KL)' ],
1925
  'X013DB' => [ 'Asus', 'ZenFone Go TV (ZB551KL)' ],
1926
  'X013DC' => [ 'Asus', 'ZenFone Go (ZB551KL)' ],
1927
  'ZB551KL' => [ 'Asus', 'ZenFone Go (ZB551KL)' ],
1928
+ 'X00ID' => [ 'Asus', 'ZenFone 4 Max (ZC554KL)' ],
1929
  'X014D' => [ 'Asus', 'ZenFone Go (ZB452KG)' ],
1930
+ 'X018D' => [ 'Asus', 'ZenFone Max Plus M1 (ZB570TL)' ],
1931
  'Z002' => [ 'Asus', 'ZenFone 6 (A601CG)' ],
1932
  'Z007' => [ 'Asus', 'ZenFone C (ZC451CG)' ],
1933
  'ZenFone 2' => [ 'Asus', 'ZenFone 2 (ZE550ML)' ],
1989
  'Z01HDA' => [ 'Asus', 'ZenFone 3 Zoom (ZE553KL)' ],
1990
  'Z01KD' => [ 'Asus', 'ZenFone 4 (ZE554KL)' ],
1991
  'Z01KDA' => [ 'Asus', 'ZenFone 4 (ZE554KL)' ],
1992
+ 'Z01MD' => [ 'Asus', 'ZenFone 4 Selfie Pro (ZD552KL)' ],
1993
  'Z01MDA' => [ 'Asus', 'ZenFone 4 Selfie Pro (ZD552KL)' ],
1994
+ 'Z01RD' => [ 'Asus', 'ZenFone 5z (ZS620KL)' ],
1995
+ 'Z01QD' => [ 'Asus', 'ROG Phone' ],
1996
 
1997
  'ZB500KG' => [ 'Asus', 'ZenFone Go (ZB500KG)' ],
1998
  'ZB500KL' => [ 'Asus', 'ZenFone Go (ZB500KL)' ],
2005
  'ZE552KL' => [ 'Asus', 'ZenFone 3 (ZE552KL)' ],
2006
  'ZE553KL' => [ 'Asus', 'ZenFone 3 Zoom (ZE553KL)' ],
2007
  'ZE554KL' => [ 'Asus', 'ZenFone 4 (ZE554KL)' ],
2008
+ 'ZS671KS' => [ 'Asus', 'ZenFone 7 Pro (ZS671KS)' ],
2009
 
2010
  'Z00YD' => [ 'Asus', 'Live' ],
2011
  'X002' => [ 'Asus', 'Pegasus' ],
2299
  'BBE100-[0-9]!' => [ 'BlackBerry', '"BBE100"' ],
2300
  'BBF100-[0-9]!' => [ 'BlackBerry', 'KEY2' ],
2301
 
2302
+ 'A80Plus' => [ 'Blackview', 'A80 Plus' ],
2303
+ 'A80Pro' => [ 'Blackview', 'A80 Pro' ],
2304
+ 'BL6000Pro' => [ 'Blackview', 'BL6000 Pro' ],
2305
+ 'BV4900Pro' => [ 'Blackview', 'BV4900 Pro' ],
2306
+ 'BV5500Plus' => [ 'Blackview', 'BV5500 Plus' ],
2307
+ 'BV5900' => [ 'Blackview', 'BV5900' ],
2308
+ 'BV6300Pro' => [ 'Blackview', 'BV6300 Pro' ],
2309
+ 'BV6600' => [ 'Blackview', 'BV6600' ],
2310
+ 'BV6900' => [ 'Blackview', 'BV6900' ],
2311
  'BV8000Pro' => [ 'Blackview', 'BV8000 Pro' ],
2312
+ 'BV9100' => [ 'Blackview', 'BV9100' ],
2313
+ 'BV9500' => [ 'Blackview', 'BV9500' ],
2314
+ 'BV9500Plus' => [ 'Blackview', 'BV9500 Plus' ],
2315
+ 'BV9600E' => [ 'Blackview', 'BV9600E' ],
2316
+ 'BV9600Pro' => [ 'Blackview', 'BV9600 Pro' ],
2317
+ 'BV9800Pro' => [ 'Blackview', 'BV9800 Pro' ],
2318
+ 'BV9900E' => [ 'Blackview', 'BV9900E' ],
2319
+ 'BV9900Pro' => [ 'Blackview', 'BV9900 Pro' ],
2320
  'P2Lite' => [ 'Blackview', 'P2 Lite' ],
2321
 
2322
  'Endeavour!!' => [
2490
  'BLU VIVO SELFIE' => [ 'BLU', 'Vivo Selfie' ],
2491
  'VIVO XL' => [ 'BLU', 'Vivo XL' ],
2492
  'Vivo XL2' => [ 'BLU', 'Vivo XL2' ],
2493
+ 'Vivo XI PLUS' => [ 'BLU', 'Vivo XI+' ],
2494
  ],
2495
 
2496
  'R1 HD' => [ 'BLU', 'R1 HD' ],
2661
  'Aquaris U Lite' => [ 'bq', 'Aquaris U Lite' ],
2662
  'Aquaris U Plus' => [ 'bq', 'Aquaris U Plus' ],
2663
  'Aquaris X' => [ 'bq', 'Aquaris X' ],
2664
+ 'Aquaris X2' => [ 'bq', 'Aquaris X2' ],
2665
  'Aquaris X5' => [ 'bq', 'Aquaris X5' ],
2666
  'Aquaris X5 Plus' => [ 'bq', 'Aquaris X5 Plus' ],
2667
  'bq Curie' => [ 'bq', 'Curie', DeviceType::TABLET ],
2714
  'Bush Mytablet 2' => [ 'Bush', 'MyTablet 2', DeviceType::TABLET ],
2715
  ],
2716
 
2717
+ 'Carbon 1 Mark II' => [ 'Carbon', '1 MK II' ],
2718
+
2719
  'CT[0-9]{3,4}!!' => [
2720
  'CT700' => [ 'Carrefour', 'Touch Tablet CT700', DeviceType::TABLET ],
2721
  'CT701' => [ 'Carrefour', 'Touch Tablet CT701', DeviceType::TABLET ],
2777
  'B15' => [ 'CAT', 'B15' ],
2778
  'B15Q' => [ 'CAT', 'B15Q' ],
2779
  'S30' => [ 'CAT', 'S30' ],
2780
+ 'S31' => [ 'CAT', 'S31' ],
2781
  'S40' => [ 'CAT', 'S40' ],
2782
+ 'S41' => [ 'CAT', 'S41' ],
2783
+ 'S42' => [ 'CAT', 'S42' ],
2784
  'S50' => [ 'CAT', 'S50' ],
2785
  'S50c' => [ 'CAT', 'S50c' ],
2786
+ 'S52' => [ 'CAT', 'S52' ],
2787
+ 'S61' => [ 'CAT', 'S61' ],
2788
+ 'S62 Pro' => [ 'CAT', 'S62 Pro' ],
2789
 
2790
  'CAT!!' => [
2791
  'Cat Comet' => [ 'CAT', 'COMET', DeviceType::TABLET ],
3519
  'CROSSCALL WILD' => [ 'Crosscall', 'WILD' ],
3520
  ],
3521
 
3522
+ 'Core-M5' => [ 'Crosscall', 'Core-M5' ],
3523
+ 'Action-X3' => [ 'Crosscall', 'Action-X3' ],
3524
+ 'TREKKER-X3' => [ 'Crosscall', 'Trekker-X3' ],
3525
+ 'Trekker-X4' => [ 'Crosscall', 'Trekker-X4' ],
3526
+
3527
  'Novapad!!' => [
3528
  'Novapad 70 D124 FC' => [ 'Crypto', 'NovaPad 70 D124', DeviceType::TABLET ],
3529
  'Novapad 70 S124 FC' => [ 'Crypto', 'NovaPad 70 S124', DeviceType::TABLET ],
3546
  'CUBOT ONE-S' => [ 'Cubot', 'One S' ],
3547
  'CUBOT P7' => [ 'Cubot', 'P7' ],
3548
  'CUBOT P9' => [ 'Cubot', 'P9' ],
3549
+ 'CUBOT P20' => [ 'Cubot', 'P20' ],
3550
  'CUBOT S108' => [ 'Cubot', 'S108' ],
3551
  'CUBOT S222' => [ 'Cubot', 'S222' ],
3552
  'CUBOT X6' => [ 'Cubot', 'X6' ],
3553
+ 'CUBOT X18 Plus' => [ 'Cubot', 'X18 Plus' ],
3554
+ 'CUBOT POWER' => [ 'Cubot', 'Power' ],
3555
  ],
3556
 
3557
  'S222' => [ 'Cubot', 'S222' ],
3558
  'S308' => [ 'Cubot', 'S308' ],
3559
+ 'KINGKONG 5 Pro' => [ 'Cubot', 'King Kong 5 Pro' ],
3560
+ 'KINGKONG MINI2' => [ 'Cubot', 'King Kong Mini 2' ],
3561
 
3562
  '(CUBE ?)?(K8|U1|U2|U3|U5|U6|U8|U9)[0-9]?GT!!' => [
3563
  'CUBE K8GT' => [ 'Cube', 'K8GT', DeviceType::TABLET ],
3682
  ],
3683
 
3684
  'Cydle M7!' => [ 'Cydle', 'M7 MultiPAD', DeviceType::TABLET ],
3685
+ 'CS45XA' => [ 'Cyrus', 'CS45XA' ],
3686
  'EVDO1000' => [ 'Cyrus', 'EVDO 1000' ],
3687
  'GloryG1000' => [ 'Cyrus', 'Glory G1000' ],
3688
  'TVPAD Slim K3409' => [ 'Cyrus', 'TVPad Slim K3409', DeviceType::TABLET ],
3806
  'Dell XCD35' => [ 'Dell', 'XCD35' ],
3807
  'XCD35' => [ 'Dell', 'XCD35' ],
3808
  'DEM752HCF' => [ 'Denver', 'TAC-7018', DeviceType::TABLET ],
3809
+ 'TIQ-1049' => [ 'Denver', 'TIQ-1049', DeviceType::TABLET ],
3810
 
3811
  '(DENVER-)?TA[CD]-[0-9]{4,5}!!' => [
3812
  'TAC-7028' => [ 'Denver', 'TAC-7028', DeviceType::TABLET ],
3947
  'DM016SH' => [ 'Sharp', 'DM016SH', 'carrier' => 'Disney Mobile' ],
3948
  ],
3949
 
3950
+ 'DM001c Frozen' => [ 'Disney Mobile', 'DM001C Frozen', 'carrier' => 'Disney Mobile' ],
3951
+ 'DM001c Mickey' => [ 'Disney Mobile', 'DM001C Mickey', 'carrier' => 'Disney Mobile' ],
3952
+ 'DM001c Princess' => [ 'Disney Mobile', 'DM001C Princess', 'carrier' => 'Disney Mobile' ],
3953
+
3954
  'DJC Touchtab3' => [ 'DJC', 'Touchtab3', DeviceType::TABLET ],
3955
  'DJC Touchtab4' => [ 'DJC', 'Touchtab4', DeviceType::TABLET ],
3956
  'AirBook TTJ702' => [ 'DNS', 'Airbook TTJ702', DeviceType::TABLET ],
4028
  'Discovery2-DG500C' => [ 'Doogee', 'Discovery 2 DG500C' ],
4029
  'DG750 Iron Bone' => [ 'Doogee', 'Iron Bone DG750' ],
4030
  'TURBO DG2014' => [ 'Doogee', 'Turbo DG2014' ],
4031
+ 'S58Pro' => [ 'Doogee', 'S58 Pro' ],
4032
+ 'S68Pro' => [ 'Doogee', 'S68 Pro' ],
4033
+ 'S70Lite' => [ 'Doogee', 'S70 Lite' ],
4034
+ 'S88Pro' => [ 'Doogee', 'S88 Pro' ],
4035
+ 'S96Pro' => [ 'Doogee', 'S96 Pro' ],
4036
 
4037
  'DOOV!!' => [
4038
  'DOOV C1' => [ 'DOOV', 'C1' ],
4083
  ],
4084
 
4085
  'Doro 8030' => [ 'Doro', 'Liberto 822' ],
4086
+ 'Doro 8040' => [ 'Doro', '8040' ],
4087
  'Doro 824' => [ 'Doro', 'Liberto 824' ],
4088
  '825 T-Mobile' => [ 'Doro', 'Liberto 825' ],
4089
  'Doro PhoneEasy 745' => [ 'Doro', 'PhoneEasy 745' ],
4090
+ 'DSB-0220' => [ 'Doro', '8080' ],
4091
+ 'DSB-0230' => [ 'Doro', '8050' ],
4092
  'M975' => [ 'Double Power', 'M975', DeviceType::TABLET ],
4093
  'TD-1010' => [ 'Double Power', 'TD-1010', DeviceType::TABLET ],
4094
  'Tablet-P27' => [ 'DracoTek', 'P27 Tablet', DeviceType::TABLET ],
4321
  'E8051HD' => [ 'Evertek', 'Everpad E8051HD', DeviceType::TABLET ],
4322
  ],
4323
 
4324
+ 'EVOLVEO StrongPhone G7' => [ 'EVOLVEO', 'StrongPhone G7' ],
4325
+ 'EVOLVEO StrongPhone G9' => [ 'EVOLVEO', 'StrongPhone G9' ],
4326
+
4327
  'P10AN' => [ 'Exper', 'Easypad P10AN', DeviceType::TABLET ],
4328
 
4329
  '(Explay|X-tremer|ActiveD|Informer|Surfer)!!' => [
4380
  'FP1' => [ 'Fairphone', '1' ],
4381
  'FP1U' => [ 'Fairphone', '1' ],
4382
  'FP2' => [ 'Fairphone', '2' ],
4383
+ 'FP3' => [ 'Fairphone', '3' ],
4384
+ 'FP4' => [ 'Fairphone', '4' ],
4385
 
4386
  'FDT!!' => [
4387
  'FDT C838' => [ 'FDT', 'C838' ],
4591
  'F-01H' => [ 'Fujitsu', 'arrows Fit F-01H', 'carrier' => 'DoCoMo' ],
4592
  'F-01J' => [ 'Fujitsu', 'arrows NX F-01J', 'carrier' => 'DoCoMo' ],
4593
  'F-01K' => [ 'Fujitsu', 'arrows NX F-01K', 'carrier' => 'DoCoMo' ],
4594
+ 'F-01L' => [ 'Fujitsu', 'らくらくスマートフォン me F-01L', 'carrier' => 'DoCoMo' ],
4595
  'F-02E' => [ 'Fujitsu', 'ARROWS X F-02E', 'carrier' => 'DoCoMo' ],
4596
  'F-02F' => [ 'Fujitsu', 'ARROWS Tab F-02F', DeviceType::TABLET, 'carrier' => 'DoCoMo' ],
4597
  'F-02G' => [ 'Fujitsu', 'ARROWS NX F-02G', 'carrier' => 'DoCoMo' ],
4598
  'F-02H' => [ 'Fujitsu', 'arrows NX F-02H', 'carrier' => 'DoCoMo' ],
4599
  'F-02K' => [ 'Fujitsu', 'ARROWS Tab F-02K', DeviceType::TABLET, 'carrier' => 'DoCoMo' ],
4600
+ 'F-02L' => [ 'Fujitsu', 'arrows Be3 F-02L', 'carrier' => 'DoCoMo' ],
4601
  'F-03D' => [ 'Fujitsu', 'ARROWS Kiss F-03D', 'carrier' => 'DoCoMo' ],
4602
  'F-03E' => [ 'Fujitsu', 'ARROWS Kiss with JILL STUART F-03E', 'carrier' => 'DoCoMo' ],
4603
  'F-03F' => [ 'Fujitsu', 'F-03F', 'carrier' => 'Disney Mobile' ],
4826
  'Gigaset QV1030' => [ 'Gigaset', 'QV1030', DeviceType::TABLET ],
4827
  ],
4828
 
4829
+ 'GS110' => [ 'Gigaset', 'GS110' ],
4830
+ 'GS185' => [ 'Gigaset', 'GS185' ],
4831
+ 'GS190' => [ 'Gigaset', 'GS190' ],
4832
+ 'GS195' => [ 'Gigaset', 'GS195' ],
4833
+ 'GS270' => [ 'Gigaset', 'GS270' ],
4834
+ 'GS270 plus' => [ 'Gigaset', 'GS270 Plus' ],
4835
+ 'GS280' => [ 'Gigaset', 'GS280' ],
4836
+ 'GS290' => [ 'Gigaset', 'GS290' ],
4837
+ 'GS370 Plus' => [ 'Gigaset', 'GS370 Plus' ],
4838
+ 'E940-2795-00' => [ 'Gigaset', 'GS4' ],
4839
+ 'E940-2796-00' => [ 'Gigaset', 'GS4' ],
4840
+ 'GX290' => [ 'Gigaset', 'GX290' ],
4841
+
4842
  '80-1' => [ 'Gigaset', 'Maxwell 10', DeviceType::DECT ],
4843
  'SL930' => [ 'Gigaset', 'SL930', DeviceType::DECT ],
4844
 
5094
  'X710d' => [ 'Haipai', 'X710D' ],
5095
  'X720D' => [ 'Haipai', 'X720D' ],
5096
 
5097
+ 'Hammer Blade2 PRO' => [ 'Hammer', 'Blade 2 Pro' ],
5098
+ 'Hammer Blade 3' => [ 'Hammer', 'Blade 3' ],
5099
+ 'Hammer Energy' => [ 'Hammer', 'Energy' ],
5100
+ 'Hammer Energy 2' => [ 'Hammer', 'Energy 2' ],
5101
+ 'Hammer Energy 18x9' => [ 'Hammer', 'Energy 18x9' ],
5102
+ 'Hammer Explorer' => [ 'Hammer', 'Explorer' ],
5103
+ 'Hammer Explorer Pro' => [ 'Hammer', 'Explorer Pro' ],
5104
+
5105
  'SN[0-9]!!' => [
5106
  'SN10T1' => [ 'HANNspree', 'HANNSpad SN10T1', DeviceType::TABLET ],
5107
  'SN10T2' => [ 'HANNspree', 'HANNSpad SN10T2', DeviceType::TABLET ],
5331
  'Hisense HS-E910' => [ 'Hisense', 'E910' ],
5332
  'Hisense EG909' => [ 'Hisense', 'EG909' ],
5333
  'HS-Hisense F20T' => [ 'Hisense', 'F20T' ],
5334
+ 'Hisense F24' => [ 'Hisense', 'F24' ],
5335
  'Hisense F31' => [ 'Hisense', 'F31' ],
5336
+ 'Hisense Infinity H12' => [ 'Hisense', 'Infinity H12' ],
5337
  'HS-Hisense I632T' => [ 'Hisense', 'I632T' ],
5338
  'HS-Hisense I635T' => [ 'Hisense', 'I635T' ],
5339
  'HS-Hisense I639T' => [ 'Hisense', 'I639T' ],
5921
  'HTC M9(e|pt|px|u|w)!' => [ 'HTC', 'One (M9)' ],
5922
  'HTC One M9PLUS' => [ 'HTC', 'One (M9 Plus)' ],
5923
  'HTC One M9PLUS Prime Camera Edition' => [ 'HTC', 'One (M9 Plus)' ],
5924
+ 'HTC One M9 Prime Camera Edition' => [ 'HTC', 'One (M9 Prime)' ],
5925
  'HTC M9pw' => [ 'HTC', 'One (M9 Plus)' ],
5926
  'HTC 0PK71' => [ 'HTC', 'One (M9 Plus)' ],
5927
  'HTC 0PK72' => [ 'HTC', 'One (M9 Plus)' ],
6018
  'HTC U-3w' => [ 'HTC', 'U11'],
6019
  'HTC U-3u' => [ 'HTC', 'U11'],
6020
  'HTC 2PZC100' => [ 'HTC', 'U11'],
6021
+ 'HTC U11 life' => [ 'HTC', 'U11 Life'],
6022
+ 'HTC U11 plus' => [ 'HTC', 'U11 Plus'],
6023
  'HTC 2Q4D200' => [ 'HTC', 'U11 Plus'],
6024
  'HTC 2Q3F2' => [ 'HTC', 'U11 Plus'],
6025
  'HTC 2Q3F3' => [ 'HTC', 'U11 Plus'],
6026
+ 'HTC U12+' => [ 'HTC', 'U12+'],
6027
+ 'HTC U12 life' => [ 'HTC', 'U12 Life'],
6028
  'HTC Velocity!' => [ 'HTC', 'Velocity 4G'],
6029
  'HTCVelocity 4G' => [ 'HTC', 'Velocity 4G'],
6030
  'HTC Vivid' => [ 'HTC', 'Vivid'],
6125
  'One V' => [ 'HTC', 'One V' ],
6126
  'One' => [ 'HTC', 'One' ],
6127
  'One M7' => [ 'HTC', 'One' ],
6128
+ 'One Max' => [ 'HTC', 'One Max' ],
6129
  'EndeavorU' => [ 'HTC', 'One X' ],
6130
  '2PQ93' => [ 'HTC', 'One (A9)' ],
6131
  'm8wl' => [ 'HTC', 'One (M8)' ],
6260
  'Huawei MediaPad T1 7.0 3G' => [ 'Huawei', 'MediaPad T1', DeviceType::TABLET ],
6261
  'Huawei MediaPad T1 8.0 4G' => [ 'Huawei', 'MediaPad T1', DeviceType::TABLET ],
6262
  'Huawei MediaPad T1 10 4G' => [ 'Huawei', 'MediaPad T1', DeviceType::TABLET ],
6263
+
6264
  'MediaPad!!' => [
6265
  'MediaPad' => [ 'Huawei', 'MediaPad', DeviceType::TABLET ],
6266
  'MediaPad 7 FHD' => [ 'Huawei', 'MediaPad 7', DeviceType::TABLET ],
6330
  'BGO-(DL09|L03)!' => [ 'Huawei', 'MediaPad T2', DeviceType::TABLET ],
6331
  'KOB-(L09|W09)!' => [ 'Huawei', 'MediaPad T3', DeviceType::TABLET ],
6332
  'AGS-(L09|W09)!' => [ 'Huawei', 'MediaPad T3', DeviceType::TABLET ],
6333
+ 'BG2-(U01|W09)!' => [ 'Huawei', 'MediaPad T3', DeviceType::TABLET ],
6334
+ 'AGS2-(L09|W09)!' => [ 'Huawei', 'MediaPad T5', DeviceType::TABLET ],
6335
+ 'KOB2-(W09)!' => [ 'Huawei', 'MediaPad T8', DeviceType::TABLET ],
6336
  'BTV-(DL09|W09)!' => [ 'Huawei', 'MediaPad M3', DeviceType::TABLET ],
6337
  'CPN-(W09|AL00|L09)!' => [ 'Huawei', 'MediaPad M3 Lite', DeviceType::TABLET ],
6338
  'BAH-(W09|AL00|L09)!' => [ 'Huawei', 'MediaPad M3 Lite', DeviceType::TABLET ],
6339
+ 'SHT-W09' => [ 'Huawei', 'MediaPad M5', DeviceType::TABLET ],
6340
+ 'CMR-(AL09|AL19|W09|W19)!' => [ 'Huawei', 'MediaPad M5', DeviceType::TABLET ],
6341
+ 'BAH2-(AL10|L09|W09|W19)!' => [ 'Huawei', 'MediaPad M5 Lite', DeviceType::TABLET ],
6342
+ 'SCM-(AL09|W09)!' => [ 'Huawei', 'MediaPad M6', DeviceType::TABLET ],
6343
+
6344
+ 'BAH3-(W09)!' => [ 'Huawei', 'MatePad 10.4', DeviceType::TABLET ],
6345
 
6346
  'JDN-W09' => [ 'Huawei', 'Honor Pad 2', DeviceType::TABLET ],
6347
+ 'JDN2-AL00HN' => [ 'Huawei', 'Honor Tab 5', DeviceType::TABLET ],
6348
+ 'JDN2-W09HN' => [ 'Huawei', 'Honor Tab 5', DeviceType::TABLET ],
6349
 
6350
+ '(HUAWEI )?(ALP|BLA|CRR|EVR|HMA|LIO|LON|LYA|MATE|MHA|MT1|MT2|MT7|M200|NOH|NXT|SNE|TAS|Z100)!!' => [
6351
  '(HW-|HUAWEI )?MT1-(T00|U06)!' => [ 'Huawei', 'Ascend Mate' ],
6352
  '(HW-|HUAWEI )?MATE-U06!' => [ 'Huawei', 'Ascend Mate' ],
6353
  '(HW-|HUAWEI )?MT2-?(C00|L01|L02|L03|L05)!' => [ 'Huawei', 'Ascend Mate 2' ],
6359
  '(HW-|HUAWEI )?LON-(AL00|L29)!' => [ 'Huawei', 'Mate 9 Pro' ],
6360
  '(HW-|HUAWEI )?ALP-(AL00|L09|L29|TL00)!' => [ 'Huawei', 'Mate 10' ],
6361
  '(HW-|HUAWEI )?BLA-(A09|AL00|L09|L29|L30|TL00)!' => [ 'Huawei', 'Mate 10 Pro' ],
6362
+ '(HW-|HUAWEI )?HMA-(AL00|L09|L29|TL00)!' => [ 'Huawei', 'Mate 20' ],
6363
+ '(HW-|HUAWEI )?EVR-(AL00|AN00|L29|N29|TL00)!' => [ 'Huawei', 'Mate 20 X' ],
6364
+ '(HW-|HUAWEI )?SNE-(AL00|LX1|LX2|LX3)!' => [ 'Huawei', 'Mate 20 Lite' ],
6365
+ '(HW-|HUAWEI )?LYA-(AL00|AL00P|AL10|L09|L0C|L29|TL00)!' => [ 'Huawei', 'Mate 20 Pro' ],
6366
+ '(HW-|HUAWEI )?TAS-(AL00)!' => [ 'Huawei', 'Mate 30' ],
6367
+ '(HW-|HUAWEI )?LIO-(AL00|AN00|L29)!' => [ 'Huawei', 'Mate 30 Pro' ],
6368
+ '(HW-|HUAWEI )?NOH-(NX9)!' => [ 'Huawei', 'Mate 40' ],
6369
  '(HW-|HUAWEI )?CRR-(L09|CL00|CL20|TL00|UL00|UL20)!' => [ 'Huawei', 'Mate S' ],
6370
  ],
6371
 
6372
+ '(HW-|HUAWEI )?(ATU|DRA|DVC|FLA|JKM|TIT|TAG||MRD|NCE|POT|TRT|SLA)!!' => [
6373
  '(HW-|HUAWEI )?TIT-(AL00|CL00|CL10|L01|TL00|U02)!' => [ 'Huawei', 'Enjoy 5' ],
6374
  '(HW-|HUAWEI )?TAG-(AL00|CL00|L13|TL00)!' => [ 'Huawei', 'Enjoy 5S' ],
6375
  '(HW-|HUAWEI )?NCE-(AL00|AL10|TL10)!' => [ 'Huawei', 'Enjoy 6' ],
6376
  '(HW-|HUAWEI )?SLA-(AL00|L02|L03|L22|TL10)!' => [ 'Huawei', 'Enjoy 7' ],
6377
  '(HW-|HUAWEI )?TRT-(AL00|L21|L53|LX1|LX2|LX3|TL10)!' => [ 'Huawei', 'Enjoy 7 Plus' ],
6378
  '(HW-|HUAWEI )?FLA-(AL10|AL20|LX1|LX2|LX3|TL10)!' => [ 'Huawei', 'Enjoy 8 Plus' ],
6379
+ '(HW-|HUAWEI )?DRA-(AL00|L01|L21|LX2|LX9)!' => [ 'Huawei', 'Enjoy 8e' ],
6380
+ '(HW-|HUAWEI )?ATU-(AL10|L11|L21|L22|L31|LX3|TL10)!' => [ 'Huawei', 'Enjoy 8e' ],
6381
+ '(HW-|HUAWEI )?POT-(AL00a|LX1|LX1AF|LX1T|LX2J|LX3)!' => [ 'Huawei', 'Enjoy 9S' ],
6382
+ '(HW-|HUAWEI )?MRD-(AL00|LX1|LX1F|LX1N|LX2|LX3)!' => [ 'Huawei', 'Enjoy 9e' ],
6383
+ '(HW-|HUAWEI )?JKM-(AL00|AL00a|AL00b|LX1|LX2|LX3|TL00)!' => [ 'Huawei', 'Enjoy 9 Plus' ],
6384
+ '(HW-|HUAWEI )?DVC-(AN20)!' => [ 'Huawei', 'Enjoy 20 Pro' ],
6385
  ],
6386
 
6387
+ '(HW-|HUAWEI |HONOR )?(ATH|AUM|BLN|BKL|BKK|BND|CHE|CHM|COL|COR|DUA|DUK|DLI|EDI|FRD|HLK|HN3|H30|H60|HOL|HRY|JAT|JMM|JSN|LRA|KIW|KSA|LLD|NEM|NMO|NTH|NTN|OXF|PE|PCT|PLK|RNE|SCL|TNY|KNT|CAM|STF|HDN|YAL)!!' => [
6388
  'H30 U10' => [ 'Huawei', 'Honor 3C' ],
6389
  '(HW-|HUAWEI )?HN3-(U00|U01)!' => [ 'Huawei', 'Honor 3' ],
6390
  '(HW-|HUAWEI |HONOR )?H30[- ](C00|L01|L02|T00|T10|U10)!' => [ 'Huawei', 'Honor 3C' ],
6403
  '(HW-|HUAWEI )?PE-(CL00|TL00|TL00M|TL10|TL20|UL00)!' => [ 'Huawei', 'Honor 6 Plus' ],
6404
  '(HW-|HUAWEI |HONOR )?PLK-(L01|AL10|CL00|UL00|TL00|TL01H)!' => [ 'Huawei', 'Honor 7' ],
6405
  '(HW-|HUAWEI )?ATH-(AL00|CL00|TL00|TL00H|UL00)!' => [ 'Huawei', 'Honor 7i' ],
6406
+ '(HW-|HUAWEI )?AUM-(L29)!' => [ 'Huawei', 'Honor 7A' ],
6407
+ '(HW-|HUAWEI )?DUA-(L22)!' => [ 'Huawei', 'Honor 7S' ],
6408
  '(HW-|HUAWEI )?BND-(AL00|AL10|L21|L24|L31|L34|TL10)!' => [ 'Huawei', 'Honor 7X' ],
6409
+ '(HW-|HUAWEI )?DUA-(AL00|TL00)!' => [ 'Huawei', 'Honor 7 Play' ],
6410
  '(HW-|HUAWEI )?FRD-(AL00|AL10|DL00|L02|L04|L09|L14|L19)!' => [ 'Huawei', 'Honor 8' ],
6411
+ '(HW-|HUAWEI )?JAT-(L29|L41|LX1|LX3)!' => [ 'Huawei', 'Honor 8A Pro' ],
6412
+ '(HW-|HUAWEI )?BKK-(AL00|AL10|L21|LX2)!' => [ 'Huawei', 'Honor 8C' ],
6413
+ '(HW-|HUAWEI )?KSA-(LX9)!' => [ 'Huawei', 'Honor 8S' ],
6414
+ '(HW-|HUAWEI )?JSN-(AL00|AL00a|L21|L22|L23|L42|TL00)!' => [ 'Huawei', 'Honor 8X' ],
6415
  '(HW-|HUAWEI )?ATH-(UL01|UL06)!' => [ 'Huawei', 'Honor ShotX' ],
6416
  '(HW-|HUAWEI )?KNT-(AL10|AL20|TL10|UL10)!' => [ 'Huawei', 'Honor V8' ],
6417
  '(HW-|HUAWEI )?EDI-(AL10)!' => [ 'Huawei', 'Honor Note 8' ],
6418
  '(HW-|HUAWEI )?STF-(AL00|AL10|L09|TL10)!' => [ 'Huawei', 'Honor 9' ],
6419
+ '(HW-|HUAWEI )?LLD-(AL00|AL10|AL20|L21|L31)!' => [ 'Huawei', 'Honor 9 Lite' ],
6420
  '(HW-|HUAWEI )?RNE-(AL00|L01|L02|L03|L21|L22|L23|L31)!' => [ 'Huawei', 'Honor 9i' ],
6421
+ '(HW-|HUAWEI )?HLK-(AL00|AL10)!' => [ 'Huawei', 'Honor 9X' ],
6422
  '(HW-|HUAWEI )?COL-(AL00|AL10|L29|TL00|TL10)!' => [ 'Huawei', 'Honor 10' ],
6423
+ '(HW-|HUAWEI )?HRY-(LX1)!' => [ 'Huawei', 'Honor 10 Lite' ],
6424
+ '(HW-|HUAWEI )?YAL-(AL00|AL10|L21|L41)!' => [ 'Huawei', 'Honor 20' ],
6425
+ '(HW-|HUAWEI )?LRA-(AL00)!' => [ 'Huawei', 'Honor 20 Lite' ],
6426
+ '(HW-|HUAWEI )?NTH-(NX9)!' => [ 'Huawei', 'Honor 50' ],
6427
+ '(HW-|HUAWEI )?NTN-(LX1)!' => [ 'Huawei', 'Honor 50 Lite' ],
6428
  '(HW-|HUAWEI )?DUK-(AL20|L09|TL30)!' => [ 'Huawei', 'Honor V9' ],
6429
  '(HW-|HUAWEI )?JMM-(AL00|AL10|L22|L22HN|TL00)!' => [ 'Huawei', 'Honor V9 Play' ],
6430
  '(HW-|HUAWEI )?BKL-(AL00|AL20|L04|L09)!' => [ 'Huawei', 'Honor V10' ],
6431
+ '(HW-|HUAWEI )?PCT-(AL10|L29|TL10)!' => [ 'Huawei', 'Honor V20' ],
6432
+ '(HW-|HUAWEI )?OXF-(AN10)!' => [ 'Huawei', 'Honor V30 Pro' ],
6433
+ '(HW-|HUAWEI )?TNY-(AL00)!' => [ 'Huawei', 'Honor Magic 2' ],
6434
+ '(HW-|HUAWEI )?COR-(AL10|L29)!' => [ 'Huawei', 'Honor Play' ],
6435
  '(HW-|HUAWEI )?HDN-(L09|W09)!' => [ 'Huawei', 'Honor WaterPlay', DeviceType::TABLET ],
6436
  ],
6437
 
6442
  '(HW-|HUAWEI )?BLL-(L21|L22|L23)!' => [ 'Huawei', 'GR5 (2017)' ],
6443
  ],
6444
 
6445
+ '(HW-|HUAWEI )?(ALE|ANA|ANE|CDY|CLT|D2|DAV|ELE|ELS|EML|EVA|FIG|G6|G7|GRA|JNY|MAR|M100|P2|P6|P7|PPA|PRA|RIO|SC|Sophia|STK|VIE|VKY|VNS|VOG|VTR|WAS)!!' => [
6446
  'HUAWEI D2' => [ 'Huawei', 'Ascend D2' ],
6447
  '(HW-|HUAWEI )?D2-(0082|2010|5000|6070|6114)!' => [ 'Huawei', 'Ascend D2' ],
6448
  '(HW-|HUAWEI )?G6-(C00|L11|L22|L33|T00|U00|U10|U34|U251)!' => [ 'Huawei', 'Ascend G6' ],
6467
  '(HW-|HUAWEI )?WAS-?(AL00|L03T|LX1|LX1A|LX2|LX2J|LX3|TL10)!' => [ 'Huawei', 'P10 Lite' ],
6468
  '(HW-|HUAWEI )?VKY-?(AL00|L09|L29|TL00)!' => [ 'Huawei', 'P10 Plus' ],
6469
  '(HW-|HUAWEI )?FIG-?(AL00|AL10|LA1|LX1|LX3|TL00)!' => [ 'Huawei', 'P Smart' ],
6470
+ '(HW-|HUAWEI )?STK-?(L21|L22|LX1|LX3)!' => [ 'Huawei', 'P Smart Z' ],
6471
+ '(HW-|HUAWEI )?PPA-?(LX1|LX2)!' => [ 'Huawei', 'P Smart (2021)' ],
6472
  '(HW-|HUAWEI )?EML-?(AL00|L09|L29|TL00)!' => [ 'Huawei', 'P20' ],
6473
+ '(HW-|HUAWEI )?ANE-?(AL00|L21|LX1|LX2|LX2J|LX3)!' => [ 'Huawei', 'P20 Lite' ],
6474
+ '(HW-|HUAWEI )?CLT-?(AL00|AL01|L04|L09|L29|L39|TL00|TL01)!' => [ 'Huawei', 'P20 Pro' ],
6475
+ '(HW-|HUAWEI )?ELE-?(AL00|L04|L09|L29|TL00)!' => [ 'Huawei', 'P30' ],
6476
+ '(HW-|HUAWEI )?VOG-?(AL00|AL10|L04|L09|L29|TL00)!' => [ 'Huawei', 'P30 Pro' ],
6477
+ '(HW-|HUAWEI )?MAR-?(LX1B)!' => [ 'Huawei', 'P30 Lite' ],
6478
+ '(HW-|HUAWEI )?ANA-?(NX9)!' => [ 'Huawei', 'P40' ],
6479
+ '(HW-|HUAWEI )?JNY-?(LX1)!' => [ 'Huawei', 'P40 Lite' ],
6480
+ '(HW-|HUAWEI )?CDY-?(NX9A)!' => [ 'Huawei', 'P40 Lite' ],
6481
+ '(HW-|HUAWEI )?ELS-?(N39|NX9)!' => [ 'Huawei', 'P40 Pro' ],
6482
  ],
6483
 
6484
  'Rock-(AL00|CL00|L01|L03)!' => [ 'Huawei', 'Ascend G7' ],
6485
  'HUAWEI A168-(AL10|DL09|L09|L29)!' => [ 'Huawei', 'P9' ],
6486
 
6487
+ '(HW-|HUAWEI )?(AMN|ART|AQM|CRO|LUA|CUN|DUB|SCC|SCU|CAM|LDN|LYO|MED|MYA)!!' => [
6488
  '(HW-|HUAWEI )?CRO-(L02|L03|L22|U00)!' => [ 'Huawei', 'Y3 (2017)' ],
6489
  '(HW-|HUAWEI )?LUA-(L01|L02|L03|L13|L21|L22|L23|U02|U03|U22|U23)!' => [ 'Huawei', 'Y3 II' ],
6490
  '(HW-|HUAWEI )?CUN-(AL00|L01|L02|L03|L21|L22|L23|L33|TL00|U29)!' => [ 'Huawei', 'Y5 II' ],
6491
  '(HW-|HUAWEI )?MYA-(AL10|L02|L03|L11|L13|L22|L23|L41|TL10)!' => [ 'Huawei', 'Y5 (2017)' ],
6492
+ '(HW-|HUAWEI )?AMN-(LX2|LX9)!' => [ 'Huawei', 'Y5 (2019)' ],
6493
  '(HW-|HUAWEI )?SCC-(U21)!' => [ 'Huawei', 'Y6' ],
6494
  '(HW-|HUAWEI )?SCU-(U31)!' => [ 'Huawei', 'Y6C' ],
6495
  '(HW-|HUAWEI )?CAM-(L01|L03|L11|L21|L23|L32|AL00|CL00|TL00|UL00)!' => [ 'Huawei', 'Y6 II' ],
6496
  '(HW-|HUAWEI )?LYO-(L01|L02|L21)!' => [ 'Huawei', 'Y6 II Compact' ],
6497
+ '(HW-|HUAWEI )?MED-(LX9N)!' => [ 'Huawei', 'Y6p' ],
6498
  '(HW-|HUAWEI )?LDN-(AL00|L01|L21|LX2|LX3|TL00)!' => [ 'Huawei', 'Y7 Prime (2018)' ],
6499
+ '(HW-|HUAWEI )?DUB-(AL20|LX1|LX3)!' => [ 'Huawei', 'Y7 Prime (2019)' ],
6500
+ '(HW-|HUAWEI )?ART-(L29)!' => [ 'Huawei', 'Y7p' ],
6501
+ '(HW-|HUAWEI )?AQM-(LX1)!' => [ 'Huawei', 'Y8p' ],
6502
  ],
6503
 
6504
  '(HW-|HUAWEI )?CAZ-(AL10|TL10|TL20)!' => [ 'Huawei', 'Nova' ],
6505
  '(HW-|HUAWEI )?CAN-(L01|L11|L12)!' => [ 'Huawei', 'Nova' ],
6506
  '(HW-|HUAWEI )?MLA-(L01|L03|L11|L12|L13)!' => [ 'Huawei', 'Nova Plus' ],
6507
  '(HW-|HUAWEI )?DIG-(AL00|L01|L03|L21|TL10)!' => [ 'Huawei', 'Nova Smart' ],
6508
+ '(HW-|HUAWEI )?PIC-(LX9)!' => [ 'Huawei', 'Nova 2' ],
6509
  '(HW-|HUAWEI )?BAC-(AL00|L03|L21|L22|TL00)!' => [ 'Huawei', 'Nova 2 Plus' ],
6510
  '(HW-|HUAWEI )?HWI-(AL00|TL00)!' => [ 'Huawei', 'Nova 2S' ],
6511
+ '(HW-|HUAWEI )?PAR-(AL00|LX1|LX1M|LX9|TL00)!' => [ 'Huawei', 'Nova 3' ],
6512
+ '(HW-|HUAWEI )?INE-(AL00|LX1|LX1r|LX2||LX2r|TL00)!' => [ 'Huawei', 'Nova 3i' ],
6513
+ '(HW-|HUAWEI )?MAR-(AL00|LX1A|LX1M|LX2|LX3A|TL00)!' => [ 'Huawei', 'Nova 4e' ],
6514
  '(HW-|HUAWEI )?MLA-(AL00|AL10)!' => [ 'Huawei', 'Maimang 5' ],
6515
  '(HW-|HUAWEI )?MLA-(TL00|TL10|UL00)!' => [ 'Huawei', 'G9 Plus' ],
6516
 
6937
  'Ultra Wave' => [ 'Hyundai', 'Ultra Wave' ],
6938
  'A7 HD' => [ 'Hyundai', 'A7 HD', DeviceType::TABLET ],
6939
  'MW1031' => [ 'Hyundai', 'MW1031', DeviceType::TABLET ],
6940
+ 'IS530' => [ 'I.safe', 'IS530.0' ],
6941
  'Elektra L' => [ 'i-Joy', 'Elektra L' ],
6942
  'Elektra XL' => [ 'i-Joy', 'Elektra XL' ],
6943
  'i-Joy i-Call' => [ 'i-Joy', 'i-Call' ],
7301
  'Infinix X1000' => [ 'Infinix', 'Joypad 10 X1000', DeviceType::TABLET ],
7302
  ],
7303
 
7304
+ 'S5 Pro' => [ 'Infinix', 'S5 Pro' ],
7305
+
7306
  'IN[0-9]{3,3}!!' => [
7307
  'IN260' => [ 'InFocus', 'IN260' ],
7308
  'IN330' => [ 'InFocus', 'IN330' ],
7668
  'IVIO DE38' => [ 'Ivio', 'DE38' ],
7669
  ],
7670
 
7671
+ 'MC401 GWL' => [ 'iWaylink', 'MC401' ],
7672
  'iwoo i900' => [ 'iwoo', 'i900' ],
7673
 
7674
  '(JIAYU|JY)!!' => [
8092
 
8093
  'KY[FLTYV][0-9]{2,2}!!' => [
8094
  'KYF31' => [ 'Kyocera', 'GRATINA KYF31', 'carrier' => 'au' ],
8095
+ 'KYF33' => [ 'Kyocera', 'TORQUE X01 KYF31', 'carrier' => 'au' ],
8096
  'KYF37' => [ 'Kyocera', 'GRATINA KYF37', 'carrier' => 'au' ],
8097
  'KYL23' => [ 'Kyocera', 'miraie KYL23', 'carrier' => 'au' ],
8098
  'KYY21' => [ 'Kyocera', 'URBANO L01', 'carrier' => 'au' ],
8106
  'KYV36' => [ 'Kyocera', 'DIGNO rafre KYV36', 'carrier' => 'au' ],
8107
  'KYV37' => [ 'Kyocera', 'Qua phone', 'carrier' => 'au' ],
8108
  'KYV38' => [ 'Kyocera', 'URBANO V03 KYV38', 'carrier' => 'au' ],
8109
+ 'KYV39' => [ 'Kyocera', 'miraie f KYL39', 'carrier' => 'au' ],
8110
  'KYV40' => [ 'Kyocera', 'rafre KYV40', 'carrier' => 'au' ],
8111
  'KYV40U' => [ 'Kyocera', 'DIGNO W KYV40U', 'carrier' => 'UQ mobile' ],
8112
  'KYV41' => [ 'Kyocera', 'TORQUE G03 KYV41', 'carrier' => 'au' ],
8113
  'KYV42' => [ 'Kyocera', 'Qua phone QX', 'carrier' => 'au' ],
8114
+ 'KYV42 u' => [ 'Kyocera', 'DIGNO V KYV42', 'carrier' => 'UQ mobile' ],
8115
+ 'KYV44' => [ 'Kyocera', 'Qua phone QZ', 'carrier' => 'au' ],
8116
+ 'KYV44 u' => [ 'Kyocera', 'DIGNO A KYV44', 'carrier' => 'UQ mobile' ],
8117
  'KYT31' => [ 'Kyocera', 'Qua tab', DeviceType::TABLET, 'carrier' => 'au' ],
8118
+ 'KYT32' => [ 'Kyocera', 'Qua tab QZ8', DeviceType::TABLET, 'carrier' => 'au' ],
8119
  'KYT33' => [ 'Kyocera', 'Qua tab QZ10', DeviceType::TABLET, 'carrier' => 'au' ],
8120
  ],
8121
 
8255
  'W810' => [ 'K-Touch', 'W810' ],
8256
  'W880' => [ 'K-Touch', 'W880' ],
8257
 
8258
+ 'Land Rover Explore' => [ 'Land Rover', 'Explore' ],
8259
+ 'Land Rover Explore R' => [ 'Land Rover', 'Explore R' ],
8260
+
8261
  '(Lanix )?(Ilium|llium)!!' => [
8262
  'ILIUM L400' => [ 'Lanix', 'Ilium L400' ],
8263
  'Ilium L820' => [ 'Lanix', 'Ilium L820' ],
8602
  'Lenovo YT3-X50F' => [ 'Lenovo', 'Yoga Tablet 3', DeviceType::TABLET ],
8603
  'Lenovo YT3-X50L' => [ 'Lenovo', 'Yoga Tablet 3', DeviceType::TABLET ],
8604
  'Lenovo YT3-850F' => [ 'Lenovo', 'Yoga Tablet 3', DeviceType::TABLET ],
8605
+ 'Lenovo YT-J706F' => [ 'Lenovo', 'Yoga Tab 11', DeviceType::TABLET ],
8606
  'Lenovo YT-X703F' => [ 'Lenovo', 'Yoga Tablet 3 Plus', DeviceType::TABLET ],
8607
+ 'Lenovo YT-X705F' => [ 'Lenovo', 'Yoga Smart Tab', DeviceType::TABLET ],
8608
  'Lenovo YT3-X90F' => [ 'Lenovo', 'Yoga Tablet 3 Pro', DeviceType::TABLET ],
8609
  'Lenovo YT3-X90L' => [ 'Lenovo', 'Yoga Tablet 3 Pro', DeviceType::TABLET ],
8610
 
8623
  ],
8624
 
8625
  'Lenovo TB-7304F' => [ 'Lenovo', 'Tab 7 Essential', DeviceType::TABLET ],
8626
+ 'Lenovo TB-7305F' => [ 'Lenovo', 'Tab M7', DeviceType::TABLET ],
8627
+ 'Lenovo TB-7305X' => [ 'Lenovo', 'Tab M7', DeviceType::TABLET ],
8628
+ 'Lenovo TB-8304F1' => [ 'Lenovo', 'Tab 8', DeviceType::TABLET ],
8629
+ 'Lenovo TB-8505FS' => [ 'Lenovo', 'Smart Tab M8', DeviceType::TABLET ],
8630
+ 'Lenovo TB-8704X' => [ 'Lenovo', 'Tab 4 8 Plus', DeviceType::TABLET ],
8631
+ 'Lenovo TB-8705F' => [ 'Lenovo', 'Tab M8', DeviceType::TABLET ],
8632
+ 'Lenovo TB-J606F' => [ 'Lenovo', 'Tab P11', DeviceType::TABLET ],
8633
+ 'Lenovo TB-J606L' => [ 'Lenovo', 'Tab P11', DeviceType::TABLET ],
8634
+ 'Lenovo TB-J607Z' => [ 'Lenovo', 'Tab P11', DeviceType::TABLET ],
8635
+ 'Lenovo TB-J616F' => [ 'Lenovo', 'Tab P11', DeviceType::TABLET ],
8636
+ 'Lenovo TB-J706F' => [ 'Lenovo', 'Tab P11 Pro', DeviceType::TABLET ],
8637
+ 'Lenovo TB-J716F' => [ 'Lenovo', 'XiaoXin Pad Pro 2021', DeviceType::TABLET ],
8638
+ 'Lenovo TB-X104F' => [ 'Lenovo', 'Tab E10', DeviceType::TABLET ],
8639
+ 'Lenovo TB-X304L' => [ 'Lenovo', 'Tab 4 10', DeviceType::TABLET ],
8640
+ 'Lenovo TB-X306F' => [ 'Lenovo', 'Tab M10 HD', DeviceType::TABLET ],
8641
+ 'Lenovo TB-X306X' => [ 'Lenovo', 'Tab M10 HD', DeviceType::TABLET ],
8642
+ 'Lenovo TB-X505F' => [ 'Lenovo', 'Tab M10', DeviceType::TABLET ],
8643
+ 'Lenovo TB-X605F' => [ 'Lenovo', 'Tab M10', DeviceType::TABLET ],
8644
+ 'Lenovo TB-X605L' => [ 'Lenovo', 'Tab M10', DeviceType::TABLET ],
8645
+ 'Lenovo TB-X606F' => [ 'Lenovo', 'Tab M11 FHD Plus', DeviceType::TABLET ],
8646
+ 'Lenovo TB-X606X' => [ 'Lenovo', 'Tab M10 FHD Plus', DeviceType::TABLET ],
8647
+ 'Lenovo TB-X6C6F' => [ 'Lenovo', 'Tab K10', DeviceType::TABLET ],
8648
  'Lenovo TB-X103F' => [ 'Lenovo', 'Tab 10', DeviceType::TABLET ],
8649
  'TB-X103F' => [ 'Lenovo', 'Tab 10', DeviceType::TABLET ],
8650
  'Lenovo TB2-X30F' => [ 'Lenovo', 'Tab 2 A10', DeviceType::TABLET ],
8658
  'Lenovo TB3-X70F' => [ 'Lenovo', 'Tab 3 10 Business', DeviceType::TABLET ],
8659
  'Lenovo TB3-X70L' => [ 'Lenovo', 'Tab 3 10 Business', DeviceType::TABLET ],
8660
  'Lenovo TB-8504F' => [ 'Lenovo', 'Tab 4 8', DeviceType::TABLET ],
8661
+ 'Lenovo TB-8504X' => [ 'Lenovo', 'Tab 4 8', DeviceType::TABLET ],
8662
+ 'Lenovo TB-8505F' => [ 'Lenovo', 'Tab M8 HD', DeviceType::TABLET ],
8663
  'Lenovo TB-8703F' => [ 'Lenovo', 'Tab 4 8 Plus', DeviceType::TABLET ],
8664
  'Lenovo TB-8704F' => [ 'Lenovo', 'Tab 4 8 Plus', DeviceType::TABLET ],
8665
  'Lenovo TB-X304F' => [ 'Lenovo', 'Tab 4 10', DeviceType::TABLET ],
8666
  'Lenovo TB-X704F' => [ 'Lenovo', 'Tab 4 10 Plus', DeviceType::TABLET ],
8667
  'Lenovo TB-X704L' => [ 'Lenovo', 'Tab 4 10 Plus', DeviceType::TABLET ],
8668
+ 'Lenovo TB-X705F' => [ 'Lenovo', 'Tab P10', DeviceType::TABLET ],
8669
+ 'Lenovo TB-X705L' => [ 'Lenovo', 'Tab P10', DeviceType::TABLET ],
8670
 
8671
  '(Lenovo ?)?(IdeaTab ?)?[KSV][0-9]{4,4}!!' => [
8672
  'IdeaTab ?K2110A-(F)!' => [ 'Lenovo', 'IdeaTab K2110', DeviceType::TABLET ],
8839
  'Lenovo K50-t3s' => [ 'Lenovo', 'K3 Note' ],
8840
  'Lenovo K50-T5' => [ 'Lenovo', 'K3 Note' ],
8841
  'Lenovo K50t5' => [ 'Lenovo', 'K3 Note' ],
8842
+ 'Lenovo K520' => [ 'Lenovo', 'S5' ],
8843
  'Lenovo K6' => [ 'Lenovo', 'K6' ],
8844
+ 'Lenovo L38111' => [ 'Lenovo', 'Z6 Youth Edition' ],
8845
+ 'Lenovo L78071' => [ 'Lenovo', 'Z5S' ],
8846
+ 'Lenovo L79031' => [ 'Lenovo', 'Legion Pro' ],
8847
  'Lenovo N300' => [ 'Lenovo', 'N300', DeviceType::DESKTOP ],
8848
  'Lenovo N308' => [ 'Lenovo', 'N308', DeviceType::DESKTOP ],
8849
  'Lenovo N908' => [ 'Lenovo', 'N908' ],
9067
  'LGAS991' => [ 'LG', 'G4' ],
9068
  'LG-AS9(91)!' => [ 'LG', 'G4' ],
9069
  'LGAS992' => [ 'LG', 'G5' ],
9070
+ 'LG-AS993' => [ 'LG', 'G6' ],
9071
  'LGAS995' => [ 'LG', 'G Flex 2' ],
9072
+ 'LG-AS998' => [ 'LG', 'V30' ],
9073
  ],
9074
 
9075
  'LG-?C[0-9]{3,3}!!' => [
9208
  'LG-F820!' => [ 'LG', 'U' ],
9209
  ],
9210
 
9211
+ 'LG-FL40L!' => [ 'LG', '070 Touch' ],
9212
  'LG-GT540!' => [ 'LG', 'Optimus' ],
9213
  'LG-GW620!' => [ 'LG', 'GW620 Eve' ],
9214
 
9323
  'LGL86C!' => [ 'LG', 'Optimus Showtime' ],
9324
  'LG-L95G!' => [ 'LG', 'L95G' ],
9325
  'LGL96G' => [ 'LG', 'Ultimate' ],
9326
+ 'LGL157BL' => [ 'LG', 'Rebel 3' ],
9327
+ 'LGL158VL' => [ 'LG', 'Rebel 3' ],
9328
  'LG-L160L' => [ 'LG', 'Optimus LTE2' ],
9329
  'LGL163BL' => [ 'LG', 'Fiesta 2' ],
9330
  'LGL164VL' => [ 'LG', 'Fiesta' ],
9412
  'LG-M4(30)!' => [ 'LG', 'Stylo 3' ],
9413
  'LG-M4(70)!' => [ 'LG', 'Stylo 3 Plus' ],
9414
  'LG-M7(00|03)!' => [ 'LG', 'Q6' ],
9415
+ 'LG-M7(10)!' => [ 'LG', 'X Venture' ],
9416
  ],
9417
 
9418
  'LG-?MS[0-9]{3,3}!!' => [
9426
  'LGMS500' => [ 'LG', 'Optimus F6' ],
9427
  'LG-MS500' => [ 'LG', 'Optimus F6' ],
9428
  'LGMS550' => [ 'LG', 'G Stylo 2' ],
9429
+ 'LG-MS550' => [ 'LG', 'G Stylo 2' ],
9430
  'LGMS631' => [ 'LG', 'G Stylo' ],
9431
  'LG-MS659' => [ 'LG', 'Optimus F3' ],
9432
  'LGMS659' => [ 'LG', 'Optimus F3' ],
9481
  'LG-P815!' => [ 'LG', 'G Pad II 8.3', DeviceType::TABLET ],
9482
  ],
9483
 
9484
+ 'LG-Q710!' => [ 'LG', 'Stylo 4' ],
9485
+
9486
+ 'LG-RS988!' => [ 'LG', 'G5' ],
9487
+ 'RS988' => [ 'LG', 'G5' ],
9488
+
9489
+ 'LG-SP[0-9]{3,3}!!' => [
9490
+ 'LG-SP200' => [ 'LG', 'Tribute Dynasty' ],
9491
+ 'LG-SP320' => [ 'LG', 'X Charge' ],
9492
+ ],
9493
+
9494
  'LG-SU[0-9]{3,3}!!' => [
9495
  'LG-SU370' => [ 'LG', 'Optimus One' ],
9496
  'LG-SU540' => [ 'LG', 'PRADA 3.0' ],
9507
  'LG-TP260' => [ 'LG', 'K20 Plus' ],
9508
  'LG-TP450' => [ 'LG', 'Stylo 3 Plus' ],
9509
 
 
 
9510
  'LG-SU-760' => [ 'LG', 'Optimus 3D' ],
9511
  'LGUK410' => [ 'LG', 'G Pad 7.0', DeviceType::TABLET ],
9512
  'LG-UK495' => [ 'LG', 'G Pad F 8.0', DeviceType::TABLET ],
9519
  'LGUS215' => [ 'LG', 'K8 2017' ],
9520
  'LGUS375' => [ 'LG', 'K8' ],
9521
  'LGUS550' => [ 'LG', 'Logos' ],
9522
+ 'LG-US601' => [ 'LG', 'X Charge' ],
9523
  'LGUS610' => [ 'LG', 'X Power' ],
9524
  'LG-US670' => [ 'LG', 'Optimus U' ],
9525
+ 'LG-US700' => [ 'LG', 'Q6' ],
9526
+ 'LG-US701' => [ 'LG', 'X Venture' ],
9527
  'LG-US730' => [ 'LG', 'Splendor' ],
9528
  'LG-US780' => [ 'LG', 'Optimus F7' ],
9529
  'LGUS990!' => [ 'LG', 'G3' ],
9533
  'LGUS995!' => [ 'LG', 'G Flex 2' ],
9534
  'LG-US996!' => [ 'LG', 'V20' ],
9535
  'LG-US997' => [ 'LG', 'G6' ],
9536
+ 'LG-US998' => [ 'LG', 'V30' ],
9537
  ],
9538
 
9539
  'LG-V[0-9]{3,3}!!' => [
9620
  'LGM-K120[KLS]!' => [ 'LG', 'X300' ],
9621
  'LGM-K121[KLS]!' => [ 'LG', 'X400' ],
9622
  'LGM-V300[KLS]!' => [ 'LG', 'V30' ],
9623
+ 'LGM-X100[S]!' => [ 'LG', 'Smart Folder' ],
9624
  'LGM-X320[KLS]!' => [ 'LG', 'X500' ],
9625
  'LGM-X401[S]!' => [ 'LG', 'X401' ],
9626
  'LGM-X600[KLS]!' => [ 'LG', 'Q6' ],
9627
  'LGM-X800[KLS]!' => [ 'LG', 'Q8' ],
9628
  ],
9629
 
9630
+ 'LM-F100!' => [ 'LG', 'Wing' ],
9631
  'LM-G710!' => [ 'LG', 'G7 ThinQ' ],
9632
  'LM-G715!' => [ 'LG', 'G7 ThinQ' ],
9633
+ 'LM-G810!' => [ 'LG', 'G8s ThinQ' ],
9634
+ 'LM-G820!' => [ 'LG', 'G8 ThinQ' ],
9635
+ 'LM-G850!' => [ 'LG', 'G8 ThinQ' ],
9636
+ 'LM-G900!' => [ 'LG', 'Velvet' ],
9637
+ 'LM-G910!' => [ 'LG', 'Velvet 4G' ],
9638
+ 'LM-K200!' => [ 'LG', 'K22' ],
9639
+ 'LM-K410!' => [ 'LG', 'K41S' ],
9640
+ 'LM-K420!' => [ 'LG', 'K42' ],
9641
+ 'LM-K510!' => [ 'LG', 'K51s' ],
9642
+ 'LM-K520!' => [ 'LG', 'K52' ],
9643
  'LM-Q610!' => [ 'LG', 'Q7' ],
9644
+ 'LM-Q617!' => [ 'LG', 'Q7 BTS Edition' ],
9645
+ 'LM-Q630!' => [ 'LG', 'K61' ],
9646
  'LM-Q710!' => [ 'LG', 'Q Stylus+' ],
9647
+ 'LM-Q720!' => [ 'LG', 'Stylo 5' ],
9648
+ 'LM-Q725!' => [ 'LG', 'Q7 Plus' ],
9649
+ 'LM-Q815!' => [ 'LG', 'Q8 (2018)' ],
9650
+ 'LM-Q850!' => [ 'LG', 'G7 Fit' ],
9651
+ 'LM-Q910!' => [ 'LG', 'G7 One' ],
9652
+ 'LM-Q925!' => [ 'LG', 'Q9' ],
9653
  'LM-V350!' => [ 'LG', 'V35 ThinQ' ],
9654
+ 'LM-V40[59]!' => [ 'LG', 'V40 ThinQ' ],
9655
+ 'LM-V450!' => [ 'LG', 'V50 ThinQ' ],
9656
+ 'LM-V500!' => [ 'LG', 'V50 ThinQ' ],
9657
+ 'LM-V510!' => [ 'LG', 'V50S ThinQ' ],
9658
+ 'LM-V600!' => [ 'LG', 'V60 ThinQ' ],
9659
+ 'LM-X120!' => [ 'LG', 'K20' ],
9660
  'LM-X210!' => [ 'LG', 'Aristo 2' ],
9661
+ 'LM-X212!' => [ 'LG', 'K8' ],
9662
+ 'LM-X220!' => [ 'LG', 'Aristo 3' ],
9663
+ 'LM-X320!' => [ 'LG', 'K30' ],
9664
  'LM-X410!' => [ 'LG', 'X4' ],
9665
  'LM-X415!' => [ 'LG', 'X4+' ],
9666
+ 'LM-X420!' => [ 'LG', 'X4 (2019)' ],
9667
+ 'LM-X430!' => [ 'LG', 'K40S' ],
9668
  'LM-X510!' => [ 'LG', 'X5' ],
9669
+ 'LM-X520!' => [ 'LG', 'K50' ],
9670
+ 'LM-X525!' => [ 'LG', 'K12 Prime' ],
9671
+ 'LM-X540!' => [ 'LG', 'K50S' ],
9672
+ 'LM-X625!' => [ 'LG', 'X6 (2019)' ],
9673
  'LM-Y110!' => [ 'LG', 'Folder' ],
9674
 
9675
  'LGMP450' => [ 'LG', 'Stylo 3 Plus' ],
9693
  'LGL24' => [ 'LG', 'isai FL LGL24', 'carrier' => 'au' ],
9694
  'LGL25' => [ 'LG', 'Fx0 LGL25', 'carrier' => 'au' ],
9695
  'LGS01' => [ 'LG', 'Wine Smart LGS01', 'carrier' => 'J:COM' ],
9696
+ 'LGS02' => [ 'LG', 'X screen LGS02', 'carrier' => 'J:COM' ],
9697
  'LGV31' => [ 'LG', 'isai VL LGV31', 'carrier' => 'au' ],
9698
  'LGV32' => [ 'LG', 'isai vivid LGV32', 'carrier' => 'au' ],
9699
  'LGV33' => [ 'LG', 'Qua phone PX LGV33', 'carrier' => 'au' ],
10144
  'LIFETAB E10312' => [ 'Medion', 'Lifetab E10312', DeviceType::TABLET ],
10145
  'LIFETAB E10316' => [ 'Medion', 'Lifetab E10316', DeviceType::TABLET ],
10146
  'LIFETAB E10320' => [ 'Medion', 'Lifetab E10320', DeviceType::TABLET ],
10147
+ 'LIFETAB E1041X' => [ 'Medion', 'Lifetab E1041X', DeviceType::TABLET ],
10148
+ 'LIFETAB E1042X' => [ 'Medion', 'Lifetab E1042X', DeviceType::TABLET ],
10149
+ 'LIFETAB E1070X' => [ 'Medion', 'Lifetab E1070X', DeviceType::TABLET ],
10150
+ 'LIFETAB E1071X' => [ 'Medion', 'Lifetab E1071X', DeviceType::TABLET ],
10151
+ 'LIFETAB E1080X' => [ 'Medion', 'Lifetab E1080X', DeviceType::TABLET ],
10152
+ 'LIFETAB E1091X' => [ 'Medion', 'Lifetab E1091X', DeviceType::TABLET ],
10153
  'LIFETAB P733X' => [ 'Medion', 'Lifetab P733X', DeviceType::TABLET ],
10154
  'LIFETAB P831X' => [ 'Medion', 'Lifetab P831X', DeviceType::TABLET ],
10155
  'LIFETAB P831X.2' => [ 'Medion', 'Lifetab P831X', DeviceType::TABLET ],
10156
  'LIFETAB P891X' => [ 'Medion', 'Lifetab P891X', DeviceType::TABLET ],
10157
+ 'LIFETAB P970X' => [ 'Medion', 'Lifetab P970X', DeviceType::TABLET ],
10158
  'LIFETAB P1034X' => [ 'Medion', 'Lifetab P1034X', DeviceType::TABLET ],
10159
+ 'LIFETAB P1071X' => [ 'Medion', 'Lifetab P1071X', DeviceType::TABLET ],
10160
  'LIFETAB S7316' => [ 'Medion', 'Lifetab S7316', DeviceType::TABLET ],
10161
  'LIFETAB S732X' => [ 'Medion', 'Lifetab S732X', DeviceType::TABLET ],
10162
  'LIFETAB S785X' => [ 'Medion', 'Lifetab S785X', DeviceType::TABLET ],
10179
  'MD LIFETAB P9516' => [ 'Medion', 'Lifetab P9516', DeviceType::TABLET ],
10180
  ],
10181
 
10182
+ 'B5532' => [ 'Medion', 'B5532' ],
10183
+ 'E1050X' => [ 'Medion', 'Lifetab E1050X', DeviceType::TABLET ],
10184
+ 'E1051X' => [ 'Medion', 'Lifetab E1051X', DeviceType::TABLET ],
10185
+ 'E1060X' => [ 'Medion', 'Lifetab E1060X', DeviceType::TABLET ],
10186
+ 'P1035X' => [ 'Medion', 'Lifetab P1035X', DeviceType::TABLET ],
10187
  'P1050X' => [ 'Medion', 'Lifetab P1050X', DeviceType::TABLET ],
10188
+ 'P1060X' => [ 'Medion', 'Lifetab P1060X', DeviceType::TABLET ],
10189
+ 'P1061X' => [ 'Medion', 'Lifetab P1061X', DeviceType::TABLET ],
10190
+ 'X1030X' => [ 'Medion', 'Lifetab X1030X', DeviceType::TABLET ],
10191
+ 'X1031X' => [ 'Medion', 'Lifetab X1031X', DeviceType::TABLET ],
10192
+ 'X1060X' => [ 'Medion', 'Lifetab X1060X', DeviceType::TABLET ],
10193
 
10194
  'MEEG!!' => [
10195
  'MEEG 101' => [ 'MEEG', '101' ],
10524
  'P300(Funbook)' => [ 'Micromax', 'Funbook P300', DeviceType::TABLET ],
10525
  'P701' => [ 'Micromax', 'Canvas Tab P701', DeviceType::TABLET ],
10526
 
10527
+ 'Surface Duo' => [ 'Microsoft', 'Surface Duo' ],
10528
+ 'Surface Duo 2' => [ 'Microsoft', 'Surface Duo 2' ],
10529
+
10530
  'MLLED!!' => [
10531
  'MLLED M1B' => [ 'MLLED', 'M1B' ],
10532
  'MLLED M2+' => [ 'MLLED', 'M2+' ],
10918
  'XT17(89)!' => [ 'Motorola', 'Moto Z2 Force' ],
10919
  'XT17(90)!' => [ 'Motorola', 'Moto G5S' ],
10920
  'XT18(02)!' => [ 'Motorola', 'Moto G5S Plus TV' ],
10921
+ 'XT18(05|06)!' => [ 'Motorola', 'Moto G5S Plus' ],
10922
  'XT19(02)!' => [ 'Lenovo', 'K8 Note' ],
10923
  ],
10924
 
10925
+ 'motorola one' => [ 'Motorola', 'One' ],
10926
+ 'motorola one 5G ace' => [ 'Motorola', 'One Ace' ],
10927
+ 'motorola one action' => [ 'Motorola', 'One Action' ],
10928
+ 'motorola one fusion+' => [ 'Motorola', 'One Fusion+' ],
10929
+ 'motorola one hyper' => [ 'Motorola', 'One Hyper' ],
10930
+ 'motorola one macro' => [ 'Motorola', 'One Macro' ],
10931
+ 'motorola one power' => [ 'Motorola', 'One Power' ],
10932
+ 'motorola one vision' => [ 'Motorola', 'One Vision' ],
10933
+ 'motorola one zoom' => [ 'Motorola', 'One Zoom' ],
10934
+
10935
+ 'motorola edge' => [ 'Motorola', 'Edge' ],
10936
+ 'motorola edge plus' => [ 'Motorola', 'Edge Plus' ],
10937
+ 'motorola edge 20' => [ 'Motorola', 'Edge 20' ],
10938
+ 'motorola edge 20 lite' => [ 'Motorola', 'Edge 20 Lite' ],
10939
+ 'motorola edge 20 pro' => [ 'Motorola', 'Edge 20 Pro' ],
10940
+ 'motorola edge 30 pro' => [ 'Motorola', 'Edge 30 Pro' ],
10941
+
10942
  'Atrix 2' => [ 'Motorola', 'ATRIX 2' ],
10943
  'Atrix 2 WeifanZ' => [ 'Motorola', 'ATRIX 2' ],
10944
  'Atrix 4G' => [ 'Motorola', 'ATRIX 4G' ],
10993
  '(Moto)?E2\(4G-LTE\)$!' => [ 'Motorola', 'Moto E (2015)' ],
10994
  'surnia' => [ 'Motorola', 'Moto E (2015)' ],
10995
  'Motorola MotoE2!' => [ 'Motorola', 'Moto E2' ],
10996
+ 'Moto E4' => [ 'Motorola', 'Moto E4' ],
10997
  'Moto E (4)' => [ 'Motorola', 'Moto E4' ],
10998
  'Moto E (4) Plus' => [ 'Motorola', 'Moto E4 Plus' ],
10999
+ 'moto e5' => [ 'Motorola', 'Moto E5' ],
11000
  'moto e5 cruise' => [ 'Motorola', 'Moto E5 Cruise' ],
11001
+ 'moto e5 play' => [ 'Motorola', 'Moto E5 Play' ],
11002
+ 'moto e5 plus' => [ 'Motorola', 'Moto E5 Plus' ],
11003
+ 'moto e(6i)' => [ 'Motorola', 'Moto E6i' ],
11004
+ 'moto e6s' => [ 'Motorola', 'Moto E6s' ],
11005
+ 'moto e6 play' => [ 'Motorola', 'Moto E6 Play' ],
11006
+ 'moto e(6) plus' => [ 'Motorola', 'Moto E6 Plus' ],
11007
+ 'moto e(7)' => [ 'Motorola', 'Moto E7' ],
11008
+ 'moto e(7) plus' => [ 'Motorola', 'Moto E7 Plus' ],
11009
+ 'moto e(7) power' => [ 'Motorola', 'Moto E7 Power' ],
11010
+ 'moto e(7i) power' => [ 'Motorola', 'Moto E7i Power' ],
11011
+ 'moto e20' => [ 'Motorola', 'Moto E20' ],
11012
+ 'moto e30' => [ 'Motorola', 'Moto E30' ],
11013
+ 'moto e40' => [ 'Motorola', 'Moto E40' ],
11014
  '(Moto)?G3$!' => [ 'Motorola', 'Moto G (2015)' ],
11015
  '(Moto)?G3-TE$!' => [ 'Motorola', 'Moto G (2015)' ],
11016
+ 'Moto G 2015' => [ 'Motorola', 'Moto G (2015)' ],
11017
+ 'Moto G (2015)' => [ 'Motorola', 'Moto G (2015)' ],
11018
+ 'Moto G (2014' => [ 'Motorola', 'Moto G' ],
11019
  'MOTOROLA MOTOG' => [ 'Motorola', 'Moto G' ],
11020
  'Moto G Play' => [ 'Motorola', 'Moto G Play' ],
11021
+ 'moto g power' => [ 'Motorola', 'Moto G Power' ],
11022
+ 'Moto G Turbo' => [ 'Motorola', 'Moto G Turbo' ],
11023
+ 'moto g 5G' => [ 'Motorola', 'Moto G 5G' ],
11024
+ 'moto g 5G plus' => [ 'Motorola', 'Moto G 5G Plus' ],
11025
+ 'moto g pro' => [ 'Motorola', 'Moto G Pro' ],
11026
  'Moto G4' => [ 'Motorola', 'Moto G4' ],
11027
+ 'Moto G (4' => [ 'Motorola', 'Moto G4' ],
11028
  'Moto G (4)' => [ 'Motorola', 'Moto G4' ],
11029
  'Moto G4 Plus' => [ 'Motorola', 'Moto G4 Plus' ],
11030
+ 'Moto G 5' => [ 'Motorola', 'Moto G5' ],
11031
+ 'Moto G (5' => [ 'Motorola', 'Moto G5' ],
11032
  'Moto G (5)' => [ 'Motorola', 'Moto G5' ],
11033
  'Moto G (5) Plus' => [ 'Motorola', 'Moto G5 Plus' ],
11034
+ 'Moto G (5S' => [ 'Motorola', 'Moto G5S' ],
11035
+ 'Moto G (5S)' => [ 'Motorola', 'Moto G5S' ],
11036
  'Moto G (5S) Plus' => [ 'Motorola', 'Moto G5S Plus' ],
11037
+ 'Moto G (5S) Plus (XT1805)' => [ 'Motorola', 'Moto G5S Plus' ],
11038
+ 'moto g(6' => [ 'Motorola', 'Moto G6' ],
11039
  'moto g(6)' => [ 'Motorola', 'Moto G6' ],
11040
+ 'moto g(6) (XT1925DL)' => [ 'Motorola', 'Moto G6' ],
11041
+ 'moto g(6) forge' => [ 'Motorola', 'Moto G6 Forge' ],
11042
+ 'moto g(6) play' => [ 'Motorola', 'Moto G6 Play' ],
11043
  'moto g(6) plus' => [ 'Motorola', 'Moto G6 Plus' ],
11044
+ 'moto g(7' => [ 'Motorola', 'Moto G7' ],
11045
+ 'moto g(7)' => [ 'Motorola', 'Moto G7' ],
11046
+ 'moto g(7) optimo (XT1952DL)' => [ 'Motorola', 'Moto G7 Optimo' ],
11047
+ 'moto g(7) play' => [ 'Motorola', 'Moto G7 Play' ],
11048
+ 'moto g(7) plus' => [ 'Motorola', 'Moto G7 Plus' ],
11049
+ 'moto g(7) power' => [ 'Motorola', 'Moto G7 Power' ],
11050
+ 'moto g(7) supra' => [ 'Motorola', 'Moto G7 Supra' ],
11051
+ 'moto g(8' => [ 'Motorola', 'Moto G8' ],
11052
+ 'moto g(8)' => [ 'Motorola', 'Moto G8' ],
11053
+ 'moto g(8) plus' => [ 'Motorola', 'Moto G8 Plus' ],
11054
+ 'moto g(8) power' => [ 'Motorola', 'Moto G8 Power' ],
11055
+ 'moto g(8) power lite' => [ 'Motorola', 'Moto G8 Power Lite' ],
11056
+ 'moto g(9) play' => [ 'Motorola', 'Moto G9 Play' ],
11057
+ 'moto g(9) plus' => [ 'Motorola', 'Moto G9 Plus' ],
11058
+ 'moto g(9) power' => [ 'Motorola', 'Moto G9 Power' ],
11059
+ 'moto g(10)' => [ 'Motorola', 'Moto G10' ],
11060
+ 'moto g(20)' => [ 'Motorola', 'Moto G20' ],
11061
+ 'moto g(30)' => [ 'Motorola', 'Moto G30' ],
11062
+ 'moto g31(w)' => [ 'Motorola', 'Moto G31w' ],
11063
+ 'moto g(50)' => [ 'Motorola', 'Moto G50' ],
11064
+ 'moto g51 5G' => [ 'Motorola', 'Moto G51' ],
11065
+ 'moto g(60)' => [ 'Motorola', 'Moto G60' ],
11066
+ 'moto g(60)s' => [ 'Motorola', 'Moto G60s' ],
11067
+ 'moto g(100)' => [ 'Motorola', 'Moto G100' ],
11068
+ 'moto g200 5G' => [ 'Motorola', 'Moto G200' ],
11069
  'Moto Z (2)' => [ 'Motorola', 'Moto Z2' ],
11070
  'Moto Z2 Play' => [ 'Motorola', 'Moto Z2 Play' ],
11071
+ 'Moto Z3 Play' => [ 'Motorola', 'Moto Z3 Play' ],
11072
  'Moto X Pro' => [ 'Motorola', 'Moto X Pro' ],
11073
  'moto x4' => [ 'Motorola', 'Moto X4' ],
11074
+ 'moto z4' => [ 'Motorola', 'Moto Z4' ],
11075
  'roiX' => [ 'Motorola', 'Droid X' ],
11076
  'Moto Backflip' => [ 'Motorola', 'BACKFLIP' ],
11077
  'RAZR' => [ 'Motorola', 'RAZR' ],
11078
  'RAZR HD' => [ 'Motorola', 'RAZR HD' ],
11079
  'RAZR M' => [ 'Motorola', 'RAZR M' ],
11080
  'RAZR MAXX' => [ 'Motorola', 'RAZR MAXX' ],
11081
+ 'motorola razr 5G' => [ 'Motorola', 'RAZR 5G' ],
11082
  'Triumph' => [ 'Motorola', 'TRIUMPH' ],
11083
  'Opus One' => [ 'Motorola', 'i1' ],
11084
  'Photon' => [ 'Motorola', 'PHOTON' ],
11475
  'TA-10(00|03|21|25|33|39)!' => [ 'Nokia', '6' ],
11476
  'TA-10(43|50|54|68)!' => [ 'Nokia', '6.1' ],
11477
  'TA-10(41)!' => [ 'Nokia', '7' ],
11478
+ 'TA-10(62)!' => [ 'Nokia', '7 Plus' ],
11479
  'TA-10(04|12|52)!' => [ 'Nokia', '8' ],
11480
  'TA-10(99)!' => [ 'Nokia', 'X6' ],
11481
  'TA-11(03|16)!' => [ 'Nokia', 'X6' ],
11482
+ 'Nokia 1 Plus' => [ 'Nokia', '1 Plus' ],
11483
+ 'Nokia 1' => [ 'Nokia', '1' ],
11484
+ 'Nokia 2.1' => [ 'Nokia', '2.1' ],
11485
+ 'Nokia 2' => [ 'Nokia', '2' ],
11486
+ 'Nokia 3.1 Plus' => [ 'Nokia', '3.1 Plus' ],
11487
+ 'Nokia 3.1' => [ 'Nokia', '3.1' ],
11488
+ 'Nokia 4.2' => [ 'Nokia', '4.2' ],
11489
+ 'Nokia 5.1 Plus' => [ 'Nokia', '5.1 Plus' ],
11490
+ 'Nokia 5.1' => [ 'Nokia', '5.1' ],
11491
+ 'Nokia 6.1 Plus' => [ 'Nokia', '6.1 Plus' ],
11492
+ 'Nokia 6.1' => [ 'Nokia', '6.1' ],
11493
+ 'Nokia 6.2' => [ 'Nokia', '6.2' ],
11494
+ 'Nokia 6' => [ 'Nokia', '6' ],
11495
+ 'Nokia 7.1' => [ 'Nokia', '7.1' ],
11496
+ 'Nokia 7 Plus' => [ 'Nokia', '7 Plus' ],
11497
+ 'Nokia 8.1' => [ 'Nokia', '8.1' ],
11498
+ 'Nokia 8 Sirocco' => [ 'Nokia', '8 Sirocco' ],
11499
+ 'Nokia 8' => [ 'Nokia', '8' ],
11500
+ 'Nokia 9' => [ 'Nokia', '9' ],
11501
+ 'Nokia 10.1' => [ 'Nokia', '10.1' ],
11502
  'Nokia N9' => [ 'Nokia', 'N9' ],
11503
  'Nokia N900' => [ 'Nokia', 'N900' ],
11504
+ 'T20-Plus' => [ 'Nokia', 'T20 Plus' ],
11505
  'Nokia X' => [ 'Nokia', 'X', DeviceType::MOBILE, Flag::NOKIAX ],
11506
  'Nokia X Dual SIM' => [ 'Nokia', 'X', DeviceType::MOBILE, Flag::NOKIAX ],
11507
  'RM-980' => [ 'Nokia', 'X', DeviceType::MOBILE, Flag::NOKIAX ],
11631
  'ONEPLUS A5000' => [ 'OnePlus', '5' ],
11632
  'ONEPLUS A5010' => [ 'OnePlus', '5T' ],
11633
  'ONEPLUS A6000' => [ 'OnePlus', '6' ],
11634
+ 'ONEPLUS A6003' => [ 'OnePlus', '6' ],
11635
+ 'ONEPLUS A6010' => [ 'OnePlus', '6T' ],
11636
+ 'ONEPLUS A6013' => [ 'OnePlus', '6T' ],
11637
+ 'HD190[0135]!' => [ 'OnePlus', '7T' ],
11638
+ 'HD191[0137]!' => [ 'OnePlus', '7T Pro' ],
11639
+ 'OnePlus 7T Pro' => [ 'OnePlus', '7T Pro' ],
11640
+ 'GM190[0135]!' => [ 'OnePlus', '7' ],
11641
+ 'GM191[01357]!' => [ 'OnePlus', '7 Pro' ],
11642
+ 'IN201[01357]!' => [ 'OnePlus', '8' ],
11643
+ 'IN202[0135]!' => [ 'OnePlus', '8 Pro' ],
11644
+ 'KB200[01357]!' => [ 'OnePlus', '8T' ],
11645
+ 'LE2101' => [ 'OnePlus', '9T' ],
11646
+ 'LE211[0135]!' => [ 'OnePlus', '9' ],
11647
+ 'LE212[01357]!' => [ 'OnePlus', '9 Pro' ],
11648
+ 'NE2213' => [ 'OnePlus', '10 Pro' ],
11649
  'ONE E1000' => [ 'OnePlus', 'X' ],
11650
  'ONE E1001' => [ 'OnePlus', 'X' ],
11651
  'ONE E1003' => [ 'OnePlus', 'X' ],
11652
  'ONE E1005' => [ 'OnePlus', 'X' ],
11653
+ 'AC2001' => [ 'OnePlus', 'Nord' ],
11654
+ 'AC2003' => [ 'OnePlus', 'Nord' ],
11655
+ 'DN2101' => [ 'OnePlus', 'Nord 2' ],
11656
+ 'DN2103' => [ 'OnePlus', 'Nord 2' ],
11657
+ 'oneplus Nord 2 5G' => [ 'OnePlus', 'Nord 2' ],
11658
+ 'EB2101' => [ 'OnePlus', 'Nord CE' ],
11659
+ 'EB2103' => [ 'OnePlus', 'Nord CE' ],
11660
+ 'IV2201' => [ 'OnePlus', 'Nord CE 2' ],
11661
+ 'BE202[69]!' => [ 'OnePlus', 'Nord N10' ],
11662
+ 'BE2013' => [ 'OnePlus', 'Nord N100' ],
11663
  'ONDA MID' => [ 'Onda', 'MID', DeviceType::TABLET ],
11664
  'ONDA A9 Core4' => [ 'Onda', 'A9 Quad Core', DeviceType::TABLET ],
11665
  'ONDA VI10' => [ 'Onda', 'VI10', DeviceType::TABLET ],
11700
  'N2T' => [ 'ONN', 'N2T', DeviceType::TABLET ],
11701
  'Renesas!' => [ 'Opad', 'Renesas', DeviceType::TABLET ],
11702
  'A11w' => [ 'Oppo', 'Joy 3' ],
11703
+ 'PADM00' => [ 'Oppo', 'A3' ],
11704
+ 'PADT00' => [ 'Oppo', 'A3' ],
11705
+ 'CPH1803' => [ 'Oppo', 'A3s' ],
11706
+ 'CPH1809' => [ 'Oppo', 'A5' ],
11707
+ 'PBAM00' => [ 'Oppo', 'A5' ],
11708
+ 'OPPO PBAM00' => [ 'Oppo', 'A5' ],
11709
+ 'PBAT00' => [ 'Oppo', 'A5' ],
11710
+ 'CPH1901' => [ 'Oppo', 'A7' ],
11711
+ 'PBFT00' => [ 'Oppo', 'A7' ],
11712
+ 'OPPO PBFT00' => [ 'Oppo', 'A7' ],
11713
+ 'PBBM00' => [ 'Oppo', 'A7x' ],
11714
+ 'CPH1937' => [ 'Oppo', 'A9 2020' ],
11715
+ 'CPH1941' => [ 'Oppo', 'A9 2020' ],
11716
  'OPPO A30' => [ 'Oppo', 'A30' ],
11717
  'A31' => [ 'Oppo', 'A31' ],
11718
  'OPPO A31' => [ 'Oppo', 'A31' ],
11720
  'A31c' => [ 'Oppo', 'A31c' ],
11721
  'A31t' => [ 'Oppo', 'A31t' ],
11722
  'OPPO A31t' => [ 'Oppo', 'A31t' ],
11723
+ 'A31u' => [ 'Oppo', 'A31u' ],
11724
  'OPPO A33' => [ 'Oppo', 'A33' ],
11725
  'A33f' => [ 'Oppo', 'A33f' ],
11726
  'OPPO A33m' => [ 'Oppo', 'A33m' ],
11729
  'A37fw' => [ 'Oppo', 'A37fw' ],
11730
  'OPPO A37m' => [ 'Oppo', 'A37m' ],
11731
  'CPH1605' => [ 'Oppo', 'A39' ],
11732
+ 'A51' => [ 'Oppo', 'A51' ],
11733
  'A51f' => [ 'Oppo', 'A51f' ],
11734
  'OPPO A53' => [ 'Oppo', 'A53' ],
11735
  'OPPO A53m' => [ 'Oppo', 'A53m' ],
11736
+ 'OPPO A53t' => [ 'Oppo', 'A53t' ],
11737
  'CPH1701' => [ 'Oppo', 'A57' ],
11738
  'OPPO A57' => [ 'Oppo', 'A57' ],
11739
  'OPPO A57t' => [ 'Oppo', 'A57t' ],
11741
  'OPPO A59s' => [ 'Oppo', 'A59s' ],
11742
  'OPPO A59st' => [ 'Oppo', 'A59st' ],
11743
  'CPH1717' => [ 'Oppo', 'A71' ],
11744
+ 'CPH1801' => [ 'Oppo', 'A71 (2018)' ],
11745
+ 'A73' => [ 'Oppo', 'A73' ],
11746
+ 'OPPO A73' => [ 'Oppo', 'A73' ],
11747
+ 'OPPO A73t' => [ 'Oppo', 'A73t' ],
11748
  'OPPO A77' => [ 'Oppo', 'A77' ],
11749
  'OPPO A77t' => [ 'Oppo', 'A77t' ],
11750
+ 'OPPO A79' => [ 'Oppo', 'A79' ],
11751
+ 'OPPO A79kt' => [ 'Oppo', 'A79kt' ],
11752
+ 'OPPO A79t' => [ 'Oppo', 'A79t' ],
11753
+ 'OPPO A83' => [ 'Oppo', 'A83' ],
11754
+ 'CPH1729' => [ 'Oppo', 'A83' ],
11755
+ 'CPH1827' => [ 'Oppo', 'A83' ],
11756
+ 'OPPO A83t' => [ 'Oppo', 'A83t' ],
11757
  'OPPO A800' => [ 'Oppo', 'A800' ],
11758
  'A1603' => [ 'Oppo', 'C1' ],
11759
  'F1f' => [ 'Oppo', 'F1f' ],
11762
  'CPH1609' => [ 'Oppo', 'F3' ],
11763
  'CPH1613' => [ 'Oppo', 'F3 Plus' ],
11764
  'CPH1723' => [ 'Oppo', 'F5' ],
11765
+ 'CPH1727' => [ 'Oppo', 'F5' ],
11766
+ 'CPH1819' => [ 'Oppo', 'F7' ],
11767
+ 'CPH1821' => [ 'Oppo', 'F7' ],
11768
+ 'CPH1859' => [ 'Oppo', 'F7 Youth' ],
11769
+ 'CPH1881' => [ 'Oppo', 'F9' ],
11770
+ 'CPH1823' => [ 'Oppo', 'F9 Pro' ],
11771
+ 'CPH1831' => [ 'Oppo', 'R15 Pro' ],
11772
+ 'CPH1837' => [ 'Oppo', 'A3' ],
11773
+ 'CPH1871' => [ 'Oppo', 'Find X' ],
11774
+ 'CPH1875' => [ 'Oppo', 'Find X' ],
11775
+ 'CPH1877' => [ 'Oppo', 'RX17 Pro' ],
11776
+ 'CPH1893' => [ 'Oppo', 'RX17 Neo' ],
11777
+ 'CPH1903' => [ 'Oppo', 'A7' ],
11778
+ 'CPH1907' => [ 'Oppo', 'Reno 2' ],
11779
+ 'CPH1909' => [ 'Oppo', 'A5s' ],
11780
+ 'CPH1911' => [ 'Oppo', 'F11' ],
11781
+ 'CPH1917' => [ 'Oppo', 'Reno' ],
11782
+ 'CPH1919' => [ 'Oppo', 'Reno 10x Zoom' ],
11783
+ 'CPH1920' => [ 'Oppo', 'A5s' ],
11784
+ 'CPH1923' => [ 'Oppo', 'A1k' ],
11785
+ 'CPH1931' => [ 'Oppo', 'A5 (2020)' ],
11786
+ 'CPH1933' => [ 'Oppo', 'A5 (2020)' ],
11787
+ 'CPH1951' => [ 'Oppo', 'Reno 2Z' ],
11788
+ 'CPH1969' => [ 'Oppo', 'F11 Pro' ],
11789
+ 'CPH1989' => [ 'Oppo', 'Reno 2 F' ],
11790
+ 'CPH2005' => [ 'Oppo', 'Find X2 Lite' ],
11791
+ 'CPH2009' => [ 'Oppo', 'Find X2 Neo' ],
11792
+ 'CPH2021' => [ 'Oppo', 'A91' ],
11793
+ 'CPH2023' => [ 'Oppo', 'Find X2' ],
11794
+ 'CPH2025' => [ 'Oppo', 'Find X2 Pro' ],
11795
+ 'CPH2043' => [ 'Oppo', 'Reno 3' ],
11796
+ 'CPH2065' => [ 'Oppo', 'Reno 4Z' ],
11797
+ 'CPH2067' => [ 'Oppo', 'A72' ],
11798
+ 'CPH2069' => [ 'Oppo', 'A52' ],
11799
+ 'CPH2083' => [ 'Oppo', 'A12' ],
11800
+ 'CPH2089' => [ 'Oppo', 'Reno 4 Pro' ],
11801
+ 'CPH2091' => [ 'Oppo', 'Reno 4' ],
11802
+ 'CPH2121' => [ 'Oppo', 'A93' ],
11803
+ 'CPH2125' => [ 'Oppo', 'Reno 4 Lite' ],
11804
+ 'CPH2127' => [ 'Oppo', 'A53' ],
11805
+ 'CPH2135' => [ 'Oppo', 'A53s' ],
11806
+ 'CPH2145' => [ 'Oppo', 'Find X3 Lite' ],
11807
+ 'CPH2161' => [ 'Oppo', 'A73' ],
11808
+ 'CPH2173' => [ 'Oppo', 'Find X3 Pro' ],
11809
+ 'CPH2185' => [ 'Oppo', 'A15' ],
11810
+ 'CPH2195' => [ 'Oppo', 'A54' ],
11811
+ 'CPH2197' => [ 'Oppo', 'A74' ],
11812
+ 'CPH2205' => [ 'Oppo', 'Reno 5 Lite' ],
11813
+ 'CPH2207' => [ 'Oppo', 'Find X3 Neo' ],
11814
+ 'CPH2211' => [ 'Oppo', 'A94' ],
11815
+ 'CPH2219' => [ 'Oppo', 'A74' ],
11816
+ 'CPH2247' => [ 'Oppo', 'Reno 6 Pro' ],
11817
+ 'CPH2251' => [ 'Oppo', 'Reno 6' ],
11818
+ 'CPH2269' => [ 'Oppo', 'A16' ],
11819
+ 'CPH2271' => [ 'Oppo', 'A16s' ],
11820
+ 'CPH2273' => [ 'Oppo', 'A54s' ],
11821
+ 'CPH2305' => [ 'Oppo', 'Find X5 Pro' ],
11822
+ 'CPH2307' => [ 'Oppo', 'Find X5' ],
11823
+ 'CPH2371' => [ 'Oppo', 'Reno 7' ],
11824
  'Find 5' => [ 'Oppo', 'Find 5' ],
11825
  'X903' => [ 'Oppo', 'Find Me X903' ],
11826
  'X903S' => [ 'Oppo', 'Find X903S' ],
11837
  'X9000' => [ 'Oppo', 'Find 7a X9000' ],
11838
  'X9006' => [ 'Oppo', 'Find 7a X9006' ],
11839
  'X9007' => [ 'Oppo', 'Find 7a X9007' ],
11840
+ 'OPPO X9007' => [ 'Oppo', 'Find 7a X9007' ],
11841
  'X9009' => [ 'Oppo', 'F1 Plus X9009' ],
11842
  'X9015' => [ 'Oppo', 'Find X9015' ],
11843
  'OPPOX9015' => [ 'Oppo', 'Find X9015' ],
11939
  'OPPOU7015' => [ 'Oppo', 'Find Way U7015' ],
11940
  'U7015' => [ 'Oppo', 'Find Way U7015' ],
11941
  'A51w' => [ 'Oppo', 'Mirror 5' ],
11942
+ 'PBCM30' => [ 'Oppo', 'K1' ],
11943
+ 'OPPO PBCM30' => [ 'Oppo', 'K1' ],
11944
+ 'OPPO PBCT10' => [ 'Oppo', 'K1' ],
11945
+ 'PCGM00' => [ 'Oppo', 'K3' ],
11946
  'OPPO N1' => [ 'Oppo', 'N1' ],
11947
  'N51(10|11|16|17)!' => [ 'Oppo', 'N1 mini' ],
11948
  'N52(06|07|09)!' => [ 'Oppo', 'N3' ],
11949
+ 'OB-OPPO R8205' => [ 'Oppo', 'R1c' ],
11950
+ 'OB-OPPO R7005' => [ 'Oppo', 'R3' ],
11951
  'OPPO R7' => [ 'Oppo', 'R7' ],
11952
+ 'OPPO R7Plus' => [ 'Oppo', 'R7 Plus' ],
11953
+ 'OB-OPPO R7c' => [ 'Oppo', 'R7c' ],
11954
  'R7f' => [ 'Oppo', 'R7f' ],
11955
  'R7i' => [ 'Oppo', 'R7i' ],
11956
  'R7kf' => [ 'Oppo', 'R7kf' ],
11959
  'OPPO R7sm' => [ 'Oppo', 'R7sm' ],
11960
  'OPPO R7st' => [ 'Oppo', 'R7st' ],
11961
  'OPPO R7t' => [ 'Oppo', 'R7t' ],
11962
+ 'R7t' => [ 'Oppo', 'R7t' ],
11963
+ 'OPPO R9k' => [ 'Oppo', 'R9k' ],
11964
  'OPPO R9m' => [ 'Oppo', 'R9m' ],
11965
  'OPPO R9tm' => [ 'Oppo', 'R9tm' ],
11966
  'OPPO R9km' => [ 'Oppo', 'R9km' ],
11967
  'OPPO R9s' => [ 'Oppo', 'R9s' ],
11968
  'OPPO R9sk' => [ 'Oppo', 'R9sk' ],
11969
  'OPPO R9st' => [ 'Oppo', 'R9st' ],
11970
+ 'OPPO R9skt' => [ 'Oppo', 'R9skt' ],
11971
  'OPPO R9t' => [ 'Oppo', 'R9t' ],
11972
  'OPPO R9tm' => [ 'Oppo', 'R9tm' ],
11973
  'OPPO R11' => [ 'Oppo', 'R11' ],
11974
+ 'CPH1721' => [ 'Oppo', 'R11s' ],
11975
  'OPPO R11t' => [ 'Oppo', 'R11t' ],
11976
  'OPPO R7 Plus' => [ 'Oppo', 'R7 Plus' ],
11977
  'R7Plus' => [ 'Oppo', 'R7 Plus' ],
11982
  'OPPO R9 Plustm A' => [ 'Oppo', 'R9 Plus' ],
11983
  'CPH1611' => [ 'Oppo', 'R9s Plus' ],
11984
  'OPPO R9s Plus' => [ 'Oppo', 'R9s Plus' ],
11985
+ 'OPPO R9s Plust' => [ 'Oppo', 'R9st Plus' ],
11986
  'OPPO R11 Plus' => [ 'Oppo', 'R11 Plus' ],
11987
+ 'OPPO R11 Plusk' => [ 'Oppo', 'R11k Plus' ],
11988
+ 'OPPO R11 Pluskt' => [ 'Oppo', 'R11kt Plus' ],
11989
+ 'OPPO R11s' => [ 'Oppo', 'R11s' ],
11990
  'OPPO R11s Plus' => [ 'Oppo', 'R11s Plus' ],
11991
+ 'OPPO R11st' => [ 'Oppo', 'R11st' ],
11992
+ 'OPPO R11s Plust' => [ 'Oppo', 'R11st Plus' ],
11993
+ 'PAAM00' => [ 'Oppo', 'R15' ],
11994
+ 'OPPO PAAM00' => [ 'Oppo', 'R15' ],
11995
+ 'PACM00' => [ 'Oppo', 'R15' ],
11996
+ 'OPPO PACM00' => [ 'Oppo', 'R15' ],
11997
+ 'PACT00' => [ 'Oppo', 'R15' ],
11998
+ 'OPPO PACT00' => [ 'Oppo', 'R15' ],
11999
+ 'PAAT00' => [ 'Oppo', 'R15 Dream Mirror' ],
12000
+ 'CPH1879' => [ 'Oppo', 'R17' ],
12001
+ 'PBEM00' => [ 'Oppo', 'R17' ],
12002
+ 'PBET00' => [ 'Oppo', 'R17' ],
12003
+ 'PBDM00' => [ 'Oppo', 'R17 Pro' ],
12004
+ 'OPPO PBDM00' => [ 'Oppo', 'R17 Pro' ],
12005
+ 'CPH1861' => [ 'Oppo', 'Realme 1' ],
12006
  'W8' => [ 'Oppo', 'W8' ],
12007
+ 'OB-OPPO 1105' => [ 'Oppo', '1105' ],
12008
  '1105' => [ 'Oppo', '1105' ],
12009
  '1107' => [ 'Oppo', '1107' ],
12010
  'OB-OPPO 3005' => [ 'Oppo', '3005' ],
12011
+ '3007' => [ 'Oppo', '3007' ],
12012
+ '6607' => [ 'Oppo', 'U3' ],
12013
+ 'PAFM00' => [ 'Oppo', 'Find X' ],
12014
+ 'OPPO PAFM00' => [ 'Oppo', 'Find X' ],
12015
+ 'PAHM00' => [ 'Oppo', 'Find X' ],
12016
+ 'PCAM00' => [ 'Oppo', 'Reno' ],
12017
+ 'PCAM10' => [ 'Oppo', 'Reno Lite' ],
12018
+ 'PCCM00' => [ 'Oppo', 'Reno 10x Zoom' ],
12019
+ 'CPH1979' => [ 'Oppo', 'Reno Z' ],
12020
 
12021
  'OPSSON!!' => [
12022
  'OPSSON D1' => [ 'Opsson', 'D1' ],
12044
  'Bucare Y330-U05' => [ 'Orinoquia', 'Bucare Y330' ],
12045
  'Kavak Y625-U03' => [ 'Orinoquia', 'Kavak Y625' ],
12046
 
12047
+ 'C15 Pro' => [ 'Oukitel', 'C15 Pro' ],
12048
+ 'C21 Pro' => [ 'Oukitel', 'C21 Pro' ],
12049
+ 'B2021' => [ 'Oukitel', 'B2021' ],
12050
+ 'K6000 Pro' => [ 'Oukitel', 'K6000 Pro' ],
12051
  'K10000 Pro' => [ 'Oukitel', 'K10000 Pro' ],
12052
 
12053
  '(OV-|Overmax|Vertis)!!' => [
12076
  'Vertis Famy' => [ 'Overmax', 'Vertis Famy' ],
12077
  ],
12078
 
12079
+ 'OV10274G' => [ 'Overmax', '1027' ],
12080
  'Arctic450' => [ 'Oysters', 'Arctic 450' ],
12081
  'Oysters Pacific 800' => [ 'Oysters', 'Pacific 800' ],
12082
  'Oysters T3 3G' => [ 'Oysters', 'T3' ],
13187
  ],
13188
 
13189
  'RoverPad 3W T71D' => [ 'RoverPad', '3W T71D', DeviceType::TABLET ],
13190
+ 'RG650' => [ 'RugGear', 'RG650' ],
13191
+ 'RG655' => [ 'RugGear', 'RG655' ],
13192
+ 'RG725' => [ 'RugGear', 'RG725' ],
13193
+ 'RG850' => [ 'RugGear', 'RG850' ],
13194
 
13195
  'Snexian!!' => [
13196
  'Snexian Mi320' => [ 'S Nexian', 'Chronos Mi320' ],
13621
  'SMT-i9100' => [ 'Samsung', 'Galaxy Tab 7.0', DeviceType::TABLET ],
13622
 
13623
  'SM-A[0-9]{3,3}!!' => [
13624
+ 'SM-A013!' => [ 'Samsung', 'Galaxy A01 Core' ],
13625
+ 'SM-A015!' => [ 'Samsung', 'Galaxy A01' ],
13626
+ 'SM-A022!' => [ 'Samsung', 'Galaxy A02' ],
13627
+ 'SM-A025!' => [ 'Samsung', 'Galaxy A02s' ],
13628
+ 'SM-A032!' => [ 'Samsung', 'Galaxy A03 Core' ],
13629
+ 'SM-A035!' => [ 'Samsung', 'Galaxy A03' ],
13630
+ 'SM-A037!' => [ 'Samsung', 'Galaxy A03s' ],
13631
+ 'SM-A102!' => [ 'Samsung', 'Galaxy A10e' ],
13632
+ 'SM-A105!' => [ 'Samsung', 'Galaxy A10' ],
13633
+ 'SM-A107!' => [ 'Samsung', 'Galaxy A10s' ],
13634
+ 'SM-A115!' => [ 'Samsung', 'Galaxy A11' ],
13635
+ 'SM-A125!' => [ 'Samsung', 'Galaxy A12' ],
13636
+ 'SM-A127!' => [ 'Samsung', 'Galaxy A12' ],
13637
+ 'SM-A135!' => [ 'Samsung', 'Galaxy A13' ],
13638
+ 'SM-A202!' => [ 'Samsung', 'Galaxy A20e' ],
13639
+ 'SM-A205!' => [ 'Samsung', 'Galaxy A20' ],
13640
+ 'SM-A207!' => [ 'Samsung', 'Galaxy A20s' ],
13641
+ 'SM-A215!' => [ 'Samsung', 'Galaxy A21' ],
13642
+ 'SM-A217!' => [ 'Samsung', 'Galaxy A21s' ],
13643
+ 'SM-A225!' => [ 'Samsung', 'Galaxy A22' ],
13644
+ 'SM-A226!' => [ 'Samsung', 'Galaxy A22 5G' ],
13645
+ 'SM-A260!' => [ 'Samsung', 'Galaxy A2 Core' ],
13646
  'SM-A300!' => [ 'Samsung', 'Galaxy A3' ],
13647
+ 'SM-A305!' => [ 'Samsung', 'Galaxy A30' ],
13648
+ 'SM-A307!' => [ 'Samsung', 'Galaxy A30s' ],
13649
  'SM-A310!' => [ 'Samsung', 'Galaxy A3 (2016)' ],
13650
+ 'SM-A315!' => [ 'Samsung', 'Galaxy A31' ],
13651
  'SM-A320!' => [ 'Samsung', 'Galaxy A3 (2017)' ],
13652
+ 'SM-A325!' => [ 'Samsung', 'Galaxy A32' ],
13653
+ 'SM-A326!' => [ 'Samsung', 'Galaxy A32 5G' ],
13654
+ 'SM-A405!' => [ 'Samsung', 'Galaxy A40' ],
13655
+ 'SM-A415!' => [ 'Samsung', 'Galaxy A41' ],
13656
+ 'SM-A426!' => [ 'Samsung', 'Galaxy A42 5G' ],
13657
  'SM-A430!' => [ 'Samsung', 'Galaxy A4' ],
13658
  'SM-A450!' => [ 'Samsung', 'Galaxy A4 (2017)' ],
13659
+ 'SM-A460!' => [ 'Samsung', 'SM-A460' ],
13660
  'SM-A500!' => [ 'Samsung', 'Galaxy A5' ],
13661
+ 'SM-A505!' => [ 'Samsung', 'Galaxy A50' ],
13662
+ 'SM-A507!' => [ 'Samsung', 'Galaxy A50s' ],
13663
  'SM-A510!' => [ 'Samsung', 'Galaxy A5 (2016)' ],
13664
+ 'SM-A515!' => [ 'Samsung', 'Galaxy A51' ],
13665
+ 'SM-A516!' => [ 'Samsung', 'Galaxy A51 5G' ],
13666
  'SM-A520!' => [ 'Samsung', 'Galaxy A5 (2017)' ],
13667
+ 'SM-A525!' => [ 'Samsung', 'Galaxy A52' ],
13668
+ 'SM-A526!' => [ 'Samsung', 'Galaxy A52 5G' ],
13669
+ 'SM-A528!' => [ 'Samsung', 'Galaxy A52s 5G' ],
13670
  'SM-A530!' => [ 'Samsung', 'Galaxy A8 (2018)' ],
13671
+ 'SM-A536!' => [ 'Samsung', 'Galaxy A53' ],
13672
  'SM-A600!' => [ 'Samsung', 'Galaxy A6 (2018)' ],
13673
  'SM-A6050!' => [ 'Samsung', 'Galaxy A9 Star Lite' ],
13674
  'SM-A605!' => [ 'Samsung', 'Galaxy A6+ (2018)' ],
13675
+ 'SM-A606!' => [ 'Samsung', 'Galaxy A60' ],
13676
  'SM-A700!' => [ 'Samsung', 'Galaxy A7' ],
13677
+ 'SM-A705!' => [ 'Samsung', 'Galaxy A70' ],
13678
  'SM-A710!' => [ 'Samsung', 'Galaxy A7 (2016)' ],
13679
+ 'SM-A715!' => [ 'Samsung', 'Galaxy A71' ],
13680
+ 'SM-A716!' => [ 'Samsung', 'Galaxy A71 5G' ],
13681
  'SM-A720!' => [ 'Samsung', 'Galaxy A7 (2017)' ],
13682
+ 'SM-A725!' => [ 'Samsung', 'Galaxy A72' ],
13683
  'SM-A730!' => [ 'Samsung', 'Galaxy A8+ (2018)' ],
13684
+ 'SM-A750!' => [ 'Samsung', 'Galaxy A7 (2018)' ],
13685
  'SM-A800!' => [ 'Samsung', 'Galaxy A8' ],
13686
+ 'SM-A805!' => [ 'Samsung', 'Galaxy A80' ],
13687
  'SM-A810!' => [ 'Samsung', 'Galaxy A8 (2016)' ],
13688
  'SM-A850!' => [ 'Samsung', 'Galaxy Alpha' ],
13689
  'SM-A900!' => [ 'Samsung', 'Galaxy A9 (2016)' ],
13690
+ 'SM-A908!' => [ 'Samsung', 'Galaxy A90 5G' ],
13691
  'SM-A910!' => [ 'Samsung', 'Galaxy A9 Pro' ],
13692
+ 'SM-A920!' => [ 'Samsung', 'Galaxy A9 (2018)' ],
13693
  ],
13694
 
13695
  'SM-C[0-9]{3,3}!!' => [
13708
  'SM-E700!' => [ 'Samsung', 'Galaxy E7' ],
13709
  ],
13710
 
13711
+ 'SM-F[0-9]{3,3}!!' => [
13712
+ 'SM-F127!' => [ 'Samsung', 'Galaxy F12' ],
13713
+ 'SM-F700!' => [ 'Samsung', 'Galaxy Z Flip' ],
13714
+ 'SM-F707!' => [ 'Samsung', 'Galaxy Z Flip 5G' ],
13715
+ 'SM-F711!' => [ 'Samsung', 'Galaxy Z Flip3 5G' ],
13716
+ 'SM-F900!' => [ 'Samsung', 'Galaxy Fold' ],
13717
+ 'SM-F907!' => [ 'Samsung', 'Galaxy Fold 5G' ],
13718
+ 'SM-F910!' => [ 'Samsung', 'Galaxy Z Fold2' ],
13719
+ 'SM-F916!' => [ 'Samsung', 'Galaxy Z Fold2 5G' ],
13720
+ 'SM-F926!' => [ 'Samsung', 'Galaxy Z Fold3 5G' ],
13721
+ ],
13722
+
13723
  'SM-G[0-9]{3,3}!!' => [
13724
  'SM-G110!' => [ 'Samsung', 'Galaxy Pocket 2' ],
13725
  'SM-G130BT' => [ 'Samsung', 'Galaxy Young 2' ],
13760
  'SM-G388!' => [ 'Samsung', 'Galaxy Xcover 3' ],
13761
  'SM-G389!' => [ 'Samsung', 'Galaxy Xcover 3 VE' ],
13762
  'SM-G390!' => [ 'Samsung', 'Galaxy Xcover 4' ],
13763
+ 'SM-G398!' => [ 'Samsung', 'Galaxy Xcover 4s' ],
13764
  'SM-G420!' => [ 'Samsung', 'SM-G420' ], // Unknown
13765
  'SM-G430!' => [ 'Samsung', 'SM-G430' ], // Unknown
13766
  'SM-G480!' => [ 'Samsung', 'Galaxy S8' ],
13767
  'SM-G485!' => [ 'Samsung', 'Galaxy S8+' ],
13768
  'SM-G510!' => [ 'Samsung', 'Galaxy Core Max' ],
13769
+ 'SM-G525!' => [ 'Samsung', 'Galaxy Xcover 5' ],
13770
  'SM-G530!' => [ 'Samsung', 'Galaxy Grand Prime' ],
13771
  'SM-G531!' => [ 'Samsung', 'Galaxy Grand Prime VE' ],
13772
  'SM-G532!' => [ 'Samsung', 'Galaxy Grand Prime+' ],
13779
  'SM-G615!' => [ 'Samsung', 'Galaxy J7 Max' ],
13780
  'SM-G620!' => [ 'Samsung', 'Galaxy J7 Prime (2018)' ],
13781
  'SM-G710!' => [ 'Samsung', 'Galaxy Grand 2' ],
13782
+ 'SM-G715!' => [ 'Samsung', 'Galaxy XCover Pro' ],
13783
  'SM-G720!' => [ 'Samsung', 'Galaxy Grand 3' ],
13784
  'SM-G730!' => [ 'Samsung', 'Galaxy S III Mini' ],
13785
  'SM-G750!' => [ 'Samsung', 'Galaxy Mega 2 ' ],
13786
+ 'SM-G770!' => [ 'Samsung', 'Galaxy S10 Lite' ],
13787
+ 'SM-G780!' => [ 'Samsung', 'Galaxy S20 FE' ],
13788
+ 'SM-G781!' => [ 'Samsung', 'Galaxy S20 FE' ],
13789
  'SM-G800!' => [ 'Samsung', 'Galaxy S5 Mini' ],
13790
  'SM-G850!' => [ 'Samsung', 'Galaxy Alpha' ],
13791
  'SM-G860!' => [ 'Samsung', 'Galaxy S5 Sport' ],
13792
  'SM-G870!' => [ 'Samsung', 'Galaxy S5 Active' ],
13793
+ 'SM-G875!' => [ 'Samsung', 'Galaxy S Lite Luxury' ],
13794
  'SM-G880!' => [ 'Samsung', 'Galaxy S7 mini' ],
13795
+ 'SM-G885[FSY]!' => [ 'Samsung', 'Galaxy A8 Star' ],
13796
  'SM-G8850!' => [ 'Samsung', 'Galaxy A9 Star' ],
13797
+ 'SM-G887!' => [ 'Samsung', 'Galaxy A9 Pro (2019)' ],
13798
+ 'SM-G889!' => [ 'Samsung', 'Galaxy Xcover FieldPro' ],
13799
  'SM-G890!' => [ 'Samsung', 'Galaxy S6 Active' ],
13800
  'SM-G891!' => [ 'Samsung', 'Galaxy S7 Active' ],
13801
  'SM-G892!' => [ 'Samsung', 'Galaxy S8 Active' ],
13816
  'SM-G955!' => [ 'Samsung', 'Galaxy S8+' ],
13817
  'SM-G960!' => [ 'Samsung', 'Galaxy S9' ],
13818
  'SM-G965!' => [ 'Samsung', 'Galaxy S9+' ],
13819
+ 'SM-G970!' => [ 'Samsung', 'Galaxy S10e' ],
13820
+ 'SM-G973!' => [ 'Samsung', 'Galaxy S10' ],
13821
+ 'SM-G975!' => [ 'Samsung', 'Galaxy S10+' ],
13822
+ 'SM-G977!' => [ 'Samsung', 'Galaxy S10 5G' ],
13823
+ 'SM-G980!' => [ 'Samsung', 'Galaxy S20' ],
13824
+ 'SM-G981!' => [ 'Samsung', 'Galaxy S20' ],
13825
+ 'SM-G985!' => [ 'Samsung', 'Galaxy S20+' ],
13826
+ 'SM-G986!' => [ 'Samsung', 'Galaxy S20+' ],
13827
+ 'SM-G988!' => [ 'Samsung', 'Galaxy S20 Ultra' ],
13828
+ 'SM-G990!' => [ 'Samsung', 'Galaxy S21 FE' ],
13829
+ 'SM-G991!' => [ 'Samsung', 'Galaxy S21' ],
13830
+ 'SM-G996!' => [ 'Samsung', 'Galaxy S21+' ],
13831
+ 'SM-G998!' => [ 'Samsung', 'Galaxy S21 Ultra' ],
13832
  ],
13833
 
13834
  'SM-I9500' => [ 'Samsung', 'Galaxy S4' ],
13842
  'SM-J200!' => [ 'Samsung', 'Galaxy J2' ],
13843
  'SM-J210!' => [ 'Samsung', 'Galaxy J2 (2016)' ],
13844
  'SM-J250!' => [ 'Samsung', 'Galaxy J2 (2018)' ],
13845
+ 'SM-J260!' => [ 'Samsung', 'Galaxy J2 Pure' ],
13846
  'SM-J3(10|20)!' => [ 'Samsung', 'Galaxy J3' ],
13847
  'SM-J311!' => [ 'Samsung', 'Galaxy J3 (2016)' ],
13848
  'SM-J321!' => [ 'Samsung', 'Galaxy Sol' ],
13850
  'SM-J327!' => [ 'Samsung', 'Galaxy J3 Emerge' ],
13851
  'SM-J330!' => [ 'Samsung', 'Galaxy J3 (2017)' ],
13852
  'SM-J337!' => [ 'Samsung', 'Galaxy J3 (2018)' ],
13853
+ 'SM-J400!' => [ 'Samsung', 'Galaxy J4' ],
13854
+ 'SM-J410!' => [ 'Samsung', 'Galaxy J4 Core' ],
13855
+ 'SM-J415!' => [ 'Samsung', 'Galaxy J4+' ],
13856
  'SM-J500!' => [ 'Samsung', 'Galaxy J5' ],
13857
  'SM-J510!' => [ 'Samsung', 'Galaxy J5 (2016)' ],
13858
  'SM-J530!' => [ 'Samsung', 'Galaxy J5 (2017)' ],
13859
+ 'SM-J600!' => [ 'Samsung', 'Galaxy J6' ],
13860
+ 'SM-J610!' => [ 'Samsung', 'Galaxy J6+' ],
13861
  'SM-J700!' => [ 'Samsung', 'Galaxy J7' ],
13862
  'SM-J701!' => [ 'Samsung', 'Galaxy J7 Core' ],
13863
  'SM-J710!' => [ 'Samsung', 'Galaxy J7 (2016)' ],
13864
+ 'SM-J720!' => [ 'Samsung', 'Galaxy J7 Duo' ],
13865
  'SM-J727!' => [ 'Samsung', 'Galaxy J7 Perx' ],
13866
  'SM-J730!' => [ 'Samsung', 'Galaxy J7 (2017)' ],
13867
  'SM-J737!' => [ 'Samsung', 'Galaxy Wide 3' ],
13870
  'SM-J900!' => [ 'Samsung', 'Galaxy J9' ],
13871
  ],
13872
 
13873
+ 'SM-M[0-9]{3,4}!!' => [
13874
+ 'SM-M015!' => [ 'Samsung', 'Galaxy M01' ],
13875
+ 'SM-M105!' => [ 'Samsung', 'Galaxy M10' ],
13876
+ 'SM-M115!' => [ 'Samsung', 'Galaxy M11' ],
13877
+ 'SM-M127!' => [ 'Samsung', 'Galaxy M12' ],
13878
+ 'SM-M205!' => [ 'Samsung', 'Galaxy M20' ],
13879
+ 'SM-M215!' => [ 'Samsung', 'Galaxy M21' ],
13880
+ 'SM-M225!' => [ 'Samsung', 'Galaxy M22' ],
13881
+ 'SM-M305!' => [ 'Samsung', 'Galaxy M30' ],
13882
+ 'SM-M307!' => [ 'Samsung', 'Galaxy M30s' ],
13883
+ 'SM-M315!' => [ 'Samsung', 'Galaxy M31' ],
13884
+ 'SM-M317!' => [ 'Samsung', 'Galaxy M31s' ],
13885
+ 'SM-M515!' => [ 'Samsung', 'Galaxy M51' ],
13886
+ 'SM-M526!' => [ 'Samsung', 'Galaxy M52' ],
13887
+ ],
13888
+
13889
  'SM-N[0-9]{3,4}!!' => [
13890
  'SM-N750[025789][QV]?!' => [ 'Samsung', 'Galaxy Note 3 Neo' ],
13891
  'SM-N750[LS]?!' => [ 'Samsung', 'Galaxy Note 3 Neo' ],
13892
+ 'SM-N770!' => [ 'Samsung', 'Galaxy Note 10 Lite' ],
13893
  'SM-N8000' => [ 'Samsung', 'Galaxy Note 800', DeviceType::TABLET ],
13894
  'SM-N900[0256789]?!' => [ 'Samsung', 'Galaxy Note 3' ],
13895
  'SM-N900!' => [ 'Samsung', 'Galaxy Note 3' ],
13901
  'SM-N935!' => [ 'Samsung', 'Galaxy Note FE' ],
13902
  'SM-N95[05]!' => [ 'Samsung', 'Galaxy Note 8' ],
13903
  'SM-N960!' => [ 'Samsung', 'Galaxy Note 9' ],
13904
+ 'SM-N970!' => [ 'Samsung', 'Galaxy Note 10' ],
13905
+ 'SM-N975!' => [ 'Samsung', 'Galaxy Note 10+' ],
13906
+ 'SM-N976!' => [ 'Samsung', 'Galaxy Note 10+ 5G' ],
13907
+ 'SM-N980!' => [ 'Samsung', 'Galaxy Note 20' ],
13908
+ 'SM-N981!' => [ 'Samsung', 'Galaxy Note 20 5G' ],
13909
+ 'SM-N986!' => [ 'Samsung', 'Galaxy Note 20 Ultra 5G' ],
13910
  ],
13911
 
13912
  'SM-P[0-9]{3,3}!!' => [
13914
  'SM-P55[015]!' => [ 'Samsung', 'Galaxy Tab A Plus 9.7', DeviceType::TABLET ],
13915
  'SM-P58[058]!' => [ 'Samsung', 'Galaxy Tab A 10.1 with S Pen (2016)', DeviceType::TABLET ],
13916
  'SM-P60[01257]!' => [ 'Samsung', 'Galaxy Note 10.1 (2014)', DeviceType::TABLET ],
13917
+ 'SM-P61[05]!' => [ 'Samsung', 'Galaxy Tab S6 Lite', DeviceType::TABLET ],
13918
  'SM-P90[01257]!' => [ 'Samsung', 'Galaxy Note Pro', DeviceType::TABLET ],
13919
  ],
13920
 
13923
  'SM-S320VL' => [ 'Samsung', 'Galaxy Sky' ],
13924
  'SM-S327VL' => [ 'Samsung', 'Galaxy J3 Luna Pro' ],
13925
  'SM-S337TL' => [ 'Samsung', 'Galaxy J3 Luna Pro' ],
13926
+ 'SM-S367VL' => [ 'Samsung', 'Galaxy J3 Orbit' ],
13927
  'SM-S550TL' => [ 'Samsung', 'Galaxy On5' ],
13928
  'SM-S727VL' => [ 'Samsung', 'Galaxy J7 Sky Pro' ],
13929
  'SM-S737TL' => [ 'Samsung', 'Galaxy J7 Sky Pro' ],
13930
+ 'SM-S757BL' => [ 'Samsung', 'Galaxy J7 Top' ],
13931
  'SM-S765C' => [ 'Samsung', 'Galaxy Ace Style' ],
13932
  'SM-S766C' => [ 'Samsung', 'Galaxy Stardust' ],
13933
+ 'SM-S767VL' => [ 'Samsung', 'Galaxy J7 Crown' ],
13934
  'SM-S777C' => [ 'Samsung', 'Galaxy J1' ],
13935
  'SM-S780L' => [ 'Samsung', 'Galaxy Mega 6.3' ],
13936
  'SM-S820L' => [ 'Samsung', 'Galaxy Core Prime' ],
13937
  'SM-S890L' => [ 'Samsung', 'Galaxy S4 Mini' ],
13938
+ 'SM-S901B' => [ 'Samsung', 'Galaxy S22' ],
13939
  'SM-S902L' => [ 'Samsung', 'Galaxy S5' ],
13940
  'SM-S903VL' => [ 'Samsung', 'Galaxy S5' ],
13941
  'SM-S906L' => [ 'Samsung', 'Galaxy S6' ],
13942
+ 'SM-S906B' => [ 'Samsung', 'Galaxy S22+' ],
13943
  'SM-S907VL' => [ 'Samsung', 'Galaxy S6' ],
13944
+ 'SM-S908B' => [ 'Samsung', 'Galaxy S22 Ultra' ],
13945
  'SM-S920L' => [ 'Samsung', 'Galaxy Grand Prime' ],
13946
  'SM-S975L' => [ 'Samsung', 'Galaxy S4' ],
13947
  'SM-S978L' => [ 'Samsung', 'Galaxy E5' ],
13952
  'SM-T11[36]!' => [ 'Samsung', 'Galaxy Tab 3V 7.0', DeviceType::TABLET ],
13953
  'SM-T2105' => [ 'Samsung', 'Galaxy Tab 3 Kids', DeviceType::TABLET ],
13954
  'SM-T21[01257]!' => [ 'Samsung', 'Galaxy Tab 3 7.0', DeviceType::TABLET ],
13955
+ 'SM-T22[05]!' => [ 'Samsung', 'Galaxy Tab A7 Lite', DeviceType::TABLET ],
13956
  'SM-T2519' => [ 'Samsung', 'Galaxy Tab Q' ],
13957
  'SM-T255[68S]!' => [ 'Samsung', 'Galaxy Tab Q' ],
13958
  'SM-T23[012579]!' => [ 'Samsung', 'Galaxy Tab 4 7.0', DeviceType::TABLET ],
13959
  'SM-T28[057]!' => [ 'Samsung', 'Galaxy Tab A 7.0', DeviceType::TABLET ],
13960
+ 'SM-T29[05]!' => [ 'Samsung', 'Galaxy Tab A 8.0 (2019)', DeviceType::TABLET ],
13961
+ 'SM-T30[7]!' => [ 'Samsung', 'Galaxy Tab A 8.4 (2020)', DeviceType::TABLET ],
13962
  'SM-T31[0125]!' => [ 'Samsung', 'Galaxy Tab 3 8.0', DeviceType::TABLET ],
13963
  'SM-T32[0125]!' => [ 'Samsung', 'Galaxy Tab Pro 8.4', DeviceType::TABLET ],
13964
  'SM-T33[01257]!' => [ 'Samsung', 'Galaxy Tab 4 8.0', DeviceType::TABLET ],
13967
  'SM-T36[05]!' => [ 'Samsung', 'Galaxy Tab Active 8.0', DeviceType::TABLET ],
13968
  'SM-T37[578]!' => [ 'Samsung', 'Galaxy Tab E 8.0', DeviceType::TABLET ],
13969
  'SM-T38[05]!' => [ 'Samsung', 'Galaxy Tab A 8.0 (2017)', DeviceType::TABLET ],
13970
+ 'SM-T387!' => [ 'Samsung', 'Galaxy Tab A 8.0 (2018)', DeviceType::TABLET ],
13971
+ 'SM-T39[05]!' => [ 'Samsung', 'Galaxy Tab Active2 8.0', DeviceType::TABLET ],
13972
+ 'SM-T50[05]!' => [ 'Samsung', 'Galaxy Tab A7 10.4 (2020)', DeviceType::TABLET ],
13973
+ 'SM-T51[05]!' => [ 'Samsung', 'Galaxy Tab A 10.1 (2019)', DeviceType::TABLET ],
13974
  'SM-T520CC' => [ 'Samsung', 'Galaxy Tab Pro 10.1 Chef Collection', DeviceType::TABLET ],
13975
  'SM-T52[057]!' => [ 'Samsung', 'Galaxy Tab Pro 10.1', DeviceType::TABLET ],
13976
  'SM-T530NU' => [ 'Samsung', 'Galaxy Tab 4 Nook 10.1', DeviceType::TABLET ],
13977
  'SM-T53[023]!' => [ 'Samsung', 'Galaxy Tab 4 10.1', DeviceType::TABLET ],
13978
  'SM-T53[6]!' => [ 'Samsung', 'Galaxy Tab 4 10.1 Advanced', DeviceType::TABLET ],
13979
  'SM-T53[157]!' => [ 'Samsung', 'Galaxy Tab 4 10.0', DeviceType::TABLET ],
13980
+ 'SM-T54[05]!' => [ 'Samsung', 'Galaxy Tab Active Pro', DeviceType::TABLET ],
13981
  'SM-T55[015]!' => [ 'Samsung', 'Galaxy Tab A 9.7', DeviceType::TABLET ],
13982
+ 'SM-T57[5]!' => [ 'Samsung', 'Galaxy Tab Active3', DeviceType::TABLET ],
13983
  'SM-T58[057]!' => [ 'Samsung', 'Galaxy Tab A 10.1 (2016)', DeviceType::TABLET ],
13984
+ 'SM-T583!' => [ 'Samsung', 'Galaxy Tab Advanced2', DeviceType::TABLET ],
13985
  'SM-T56[0127]!' => [ 'Samsung', 'Galaxy Tab E 9.6', DeviceType::TABLET ],
13986
+ 'SM-T59[057]!' => [ 'Samsung', 'Galaxy Tab A 10.5', DeviceType::TABLET ],
13987
  'SM-T67[07]!' => [ 'Samsung', 'Galaxy View', DeviceType::TABLET ],
13988
  'SM-T70[057]!' => [ 'Samsung', 'Galaxy Tab S 8.4', DeviceType::TABLET ],
13989
  'SM-T71[05]!' => [ 'Samsung', 'Galaxy Tab S2 8.0', DeviceType::TABLET ],
13990
  'SM-T71[39]!' => [ 'Samsung', 'Galaxy Tab S2 8.0 (2016)', DeviceType::TABLET ],
13991
+ 'SM-T72[057]!' => [ 'Samsung', 'Galaxy Tab S5e', DeviceType::TABLET ],
13992
+ 'SM-T73[36]!' => [ 'Samsung', 'Galaxy Tab S7 12.4 FE (2021)', DeviceType::TABLET ],
13993
  'SM-T80[0157]!' => [ 'Samsung', 'Galaxy Tab S 10.5', DeviceType::TABLET ],
13994
  'SM-T81[057]!' => [ 'Samsung', 'Galaxy Tab S2 9.7', DeviceType::TABLET ],
13995
  'SM-T81[39]!' => [ 'Samsung', 'Galaxy Tab S2 9.7 (2016)', DeviceType::TABLET ],
13996
  'SM-T81[8]!' => [ 'Samsung', 'Galaxy Tab S2 Plus 9.7', DeviceType::TABLET ],
13997
  'SM-T82[057]!' => [ 'Samsung', 'Galaxy Tab S3 9.7', DeviceType::TABLET ],
13998
  'SM-T83[057]!' => [ 'Samsung', 'Galaxy Tab S4 10.5', DeviceType::TABLET ],
13999
+ 'SM-T86[057]!' => [ 'Samsung', 'Galaxy Tab S6 10.5', DeviceType::TABLET ],
14000
+ 'SM-T87[05]!' => [ 'Samsung', 'Galaxy Tab S7 11.0', DeviceType::TABLET ],
14001
  'SM-T90[05]!' => [ 'Samsung', 'Galaxy Tab Pro 12.2', DeviceType::TABLET ],
14002
+ 'SM-T92[7]!' => [ 'Samsung', 'Galaxy View2 (2019)', DeviceType::TABLET ],
14003
+ 'SM-T97[06]!' => [ 'Samsung', 'Galaxy Tab S7+ 12.4 (2020)', DeviceType::TABLET ],
14004
+
14005
  ],
14006
 
14007
+ 'SM-X200' => [ 'Samsung', 'Galaxy Tab A8 10.5', DeviceType::TABLET ],
14008
+ 'SM-X205' => [ 'Samsung', 'Galaxy Tab A8 10.5', DeviceType::TABLET ],
14009
+ 'SM-X700' => [ 'Samsung', 'Galaxy Tab S8', DeviceType::TABLET ],
14010
+ 'SM-X800' => [ 'Samsung', 'Galaxy Tab S8+', DeviceType::TABLET ],
14011
+ 'SM-X900' => [ 'Samsung', 'Galaxy Tab S8 Ultra', DeviceType::TABLET ],
14012
+ 'SM-X906!' => [ 'Samsung', 'Galaxy Tab S8 Ultra', DeviceType::TABLET ],
14013
+
14014
  'SM-V700' => [ 'Samsung', 'Galaxy Gear', DeviceType::WATCH ],
14015
 
14016
  'SM-W[0-9]{4,4}!!' => [
14150
  'SC-01G' => [ 'Samsung', 'GALAXY Note Edge SC-01G', 'carrier' => 'DoCoMo' ],
14151
  'SC-01H' => [ 'Samsung', 'GALAXY Active neo SC-01H', 'carrier' => 'DoCoMo' ],
14152
  'SC-01K' => [ 'Samsung', 'GALAXY Note 8 SC-01K', 'carrier' => 'DoCoMo' ],
14153
+ 'SC-01L' => [ 'Samsung', 'GALAXY Note9 SC-01L', 'carrier' => 'DoCoMo' ],
14154
+ 'SC-01M' => [ 'Samsung', 'GALAXY Note10+ SC-01M', 'carrier' => 'DoCoMo' ],
14155
  'SC-02B' => [ 'Samsung', 'GALAXY S SC-02B', 'carrier' => 'DoCoMo' ],
14156
  'SC-02C' => [ 'Samsung', 'GALAXY S II SC-02C', 'carrier' => 'DoCoMo' ],
14157
  'SC-02D' => [ 'Samsung', 'GALAXY Tab 7.0 Plus SC-02D', DeviceType::TABLET, 'carrier' => 'DoCoMo' ],
14161
  'SC-02H' => [ 'Samsung', 'Galaxy S7 Edge SC-02H', 'carrier' => 'DoCoMo' ],
14162
  'SC-02J' => [ 'Samsung', 'Galaxy S8 SC-02J', 'carrier' => 'DoCoMo' ],
14163
  'SC-02K' => [ 'Samsung', 'Galaxy S9 SC-02K', 'carrier' => 'DoCoMo' ],
14164
+ 'SC-02L' => [ 'Samsung', 'Galaxy Feel2 SC-02L', 'carrier' => 'DoCoMo' ],
14165
  'SC-03D' => [ 'Samsung', 'GALAXY S II LTE SC-03D', 'carrier' => 'DoCoMo' ],
14166
  'SC-03E' => [ 'Samsung', 'GALAXY S III α SC-03E', 'carrier' => 'DoCoMo' ],
14167
  'SC03E' => [ 'Samsung', 'GALAXY S III α SC-03E', 'carrier' => 'DoCoMo' ],
14168
  'SC-03G' => [ 'Samsung', 'GALAXY Tab S 8.4 SC-03G', DeviceType::TABLET, 'carrier' => 'DoCoMo' ],
14169
  'SC-03J' => [ 'Samsung', 'GALAXY S8+ SC-03J', 'carrier' => 'DoCoMo' ],
14170
  'SC-03K' => [ 'Samsung', 'GALAXY S9+ SC-03K', 'carrier' => 'DoCoMo' ],
14171
+ 'SC-03L' => [ 'Samsung', 'Galaxy S10 SC-03L', 'carrier' => 'DoCoMo' ],
14172
  'SC-04D' => [ 'Samsung', 'GALAXY NEXUS SC-04D', 'carrier' => 'DoCoMo' ],
14173
  'SC-04E' => [ 'Samsung', 'GALAXY S4 SC-04E', 'carrier' => 'DoCoMo' ],
14174
  'SC-04F' => [ 'Samsung', 'GALAXY S5 SC-04F', 'carrier' => 'DoCoMo' ],
14175
  'SC-04G' => [ 'Samsung', 'GALAXY S6 Edge SC-04G', 'carrier' => 'DoCoMo' ],
14176
  'SC-04J' => [ 'Samsung', 'GALAXY Feel SC-04J', 'carrier' => 'DoCoMo' ],
14177
+ 'SC-04L' => [ 'Samsung', 'Galaxy S10+ SC-04L', 'carrier' => 'DoCoMo' ],
14178
  'SC-05D' => [ 'Samsung', 'GALAXY Note SC-05D', 'carrier' => 'DoCoMo' ],
14179
  'SC-05G' => [ 'Samsung', 'GALAXY S6 SC-05G', 'carrier' => 'DoCoMo' ],
14180
  'SC-06D' => [ 'Samsung', 'GALAXY S III SC-06D', 'carrier' => 'DoCoMo' ],
14189
  'SCV31' => [ 'Samsung', 'GALAXY S6 Edge SCV31', 'carrier' => 'au' ],
14190
  'SCV32' => [ 'Samsung', 'GALAXY A8 SCV32', 'carrier' => 'au' ],
14191
  'SCV33' => [ 'Samsung', 'GALAXY S7 edge Injustice Edition SCV33', 'carrier' => 'au' ],
14192
+ 'SCV34' => [ 'Samsung', 'GALAXY Note7 SCV34', 'carrier' => 'au' ],
14193
  'SCV35' => [ 'Samsung', 'GALAXY S8+ SCV35', 'carrier' => 'au' ],
14194
  'SCV36' => [ 'Samsung', 'GALAXY S8 SCV36', 'carrier' => 'au' ],
14195
  'SCV37' => [ 'Samsung', 'GALAXY Note8 SCV37', 'carrier' => 'au' ],
14196
+ 'SCV38' => [ 'Samsung', 'Galaxy S9 SCV38', 'carrier' => 'au' ],
14197
+ 'SCV39' => [ 'Samsung', 'Galaxy S9+ SCV39', 'carrier' => 'au' ],
14198
+ 'SCV40' => [ 'Samsung', 'Galaxy Note9 SCV40', 'carrier' => 'au' ],
14199
+ 'SCV41' => [ 'Samsung', 'Galaxy S10 SCV41', 'carrier' => 'au' ],
14200
  ],
14201
 
14202
  'ISW11SC' => [ 'Samsung', 'GALAXY S II WiMAX ISW11SC', 'carrier' => 'au' ],
14304
  'EB-L76G-B' => [ 'Sharp', 'EB-L76G-B', DeviceType::TABLET ],
14305
  'RW107' => [ 'Sharp', 'RW-T107', DeviceType::TABLET ],
14306
 
14307
+ 'FS8032' => [ 'Sharp', 'AQUOS S3 FS8032' ],
14308
+
14309
  'SBM[0-9]0[0-9]SH!!' => [
14310
  'SBM003SH' => [ 'Sharp', 'GALAPAGOS 003SH', 'carrier' => 'Softbank' ],
14311
  'SBM005SH' => [ 'Sharp', 'GALAPAGOS 005SH', 'carrier' => 'Softbank' ],
14350
  'DM-01H' => [ 'Sharp', 'DM-01H', 'carrier' => 'Disney Mobile' ],
14351
  'DM-01J' => [ 'Sharp', 'DM-01J', 'carrier' => 'Disney Mobile' ],
14352
 
14353
+ 'SH-A01' => [ 'Sharp', 'B10 SH-A01' ],
14354
+ 'SH-C02' => [ 'Sharp', 'AQUOS V SH-C02' ],
14355
+ 'SH-D01' => [ 'Sharp', 'AQUOS D10 SH-D01' ],
14356
  'SH-M01' => [ 'Sharp', 'AQUOS SH-M01' ],
14357
  'SH-M02' => [ 'Sharp', 'AQUOS SH-M02' ],
14358
  'SH-M02-EVA20' => [ 'Sharp', 'AQUOS SH-M02' ],
14359
  'SH-M03' => [ 'Sharp', 'AQUOS mini SH-M03' ],
14360
+ 'SH-M05' => [ 'Sharp', 'AQUOS sense lite SH-M05' ],
14361
  'SH-M07' => [ 'Sharp', 'AQUOS sense plus SH-M07' ],
14362
  'SH-RM02' => [ 'Sharp', 'AQUOS SH-RM02' ],
14363
+ 'SH-Z01' => [ 'Sharp', 'AQUOS C10 SH-Z01' ],
14364
 
14365
  'SH-[01][0-9][A-Z]!!' => [
14366
  'SH-01D' => [ 'Sharp', 'AQUOS PHONE SH-01D', 'carrier' => 'DoCoMo' ],
14372
  'SH-01H' => [ 'Sharp', 'AQUOS PHONE ZETA SH-01H', 'carrier' => 'DoCoMo' ],
14373
  'SH-01J' => [ 'Sharp', 'AQUOS ケータイ SH-01J', 'carrier' => 'DoCoMo' ],
14374
  'SH-01K' => [ 'Sharp', 'AQUOS sense SH-01K', 'carrier' => 'DoCoMo' ],
14375
+ 'SH-01L' => [ 'Sharp', 'AQUOS sense2 SH-01L', 'carrier' => 'DoCoMo' ],
14376
  'SH-02D' => [ 'Sharp', 'AQUOS PHONE slider SH-02D', 'carrier' => 'DoCoMo' ],
14377
  'SH-02E' => [ 'Sharp', 'AQUOS PHONE ZETA SH-02E', 'carrier' => 'DoCoMo' ],
14378
  'SH-02F' => [ 'Sharp', 'AQUOS PHONE EX SH-02F', 'carrier' => 'DoCoMo' ],
14461
  'SHV35' => [ 'Sharp', 'AQUOS U SHV35', 'carrier' => 'au' ],
14462
  'SHV36' => [ 'Sharp', 'BASIO2 SHV36', 'carrier' => 'au' ],
14463
  'SHV37' => [ 'Sharp', 'AQUOS U SHV37', 'carrier' => 'au' ],
14464
+ 'SHV37 u' => [ 'Sharp', 'AQUOS L SHV37', 'carrier' => 'UQ mobile' ],
14465
  'SHV38' => [ 'Sharp', 'AQUOS SERIE mini SHV38', 'carrier' => 'au' ],
14466
  'SHV39' => [ 'Sharp', 'AQUOS R SHV39', 'carrier' => 'au' ],
14467
  'SHV40' => [ 'Sharp', 'AQUOS sense SHV40', 'carrier' => 'au' ],
14468
+ 'SHV40 u' => [ 'Sharp', 'AQUOS sense SHV40', 'carrier' => 'UQ mobile' ],
14469
  'SHV41' => [ 'Sharp', 'AQUOS R compact SHV41', 'carrier' => 'au' ],
14470
  'SHV42' => [ 'Sharp', 'AQUOS R2 SHV42', 'carrier' => 'au' ],
14471
  ],
14492
  'LC-((A|S|LX)[0-9]{1,3}[A-Z])!' => [ 'Sharp', 'Aquos $1', DeviceType::TELEVISION ],
14493
  'LCD-((S|V|LX|UF)[0-9]{1,3}[A-Z])!' => [ 'Sharp', 'Aquos $1', DeviceType::TELEVISION ],
14494
 
14495
+ 'SHIFT6m' => [ 'Shift', 'SHIFT6m' ],
14496
+
14497
  'X-treme PQ11' => [ 'Sigma Mobile', 'X-treme PQ11' ],
14498
  'X-treme PQ15' => [ 'Sigma Mobile', 'X-treme PQ15' ],
14499
  'X-tremePQ22' => [ 'Sigma Mobile', 'X-treme PQ22' ],
14507
  'SPX-6' => [ 'Simvalley', 'SPX-6' ],
14508
  'SPX-12' => [ 'Simvalley', 'SPX-12' ],
14509
  'X720' => [ 'Simmtronics', 'XPAD X-720', DeviceType::TABLET ],
14510
+ 'FINNEY U1' => [ 'Sirin Labs', 'Finney U1' ],
14511
  'HYPER X BLADE' => [ 'SKK Mobile', 'Hyper X Blade' ],
14512
 
14513
  'Elite 5.5L+' => [ 'Sky Devices', 'Elite 5.5L+' ],
14633
  'sonim/XP7700' => [ 'Sonim', 'XP7700' ],
14634
  ],
14635
 
14636
+ 'XP8800' => [ 'Sonim', 'XP8800' ],
14637
+
14638
  'OMS1 6' => [ 'Sony Ericsson', 'A8i' ],
14639
 
14640
  'C[0-9]{4,4}!!' => [
14712
  ],
14713
 
14714
  'G[0-9]{4,4}!!' => [
14715
+ 'G31(12|13|16|21|23|25)!' => [ 'Sony', 'Xperia XA1' ],
14716
  'G32(12|21|23|26)!' => [ 'Sony', 'Xperia XA1 Ultra' ],
14717
  'G33(11|12|13)!' => [ 'Sony', 'Xperia L1' ],
14718
  'G34(12|16|21|23|26)!' => [ 'Sony', 'Xperia XA1 Plus' ],
14723
  ],
14724
 
14725
  'H[0-9]{4,4}!!' => [
14726
+ 'H31(13|23)!' => [ 'Sony', 'Xperia XA2 Ultra' ],
14727
+ 'H32(13|23)!' => [ 'Sony', 'Xperia XA2 Ultra' ],
14728
+ 'H33(11|21)!' => [ 'Sony', 'Xperia L2' ],
14729
+ 'H41(13|33)!' => [ 'Sony', 'Xperia XA2' ],
14730
+ 'H42(13|33)!' => [ 'Sony', 'Xperia XA2 Ultra' ],
14731
+ 'H43(11|31)!' => [ 'Sony', 'Xperia L2' ],
14732
+ 'H44(13|93)!' => [ 'Sony', 'Xperia XA2 Plus' ],
14733
+ 'H81(16|66)!' => [ 'Sony', 'Xperia XZ2 Premium' ],
14734
+ 'H82(16|66|76|96)!' => [ 'Sony', 'Xperia XZ2' ],
14735
+ 'H83(14|24)!' => [ 'Sony', 'Xperia XZ2 Compact' ],
14736
+ 'H84(16)!' => [ 'Sony', 'Xperia XZ3' ],
14737
+ 'H84(41)!' => [ 'Sony', 'Xperia XZ1 Compact' ],
14738
+ 'H94(36|93)!' => [ 'Sony', 'Xperia XZ3' ],
14739
+ ],
14740
+
14741
+ 'I[0-9]{4,4}!!' => [
14742
+ 'I31(13|23)!' => [ 'Sony', 'Xperia 10' ],
14743
+ 'I32(13|23)!' => [ 'Sony', 'Xperia 10 Plus' ],
14744
+ 'I33(12)!' => [ 'Sony', 'Xperia L3' ],
14745
+ 'I41(13|93)!' => [ 'Sony', 'Xperia 10' ],
14746
+ 'I42(13|93)!' => [ 'Sony', 'Xperia 10 Plus' ],
14747
+ 'I43(12|32)!' => [ 'Sony', 'Xperia L3' ],
14748
+ ],
14749
+
14750
+ 'J[0-9]{4,4}!!' => [
14751
+ 'J81(10|70)!' => [ 'Sony', 'Xperia 1' ],
14752
+ 'J82(10|70)!' => [ 'Sony', 'Xperia 5' ],
14753
+ 'J91(10)!' => [ 'Sony', 'Xperia 1' ],
14754
+ 'J92(10|60)!' => [ 'Sony', 'Xperia 5' ],
14755
+ ],
14756
+
14757
+ 'XQ-AT51' => [ 'Sony', 'Xperia 1 II' ],
14758
+ 'XQ-AT52' => [ 'Sony', 'Xperia 1 II' ],
14759
+ 'XQ-BC52' => [ 'Sony', 'Xperia 1 III' ],
14760
+ 'XQ-BC72' => [ 'Sony', 'Xperia 1 III' ],
14761
+ 'XQ-AS52' => [ 'Sony', 'Xperia 5 II' ],
14762
+ 'XQ-BQ52' => [ 'Sony', 'Xperia 5 III' ],
14763
+ 'XQ-AU52' => [ 'Sony', 'Xperia 10 II' ],
14764
+ 'XQ-BT52' => [ 'Sony', 'Xperia 10 III' ],
14765
+ 'XQ-AD51' => [ 'Sony', 'Xperia L4' ],
14766
+ 'XQ-AD52' => [ 'Sony', 'Xperia L4' ],
14767
+ 'XQ-BE52' => [ 'Sony', 'Xperia Pro-I' ],
14768
+
14769
 
14770
  'E[0-9]{2,2}[a-z]!!' => [
14771
  'E10(a|i|iv)!' => [ 'Sony Ericsson', 'Xperia X10 Mini' ], // Robyn
14871
  'SO-01H' => [ 'Sony', 'Xperia Z5 SO-01H', 'carrier' => 'DoCoMo' ], // ...
14872
  'SO-01J' => [ 'Sony', 'Xperia XZ SO-01J', 'carrier' => 'DoCoMo' ], // ...
14873
  'SO-01K' => [ 'Sony', 'Xperia XZ1 SO-01K', 'carrier' => 'DoCoMo' ], // ...
14874
+ 'SO-01L' => [ 'Sony', 'Xperia XZ3 SO-01L', 'carrier' => 'DoCoMo' ], // ...
14875
  'SO-02C' => [ 'Sony Ericsson', 'Xperia acro SO-02C', 'carrier' => 'DoCoMo' ], // Azusa
14876
  'SO-02D' => [ 'Sony Ericsson', 'Xperia NX SO-02D', 'carrier' => 'DoCoMo' ], // Nozomi
14877
  'SO-02E' => [ 'Sony', 'Xperia Z SO-02E', 'carrier' => 'DoCoMo' ], // Yuga
14888
  'SO-03H' => [ 'Sony', 'Xperia Z5 Premium SO-03H', 'carrier' => 'DoCoMo' ],
14889
  'SO-03J' => [ 'Sony', 'Xperia XZs SO-03J', 'carrier' => 'DoCoMo' ],
14890
  'SO-03K' => [ 'Sony', 'Xperia XZ2 SO-03K', 'carrier' => 'DoCoMo' ],
14891
+ 'SO-03L' => [ 'Sony', 'Xperia 1 SO-03L', 'carrier' => 'DoCoMo' ],
14892
  'SO-04D' => [ 'Sony', 'Xperia GX SO-04D', 'carrier' => 'DoCoMo' ], // Hayabusa
14893
  'SO-04E' => [ 'Sony', 'Xperia A SO-04E', 'carrier' => 'DoCoMo' ], // Dogo
14894
  'SO-04EM' => [ 'Sony', 'Xperia feat. HATSUNE MIKU SO-04E', 'carrier' => 'DoCoMo' ],
14896
  'SO-04G' => [ 'Sony', 'Xperia A4 SO-04G', 'carrier' => 'DoCoMo' ],
14897
  'SO-04H' => [ 'Sony', 'Xperia X Performance SO-04H', 'carrier' => 'DoCoMo' ],
14898
  'SO-04J' => [ 'Sony', 'Xperia XZ Premium SO-04J', 'carrier' => 'DoCoMo' ],
14899
+ 'SO-04K' => [ 'Sony', 'Xperia XZ2 Premium SO-04K', 'carrier' => 'DoCoMo' ],
14900
  'SO-05D' => [ 'Sony', 'Xperia SX SO-05D', 'carrier' => 'DoCoMo' ], // Komachi
14901
  'SO-05F' => [ 'Sony', 'Xperia Tablet Z2 SO-05F', DeviceType::TABLET, 'carrier' => 'DoCoMo' ], // Castor
14902
  'SO-05G' => [ 'Sony', 'Xperia Tablet Z4 SO-05G', DeviceType::TABLET, 'carrier' => 'DoCoMo' ], // ...
14919
  'SOV34' => [ 'Sony', 'Xperia XZ SOV34', 'carrier' => 'au' ], // ...
14920
  'SOV35' => [ 'Sony', 'Xperia XZs SOV35', 'carrier' => 'au' ], // ...
14921
  'SOV36' => [ 'Sony', 'Xperia XZ1 SOV36', 'carrier' => 'au' ], // ...
14922
+ 'SOV37' => [ 'Sony', 'Xperia XZ2 SOV37', 'carrier' => 'au' ], // ...
14923
+ 'SOV38' => [ 'Sony', 'Xperia XZ2 Premium SOV38', 'carrier' => 'au' ], // ...
14924
+ 'SOV39' => [ 'Sony', 'Xperia XZ3 SOV39', 'carrier' => 'au' ], // ...
14925
+ 'SOV40' => [ 'Sony', 'Xperia 1 SOV40', 'carrier' => 'au' ], // ...
14926
  ],
14927
 
14928
  '40[0-9]SO!!' => [
15466
 
15467
  'Tabra QAV801' => [ 'Tabra', 'QAV801', DeviceType::TABLET ],
15468
 
15469
+ 'T671H' => [ 'TCL', '20 SE' ],
15470
+ 'T774H' => [ 'TCL', '20L' ],
15471
+ 'T775H' => [ 'TCL', '20L+' ],
15472
+ 'T790Y' => [ 'TCL', '10' ],
15473
+
15474
  'TCL!!' => [
15475
  'TCL-309T' => [ 'TCL', '309T' ],
15476
  'TCL-550' => [ 'TCL', '550' ],
15669
  'TECNO-J7' => [ 'Tecno', 'J7' ],
15670
  'TECNO J7' => [ 'Tecno', 'J7' ],
15671
  'TECNO-J8' => [ 'Tecno', 'J8' ],
15672
+ 'TECNO KC6S' => [ 'Tecno', 'Spark 4 Air' ],
15673
  'TECNO L3' => [ 'Tecno', 'L3' ],
15674
  'TECNO-L5' => [ 'Tecno', 'L5' ],
15675
  'TECNO L6' => [ 'Tecno', 'L6' ],
15773
  'G18mini(C5B9)' => [ 'Teclast', 'G18 mini', DeviceType::TABLET ],
15774
  'G18d 3G四核(D3A2)' => [ 'Teclast', 'G18d', DeviceType::TABLET ],
15775
  'G18d mini(FV2C)' => [ 'Teclast', 'G18d mini', DeviceType::TABLET ],
15776
+ 'M40 EEA' => [ 'Teclast', 'M40', DeviceType::TABLET ],
15777
+ 'M40(N9H3)' => [ 'Teclast', 'M40', DeviceType::TABLET ],
15778
  'P10HD??(E6NA)' => [ 'Teclast', 'P10HD', DeviceType::TABLET ],
15779
  'P11HD' => [ 'Teclast', 'P11HD', DeviceType::TABLET ],
15780
  'P11HD四核(G9X6)' => [ 'Teclast', 'P11HD', DeviceType::TABLET ],
15782
  'P11HD四核(G9X7)' => [ 'Teclast', 'P11HD', DeviceType::TABLET ],
15783
  'P19HD(E1K3)' => [ 'Teclast', 'P19HD', DeviceType::TABLET ],
15784
  'P19HD(E1K5)' => [ 'Teclast', 'P19HD', DeviceType::TABLET ],
15785
+ 'P20HD EEA' => [ 'Teclast', 'P20HD', DeviceType::TABLET ],
15786
  'P70 3G八核(C2B7)' => [ 'Teclast', 'P70 3G', DeviceType::TABLET ],
15787
  'P70h(A5C2)' => [ 'Teclast', 'P70h', DeviceType::TABLET ],
15788
  'P72' => [ 'Teclast', 'P72', DeviceType::TABLET ],
15954
  'Telpad QS' => [ 'Telpad', 'Quad S', DeviceType::TABLET ],
15955
  'T3696' => [ 'Telsda', 'T3696' ],
15956
  'Tensent S9000' => [ 'Tensent', 'S9000' ],
15957
+ 'Teracube 2e' => [ 'Teracube', '2e' ],
15958
  'Hudl HT7S3' => [ 'Tesco', 'Hudl', DeviceType::TABLET ],
15959
  'Hudl 2' => [ 'Tesco', 'Hudl 2', DeviceType::TABLET ],
15960
  'TM-3200R' => [ 'teXet', 'TM-3200R' ],
16302
  ],
16303
 
16304
  'A6S' => [ 'TWM', 'Amazing A6S' ],
16305
+ 'Armor 2' => [ 'Ulefone', 'Armor 2' ],
16306
+ 'Armor 3W' => [ 'Ulefone', 'Armor 3W' ],
16307
+ 'Armor 3WT' => [ 'Ulefone', 'Armor 3WT' ],
16308
+ 'Ulefone Armor 5' => [ 'Ulefone', 'Armor 5' ],
16309
+ 'Armor 5S' => [ 'Ulefone', 'Armor 5S' ],
16310
+ 'Armor 6E' => [ 'Ulefone', 'Armor 6E' ],
16311
+ 'Armor 7' => [ 'Ulefone', 'Armor 7' ],
16312
+ 'Armor 7E' => [ 'Ulefone', 'Armor 7E' ],
16313
+ 'Armor 8' => [ 'Ulefone', 'Armor 8' ],
16314
+ 'Armor 9' => [ 'Ulefone', 'Armor 9' ],
16315
+ 'Armor 9E' => [ 'Ulefone', 'Armor 9E' ],
16316
+ 'Armor 10 5G' => [ 'Ulefone', 'Armor 10' ],
16317
+ 'Armor 11 5G' => [ 'Ulefone', 'Armor 11' ],
16318
+ 'Armor 11T 5G' => [ 'Ulefone', 'Armor 11T' ],
16319
+ 'Armor X5' => [ 'Ulefone', 'Armor X5' ],
16320
+ 'Armor X7' => [ 'Ulefone', 'Armor X7' ],
16321
+ 'Armor X7 Pro' => [ 'Ulefone', 'Armor X7 Pro' ],
16322
+ 'Armor X8' => [ 'Ulefone', 'Armor X8' ],
16323
+ 'Power Armor 13' => [ 'Ulefone', 'Power Armor 13' ],
16324
  'Be Touch 2' => [ 'Ulefone', 'Be Touch 2' ],
16325
  'Ulefone Be Touch2' => [ 'Ulefone', 'Be Touch 2' ],
16326
+ 'Note 7P' => [ 'Ulefone', 'Note 7P' ],
16327
+ 'Note 8P' => [ 'Ulefone', 'Note 8P' ],
16328
+ 'Note 9P' => [ 'Ulefone', 'Note 9P' ],
16329
+ 'Note 11P' => [ 'Ulefone', 'Note 11P' ],
16330
  'TB100' => [ 'Unitech', 'TB100', DeviceType::TABLET ],
16331
  'M70014' => [ 'United Star Technology', 'M70014', DeviceType::TABLET ],
16332
  'QOOQ' => [ 'Unowhy', 'QOOQ', DeviceType::TABLET ],
16336
  'UMI-R1' => [ 'UMI', 'R1' ],
16337
  'UMI-R1(TD)' => [ 'UMI', 'R1' ],
16338
  'UMI S1' => [ 'UMI', 'S1' ],
16339
+ 'UMIDIGI X' => [ 'UMI', 'X' ],
16340
  'UMI X1' => [ 'UMI', 'X1' ],
16341
  'UMI X1S' => [ 'UMI', 'X1s' ],
16342
  'UMI X1-PRO' => [ 'UMI', 'X1' ],
16359
  'UMI ZERO' => [ 'UMI', 'Zero' ],
16360
  ],
16361
 
16362
+ 'A9 Pro' => [ 'UMI', 'A9 Pro' ],
16363
+ 'A11 Pro Max' => [ 'UMI', 'A11 Pro Max' ],
16364
+ 'BISON' => [ 'UMI', 'Bison' ],
16365
+ 'BISON Pro' => [ 'UMI', 'Bison Pro' ],
16366
+ 'BISON GT' => [ 'UMI', 'Bison GT' ],
16367
  'eMAX mini' => [ 'UMI', 'eMax mini' ],
16368
  'Plus E' => [ 'UMI', 'Plus E' ],
16369
+ 'Jelly2' => [ 'Unihertz', 'Jelly 2' ],
16370
+ 'Titan pocket' => [ 'Unihertz', 'Titan Pocket' ],
16371
  'U1203' => [ 'Uniscope', 'U1203' ],
16372
+ 'KT-101-A' => [ 'Uniscom', 'KT-101-A', DeviceType::TABLET ],
16373
 
16374
  'Unusual!!' => [
16375
  'UNUSUAL U7X' => [ 'Unusual', 'U7X', DeviceType::TABLET ],
16529
  'Venus V3 5580' => [ 'Vestel', 'Venus V3 5580' ],
16530
  'VSP250g' => [ 'Vestel', 'Venus V5' ],
16531
  'VSP250s' => [ 'Vestel', 'Venus V5' ],
16532
+ 'Venus Z20' => [ 'Vestel', 'Venus Z20' ],
16533
 
16534
  'VT6078' => [ 'VIA', 'ALTA DS', DeviceType::SIGNAGE ],
16535
  'victorys s8' => [ 'Victory\'s', 'S8' ],
16678
  'vivo E1t' => [ 'Vivo', 'E1t' ],
16679
  'vivo E3' => [ 'Vivo', 'E3' ],
16680
  'vivo E5' => [ 'Vivo', 'E5' ],
16681
+ 'vivo NEX S' => [ 'Vivo', 'NEX S' ],
16682
  'vivo S1' => [ 'Vivo', 'S1' ],
16683
  'vivo S3' => [ 'Vivo', 'S3' ],
16684
  'vivo S3+' => [ 'Vivo', 'S3+' ],
16711
  'vivo 1611' => [ 'Vivo', 'V5 Plus' ],
16712
  'vivo 1718' => [ 'Vivo', 'V7' ],
16713
  'vivo 1716' => [ 'Vivo', 'V7 Plus' ],
16714
+ 'vivo 1724' => [ 'Vivo', 'Y71' ],
16715
+ 'vivo 1804' => [ 'Vivo', 'V11 Pro' ],
16716
+ 'vivo 1805' => [ 'Vivo', 'NEX' ],
16717
+ 'vivo 1816' => [ 'Vivo', 'Y91' ],
16718
+ 'vivo 1818' => [ 'Vivo', 'V15 Pro' ],
16719
+ 'vivo 1902' => [ 'Vivo', 'Y17' ],
16720
  'vivo X1' => [ 'Vivo', 'X1' ],
16721
  'vivo X1S' => [ 'Vivo', 'X1S' ],
16722
  'vivo X1St' => [ 'Vivo', 'X1S' ],
16886
  'vivo Y937' => [ 'Vivo', 'Y937' ],
16887
  ],
16888
 
16889
+ 'V1916A' => [ 'Vivo', 'iQOO Pro' ],
16890
+ 'V2023' => [ 'Vivo', 'V20 SE' ],
16891
+ 'V2028' => [ 'Vivo', 'Y11s' ],
16892
+ 'V2041' => [ 'Vivo', 'Y72' ],
16893
+ 'V2056A' => [ 'Vivo', 'X60 Pro+' ],
16894
+ 'V2109' => [ 'Vivo', 'Y33s' ],
16895
+ 'V2141A' => [ 'Vivo', 'iQOO 8 Pro' ],
16896
+
16897
  'VTAB1008' => [ 'Vizio', 'VTAB1008', DeviceType::TABLET ],
16898
  'VTAB3010' => [ 'Vizio', 'VTAB3010', DeviceType::TABLET ],
16899
  'VAP430' => [ 'Vizio', 'Co-Star', DeviceType::TELEVISION, Flag::GOOGLETV ],
17155
  'FEVER' => [ 'Wiko', 'Fever' ],
17156
  'GETAWAY' => [ 'Wiko', 'Getaway' ],
17157
  'GOA' => [ 'Wiko', 'Goa' ],
17158
+ 'HARRY' => [ 'Wiko', 'Harry' ],
17159
+ 'W-V600' => [ 'Wiko', 'Harry 2' ],
17160
  'HIGHWAY' => [ 'Wiko', 'Highway' ],
17161
  'HIGHWAY PURE' => [ 'Wiko', 'Highway Pure' ],
17162
  'HIGHWAY SIGNS' => [ 'Wiko', 'Highway Signs' ],
17163
  'IGGY' => [ 'Wiko', 'Iggy' ],
17164
  'JIMMY' => [ 'Wiko', 'Jimmy' ],
17165
+ 'W K300' => [ 'Wiko', 'Jerry 3' ],
17166
  'KITE' => [ 'Wiko', 'Kite' ],
17167
  'LENNY' => [ 'Wiko', 'Lenny' ],
17168
  'LENNY2' => [ 'Wiko', 'Lenny 2' ],
17169
  'LENNY3' => [ 'Wiko', 'Lenny 3' ],
17170
+ 'Lenny4' => [ 'Wiko', 'Lenny 4' ],
17171
+ 'W K400' => [ 'Wiko', 'Lenny 5' ],
17172
  'OZZY' => [ 'Wiko', 'Ozzy' ],
17173
  'PULP' => [ 'Wiko', 'Pulp' ],
17174
  'PULP 4G' => [ 'Wiko', 'Pulp' ],
17185
  'SUBLIM' => [ 'Wiko', 'Sublim' ],
17186
  'SUNSET' => [ 'Wiko', 'Sunset' ],
17187
  'SUNSET2' => [ 'Wiko', 'Sunset 2' ],
17188
+ 'U FEEL LITE' => [ 'Wiko', 'U Feel Lite' ],
17189
+ 'U FEEL PRIME' => [ 'Wiko', 'U Feel Prime' ],
17190
+ 'U PULSE LITE' => [ 'Wiko', 'U Pulse Lite' ],
17191
+ 'View' => [ 'Wiko', 'View' ],
17192
+ 'View XL' => [ 'Wiko', 'View XL' ],
17193
+ 'W P200' => [ 'Wiko', 'View Max' ],
17194
+ 'W C800' => [ 'Wiko', 'View2' ],
17195
+ 'View2 Go' => [ 'Wiko', 'View2 Go' ],
17196
+ 'W C860' => [ 'Wiko', 'View2 Pro' ],
17197
+ 'View2 Plus' => [ 'Wiko', 'View2 Plus' ],
17198
+ 'W-P311-EEA' => [ 'Wiko', 'View3' ],
17199
+ 'W-V800-EEA' => [ 'Wiko', 'View3 Lite' ],
17200
+ 'W-V830-EEA' => [ 'Wiko', 'View4' ],
17201
+ 'W-V730-EEA' => [ 'Wiko', 'View4 Lite' ],
17202
+ 'W-V851-EEA' => [ 'Wiko', 'View5' ],
17203
  'WAX' => [ 'Wiko', 'Wax' ],
17204
+ 'WIM Lite' => [ 'Wiko', 'Wim Lite' ],
17205
  'Wileyfox Spark' => [ 'Wileyfox', 'Spark' ],
17206
  'Wileyfox Spark +' => [ 'Wileyfox', 'Spark +' ],
17207
  'Wileyfox Spark X' => [ 'Wileyfox', 'Spark X' ],
17208
  'Wileyfox Storm' => [ 'Wileyfox', 'Storm' ],
17209
  'Wileyfox Swift' => [ 'Wileyfox', 'Swift' ],
17210
+ 'Swift 2' => [ 'Wileyfox', 'Swift 2' ],
17211
  'Swift 2 Plus' => [ 'Wileyfox', 'Swift 2 Plus' ],
17212
  'Swift 2 X' => [ 'Wileyfox', 'Swift 2 X' ],
17213
  'N5PRO2jingying' => [ 'Window', 'N5 Pro 2', DeviceType::MEDIA ],
17301
  'wm8710-tvbox' => [ 'WonderMedia', 'WM8710', DeviceType::TELEVISION ],
17302
  'WM8850-mid' => [ 'WonderMedia', 'WM8850', DeviceType::TABLET ],
17303
  'PAD1001' => [ 'Wortmann', 'TERRA MOBILE PAD 1001', DeviceType::TABLET ],
17304
+ 'TERRA PAD 1004' => [ 'Wortmann', 'TERRA PAD 1004', DeviceType::TABLET ],
17305
+ 'TERRA PAD 1005' => [ 'Wortmann', 'TERRA PAD 1005', DeviceType::TABLET ],
17306
 
17307
  'Woxter!!' => [
17308
  'Woxter android box 500' => [ 'Woxter', 'Android TV 500', DeviceType::TELEVISION ],
17395
  '(Xiaomi )?(Xiaomi|Xiaomi M|MI)[ \-]?5s Plus$!' => [ 'Xiaomi', 'Mi 5s Plus' ],
17396
  '(Xiaomi )?(Xiaomi|Xiaomi M|MI)[ \-]?5x$!' => [ 'Xiaomi', 'Mi 5x' ],
17397
  '(Xiaomi )?(Xiaomi|Xiaomi M|MI)[ \-]?6$!' => [ 'Xiaomi', 'Mi 6' ],
17398
+ '(Xiaomi )?(Xiaomi|Xiaomi M|MI)[ \-]?6X$!' => [ 'Xiaomi', 'Mi 6X' ],
17399
+ '(Xiaomi )?(Xiaomi|Xiaomi M|MI)[ \-]?7S$!' => [ 'Xiaomi', 'Mi 7S' ],
17400
  '(Xiaomi )?(Xiaomi|Xiaomi M|MI)[ \-]?A1$!' => [ 'Xiaomi', 'Mi A1' ],
17401
+ '(Xiaomi )?(Xiaomi|Xiaomi M|MI)[ \-]?A2$!' => [ 'Xiaomi', 'Mi A2' ],
17402
+ '(Xiaomi )?(Xiaomi|Xiaomi M|MI)[ \-]?A2 Lite!' => [ 'Xiaomi', 'Mi A2 Lite' ],
17403
+ '(Xiaomi )?(Xiaomi|Xiaomi M|MI)[ \-]?A3$!' => [ 'Xiaomi', 'Mi A3' ],
17404
+ ],
17405
+
17406
+ 'MI 8' => [ 'Xiaomi', 'Mi 8' ],
17407
+ 'MI 8 SE' => [ 'Xiaomi', 'Mi 8 SE' ],
17408
+ 'MI 8 UD' => [ 'Xiaomi', 'Mi 8 UD' ],
17409
+ 'MI 8 Lite' => [ 'Xiaomi', 'Mi 8 Lite' ],
17410
+ 'MI 8 Pro' => [ 'Xiaomi', 'Mi 8 Pro' ],
17411
+ 'MI 9' => [ 'Xiaomi', 'Mi 9' ],
17412
+ 'Mi 9 Lite' => [ 'Xiaomi', 'Mi 9 Lite' ],
17413
+ 'Mi9 Pro 5G' => [ 'Xiaomi', 'Mi 9 Pro' ],
17414
+ 'Mi 9 SE' => [ 'Xiaomi', 'Mi 9 SE' ],
17415
+ 'Mi 9T' => [ 'Xiaomi', 'Mi 9T' ],
17416
+ 'Mi 9T Pro' => [ 'Xiaomi', 'Mi 9T Pro' ],
17417
+ 'Mi 10' => [ 'Xiaomi', 'Mi 10' ],
17418
+ 'Mi 10 Pro' => [ 'Xiaomi', 'Mi 10 Pro' ],
17419
+ 'Mi 10 Lite 5G' => [ 'Xiaomi', 'Mi 10 Lite' ],
17420
+ 'Mi 10T Lite' => [ 'Xiaomi', 'Mi 10T Lite' ],
17421
+ 'Mi 11' => [ 'Xiaomi', 'Mi 11' ],
17422
+ 'Mi 11 Lite 5G' => [ 'Xiaomi', 'Mi 11 Lite' ],
17423
+ 'Mi Note 10' => [ 'Xiaomi', 'Mi Note 10' ],
17424
+ 'Mi Note 10 Lite' => [ 'Xiaomi', 'Mi Note 10 Lite' ],
17425
+ 'Mi Note 10 Pro' => [ 'Xiaomi', 'Mi Note 10 Pro' ],
17426
+
17427
  '(Xiaomi|Xiaomi Mi|MI) Note!!' => [
17428
  '(Xiaomi|Xiaomi Mi|MI) Note (LTE|4G)$!' => [ 'Xiaomi', 'Mi Note' ],
17429
  '(Xiaomi|Xiaomi Mi|MI) Note ?2!' => [ 'Xiaomi', 'Mi Note 2' ],
17434
 
17435
  '(Xiaomi )?(MI )?MAX$!' => [ 'Xiaomi', 'Mi Max' ],
17436
  '(Xiaomi )?(MI )?MAX 2$!' => [ 'Xiaomi', 'Mi Max 2' ],
17437
+ '(Xiaomi )?(MI )?MAX 3$!' => [ 'Xiaomi', 'Mi Max 3' ],
17438
  '(Xiaomi )?(MI )?MIX$!' => [ 'Xiaomi', 'Mi MIX' ],
17439
  '(Xiaomi )?(MI )?MIX 2$!' => [ 'Xiaomi', 'Mi MIX 2' ],
17440
  '(Xiaomi )?(MI )?MIX 2S$!' => [ 'Xiaomi', 'Mi MIX 2S' ],
17441
+ 'MIX 3' => [ 'Xiaomi', 'Mi MIX 3' ],
17442
+ 'Mi MIX 3' => [ 'Xiaomi', 'Mi MIX 3' ],
17443
+ 'Mi MIX 3 5G' => [ 'Xiaomi', 'Mi MIX 3' ],
17444
+
17445
+ 'MI PLAY' => [ 'Xiaomi', 'Mi Play' ],
17446
 
17447
  '(Xiaomi )?20!!' => [
17448
  '(Xiaomi )?20130(61)!' => [ 'Xiaomi', 'Mi 3' ],
17471
  '(Xiaomi )?(Redmi|HM) ?5$!' => [ 'Xiaomi', 'Redmi 5' ],
17472
  '(Xiaomi )?(Redmi|HM) ?5 Plus!' => [ 'Xiaomi', 'Redmi 5 Plus' ],
17473
  '(Xiaomi )?(Redmi|HM) ?5A!' => [ 'Xiaomi', 'Redmi 5A' ],
17474
+ '(Xiaomi )?(Redmi|HM) ?6$!' => [ 'Xiaomi', 'Redmi 6' ],
17475
+ '(Xiaomi )?(Redmi|HM) ?6A!' => [ 'Xiaomi', 'Redmi 6A' ],
17476
+ '(Xiaomi )?(Redmi|HM) ?6 Pro!' => [ 'Xiaomi', 'Redmi 6 Pro' ],
17477
+ '(Xiaomi )?(Redmi|HM) ?7$!' => [ 'Xiaomi', 'Redmi 7' ],
17478
+ '(Xiaomi )?(Redmi|HM) ?7A!' => [ 'Xiaomi', 'Redmi 7A' ],
17479
+ '(Xiaomi )?(Redmi|HM) ?8$!' => [ 'Xiaomi', 'Redmi 8' ],
17480
+ '(Xiaomi )?(Redmi|HM) ?8A!' => [ 'Xiaomi', 'Redmi 8A' ],
17481
+ '(Xiaomi )?(Redmi|HM) ?9C!' => [ 'Xiaomi', 'Redmi 9C' ],
17482
+ '(Xiaomi )?(Redmi|HM) ?9T!' => [ 'Xiaomi', 'Redmi 9T' ],
17483
+ '(Xiaomi )?Redmi[ \-]K20$!' => [ 'Xiaomi', 'Redmi K20' ],
17484
+ '(Xiaomi )?Redmi[ \-]K20 Pro!' => [ 'Xiaomi', 'Redmi K20 Pro' ],
17485
+ '(Xiaomi )?Redmi[ \-]K30 5G!' => [ 'Xiaomi', 'Redmi K30' ],
17486
+ '(Xiaomi )?Redmi[ \-]K30 Pro!' => [ 'Xiaomi', 'Redmi K30 Pro' ],
17487
  '(Xiaomi )?Redmi[ \-]S2$!' => [ 'Xiaomi', 'Redmi S2' ],
17488
  '(Xiaomi )?Redmi[ \-]Y1$!' => [ 'Xiaomi', 'Redmi Y1' ],
17489
  '(Xiaomi )?Redmi[ \-]Y1 Lite!' => [ 'Xiaomi', 'Redmi Y1 Lite' ],
17490
+ '(Xiaomi )?Redmi[ \-]Y2$!' => [ 'Xiaomi', 'Redmi Y2' ],
17491
+ '(Xiaomi )?Redmi[ \-]Go$!' => [ 'Xiaomi', 'Redmi Go' ],
17492
  ],
17493
 
17494
  '(Xiaomi )?(Redmi|HM)[ \-]?Note!!' => [
17501
  '(Xiaomi )?Redmi[ \-]Note ?5$!' => [ 'Xiaomi', 'Redmi Note 5' ],
17502
  '(Xiaomi )?Redmi[ \-]Note ?5A!' => [ 'Xiaomi', 'Redmi Note 5A' ],
17503
  '(Xiaomi )?Redmi[ \-]Note 5 Pro!' => [ 'Xiaomi', 'Redmi Note 5 Pro' ],
17504
+ '(Xiaomi )?Redmi[ \-]Note 6 Pro!' => [ 'Xiaomi', 'Redmi Note 6 Pro' ],
17505
+ '(Xiaomi )?Redmi[ \-]Note 7$!' => [ 'Xiaomi', 'Redmi Note 7' ],
17506
+ '(Xiaomi )?Redmi[ \-]Note 7 Pro!' => [ 'Xiaomi', 'Redmi Note 7 Pro' ],
17507
+ '(Xiaomi )?Redmi[ \-]Note 8$!' => [ 'Xiaomi', 'Redmi Note 8' ],
17508
+ '(Xiaomi )?Redmi[ \-]Note 8 Pro!' => [ 'Xiaomi', 'Redmi Note 8 Pro' ],
17509
+ '(Xiaomi )?Redmi[ \-]Note 8T!' => [ 'Xiaomi', 'Redmi Note 8T' ],
17510
+ '(Xiaomi )?Redmi[ \-]Note 9$!' => [ 'Xiaomi', 'Redmi Note 9' ],
17511
+ '(Xiaomi )?Redmi[ \-]Note 9S!' => [ 'Xiaomi', 'Redmi Note 9S' ],
17512
+ '(Xiaomi )?Redmi[ \-]Note 9 Pro!' => [ 'Xiaomi', 'Redmi Note 9 Pro' ],
17513
  ],
17514
 
17515
  '(Xiaomi |HM)?20!!' => [
17532
  '(Xiaomi |HM)?20160(51)!' => [ 'Xiaomi', 'Redmi Note 4' ],
17533
  ],
17534
 
17535
+ '21061119DG' => [ 'Xiaomi', 'Redmi 10' ],
17536
+ '2201117TY' => [ 'Xiaomi', 'Redmi Note 11' ],
17537
+
17538
+ '2107113SG' => [ 'Xiaomi', 'Mi 11T Pro' ],
17539
+ '21081111RG' => [ 'Xiaomi', 'Mi 11T' ],
17540
+ '2201122G' => [ 'Xiaomi', 'Mi 12 Pro' ],
17541
+ '2201123G' => [ 'Xiaomi', 'Mi 12' ],
17542
+
17543
+ '21091116AG' => [ 'Xiaomi', 'Poco M4 Pro' ],
17544
+ '2201116PG' => [ 'Xiaomi', 'Poco X4 Pro' ],
17545
+
17546
+ 'M1908C3JGG' => [ 'Xiaomi', 'Redmi Note 8 (2021)' ],
17547
+ 'M2002J9G' => [ 'Xiaomi', 'Mi 10 Lite' ],
17548
+ 'M2003J15SC' => [ 'Xiaomi', 'Redmi Note 9' ],
17549
+ 'M2004J19C' => [ 'Xiaomi', 'Redmi 9' ],
17550
+ 'M2004J7BC' => [ 'Xiaomi', 'Redmi 10X Pro' ],
17551
+ 'M2006C3LG' => [ 'Xiaomi', 'Redmi 9A' ],
17552
+ 'M2006C3LVG' => [ 'Xiaomi', 'Redmi 9AT' ],
17553
+ 'M2006C3MG' => [ 'Xiaomi', 'Redmi 9C' ],
17554
+ 'M2006C3MII' => [ 'Xiaomi', 'Redmi 9' ],
17555
+ 'M2006C3MNG' => [ 'Xiaomi', 'Redmi 9C' ],
17556
+ 'M2007J17G' => [ 'Xiaomi', 'Mi 10T Lite' ],
17557
+ 'M2007J1SC' => [ 'Xiaomi', 'Mi 10 Ultra' ],
17558
+ 'M2007J20CG' => [ 'Xiaomi', 'Poco X3' ],
17559
+ 'M2007J22G' => [ 'Xiaomi', 'Redmi Note 9T' ],
17560
+ 'M2007J3SG' => [ 'Xiaomi', 'Mi 10T Pro' ],
17561
+ 'M2007J3SY' => [ 'Xiaomi', 'Mi 10T' ],
17562
+ 'M2010J19CG' => [ 'Xiaomi', 'Poco M3' ],
17563
+ 'M2010J19SG' => [ 'Xiaomi', 'Redmi 9T' ],
17564
+ 'M2010J19SY' => [ 'Xiaomi', 'Redmi 9T' ],
17565
+ 'M2011K2C' => [ 'Xiaomi', 'Mi 11' ],
17566
+ 'M2011K2G' => [ 'Xiaomi', 'Mi 11' ],
17567
+ 'M2012K11AG' => [ 'Xiaomi', 'Poco F3' ],
17568
+ 'M2012K11AC' => [ 'Xiaomi', 'Redmi K40' ],
17569
+ 'M2012K10C' => [ 'Xiaomi', 'Redmi K40 Gaming' ],
17570
+ 'M2012K11G' => [ 'Xiaomi', 'Mi 11i' ],
17571
+ 'M2101K6G' => [ 'Xiaomi', 'Redmi Note 10 Pro' ],
17572
+ 'M2101K6P' => [ 'Xiaomi', 'Redmi Note 10 Pro' ],
17573
+ 'M2101K7AG' => [ 'Xiaomi', 'Redmi Note 10' ],
17574
+ 'M2101K7BG' => [ 'Xiaomi', 'Redmi Note 10s' ],
17575
+ 'M2101K7BNY' => [ 'Xiaomi', 'Redmi Note 10s' ],
17576
+ 'M2101K9AG' => [ 'Xiaomi', 'Mi 11 Lite' ],
17577
+ 'M2101K9C' => [ 'Xiaomi', 'Mi 11 Lite' ],
17578
+ 'M2101K9G' => [ 'Xiaomi', 'Mi 11 Lite' ],
17579
+ 'M2102J20SG' => [ 'Xiaomi', 'Poco X3 Pro' ],
17580
+ 'M2102J20SI' => [ 'Xiaomi', 'Poco X3 Pro' ],
17581
+ 'M2102K1AC' => [ 'Xiaomi', 'Mi 11 Pro' ],
17582
+ 'M2102K1C' => [ 'Xiaomi', 'Mi 11 Ultra' ],
17583
+ 'M2102K1G' => [ 'Xiaomi', 'Mi 11 Ultra' ],
17584
+ 'M2103K19G' => [ 'Xiaomi', 'Redmi Note 10' ],
17585
+ 'M2103K19PG' => [ 'Xiaomi', 'Poco M3 Pro' ],
17586
+
17587
+ '(Xiaomi |HM)?21!!' => [
17588
+ '(Xiaomi |HM)?21091(19)!' => [ 'Xiaomi', 'Mi 11 Lite' ],
17589
+ ],
17590
+
17591
+ 'POCOPHONE F1' => [ 'Xiaomi', 'Pocophone F1' ],
17592
+ 'POCO F1' => [ 'Xiaomi', 'Pocophone F1' ],
17593
+ 'POCO F2 Pro' => [ 'Xiaomi', 'Poco F2 Pro' ],
17594
+ 'POCO X2' => [ 'Xiaomi', 'Poco X2' ],
17595
+ 'POCO X3 NFC' => [ 'Xiaomi', 'Poco X3' ],
17596
+ 'POCO X3 Pro' => [ 'Xiaomi', 'Poco X3 Pro' ],
17597
+
17598
+ 'SKR-H0' => [ 'Xiaomi', 'Black Shark' ],
17599
+ 'DLT-H0' => [ 'Xiaomi', 'Black Shark 2 Pro' ],
17600
+ 'SHARK PRS-H0' => [ 'Xiaomi', 'Black Shark 4' ],
17601
+
17602
  'Xiaomi MDT2!' => [ 'Xiaomi', 'Mi 5x' ],
17603
  'Xiaomi MCT1!' => [ 'Xiaomi', 'Mi 6' ],
17604
  'Xiaomi MAT136!' => [ 'Xiaomi', 'Redmi 4X' ],
17605
  'Xiaomi MBT6A5!' => [ 'Xiaomi', 'Redmi Note 4X' ],
17606
+ 'Xiaomi 11 Lite 5G NE' => [ 'Xiaomi', '11 Lite' ],
17607
+ 'Xiaomi 11T Pro' => [ 'Xiaomi', '11T Pro' ],
17608
 
17609
  'aqua' => [ 'Xiaomi', 'Mi 4s' ],
17610
  'capricorn' => [ 'Xiaomi', 'Mi 5s' ],
17636
  '(Xiaomi|Xiaomi Mi|MI) Pad$!' => [ 'Xiaomi', 'Mi Pad', DeviceType::TABLET ],
17637
  '(Xiaomi|Xiaomi Mi|MI) Pad 2!' => [ 'Xiaomi', 'Mi Pad 2', DeviceType::TABLET ],
17638
  '(Xiaomi|Xiaomi Mi|MI) Pad 3!' => [ 'Xiaomi', 'Mi Pad 3', DeviceType::TABLET ],
17639
+ '(Xiaomi|Xiaomi Mi|MI) Pad 4$!' => [ 'Xiaomi', 'Mi Pad 4', DeviceType::TABLET ],
17640
+ '(Xiaomi|Xiaomi Mi|MI) Pad 4 Plus!' => [ 'Xiaomi', 'Mi Pad 4 Plus', DeviceType::TABLET ],
17641
  ],
17642
 
17643
+ '21051182G' => [ 'Xiaomi', 'Mi Pad 5', DeviceType::TABLET ],
17644
+
17645
  '(Xiaomi|Xiaomi Mi|MI)Box!!' => [
17646
  'MiBOX iCNTV' => [ 'Xiaomi', 'Mi Box 1', DeviceType::TELEVISION ],
17647
  '(Xiaomi|Xiaomi Mi|MI)Box1S!' => [ 'Xiaomi', 'Mi Box 1S', DeviceType::TELEVISION ],
18211
  'NX569H' => [ 'ZTE', 'Nubia Z17 Mini' ],
18212
  'NX513J' => [ 'ZTE', 'Nubia My Prague' ],
18213
  'NX601J' => [ 'ZTE', 'Nubia X6' ],
18214
+ 'NX659J' => [ 'ZTE', 'Nubia Red Magic' ],
18215
+ 'NX629J' => [ 'ZTE', 'Nubia Red Magic 3' ],
18216
+ 'NX669J' => [ 'ZTE', 'Nubia Red Magic 6' ],
18217
  ],
18218
 
18219
  'ZTE K813' => [ 'ZTE', 'K813' ],
18876
  'ZTE A2017' => [ 'ZTE', 'Axon 7' ],
18877
  'ZTE A2017G' => [ 'ZTE', 'Axon 7' ],
18878
  'ZTE A2017U' => [ 'ZTE', 'Axon 7' ],
18879
+ 'ZTE A2020G Pro' => [ 'ZTE', 'Axon 10 Pro' ],
18880
+ 'ZTE A2022PG' => [ 'ZTE', 'Axon 30 Ultra' ],
18881
  'ZTE B2015' => [ 'ZTE', 'Axon Mini' ],
18882
  'ZTE B2016' => [ 'ZTE', 'Axon Mini' ],
18883
  'ZTE B2017' => [ 'ZTE', 'Axon Mini' ],
19120
  'GM 5 Plus d' => [ 'General Mobile', 'GM5 Plus' ],
19121
  'GM 6' => [ 'General Mobile', 'GM6' ],
19122
  'GM 6 d' => [ 'General Mobile', 'GM6' ],
19123
+ 'GM 8 d' => [ 'General Mobile', 'GM8' ],
19124
+ 'GM8 go' => [ 'General Mobile', 'GM8 Go' ],
19125
  'GM Discovery tab 8' => [ 'General Mobile', 'tab 8', DeviceType::TABLET ],
19126
  'etab5' => [ 'General Mobile', 'Etab 5', DeviceType::TABLET ],
19127
 
19525
  ],
19526
 
19527
  'Z4 mini' => [ 'Q-Mobile', 'Noir Quatro Z4 mini' ],
19528
+
19529
+ 'RMX1911' => [ 'Realme', '5' ],
19530
+ 'RMX1931' => [ 'Realme', 'X2 Pro' ],
19531
+ 'RMX1971' => [ 'Realme', '5 Pro' ],
19532
+ 'RMX1993' => [ 'Realme', 'X2' ],
19533
+ 'RMX2001' => [ 'Realme', '6' ],
19534
+ 'RMX2002' => [ 'Realme', '6i' ],
19535
+ 'RMX2020' => [ 'Realme', 'C3' ],
19536
+ 'RMX2030' => [ 'Realme', '5i' ],
19537
+ 'RMX2063' => [ 'Realme', '6 Pro' ],
19538
+ 'RMX2075' => [ 'Realme', 'X50 Pro' ],
19539
+ 'RMX2086' => [ 'Realme', 'X3 SuperZoom' ],
19540
+ 'RMX2111' => [ 'Realme', '7' ],
19541
+ 'RMX2144' => [ 'Realme', 'X50' ],
19542
+ 'RMX2155' => [ 'Realme', '7' ],
19543
+ 'RMX2170' => [ 'Realme', '7 Pro' ],
19544
+ 'RMX2185' => [ 'Realme', 'C11' ],
19545
+ 'RMX2202' => [ 'Realme', 'GT' ],
19546
+ 'RMX3081' => [ 'Realme', '8 Pro' ],
19547
+ 'RMX3085' => [ 'Realme', '8' ],
19548
+ 'RMX3201' => [ 'Realme', 'C21' ],
19549
+ 'RMX3241' => [ 'Realme', '8 5G' ],
19550
+ 'RMX3242' => [ 'Realme', 'Narzo 30' ],
19551
+ 'RMX3263' => [ 'Realme', 'C21Y' ],
19552
+ 'RMX3301' => [ 'Realme', 'GT 2 Pro' ],
19553
+ 'RMX3311' => [ 'Realme', 'GT 2' ],
19554
+ 'RMX3363' => [ 'Realme', 'GT Master' ],
19555
+ 'RMX3370' => [ 'Realme', 'GT Neo2' ],
19556
+
19557
  'Soshphone 4G' => [ 'SoshPhone', '4G' ],
19558
 
19559
  'AQT80' => [ 'Sprint', 'Slate 8', DeviceType::TABLET ],
19756
  'VFD 1300' => [ 'Vodafone', 'Tab N8', DeviceType::TABLET ],
19757
  'VFD 1400' => [ 'Vodafone', 'Tab Prime 7', DeviceType::TABLET ],
19758
  'VFD1400' => [ 'Vodafone', 'Tab Prime 7', DeviceType::TABLET ],
19759
+
19760
+ 'TC26' => [ 'Zebra', 'TC26', DeviceType::POS ],
19761
+ ];
includes/vendor/whichbrowser/parser/data/models-ios.php CHANGED
@@ -54,12 +54,26 @@ DeviceModels::$IOS_MODELS = [
54
  'iPhone11,4' => [ 'Apple', 'iPhone XS Max', DeviceType::MOBILE ],
55
  'iPhone11,6' => [ 'Apple', 'iPhone XS Max', DeviceType::MOBILE ],
56
  'iPhone11,8' => [ 'Apple', 'iPhone XR', DeviceType::MOBILE ],
 
 
 
 
 
 
 
 
 
 
 
 
 
57
  'iPod1,1' => [ 'Apple', 'iPod touch', DeviceType::MEDIA ],
58
  'iPod2,1' => [ 'Apple', 'iPod touch (2nd gen)', DeviceType::MEDIA ],
59
  'iPod3,1' => [ 'Apple', 'iPod touch (3rd gen)', DeviceType::MEDIA ],
60
  'iPod4,1' => [ 'Apple', 'iPod touch (4th gen)', DeviceType::MEDIA ],
61
  'iPod5,1' => [ 'Apple', 'iPod touch (5th gen)', DeviceType::MEDIA ],
62
  'iPod7,1' => [ 'Apple', 'iPod touch (6th gen)', DeviceType::MEDIA ],
 
63
  'iPad1,1' => [ 'Apple', 'iPad', DeviceType::TABLET ],
64
  'iPad1,2' => [ 'Apple', 'iPad 2', DeviceType::TABLET ],
65
  'iPad2,1' => [ 'Apple', 'iPad 2', DeviceType::TABLET ],
@@ -100,4 +114,38 @@ DeviceModels::$IOS_MODELS = [
100
  'iPad7,4' => [ 'Apple', 'iPad Pro (10.5″)', DeviceType::TABLET ],
101
  'iPad7,5' => [ 'Apple', 'iPad (9.7″, 6th gen)', DeviceType::TABLET ],
102
  'iPad7,6' => [ 'Apple', 'iPad (9.7″, 6th gen)', DeviceType::TABLET ],
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
103
  ];
54
  'iPhone11,4' => [ 'Apple', 'iPhone XS Max', DeviceType::MOBILE ],
55
  'iPhone11,6' => [ 'Apple', 'iPhone XS Max', DeviceType::MOBILE ],
56
  'iPhone11,8' => [ 'Apple', 'iPhone XR', DeviceType::MOBILE ],
57
+ 'iPhone12,1' => [ 'Apple', 'iPhone 11', DeviceType::MOBILE ],
58
+ 'iPhone12,3' => [ 'Apple', 'iPhone 11 Pro', DeviceType::MOBILE ],
59
+ 'iPhone12,5' => [ 'Apple', 'iPhone 11 Pro Max', DeviceType::MOBILE ],
60
+ 'iPhone12,8' => [ 'Apple', 'iPhone SE (2nd gen)', DeviceType::MOBILE ],
61
+ 'iPhone13,1' => [ 'Apple', 'iPhone 12 Mini', DeviceType::MOBILE ],
62
+ 'iPhone13,2' => [ 'Apple', 'iPhone 12', DeviceType::MOBILE ],
63
+ 'iPhone13,3' => [ 'Apple', 'iPhone 12 Pro', DeviceType::MOBILE ],
64
+ 'iPhone13,4' => [ 'Apple', 'iPhone 12 Pro Max', DeviceType::MOBILE ],
65
+ 'iPhone14,2' => [ 'Apple', 'iPhone 13 Pro', DeviceType::MOBILE ],
66
+ 'iPhone14,3' => [ 'Apple', 'iPhone 13 Pro Max', DeviceType::MOBILE ],
67
+ 'iPhone14,4' => [ 'Apple', 'iPhone 13 Mini', DeviceType::MOBILE ],
68
+ 'iPhone14,5' => [ 'Apple', 'iPhone 13', DeviceType::MOBILE ],
69
+
70
  'iPod1,1' => [ 'Apple', 'iPod touch', DeviceType::MEDIA ],
71
  'iPod2,1' => [ 'Apple', 'iPod touch (2nd gen)', DeviceType::MEDIA ],
72
  'iPod3,1' => [ 'Apple', 'iPod touch (3rd gen)', DeviceType::MEDIA ],
73
  'iPod4,1' => [ 'Apple', 'iPod touch (4th gen)', DeviceType::MEDIA ],
74
  'iPod5,1' => [ 'Apple', 'iPod touch (5th gen)', DeviceType::MEDIA ],
75
  'iPod7,1' => [ 'Apple', 'iPod touch (6th gen)', DeviceType::MEDIA ],
76
+ 'iPod9,1' => [ 'Apple', 'iPod touch (7th gen)', DeviceType::MEDIA ],
77
  'iPad1,1' => [ 'Apple', 'iPad', DeviceType::TABLET ],
78
  'iPad1,2' => [ 'Apple', 'iPad 2', DeviceType::TABLET ],
79
  'iPad2,1' => [ 'Apple', 'iPad 2', DeviceType::TABLET ],
114
  'iPad7,4' => [ 'Apple', 'iPad Pro (10.5″)', DeviceType::TABLET ],
115
  'iPad7,5' => [ 'Apple', 'iPad (9.7″, 6th gen)', DeviceType::TABLET ],
116
  'iPad7,6' => [ 'Apple', 'iPad (9.7″, 6th gen)', DeviceType::TABLET ],
117
+ 'iPad7,11' => [ 'Apple', 'iPad (10.2″, 7th gen)', DeviceType::TABLET ],
118
+ 'iPad7,12' => [ 'Apple', 'iPad (10.2″, 7th gen)', DeviceType::TABLET ],
119
+ 'iPad8,1' => [ 'Apple', 'iPad Pro (11.0″)', DeviceType::TABLET ],
120
+ 'iPad8,2' => [ 'Apple', 'iPad Pro (11.0″)', DeviceType::TABLET ],
121
+ 'iPad8,3' => [ 'Apple', 'iPad Pro (11.0″)', DeviceType::TABLET ],
122
+ 'iPad8,4' => [ 'Apple', 'iPad Pro (11.0″)', DeviceType::TABLET ],
123
+ 'iPad8,5' => [ 'Apple', 'iPad Pro (12.9″, 3rd gen)', DeviceType::TABLET ],
124
+ 'iPad8,6' => [ 'Apple', 'iPad Pro (12.9″, 3rd gen)', DeviceType::TABLET ],
125
+ 'iPad8,7' => [ 'Apple', 'iPad Pro (12.9″, 3rd gen)', DeviceType::TABLET ],
126
+ 'iPad8,8' => [ 'Apple', 'iPad Pro (12.9″, 3rd gen)', DeviceType::TABLET ],
127
+ 'iPad8,9' => [ 'Apple', 'iPad Pro (11.0″, 4th gen)', DeviceType::TABLET ],
128
+ 'iPad8,10' => [ 'Apple', 'iPad Pro (11.0″, 4th gen)', DeviceType::TABLET ],
129
+ 'iPad8,11' => [ 'Apple', 'iPad Pro (12.9″, 4th gen)', DeviceType::TABLET ],
130
+ 'iPad8,12' => [ 'Apple', 'iPad Pro (12.9″, 4th gen)', DeviceType::TABLET ],
131
+ 'iPad11,1' => [ 'Apple', 'iPad mini (5th gen)', DeviceType::TABLET ],
132
+ 'iPad11,2' => [ 'Apple', 'iPad mini (5th gen)', DeviceType::TABLET ],
133
+ 'iPad11,3' => [ 'Apple', 'iPad Air (3rd gen)', DeviceType::TABLET ],
134
+ 'iPad11,4' => [ 'Apple', 'iPad Air (3rd gen)', DeviceType::TABLET ],
135
+ 'iPad11,6' => [ 'Apple', 'iPad (8th gen)', DeviceType::TABLET ],
136
+ 'iPad11,7' => [ 'Apple', 'iPad (8th gen)', DeviceType::TABLET ],
137
+ 'iPad12,1' => [ 'Apple', 'iPad (9th gen)', DeviceType::TABLET ],
138
+ 'iPad12,2' => [ 'Apple', 'iPad (9th gen)', DeviceType::TABLET ],
139
+ 'iPad14,1' => [ 'Apple', 'iPad mini (6th gen)', DeviceType::TABLET ],
140
+ 'iPad14,2' => [ 'Apple', 'iPad mini (6th gen)', DeviceType::TABLET ],
141
+ 'iPad13,1' => [ 'Apple', 'iPad Air (4th gen)', DeviceType::TABLET ],
142
+ 'iPad13,2' => [ 'Apple', 'iPad Air (4th gen)', DeviceType::TABLET ],
143
+ 'iPad13,4' => [ 'Apple', 'iPad Pro (11.0″, 5th gen)', DeviceType::TABLET ],
144
+ 'iPad13,5' => [ 'Apple', 'iPad Pro (11.0″, 5th gen)', DeviceType::TABLET ],
145
+ 'iPad13,6' => [ 'Apple', 'iPad Pro (11.0″, 5th gen)', DeviceType::TABLET ],
146
+ 'iPad13,7' => [ 'Apple', 'iPad Pro (11.0″, 5th gen)', DeviceType::TABLET ],
147
+ 'iPad13,8' => [ 'Apple', 'iPad Pro (12.9″, 5th gen)', DeviceType::TABLET ],
148
+ 'iPad13,9' => [ 'Apple', 'iPad Pro (12.9″, 5th gen)', DeviceType::TABLET ],
149
+ 'iPad13,10' => [ 'Apple', 'iPad Pro (12.9″, 5th gen)', DeviceType::TABLET ],
150
+ 'iPad13,11' => [ 'Apple', 'iPad Pro (12.9″, 5th gen)', DeviceType::TABLET ],
151
  ];
includes/vendor/whichbrowser/parser/data/regexes/applications-bots.php CHANGED
@@ -2,4 +2,4 @@
2
 
3
  namespace WhichBrowser\Data;
4
 
5
- Applications::$BOTS_REGEX = '/(008|360|a6|abound|muncher|adaxas|addthis|admantx|ahrefsbot|archiver|altavista|curious|cloudfront|amorank|archive|jeeves|astra|backlink|baidu|bazqux|bingbot|msnbot|msmobot|bing|blogbridge|bloglines|bloglovin|blogpulse|blogram|blogtrot|blogshares|boardreader|browsershots|bubing|butterfly|heritrix|cliqz|cloudflare|comodo|commafeed|cbot|watchdog|datasearch|daumoa|digg|domain|exabot|exactseek|ezooms|facebook|fast|flamingo|fastladder|feed|wrangler|validator|fever|friendica|robot|genieo|fetchor|google|gomez|ichiro|gooblog|goorss|grammarly|grub|hatena|capture|heureka|htdig|httpmon|hubpages|spider|crawler|kouio|larbin|linkedin|linkdex|livedoor|ltx71|magpie|mapion|socialstreams|mixi|mnogo|monitor|yeti|netcraft|netvibes|newsblur|newsgator|orange|pages|psbot|pingdom|pinterest|postrank|comment|rssbar|hunter|quora|safesearch|scrapy|seznam|shopwiki|reader|simplepie|site24|sogou|sophora|soso|spdycheck|spinn|detector|summify|telegram|twisted|twitter|tiny|tlsprober|typhoeus|vagabondo|voila|vocus|mcrawler|w3bot|jigsaw|w3c|wayback|webindexer|wordpress|mechanize|xerka|sitemap|yacy|yandex|yahoo|y\!j|slurp|httpclient|nutch|synapse|indy|wget|curl|package|java|simple|libwww|lwp|urllib|php|pear|zend|ruby)/i';
2
 
3
  namespace WhichBrowser\Data;
4
 
5
+ Applications::$BOTS_REGEX = '/(008|360|a6|abound|muncher|adaxas|addthis|admantx|adsbot|ahrefs|archiver|altavista|curious|cloudfront|amorank|apple|archive|jeeves|astra|backlink|baidu|barkrowler|bazqux|bingbot|msnbot|msmobot|bing|blex|blogbridge|blogger|bloglines|bloglovin|blogpulse|blogram|blogtrot|blogshares|boardreader|lddc|browsershots|bubing|buck|builtwith|butterfly|buzzsumo|bytespider|heritrix|clarabot|cliqz|cloudflare|coccoc|comodo|commafeed|cbot|cresearch|watchdog|datanyze|datasearch|dataprovider|daum|daumoa|digg|domaincrawl|domainstats|discord|domain|dmca|duckduck|embed|evc|exabot|exactseek|ezooms|facebook|fast|flamingo|fastladder|feed|wrangler|validator|fever|florienzh|friendica|robot|genieo|fetchor|google|gofeed|gomez|ichiro|gooblog|goorss|gowiki|grammarly|grub|hatena|capture|heureka|hootsuite|htdig|httpmon|hubpages|hubspot|spider|indeed|iodc|istellabot|crawler|kakao|kouio|larbin|letsearch|line|linkedin|linkpad|linkdex|livedoor|seeker|ltx71|magpie|mj12bot|mapion|mail\.ru|medium|megaindex|socialstreams|mixi|minds|mnogo|mojeek|monitor|dotbot|rogerbot|yeti|mxtoolbox|netcraft|netestate|netvibes|newsblur|newsgator|nimbostratus|odklbot|orange|pages|petal|aspiegel|psbot|pingdom|pinterest|plurk|pocket|postrank|comment|reddit|rssbar|hunter|quora|safesearch|scrapy|searchatlas|seekport|semrush|serpstat|seokicks|seznam|shopwiki|reader|simplepie|site24|skype|slack|sogou|sophora|soso|spaziodati|spdycheck|spinn|sputnik|detector|summify|telegram|twisted|twitter|tiny|tineye|tlsprober|trustedsite|typhoeus|vagabondo|velen|vkshare|voat|voila|vocus|mcrawler|vuhuv|w3bot|jigsaw|w3c|wappalyzer|wayback|webindexer|wordpress|mechanize|xenu|xerka|sitemap|yacy|yandex|yahoo|y\!j|slurp|yelp|yioop|yisou|zgrab|zmeu|httpclient|nutch|synapse|indy|go|httpunit|okhttp|node|wget|curl|package|java|simple|libwww|lwp|urllib|requests|php|pear|zend|ruby)/i';
includes/vendor/whichbrowser/parser/data/regexes/applications-browsers.php CHANGED
@@ -2,4 +2,4 @@
2
 
3
  namespace WhichBrowser\Data;
4
 
5
- Applications::$BROWSERS_REGEX = '/(115|126|2345|qihu|7star|abrowse|acorn|acoo|aol|america|arachne|arora|aweb|avant|asw|aviator|flyflow|bdbrowser|bdspark|beamrise|blackwren|brave|byffox|camino|canure|charon|chromeplus|cometbird|comodo|dragon|conkeror|coolnovo|cunaguaro|cyberfox|daedalus|dillo|rhodonit|eudoraweb|flock|galeon|epiphany|ibrowse|icab|iceape|icecat|iceweasel|iridium|iron|kazehakase|kchrome|meleon|lbbrowser|lobo|lunascape|naenara|mxbrowser|mixshark|mlbrowser|netpositive|origyn|owb|orca|oregano|otter|palemoon|qtweb|qupzilla|rekonq|ryouko|saayaa|sleipnir|metasr|stainless|sunchrome|superbird|swing|tencent|tenfourfox|theworld|tungsten|vivaldi|voyager|waterfox|yabrowser|1password|3g explorer|4g explorer|atomiclite|au|awakening|baidu|bdmobile|bidu|baiduboxapp|browser|blazer|acheetahi|cornowser|coolmarket|cute|digia|doris|doroty|www browser|eui|go\.web|helium|huohoubrowser|surfboard|isurf|jig browser|jumanji|kiosk|lebrowser|liebao|macross|mammoth|mcent|mib|cmcs|motorola|netfrontlife|onebrowser|plink|polaris|openwave|up|km|quark|semc|stnc|sogou|symphony|ucpro|weblite|alti|aplix|awox|browserserver|isis|spyglass|oregan|viera|zetakey|bunjalloo|nwf|nuanti|wib|prince|demobrowser|dooble|dwb|evm|fireweb|hive|intermec|phantom|qt|roccat|raven|rockmelt|scope|slim|smbrowser|snowshoe|sputnik|surf|tao|taz|uzbl|villanova|vimb|wada|wavelink|webrender|webster|wyzo|yelang|yrcweb|linemode|lynx|links|w3m|nimbus|Webwasher|sankore|adapi|brightsign|coship)/i';
2
 
3
  namespace WhichBrowser\Data;
4
 
5
+ Applications::$BROWSERS_REGEX = '/(115|126|2345|37abc|qihu|1stbrowser|7star|abrowse|acorn|acoo|amigo|aol|america|apus|arachne|arora|aweb|avant|asw|avg|aviator|avira|flyflow|bdbrowser|bdspark|basilisk|beamrise|beonex|blackwren|blackhawk|bolt|blackbird|brave|brisk|browsex|browzar|byffox|camino|canure|ccleaner|cent|charon|chedot|cheshire|chimlac|chimera|chromeplus|colibri|columbus|cometbird|comodo|dragon|conkeror|coc|coolnovo|corom|crazy|crusta|cunaguaro|cyberdog|cyberfox|daedalus|degan|demeter|deskbrowse|diigo|dillo|doczilla|rhodonit|dplus|elements|eudoraweb|falkon|flamesky|flock|framafox|freeu|galeon|globalmojo|epiphany|greenbrowser|hola|hydra|ibrowse|icab|iceape|icecat|icedove|iceweasel|irider|iridium|iron|kapiko|kazehakase|kchrome|kinza|kkman|klondike|kylo|meleon|lbrowser|lbbrowser|light|lobo|lolifox|lovense|lunascape|naenara|netcaptor|madfox|mxbrowser|min|mini|mixshark|mlbrowser|mypal|multixp|netpositive|nichrome|origyn|owb|live|juzi|orca|oregano|otter|palemoon|patriott|perk|polarity|privacy|qiyu|qtweb|quicklook|qupzilla|qute|rekonq|ryouko|sylera|saayaa|salam|shiira|sielo|sitekiosk|sleipnir|slimjet|metasr|sparrow|sputnik|stainless|station|sunchrome|sundance|sundial|superbird|swiftweasel|swiftfox|swing|to-browser|tencent|tenfourfox|theworld|tulip|tungsten|ultrab|usejump|vimprobable|vivaldi|airwatch|vonkeror|voyager|waterfox|whale|winwap|xvast|yabrowser|zvu|zipzap|zombie|1password|3g explorer|4g explorer|aloha|atomiclite|au|awakening|baidu|bdmobile|bidu|baiduboxapp|browser|blazer|acheetahi|cornowser|coolmarket|cute|digia|doris|doroty|ecosia|www browser|epic|eui|go\.web|helium|heytap|huohoubrowser|surfboard|isurf|jig browser|jumanji|tnsbrowser|kiosk|kiwi|lebrowser|liebao|macross|mammoth|mcent|mint|mobicip|mib|cmcs|motorola|multizilla|netfrontlife|onebrowser|oneplus|plink|polaris|pure|openwave|up|km|oppo|quark|realme|semc|stnc|sogou|symphony|tenta|ucpro|vivo|weblite|wk|yaani|alti|aplix|awox|browserserver|isis|netbox|spyglass|oregan|viera|zetakey|bunjalloo|nwf|nuanti|wib|prince|demobrowser|dooble|dwb|evm|fireweb|hive|intermec|phantom|qt|roccat|raven|rockmelt|scope|slim|smbrowser|snowshoe|surf|tao|taz|uzbl|villanova|vimb|wada|wavelink|webrender|webster|wyzo|yelang|yrcweb|linemode|lynx|links|w3m|nimbus|Webwasher|sankore|adapi|brightsign|coship)/i';
includes/vendor/whichbrowser/parser/data/regexes/applications-others.php CHANGED
@@ -2,4 +2,4 @@
2
 
3
  namespace WhichBrowser\Data;
4
 
5
- Applications::$OTHERS_REGEX = '/(itunes|qt|bluefish|nightingale|songbird|stagefright|substream|vlc|windows-media|coreplayer|flycast|boxee|kodi|xbmc|lightning|thunderbird|outlook|lotus|postbox|bat|yahoo|daum|flipboard|akregator|blogos|cococ|feed|liferea|news|jetbrains|rss|reeder|reedkit|rome|ziepod|messenger|kik|wire|yammer|fbios|fb4a|googleplus|instagram|pinterest|weibo|tumblr|twitter|wp-android|office|bingweb|hao123|gsa|naver|sogousearch|yandex|atom|golive|brackets|iweb|frontpage|amaya|websphere|download|tansodl|origin|secondlife|valve|raptr|alipay|cooliris|google|leechcraft|expeditor)/i';
2
 
3
  namespace WhichBrowser\Data;
4
 
5
+ Applications::$OTHERS_REGEX = '/(itunes|qt|bluefish|nightingale|songbird|stagefright|substream|vlc|windows-media|coreplayer|flycast|boxee|kodi|xbmc|lightning|thunderbird|outlook|lotus|postbox|bat|yahoo|daum|flipboard|akregator|blogos|cococ|feed|liferea|news|jetbrains|rss|reeder|reedkit|rome|ziepod|messenger|kakao|kik|line|slack|viber|whatsapp|wire|yammer|zalo|fbios|fb4a|googleplus|instagram|pinterest|weibo|tumblr|twitter|wp-android|yelp|office|bingweb|hao123|gsa|naver|sogousearch|yandex|atom|golive|brackets|iweb|frontpage|amaya|websphere|download|tansodl|origin|secondlife|valve|raptr|alipay|cooliris|google|leechcraft|expeditor)/i';
includes/vendor/whichbrowser/parser/phpunit.xml DELETED
@@ -1,32 +0,0 @@
1
- <phpunit
2
- bootstrap="./vendor/autoload.php"
3
- colors="false"
4
- convertErrorsToExceptions="true"
5
- convertNoticesToExceptions="true"
6
- convertWarningsToExceptions="true"
7
- verbose="true"
8
- stopOnFailure="false"
9
- processIsolation="false"
10
- backupGlobals="false"
11
- syntaxCheck="true"
12
- >
13
- <testsuites>
14
- <testsuite name="WhichBrowser tests">
15
- <directory suffix="Test.php">tests/unit</directory>
16
- </testsuite>
17
- </testsuites>
18
-
19
- <filter>
20
- <whitelist addUncoveredFilesFromWhitelist="true">
21
- <directory suffix=".php">src/Model</directory>
22
- <file>src/Parser.php</file>
23
- <file>src/Analyser.php</file>
24
- <file>src/Cache.php</file>
25
- </whitelist>
26
- </filter>
27
-
28
- <logging>
29
- <log type="coverage-html" target="./build" charset="UTF-8" highlight="false" lowUpperBound="35" highLowerBound="70"/>
30
- </logging>
31
-
32
- </phpunit>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
includes/vendor/whichbrowser/parser/src/Analyser/Camouflage.php CHANGED
@@ -11,7 +11,6 @@ trait Camouflage
11
  private function &detectCamouflage()
12
  {
13
  if ($ua = $this->getHeader('User-Agent')) {
14
-
15
  $this
16
  ->detectCamouflagedAndroidBrowser($ua)
17
  ->detectCamouflagedAndroidAsusBrowser($ua)
@@ -123,9 +122,8 @@ trait Camouflage
123
  {
124
  if ($this->data->isBrowser('Chrome')) {
125
  if (preg_match('/(?:Chrome|CrMo|CriOS)\//u', $ua)
126
- && !preg_match('/(?:Chrome|CrMo|CriOS)\/([0-9]{1,2}\.[0-9]\.[0-9]{3,4}\.[0-9]+)/u', $ua)
127
  ) {
128
-
129
  $this->data->features[] = 'wrongVersion';
130
  $this->data->camouflage = true;
131
  }
@@ -137,7 +135,6 @@ trait Camouflage
137
  private function &detectCamouflagedUCBrowser($ua)
138
  {
139
  if ($ua == 'Mozilla/5.0 (X11; U; Linux i686; zh-CN; rv:1.2.3.4) Gecko/') {
140
-
141
  if (!$this->data->isBrowser('UC Browser')) {
142
  $this->data->browser->name = 'UC Browser';
143
  $this->data->browser->version = null;
@@ -168,7 +165,6 @@ trait Camouflage
168
  private function &detectCamouflagedBasedOnEngines()
169
  {
170
  if (isset($this->data->engine->name) && $this->data->browser->mode != 'proxy') {
171
-
172
  /* If it claims not to be Trident, but it is probably Trident running camouflage mode */
173
  if ($this->options->engine & Constants\EngineType::TRIDENT) {
174
  $this->data->features[] = 'trident';
@@ -268,7 +264,6 @@ trait Camouflage
268
  {
269
  if (isset($this->data->browser->name) && isset($this->data->os->name)) {
270
  if ($this->data->os->name == 'iOS' && $this->data->browser->name != 'Opera Mini' && $this->data->browser->name != 'UC Browser' && isset($this->data->os->version)) {
271
-
272
  if ($this->data->os->version->toFloat() < 4.0 && $this->options->features & Constants\Feature::SANDBOX) {
273
  $this->data->features[] = 'foundSandbox';
274
  $this->data->camouflage = true;
@@ -286,7 +281,6 @@ trait Camouflage
286
  }
287
 
288
  if ($this->data->os->name != 'iOS' && $this->data->browser->name == 'Safari' && isset($this->data->browser->version)) {
289
-
290
  if ($this->data->browser->version->toFloat() < 4.0 && $this->options->features & Constants\Feature::APPCACHE) {
291
  $this->data->features[] = 'foundAppCache';
292
  $this->data->camouflage = true;
11
  private function &detectCamouflage()
12
  {
13
  if ($ua = $this->getHeader('User-Agent')) {
 
14
  $this
15
  ->detectCamouflagedAndroidBrowser($ua)
16
  ->detectCamouflagedAndroidAsusBrowser($ua)
122
  {
123
  if ($this->data->isBrowser('Chrome')) {
124
  if (preg_match('/(?:Chrome|CrMo|CriOS)\//u', $ua)
125
+ && !preg_match('/(?:Chrome|CrMo|CriOS)\/([0-9]{1,3}\.[0-9]\.(0\.0|[0-9]{3,4}\.[0-9]+))/u', $ua)
126
  ) {
 
127
  $this->data->features[] = 'wrongVersion';
128
  $this->data->camouflage = true;
129
  }
135
  private function &detectCamouflagedUCBrowser($ua)
136
  {
137
  if ($ua == 'Mozilla/5.0 (X11; U; Linux i686; zh-CN; rv:1.2.3.4) Gecko/') {
 
138
  if (!$this->data->isBrowser('UC Browser')) {
139
  $this->data->browser->name = 'UC Browser';
140
  $this->data->browser->version = null;
165
  private function &detectCamouflagedBasedOnEngines()
166
  {
167
  if (isset($this->data->engine->name) && $this->data->browser->mode != 'proxy') {
 
168
  /* If it claims not to be Trident, but it is probably Trident running camouflage mode */
169
  if ($this->options->engine & Constants\EngineType::TRIDENT) {
170
  $this->data->features[] = 'trident';
264
  {
265
  if (isset($this->data->browser->name) && isset($this->data->os->name)) {
266
  if ($this->data->os->name == 'iOS' && $this->data->browser->name != 'Opera Mini' && $this->data->browser->name != 'UC Browser' && isset($this->data->os->version)) {
 
267
  if ($this->data->os->version->toFloat() < 4.0 && $this->options->features & Constants\Feature::SANDBOX) {
268
  $this->data->features[] = 'foundSandbox';
269
  $this->data->camouflage = true;
281
  }
282
 
283
  if ($this->data->os->name != 'iOS' && $this->data->browser->name == 'Safari' && isset($this->data->browser->version)) {
 
284
  if ($this->data->browser->version->toFloat() < 4.0 && $this->options->features & Constants\Feature::APPCACHE) {
285
  $this->data->features[] = 'foundAppCache';
286
  $this->data->camouflage = true;
includes/vendor/whichbrowser/parser/src/Analyser/Corrections.php CHANGED
@@ -116,7 +116,7 @@ trait Corrections
116
 
117
  private function hideBrowserOnDeviceTypeGaming()
118
  {
119
- if (isset($this->data->device->model) && $this->data->device->model == 'Playstation 2' && $this->data->browser->name == 'Internet Explorer') {
120
  $this->data->browser->reset();
121
  }
122
  }
116
 
117
  private function hideBrowserOnDeviceTypeGaming()
118
  {
119
+ if (isset($this->data->device->model) && $this->data->device->model == 'PlayStation 2' && $this->data->browser->name == 'Internet Explorer') {
120
  $this->data->browser->reset();
121
  }
122
  }
includes/vendor/whichbrowser/parser/src/Analyser/Derive.php CHANGED
@@ -480,6 +480,18 @@ trait Derive
480
  if ($this->data->os->version->is('10.14')) {
481
  $this->data->os->version->nickname = 'Mojave';
482
  }
 
 
 
 
 
 
 
 
 
 
 
 
483
  }
484
  }
485
  }
480
  if ($this->data->os->version->is('10.14')) {
481
  $this->data->os->version->nickname = 'Mojave';
482
  }
483
+
484
+ if ($this->data->os->version->is('10.15')) {
485
+ $this->data->os->version->nickname = 'Catalina';
486
+ }
487
+
488
+ if ($this->data->os->version->is('11')) {
489
+ $this->data->os->version->nickname = 'Big Sur';
490
+ }
491
+
492
+ if ($this->data->os->version->is('12')) {
493
+ $this->data->os->version->nickname = 'Monterey';
494
+ }
495
  }
496
  }
497
  }
includes/vendor/whichbrowser/parser/src/Analyser/Header.php CHANGED
@@ -139,9 +139,11 @@ trait Header
139
 
140
  private function getHeader($h)
141
  {
 
142
  foreach ($this->headers as $k => $v) {
143
  if (strtolower($h) == strtolower($k)) {
144
- return $v;
 
145
  }
146
  }
147
  }
139
 
140
  private function getHeader($h)
141
  {
142
+ /* Find the header that matches */
143
  foreach ($this->headers as $k => $v) {
144
  if (strtolower($h) == strtolower($k)) {
145
+ /* And return the first 1024 bytes */
146
+ return substr($v, 0, 1024);
147
  }
148
  }
149
  }
includes/vendor/whichbrowser/parser/src/Analyser/Header/Useragent/Browser.php CHANGED
@@ -15,8 +15,8 @@ trait Browser
15
  /* Detect major browsers */
16
  $this->detectSafari($ua);
17
  $this->detectExplorer($ua);
18
- $this->detectFirefox($ua);
19
  $this->detectChrome($ua);
 
20
  $this->detectEdge($ua);
21
  $this->detectOpera($ua);
22
 
@@ -132,24 +132,35 @@ trait Browser
132
  $this->data->browser->type = Constants\BrowserType::BROWSER;
133
  $this->data->browser->stock = false;
134
 
 
135
  $version = '';
 
136
  if (preg_match('/(?:Chrome|CrMo|CriOS)\/([0-9.]*)/u', $ua, $match)) {
137
  $version = $match[1];
138
  }
139
  if (preg_match('/Browser\/Chrome([0-9.]*)/u', $ua, $match)) {
140
  $version = $match[1];
141
  }
 
 
 
 
 
142
  $this->data->browser->version = new Version([ 'value' => $version ]);
143
 
144
  if (isset($this->data->os->name) && $this->data->os->name == 'Android') {
145
- $channel = Data\Chrome::getChannel('mobile', $this->data->browser->version->value);
146
-
147
- if ($channel == 'stable') {
148
  $this->data->browser->version->details = 1;
149
- } elseif ($channel == 'beta') {
150
- $this->data->browser->channel = 'Beta';
151
  } else {
152
- $this->data->browser->channel = 'Dev';
 
 
 
 
 
 
 
 
153
  }
154
 
155
 
@@ -185,7 +196,6 @@ trait Browser
185
 
186
  /* Samsung Chromium based browsers */
187
  if (isset($this->data->device->manufacturer) && $this->data->device->manufacturer == 'Samsung') {
188
-
189
  /* Version 1.0 */
190
  if ($version == '18.0.1025.308' && preg_match('/Version\/1.0/u', $ua)) {
191
  $this->data->browser->name = "Samsung Internet";
@@ -275,18 +285,22 @@ trait Browser
275
  $this->data->device->identified |= Constants\Id::PATTERN;
276
  $this->data->device->type = Constants\DeviceType::DESKTOP;
277
  } else {
278
- $channel = Data\Chrome::getChannel('desktop', $version);
 
 
 
279
 
280
- if ($channel == 'stable') {
281
- if (explode('.', $version)[1] == '0') {
282
- $this->data->browser->version->details = 1;
 
 
 
 
 
283
  } else {
284
- $this->data->browser->version->details = 2;
285
  }
286
- } elseif ($channel == 'beta') {
287
- $this->data->browser->channel = 'Beta';
288
- } else {
289
- $this->data->browser->channel = 'Dev';
290
  }
291
  }
292
 
@@ -382,7 +396,7 @@ trait Browser
382
  if (preg_match('/IEMobile/u', $ua) || preg_match('/Windows CE/u', $ua) || preg_match('/Windows Phone/u', $ua) || preg_match('/WP7/u', $ua) || preg_match('/WPDesktop/u', $ua)) {
383
  $this->data->browser->name = 'Mobile Internet Explorer';
384
 
385
- if (isset($this->data->device->model) && ($this->data->device->model == 'Xbox 360' || $this->data->device->model == 'Xbox One')) {
386
  $this->data->browser->name = 'Internet Explorer';
387
  }
388
  }
@@ -464,6 +478,19 @@ trait Browser
464
  }
465
  }
466
 
 
 
 
 
 
 
 
 
 
 
 
 
 
467
 
468
  /* Set the browser family */
469
 
@@ -491,6 +518,13 @@ trait Browser
491
  $this->data->browser->version = new Version([ 'value' => $match[2], 'details' => 1, 'hidden' => true ]);
492
  $this->data->browser->type = Constants\BrowserType::BROWSER;
493
  }
 
 
 
 
 
 
 
494
  }
495
 
496
 
@@ -498,7 +532,7 @@ trait Browser
498
 
499
  private function detectOpera($ua)
500
  {
501
- if (!preg_match('/(OPR|OMI|Opera|OPiOS|Coast|Oupeng)/ui', $ua)) {
502
  return;
503
  }
504
 
@@ -636,6 +670,16 @@ trait Browser
636
  $this->data->browser->type = Constants\BrowserType::BROWSER;
637
  }
638
 
 
 
 
 
 
 
 
 
 
 
639
  if (preg_match('/Coast\/([0-9.]*)/u', $ua, $match)) {
640
  $this->data->browser->stock = false;
641
  $this->data->browser->name = 'Coast by Opera';
@@ -649,6 +693,20 @@ trait Browser
649
  $this->data->browser->version = new Version([ 'value' => $match[1], 'details' => 2 ]);
650
  $this->data->browser->type = Constants\BrowserType::BROWSER;
651
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
652
  }
653
 
654
 
@@ -656,7 +714,7 @@ trait Browser
656
 
657
  private function detectFirefox($ua)
658
  {
659
- if (!preg_match('/(Firefox|GranParadiso|Namoroka|Shiretoko|Minefield|BonEcho|Fennec|Phoenix|Firebird|Minimo|FxiOS)/ui', $ua)) {
660
  return;
661
  }
662
 
@@ -720,8 +778,7 @@ trait Browser
720
  }
721
  }
722
 
723
-
724
- if (preg_match('/(GranParadiso|Namoroka|Shiretoko|Minefield|BonEcho)/u', $ua, $match)) {
725
  $this->data->browser->stock = false;
726
  $this->data->browser->name = 'Firefox';
727
  $this->data->browser->channel = str_replace('GranParadiso', 'Gran Paradiso', $match[1]);
@@ -760,6 +817,12 @@ trait Browser
760
  $this->data->browser->type = Constants\BrowserType::BROWSER;
761
  }
762
 
 
 
 
 
 
 
763
  if (preg_match('/Servo\/1.0 Firefox\//u', $ua)) {
764
  $this->data->browser->name = 'Servo Nightly Build';
765
  $this->data->browser->version = null;
@@ -1317,7 +1380,7 @@ trait Browser
1317
  if (in_array($match[1], [ 'ACCESS/NFPS', 'SUNSOFT/EnjoyMagic' ])) {
1318
  $this->data->device->setIdentification([
1319
  'manufacturer' => 'Sony',
1320
- 'model' => 'Playstation 2',
1321
  'type' => Constants\DeviceType::GAMING,
1322
  'subtype' => Constants\DeviceSubType::CONSOLE
1323
  ]);
@@ -1411,7 +1474,7 @@ trait Browser
1411
  }
1412
  }
1413
 
1414
- if (preg_match('/(Q)0?([0-9][A-Z])/u', $ua, $match)) {
1415
  $this->data->browser->name = 'Obigo ' . $match[1];
1416
  $this->data->browser->version = new Version($processObigoVersion($match[2]));
1417
  $this->data->browser->type = Constants\BrowserType::BROWSER;
@@ -1820,7 +1883,7 @@ trait Browser
1820
 
1821
  private function detectDesktopBrowsers($ua)
1822
  {
1823
- if (!preg_match('/(WebPositive|WebExplorer|WorldWideweb|Midori|Maxthon|Browse)/ui', $ua)) {
1824
  return;
1825
  }
1826
 
@@ -1917,14 +1980,37 @@ trait Browser
1917
  $this->data->browser->version = new Version([ 'value' => $match[1] ]);
1918
  $this->data->browser->type = Constants\BrowserType::BROWSER;
1919
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1920
  }
1921
 
1922
  private function detectMobileBrowsers($ua)
1923
  {
1924
- if (!preg_match('/(Ninesky|Skyfire|Dolphin|QQ|360|QHBrowser|Mercury|iBrowser|Puffin|MiniB|MxNitro|Sogou|Xiino|Palmscape|WebPro|Vision|MiuiBrowser)/ui', $ua)) {
1925
  return;
1926
  }
1927
 
 
 
 
 
 
 
 
 
1928
  /* Xiaomi MIUI Browser */
1929
 
1930
  if (preg_match('/MiuiBrowser\/([0-9.]*)/u', $ua, $match)) {
@@ -2376,7 +2462,7 @@ trait Browser
2376
  if (preg_match('/SPS/u', $ua, $match)) {
2377
  $this->data->device->setIdentification([
2378
  'manufacturer' => 'Sony',
2379
- 'model' => 'Playstation 2',
2380
  'type' => Constants\DeviceType::GAMING,
2381
  'subtype' => Constants\DeviceSubType::CONSOLE
2382
  ]);
@@ -2420,7 +2506,6 @@ trait Browser
2420
  if (isset($match[1])) {
2421
  $this->data->browser->version = new Version([ 'value' => $match[1] ]);
2422
  }
2423
-
2424
  }
2425
 
2426
  if (preg_match('/WAP Browser\/MAUI/ui', $ua, $match)) {
15
  /* Detect major browsers */
16
  $this->detectSafari($ua);
17
  $this->detectExplorer($ua);
 
18
  $this->detectChrome($ua);
19
+ $this->detectFirefox($ua);
20
  $this->detectEdge($ua);
21
  $this->detectOpera($ua);
22
 
132
  $this->data->browser->type = Constants\BrowserType::BROWSER;
133
  $this->data->browser->stock = false;
134
 
135
+ $reduced = false;
136
  $version = '';
137
+
138
  if (preg_match('/(?:Chrome|CrMo|CriOS)\/([0-9.]*)/u', $ua, $match)) {
139
  $version = $match[1];
140
  }
141
  if (preg_match('/Browser\/Chrome([0-9.]*)/u', $ua, $match)) {
142
  $version = $match[1];
143
  }
144
+
145
+ if (preg_match('/Chrome\/([789][0-9]|[1-9][0-9][0-9])\.0\.0\.0 /u', $ua)) {
146
+ $reduced = true;
147
+ }
148
+
149
  $this->data->browser->version = new Version([ 'value' => $version ]);
150
 
151
  if (isset($this->data->os->name) && $this->data->os->name == 'Android') {
152
+ if ($reduced) {
 
 
153
  $this->data->browser->version->details = 1;
 
 
154
  } else {
155
+ $channel = Data\Chrome::getChannel('mobile', $this->data->browser->version->value);
156
+
157
+ if ($channel == 'stable') {
158
+ $this->data->browser->version->details = 1;
159
+ } elseif ($channel == 'beta') {
160
+ $this->data->browser->channel = 'Beta';
161
+ } else {
162
+ $this->data->browser->channel = 'Dev';
163
+ }
164
  }
165
 
166
 
196
 
197
  /* Samsung Chromium based browsers */
198
  if (isset($this->data->device->manufacturer) && $this->data->device->manufacturer == 'Samsung') {
 
199
  /* Version 1.0 */
200
  if ($version == '18.0.1025.308' && preg_match('/Version\/1.0/u', $ua)) {
201
  $this->data->browser->name = "Samsung Internet";
285
  $this->data->device->identified |= Constants\Id::PATTERN;
286
  $this->data->device->type = Constants\DeviceType::DESKTOP;
287
  } else {
288
+ if ($reduced) {
289
+ $this->data->browser->version->details = 1;
290
+ } else {
291
+ $channel = Data\Chrome::getChannel('desktop', $version);
292
 
293
+ if ($channel == 'stable') {
294
+ if (explode('.', $version)[1] == '0') {
295
+ $this->data->browser->version->details = 1;
296
+ } else {
297
+ $this->data->browser->version->details = 2;
298
+ }
299
+ } elseif ($channel == 'beta') {
300
+ $this->data->browser->channel = 'Beta';
301
  } else {
302
+ $this->data->browser->channel = 'Dev';
303
  }
 
 
 
 
304
  }
305
  }
306
 
396
  if (preg_match('/IEMobile/u', $ua) || preg_match('/Windows CE/u', $ua) || preg_match('/Windows Phone/u', $ua) || preg_match('/WP7/u', $ua) || preg_match('/WPDesktop/u', $ua)) {
397
  $this->data->browser->name = 'Mobile Internet Explorer';
398
 
399
+ if (isset($this->data->device->model) && ($this->data->device->model == 'Xbox 360' || $this->data->device->model == 'Xbox One' || $this->data->device->model == 'Xbox Series X')) {
400
  $this->data->browser->name = 'Internet Explorer';
401
  }
402
  }
478
  }
479
  }
480
 
481
+ /* Microsoft Open Live Writer */
482
+
483
+ if (preg_match('/Open Live Writer ([0-9.]*)/u', $ua, $match)) {
484
+ $this->data->browser->type = Constants\BrowserType::BROWSER;
485
+ $this->data->browser->stock = false;
486
+ $this->data->browser->name = 'Open Live Writer';
487
+ $this->data->browser->version = new Version([ 'value' => $match[1] ]);
488
+ $this->data->browser->channel = null;
489
+
490
+ if (preg_match('/MSIE ([0-9.]*)/u', $ua, $match)) {
491
+ $this->data->browser->using = new Using([ 'name' => 'Internet Explorer', 'version' => new Version([ 'value' => $match[1] ]) ]);
492
+ }
493
+ }
494
 
495
  /* Set the browser family */
496
 
518
  $this->data->browser->version = new Version([ 'value' => $match[2], 'details' => 1, 'hidden' => true ]);
519
  $this->data->browser->type = Constants\BrowserType::BROWSER;
520
  }
521
+
522
+ if (preg_match('/Edg\/([0-9.]*)/u', $ua, $match)) {
523
+ $this->data->browser->name = 'Edge';
524
+ $this->data->browser->channel = '';
525
+ $this->data->browser->version = new Version([ 'value' => $match[1], 'details' => 1 ]);
526
+ $this->data->browser->type = Constants\BrowserType::BROWSER;
527
+ }
528
  }
529
 
530
 
532
 
533
  private function detectOpera($ua)
534
  {
535
+ if (!preg_match('/(OPR|OMI|Opera|OPiOS|OPT|Coast|Oupeng|OPRGX|MMS)/ui', $ua)) {
536
  return;
537
  }
538
 
670
  $this->data->browser->type = Constants\BrowserType::BROWSER;
671
  }
672
 
673
+ if (preg_match('/OPT\/([0-9]\.[0-9.]+)?/u', $ua, $match)) {
674
+ $this->data->browser->stock = false;
675
+ $this->data->browser->name = 'Opera Touch';
676
+ $this->data->browser->type = Constants\BrowserType::BROWSER;
677
+
678
+ if (isset($match[1])) {
679
+ $this->data->browser->version = new Version([ 'value' => $match[1], 'details' => 2 ]);
680
+ }
681
+ }
682
+
683
  if (preg_match('/Coast\/([0-9.]*)/u', $ua, $match)) {
684
  $this->data->browser->stock = false;
685
  $this->data->browser->name = 'Coast by Opera';
693
  $this->data->browser->version = new Version([ 'value' => $match[1], 'details' => 2 ]);
694
  $this->data->browser->type = Constants\BrowserType::BROWSER;
695
  }
696
+
697
+ if (preg_match('/\sMMS\/([0-9.]*)$/u', $ua, $match)) {
698
+ $this->data->browser->stock = false;
699
+ $this->data->browser->name = 'Opera Neon';
700
+ $this->data->browser->version = new Version([ 'value' => $match[1], 'details' => 2 ]);
701
+ $this->data->browser->type = Constants\BrowserType::BROWSER;
702
+ }
703
+
704
+ if (preg_match('/OPRGX\/([0-9.]*)$/u', $ua, $match)) {
705
+ $this->data->browser->stock = false;
706
+ $this->data->browser->name = 'Opera GX';
707
+ $this->data->browser->version = new Version([ 'value' => $match[1], 'details' => 2 ]);
708
+ $this->data->browser->type = Constants\BrowserType::BROWSER;
709
+ }
710
  }
711
 
712
 
714
 
715
  private function detectFirefox($ua)
716
  {
717
+ if (!preg_match('/(Firefox|Lorentz|GranParadiso|Namoroka|Shiretoko|Minefield|BonEcho|Fennec|Phoenix|Firebird|Minimo|FxiOS|Focus)/ui', $ua)) {
718
  return;
719
  }
720
 
778
  }
779
  }
780
 
781
+ if (preg_match('/(Lorentz|GranParadiso|Namoroka|Shiretoko|Minefield|BonEcho)/u', $ua, $match)) {
 
782
  $this->data->browser->stock = false;
783
  $this->data->browser->name = 'Firefox';
784
  $this->data->browser->channel = str_replace('GranParadiso', 'Gran Paradiso', $match[1]);
817
  $this->data->browser->type = Constants\BrowserType::BROWSER;
818
  }
819
 
820
+ if (preg_match('/Focus\/([0-9.]*)/u', $ua, $match)) {
821
+ $this->data->browser->name = 'Firefox Focus';
822
+ $this->data->browser->version = new Version([ 'value' => $match[1] ]);
823
+ $this->data->browser->type = Constants\BrowserType::BROWSER;
824
+ }
825
+
826
  if (preg_match('/Servo\/1.0 Firefox\//u', $ua)) {
827
  $this->data->browser->name = 'Servo Nightly Build';
828
  $this->data->browser->version = null;
1380
  if (in_array($match[1], [ 'ACCESS/NFPS', 'SUNSOFT/EnjoyMagic' ])) {
1381
  $this->data->device->setIdentification([
1382
  'manufacturer' => 'Sony',
1383
+ 'model' => 'PlayStation 2',
1384
  'type' => Constants\DeviceType::GAMING,
1385
  'subtype' => Constants\DeviceSubType::CONSOLE
1386
  ]);
1474
  }
1475
  }
1476
 
1477
+ if (preg_match('/[^A-Z](Q)0?([0-9][A-Z])/u', $ua, $match)) {
1478
  $this->data->browser->name = 'Obigo ' . $match[1];
1479
  $this->data->browser->version = new Version($processObigoVersion($match[2]));
1480
  $this->data->browser->type = Constants\BrowserType::BROWSER;
1883
 
1884
  private function detectDesktopBrowsers($ua)
1885
  {
1886
+ if (!preg_match('/(WebPositive|WebExplorer|WorldWideweb|Midori|Maxthon|Browse|Flow)/ui', $ua)) {
1887
  return;
1888
  }
1889
 
1980
  $this->data->browser->version = new Version([ 'value' => $match[1] ]);
1981
  $this->data->browser->type = Constants\BrowserType::BROWSER;
1982
  }
1983
+
1984
+ /* Browse for Flow */
1985
+
1986
+ if (preg_match('/ Flow\/([0-9.]+)/u', $ua, $match)) {
1987
+ $this->data->browser->name = 'Flow';
1988
+ $this->data->browser->channel = '';
1989
+ $this->data->browser->version = new Version([ 'value' => $match[1] ]);
1990
+ $this->data->browser->type = Constants\BrowserType::BROWSER;
1991
+ unset($this->data->browser->family);
1992
+
1993
+ if (preg_match('/EkiohFlow\/[0-9\.]+M/u', $ua)) {
1994
+ $this->data->browser->name = 'Flow Nightly Build';
1995
+ $this->data->browser->version = null;
1996
+ }
1997
+ }
1998
  }
1999
 
2000
  private function detectMobileBrowsers($ua)
2001
  {
2002
+ if (!preg_match('/(Huawei|Ninesky|Skyfire|Dolphin|QQ|360|QHBrowser|Mercury|iBrowser|Puffin|MiniB|MxNitro|Sogou|Xiino|Palmscape|WebPro|Vision|MiuiBrowser)/ui', $ua)) {
2003
  return;
2004
  }
2005
 
2006
+ /* Huawei Browser */
2007
+
2008
+ if (preg_match('/HuaweiBrowser\/([0-9.]*)/u', $ua, $match)) {
2009
+ $this->data->browser->name = 'Huawei Browser';
2010
+ $this->data->browser->version = new Version([ 'value' => $match[1], 'details' => 2 ]);
2011
+ $this->data->browser->type = Constants\BrowserType::BROWSER;
2012
+ }
2013
+
2014
  /* Xiaomi MIUI Browser */
2015
 
2016
  if (preg_match('/MiuiBrowser\/([0-9.]*)/u', $ua, $match)) {
2462
  if (preg_match('/SPS/u', $ua, $match)) {
2463
  $this->data->device->setIdentification([
2464
  'manufacturer' => 'Sony',
2465
+ 'model' => 'PlayStation 2',
2466
  'type' => Constants\DeviceType::GAMING,
2467
  'subtype' => Constants\DeviceSubType::CONSOLE
2468
  ]);
2506
  if (isset($match[1])) {
2507
  $this->data->browser->version = new Version([ 'value' => $match[1] ]);
2508
  }
 
2509
  }
2510
 
2511
  if (preg_match('/WAP Browser\/MAUI/ui', $ua, $match)) {
includes/vendor/whichbrowser/parser/src/Analyser/Header/Useragent/Device/Ereader.php CHANGED
@@ -132,7 +132,6 @@ trait Ereader
132
  'series' => 'Reader',
133
  'type' => Constants\DeviceType::EREADER
134
  ]);
135
-
136
  }
137
  }
138
 
132
  'series' => 'Reader',
133
  'type' => Constants\DeviceType::EREADER
134
  ]);
 
135
  }
136
  }
137
 
includes/vendor/whichbrowser/parser/src/Analyser/Header/Useragent/Device/Gaming.php CHANGED
@@ -19,10 +19,6 @@ trait Gaming
19
  $this->detectSega($ua);
20
  }
21
 
22
-
23
-
24
-
25
-
26
  /* Nintendo Wii and DS */
27
 
28
  private function detectNintendo($ua)
@@ -136,7 +132,7 @@ trait Gaming
136
 
137
  $this->data->device->setIdentification([
138
  'manufacturer' => 'Sony',
139
- 'model' => 'Playstation Portable',
140
  'type' => Constants\DeviceType::GAMING,
141
  'subtype' => Constants\DeviceSubType::PORTABLE
142
  ]);
@@ -144,31 +140,31 @@ trait Gaming
144
 
145
  /* PlayStation Vita */
146
 
147
- if (preg_match('/PlayStation Vita/iu', $ua)) {
148
  $this->data->os->reset();
149
  $this->data->os->identifyVersion('/PlayStation Vita ([0-9.]*)/u', $ua);
150
 
151
  $this->data->device->setIdentification([
152
  'manufacturer' => 'Sony',
153
- 'model' => 'Playstation Vita',
154
  'type' => Constants\DeviceType::GAMING,
155
  'subtype' => Constants\DeviceSubType::PORTABLE
156
  ]);
157
 
158
  if (preg_match('/VTE\//u', $ua)) {
159
- $this->data->device->model = 'Playstation TV';
160
  $this->data->device->subtype = Constants\DeviceSubType::CONSOLE;
161
  }
162
  }
163
 
164
  /* PlayStation 2 */
165
 
166
- if (preg_match('/Playstation2/u', $ua) || preg_match('/\(PS2/u', $ua)) {
167
  $this->data->os->reset();
168
 
169
  $this->data->device->setIdentification([
170
  'manufacturer' => 'Sony',
171
- 'model' => 'Playstation 2',
172
  'type' => Constants\DeviceType::GAMING,
173
  'subtype' => Constants\DeviceSubType::CONSOLE
174
  ]);
@@ -188,7 +184,7 @@ trait Gaming
188
 
189
  $this->data->device->setIdentification([
190
  'manufacturer' => 'Sony',
191
- 'model' => 'Playstation 3',
192
  'type' => Constants\DeviceType::GAMING,
193
  'subtype' => Constants\DeviceSubType::CONSOLE
194
  ]);
@@ -202,32 +198,33 @@ trait Gaming
202
 
203
  $this->data->device->setIdentification([
204
  'manufacturer' => 'Sony',
205
- 'model' => 'Playstation 4',
206
  'type' => Constants\DeviceType::GAMING,
207
  'subtype' => Constants\DeviceSubType::CONSOLE
208
  ]);
209
  }
210
- }
211
 
 
212
 
213
- /* Microsoft Xbox */
214
-
215
- private function detectXbox($ua)
216
- {
217
- /* Xbox 360 */
218
-
219
- if (preg_match('/Xbox\)$/u', $ua, $match)) {
220
  $this->data->os->reset();
 
 
221
  $this->data->device->setIdentification([
222
- 'manufacturer' => 'Microsoft',
223
- 'model' => 'Xbox 360',
224
  'type' => Constants\DeviceType::GAMING,
225
  'subtype' => Constants\DeviceSubType::CONSOLE
226
  ]);
227
  }
 
228
 
229
- /* Xbox One */
230
 
 
 
 
 
 
231
  if (preg_match('/Xbox One\)/u', $ua, $match)) {
232
  if ($this->data->isOs('Windows Phone', '=', '10')) {
233
  $this->data->os->name = 'Windows';
@@ -244,6 +241,26 @@ trait Gaming
244
  'type' => Constants\DeviceType::GAMING,
245
  'subtype' => Constants\DeviceSubType::CONSOLE
246
  ]);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
247
  }
248
  }
249
 
19
  $this->detectSega($ua);
20
  }
21
 
 
 
 
 
22
  /* Nintendo Wii and DS */
23
 
24
  private function detectNintendo($ua)
132
 
133
  $this->data->device->setIdentification([
134
  'manufacturer' => 'Sony',
135
+ 'model' => 'PlayStation Portable',
136
  'type' => Constants\DeviceType::GAMING,
137
  'subtype' => Constants\DeviceSubType::PORTABLE
138
  ]);
140
 
141
  /* PlayStation Vita */
142
 
143
+ if (preg_match('/PlayStation Vita/ui', $ua)) {
144
  $this->data->os->reset();
145
  $this->data->os->identifyVersion('/PlayStation Vita ([0-9.]*)/u', $ua);
146
 
147
  $this->data->device->setIdentification([
148
  'manufacturer' => 'Sony',
149
+ 'model' => 'PlayStation Vita',
150
  'type' => Constants\DeviceType::GAMING,
151
  'subtype' => Constants\DeviceSubType::PORTABLE
152
  ]);
153
 
154
  if (preg_match('/VTE\//u', $ua)) {
155
+ $this->data->device->model = 'PlayStation TV';
156
  $this->data->device->subtype = Constants\DeviceSubType::CONSOLE;
157
  }
158
  }
159
 
160
  /* PlayStation 2 */
161
 
162
+ if (preg_match('/PlayStation2/ui', $ua) || preg_match('/\(PS2/u', $ua)) {
163
  $this->data->os->reset();
164
 
165
  $this->data->device->setIdentification([
166
  'manufacturer' => 'Sony',
167
+ 'model' => 'PlayStation 2',
168
  'type' => Constants\DeviceType::GAMING,
169
  'subtype' => Constants\DeviceSubType::CONSOLE
170
  ]);
184
 
185
  $this->data->device->setIdentification([
186
  'manufacturer' => 'Sony',
187
+ 'model' => 'PlayStation 3',
188
  'type' => Constants\DeviceType::GAMING,
189
  'subtype' => Constants\DeviceSubType::CONSOLE
190
  ]);
198
 
199
  $this->data->device->setIdentification([
200
  'manufacturer' => 'Sony',
201
+ 'model' => 'PlayStation 4',
202
  'type' => Constants\DeviceType::GAMING,
203
  'subtype' => Constants\DeviceSubType::CONSOLE
204
  ]);
205
  }
 
206
 
207
+ /* PlayStation 5 */
208
 
209
+ if (preg_match('/PlayStation 5/ui', $ua) || preg_match('/\(PS5/u', $ua)) {
 
 
 
 
 
 
210
  $this->data->os->reset();
211
+ $this->data->os->identifyVersion('/PlayStation 5 ([0-9.]*)/u', $ua);
212
+
213
  $this->data->device->setIdentification([
214
+ 'manufacturer' => 'Sony',
215
+ 'model' => 'PlayStation 5',
216
  'type' => Constants\DeviceType::GAMING,
217
  'subtype' => Constants\DeviceSubType::CONSOLE
218
  ]);
219
  }
220
+ }
221
 
 
222
 
223
+ /* Microsoft Xbox */
224
+
225
+ private function detectXbox($ua)
226
+ {
227
+ /* Xbox One */
228
  if (preg_match('/Xbox One\)/u', $ua, $match)) {
229
  if ($this->data->isOs('Windows Phone', '=', '10')) {
230
  $this->data->os->name = 'Windows';
241
  'type' => Constants\DeviceType::GAMING,
242
  'subtype' => Constants\DeviceSubType::CONSOLE
243
  ]);
244
+
245
+ /* Xbox Series X */
246
+ } elseif (preg_match('/Xbox Series X\)/u', $ua, $match)) {
247
+ $this->data->os->reset();
248
+ $this->data->device->setIdentification([
249
+ 'manufacturer' => 'Microsoft',
250
+ 'model' => 'Xbox Series X',
251
+ 'type' => Constants\DeviceType::GAMING,
252
+ 'subtype' => Constants\DeviceSubType::CONSOLE
253
+ ]);
254
+
255
+ /* Xbox 360 */
256
+ } elseif (preg_match('/Xbox\)$/u', $ua, $match)) {
257
+ $this->data->os->reset();
258
+ $this->data->device->setIdentification([
259
+ 'manufacturer' => 'Microsoft',
260
+ 'model' => 'Xbox 360',
261
+ 'type' => Constants\DeviceType::GAMING,
262
+ 'subtype' => Constants\DeviceSubType::CONSOLE
263
+ ]);
264
  }
265
  }
266
 
includes/vendor/whichbrowser/parser/src/Analyser/Header/Useragent/Device/Mobile.php CHANGED
@@ -78,7 +78,6 @@ trait Mobile
78
  }
79
 
80
  if (preg_match('/Nokia[- \/]?([^\/\);]+)/ui', $ua, $match)) {
81
-
82
  if ($match[1] == 'Browser') {
83
  return;
84
  }
@@ -1149,7 +1148,7 @@ trait Mobile
1149
  }
1150
  }
1151
 
1152
- function identifyBasedOnIdentifier()
1153
  {
1154
  if ($this->data->device->identified & Constants\Id::MATCH_UA) {
1155
  return;
@@ -1182,10 +1181,9 @@ trait Mobile
1182
  }
1183
  }
1184
 
1185
- function identifyBasedOnIdUsingOs($id)
1186
  {
1187
  switch ($this->data->os->getFamily()) {
1188
-
1189
  case 'Android':
1190
  $device = Data\DeviceModels::identify('android', $id);
1191
  if ($device->identified) {
@@ -1236,7 +1234,7 @@ trait Mobile
1236
  }
1237
  }
1238
 
1239
- function identifyBasedOnId($id)
1240
  {
1241
  if ($this->data->device->type != 'mobile') {
1242
  return;
78
  }
79
 
80
  if (preg_match('/Nokia[- \/]?([^\/\);]+)/ui', $ua, $match)) {
 
81
  if ($match[1] == 'Browser') {
82
  return;
83
  }
1148
  }
1149
  }
1150
 
1151
+ private function identifyBasedOnIdentifier()
1152
  {
1153
  if ($this->data->device->identified & Constants\Id::MATCH_UA) {
1154
  return;
1181
  }
1182
  }
1183
 
1184
+ private function identifyBasedOnIdUsingOs($id)
1185
  {
1186
  switch ($this->data->os->getFamily()) {
 
1187
  case 'Android':
1188
  $device = Data\DeviceModels::identify('android', $id);
1189
  if ($device->identified) {
1234
  }
1235
  }
1236
 
1237
+ private function identifyBasedOnId($id)
1238
  {
1239
  if ($this->data->device->type != 'mobile') {
1240
  return;
includes/vendor/whichbrowser/parser/src/Analyser/Header/Useragent/Device/Television.php CHANGED
@@ -610,29 +610,96 @@ trait Television
610
 
611
  /* Roku */
612
 
613
- if (preg_match('/^Roku\/DVP-(?:[0-9A-Z]+-)?[0-9\.]+ \(([0-9]{2,2})/u', $ua, $match)) {
614
  $this->data->os->reset();
615
 
616
  $this->data->device->manufacturer = 'Roku';
617
  $this->data->device->type = Constants\DeviceType::TELEVISION;
618
-
619
- switch ($match[1]) {
620
- case '02':
621
- $this->data->device->model = '2 XS';
622
- $this->data->device->generic = false;
623
- break;
624
- case '04':
625
- $this->data->device->model = '3';
626
- $this->data->device->generic = false;
627
- break;
628
- case '07':
629
- $this->data->device->model = 'LT';
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
630
  $this->data->device->generic = false;
631
- break;
632
- case '09':
633
- $this->data->device->model = 'Streaming Stick';
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
634
  $this->data->device->generic = false;
635
- break;
636
  }
637
 
638
  $this->data->device->identified |= Constants\Id::MATCH_UA;
@@ -1058,7 +1125,6 @@ trait Television
1058
 
1059
 
1060
  if (isset($this->data->device->model) && isset($this->data->device->manufacturer)) {
1061
-
1062
  if ($this->data->device->manufacturer == 'Dune HD') {
1063
  if (preg_match('/tv([0-9]+[a-z]?)/u', $this->data->device->model, $match)) {
1064
  $this->data->device->model = 'TV-' . strtoupper($match[1]);
610
 
611
  /* Roku */
612
 
613
+ if (preg_match('/Roku(?:([0-9]+)[A-Z]+)?\/DVP-(?:([0-9]+)[A-Z]+-)?[0-9\.]+/u', $ua, $match)) {
614
  $this->data->os->reset();
615
 
616
  $this->data->device->manufacturer = 'Roku';
617
  $this->data->device->type = Constants\DeviceType::TELEVISION;
618
+
619
+ $models = [
620
+ '2000' => 'HD',
621
+ '2050' => 'XD',
622
+ '2100' => 'XDS',
623
+ '2400' => 'LT',
624
+ '2450' => 'LT',
625
+ '2500' => 'HD',
626
+ '2700' => 'LT',
627
+ '2710' => '1 SE',
628
+ '2720' => '2',
629
+ '3000' => '2 HD',
630
+ '3050' => '2 XD',
631
+ '3100' => '2 XS',
632
+ '3400' => 'Streaming Stick, MHL',
633
+ '3420' => 'Streaming Stick, MHL',
634
+ '3500' => 'Streaming Stick, HDMI',
635
+ '3600' => 'Streaming Stick',
636
+ '3700' => 'Express',
637
+ '3710' => 'Express+',
638
+ '3800' => 'Streaming Stick',
639
+ '3810' => 'Streaming Stick+',
640
+ '3900' => 'Express',
641
+ '3910' => 'Express+',
642
+ '3920' => 'Premiere',
643
+ '3921' => 'Premiere+',
644
+ '3930' => 'Express',
645
+ '3931' => 'Express+',
646
+ '4200' => '3',
647
+ '4210' => '2',
648
+ '4230' => '3',
649
+ '4400' => '4',
650
+ '4620' => 'Premiere',
651
+ '4630' => 'Premiere+',
652
+ '4640' => 'Ultra',
653
+ '4660' => 'Ultra',
654
+ '4661' => 'Ultra',
655
+ '4662' => 'Ultra LT',
656
+ '4670' => 'Ultra',
657
+ '4800' => 'Ultra',
658
+ ];
659
+
660
+ if (!empty($match[1]) || !empty($match[2])) {
661
+ $model = !empty($match[1]) ? $match[1] : $match[2];
662
+
663
+ if (isset($models[$model])) {
664
+ $this->data->device->model = $models[$model];
665
  $this->data->device->generic = false;
666
+ }
667
+ }
668
+
669
+ $this->data->device->identified |= Constants\Id::MATCH_UA;
670
+ }
671
+
672
+ if (preg_match('/Roku\/DVP-[0-9\.]+ \(([0-9A-Z]{2,2})[0-9]+\./u', $ua, $match)) {
673
+ $this->data->os->reset();
674
+
675
+ $this->data->device->manufacturer = 'Roku';
676
+ $this->data->device->type = Constants\DeviceType::TELEVISION;
677
+
678
+ $models = [
679
+ '02' => '2 XS',
680
+ '03' => 'LT',
681
+ '04' => '3',
682
+ '07' => 'LT',
683
+ '09' => 'Streaming Stick',
684
+ '29' => 'Ultra',
685
+ '30' => [ 'TCL', '4K Roku TV' ],
686
+ '51' => 'Express',
687
+ 'AE' => 'Express',
688
+ ];
689
+
690
+ if (!empty($match[1])) {
691
+ $model = $match[1];
692
+
693
+ if (isset($models[$model])) {
694
+ if (is_array($models[$model])) {
695
+ $this->data->device->manufacturer = $models[$model][0];
696
+ $this->data->device->model = $models[$model][1];
697
+ } else {
698
+ $this->data->device->model = $models[$model];
699
+ }
700
+
701
  $this->data->device->generic = false;
702
+ }
703
  }
704
 
705
  $this->data->device->identified |= Constants\Id::MATCH_UA;
1125
 
1126
 
1127
  if (isset($this->data->device->model) && isset($this->data->device->manufacturer)) {
 
1128
  if ($this->data->device->manufacturer == 'Dune HD') {
1129
  if (preg_match('/tv([0-9]+[a-z]?)/u', $this->data->device->model, $match)) {
1130
  $this->data->device->model = 'TV-' . strtoupper($match[1]);
includes/vendor/whichbrowser/parser/src/Analyser/Header/Useragent/Engine.php CHANGED
@@ -16,6 +16,7 @@ trait Engine
16
  $this->detectPresto($ua);
17
  $this->detectTrident($ua);
18
  $this->detectEdgeHTMLUseragent($ua);
 
19
 
20
  return $this;
21
  }
@@ -171,4 +172,14 @@ trait Engine
171
  $this->data->engine->version = new Version([ 'value' => $match[1], 'hidden' => true ]);
172
  }
173
  }
 
 
 
 
 
 
 
 
 
 
174
  }
16
  $this->detectPresto($ua);
17
  $this->detectTrident($ua);
18
  $this->detectEdgeHTMLUseragent($ua);
19
+ $this->detectFlow($ua);
20
 
21
  return $this;
22
  }
172
  $this->data->engine->version = new Version([ 'value' => $match[1], 'hidden' => true ]);
173
  }
174
  }
175
+
176
+ /* Flow */
177
+
178
+ private function detectFlow($ua)
179
+ {
180
+ if (preg_match('/EkiohFlow\/([0-9.]*)/u', $ua, $match)) {
181
+ $this->data->engine->name = 'EkiohFlow';
182
+ $this->data->engine->version = new Version([ 'value' => $match[1] ]);
183
+ }
184
+ }
185
  }
includes/vendor/whichbrowser/parser/src/Analyser/Header/Useragent/Os.php CHANGED
@@ -74,6 +74,10 @@ trait Os
74
  $this->data->os->version = new Version([ 'value' => str_replace('_', '.', $match[1]) ]);
75
  }
76
 
 
 
 
 
77
  if (preg_match('/iPhone Simulator;/u', $ua)) {
78
  $this->data->device->type = Constants\DeviceType::EMULATOR;
79
  } else {
@@ -93,19 +97,23 @@ trait Os
93
  }
94
  }
95
  }
96
- } /* OS X */
97
-
98
- elseif (preg_match('/Mac OS X/u', $ua) || preg_match('/;os=Mac/u', $ua)) {
99
  $this->data->os->name = 'OS X';
100
 
101
- if (preg_match('/Mac OS X (10[0-9\._]*)/u', $ua, $match)) {
102
  $this->data->os->version = new Version([ 'value' => str_replace('_', '.', $match[1]), 'details' => 2 ]);
103
  }
104
 
105
- if (preg_match('/;os=Mac (10[0-9[\.,]*)/u', $ua, $match)) {
106
  $this->data->os->version = new Version([ 'value' => str_replace(',', '.', $match[1]), 'details' => 2 ]);
107
  }
108
 
 
 
 
 
109
  $this->data->device->type = Constants\DeviceType::DESKTOP;
110
  }
111
 
@@ -113,12 +121,10 @@ trait Os
113
 
114
  if (preg_match('/Darwin(?:\/([0-9]+).[0-9]+)?/u', $ua, $match)) {
115
  if (preg_match('/\(X11;/u', $ua)) {
116
-
117
  /* Darwin */
118
  $this->data->os->name = 'Darwin';
119
  $this->data->device->type = Constants\DeviceType::DESKTOP;
120
  } elseif (preg_match('/\((?:x86_64|i386|Power%20Macintosh)\)/u', $ua)) {
121
-
122
  /* OS X */
123
  $this->data->os->name = 'OS X';
124
  $this->data->device->type = Constants\DeviceType::DESKTOP;
@@ -137,7 +143,6 @@ trait Os
137
  }
138
  }
139
  } else {
140
-
141
  /* iOS */
142
  $this->data->os->name = 'iOS';
143
  $this->data->device->type = Constants\DeviceType::MOBILE;
@@ -241,8 +246,7 @@ trait Os
241
 
242
  $candidates = [];
243
 
244
- if (preg_match('/Build/ui', $ua)) {
245
-
246
  /* Normal Android useragent strings */
247
 
248
  if (preg_match('/; [a-z][a-zA-Z][-_][a-zA-Z][a-zA-Z] ([^;]*[^;\s])\s+(?:BUILD|Build|build)/u', $ua, $match)) {
@@ -256,28 +260,29 @@ trait Os
256
  if (preg_match('/;\+? ?(?:\*\*)?([^;]*[^;\s]);?\s+(?:BUILD|Build|build)/u', $ua, $match)) {
257
  $candidates[] = $match[1];
258
  }
259
- } elseif (preg_match('/Release\//ui', $ua)) {
 
260
 
 
 
261
  /* WAP style useragent strings */
262
 
263
  if (preg_match('/^(?U)([^\/]+)(?U)(?:(?:_CMCC_TD|_CMCC|_TD|_TDLTE|_LTE)?\/[^\/]*)? Linux\/[0-9.+]+ Android\/[0-9.]+/u', $this->removeKnownPrefixes($ua), $match)) {
264
  $candidates[] = $match[1];
265
- } else if (preg_match('/^(?U)([^\/]+)(?U)(?:(?:_CMCC_TD|_CMCC|_TD|_TDLTE|_LTE)?\/[^\/]*)? Android(_OS)?\/[0-9.]+/u', $this->removeKnownPrefixes($ua), $match)) {
266
  $candidates[] = $match[1];
267
- } else if (preg_match('/^(?U)([^\/]+)(?U)(?:(?:_CMCC_TD|_CMCC|_TD|_TDLTE|_LTE)?\/[^\/]*)? Release\/[0-9.]+/u', $this->removeKnownPrefixes($ua), $match)) {
268
  $candidates[] = $match[1];
269
  }
270
  } elseif (preg_match('/Mozilla\//ui', $ua)) {
271
-
272
  /* Old Android useragent strings */
273
 
274
- if (preg_match('/Linux; (?:U; )?Android [^;]+; (?:[a-zA-Z][a-zA-Z](?:[-_][a-zA-Z][a-zA-Z])?; )?(?:[^;]+; ?)?([^)\/;]+)\)/u', $ua, $match)) {
275
  $candidates[] = $match[1];
276
  } elseif (preg_match('/\(([^;]+);U;Android\/[^;]+;[0-9]+\*[0-9]+;CTC\/2.0\)/u', $ua, $match)) {
277
  $candidates[] = $match[1];
278
  }
279
  } else {
280
-
281
  /* Other applications */
282
 
283
  if (preg_match('/[34]G Explorer\/[0-9.]+ \(Linux;Android [0-9.]+,([^\)]+)\)/u', $ua, $match)) {
@@ -302,9 +307,19 @@ trait Os
302
  continue;
303
  }
304
 
 
 
 
 
 
 
 
305
  $candidates[$c] = preg_replace('/^[a-zA-Z][a-zA-Z][-_][a-zA-Z][a-zA-Z]\s+/u', '', $candidates[$c]);
306
  $candidates[$c] = preg_replace('/(.*) - [0-9\.]+ - (?:with Google Apps - )?API [0-9]+ - [0-9]+x[0-9]+/', '\\1', $candidates[$c]);
307
  $candidates[$c] = preg_replace('/^sprd-/u', '', $candidates[$c]);
 
 
 
308
  }
309
 
310
  $candidates = array_unique($candidates);
@@ -385,6 +400,23 @@ trait Os
385
  }
386
  }
387
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
388
  /* Aliyun OS */
389
 
390
  if (preg_match('/Aliyun/u', $ua) || preg_match('/YunOs/ui', $ua)) {
@@ -1504,7 +1536,7 @@ trait Os
1504
  {
1505
  if (preg_match('/(?:web|hpw)OS\/(?:HP webOS )?([0-9.]*)/u', $ua, $match)) {
1506
  $this->data->os->name = 'webOS';
1507
- $this->data->os->version = new Version([ 'value' => $match[1], 'details' => 2 ]);
1508
  $this->data->device->type = preg_match('/Tablet/iu', $ua) ? Constants\DeviceType::TABLET : Constants\DeviceType::MOBILE;
1509
  $this->data->device->generic = false;
1510
  }
@@ -1860,7 +1892,7 @@ trait Os
1860
 
1861
  if (preg_match('/SunOS 5\.([123456](?:\.[0-9\.]*)?) /u', $ua, $match)) {
1862
  $this->data->os->version = new Version([ 'value' => '2.' . $match[1] ]);
1863
- } else if (preg_match('/SunOS 5\.([0-9\.]*)/u', $ua, $match)) {
1864
  $this->data->os->version = new Version([ 'value' => $match[1] ]);
1865
  }
1866
 
@@ -2417,7 +2449,6 @@ trait Os
2417
  $count = count($patterns);
2418
  for ($b = 0; $b < $count; $b++) {
2419
  for ($r = 0; $r < count($patterns[$b]['regexp']); $r++) {
2420
-
2421
  if (preg_match($patterns[$b]['regexp'][$r], $ua, $match)) {
2422
  $this->data->os->name = $patterns[$b]['name'];
2423
 
74
  $this->data->os->version = new Version([ 'value' => str_replace('_', '.', $match[1]) ]);
75
  }
76
 
77
+ if (preg_match('/iOS ([0-9.]*);/u', $ua, $match)) {
78
+ $this->data->os->version = new Version([ 'value' => $match[1] ]);
79
+ }
80
+
81
  if (preg_match('/iPhone Simulator;/u', $ua)) {
82
  $this->data->device->type = Constants\DeviceType::EMULATOR;
83
  } else {
97
  }
98
  }
99
  }
100
+ } elseif (preg_match('/Mac OS X/u', $ua) || preg_match('/;os=Mac/u', $ua)) {
101
+ /* OS X */
102
+
103
  $this->data->os->name = 'OS X';
104
 
105
+ if (preg_match('/Mac OS X (1[0-9][0-9\._]*)/u', $ua, $match)) {
106
  $this->data->os->version = new Version([ 'value' => str_replace('_', '.', $match[1]), 'details' => 2 ]);
107
  }
108
 
109
+ if (preg_match('/;os=Mac (1[0-9][0-9[\.,]*)/u', $ua, $match)) {
110
  $this->data->os->version = new Version([ 'value' => str_replace(',', '.', $match[1]), 'details' => 2 ]);
111
  }
112
 
113
+ if ($this->data->os->version && $this->data->os->version->is('10.16')) {
114
+ $this->data->os->version = new Version([ 'value' => '11.0', 'details' => 2 ]);
115
+ }
116
+
117
  $this->data->device->type = Constants\DeviceType::DESKTOP;
118
  }
119
 
121
 
122
  if (preg_match('/Darwin(?:\/([0-9]+).[0-9]+)?/u', $ua, $match)) {
123
  if (preg_match('/\(X11;/u', $ua)) {
 
124
  /* Darwin */
125
  $this->data->os->name = 'Darwin';
126
  $this->data->device->type = Constants\DeviceType::DESKTOP;
127
  } elseif (preg_match('/\((?:x86_64|i386|Power%20Macintosh)\)/u', $ua)) {
 
128
  /* OS X */
129
  $this->data->os->name = 'OS X';
130
  $this->data->device->type = Constants\DeviceType::DESKTOP;
143
  }
144
  }
145
  } else {
 
146
  /* iOS */
147
  $this->data->os->name = 'iOS';
148
  $this->data->device->type = Constants\DeviceType::MOBILE;
246
 
247
  $candidates = [];
248
 
249
+ if (preg_match('/Build/ui', $ua) && (!preg_match('/AppleWebKit.*Build/ui', $ua) || preg_match('/Build.*AppleWebKit/ui', $ua))) {
 
250
  /* Normal Android useragent strings */
251
 
252
  if (preg_match('/; [a-z][a-zA-Z][-_][a-zA-Z][a-zA-Z] ([^;]*[^;\s])\s+(?:BUILD|Build|build)/u', $ua, $match)) {
260
  if (preg_match('/;\+? ?(?:\*\*)?([^;]*[^;\s]);?\s+(?:BUILD|Build|build)/u', $ua, $match)) {
261
  $candidates[] = $match[1];
262
  }
263
+ } elseif (preg_match('/\(Linux; Android [0-9\.]+; ([^\/]+)(; wv)?\) AppleWebKit/u', $ua, $match)) {
264
+ /* New style minimal Android useragent string */
265
 
266
+ $candidates[] = $match[1];
267
+ } elseif (preg_match('/Release\//ui', $ua)) {
268
  /* WAP style useragent strings */
269
 
270
  if (preg_match('/^(?U)([^\/]+)(?U)(?:(?:_CMCC_TD|_CMCC|_TD|_TDLTE|_LTE)?\/[^\/]*)? Linux\/[0-9.+]+ Android\/[0-9.]+/u', $this->removeKnownPrefixes($ua), $match)) {
271
  $candidates[] = $match[1];
272
+ } elseif (preg_match('/^(?U)([^\/]+)(?U)(?:(?:_CMCC_TD|_CMCC|_TD|_TDLTE|_LTE)?\/[^\/]*)? Android(_OS)?\/[0-9.]+/u', $this->removeKnownPrefixes($ua), $match)) {
273
  $candidates[] = $match[1];
274
+ } elseif (preg_match('/^(?U)([^\/]+)(?U)(?:(?:_CMCC_TD|_CMCC|_TD|_TDLTE|_LTE)?\/[^\/]*)? Release\/[0-9.]+/u', $this->removeKnownPrefixes($ua), $match)) {
275
  $candidates[] = $match[1];
276
  }
277
  } elseif (preg_match('/Mozilla\//ui', $ua)) {
 
278
  /* Old Android useragent strings */
279
 
280
+ if (preg_match('/Linux; (?:arm; |arm_64; )?(?:U; )?Android [^;]+; (?:[a-zA-Z][a-zA-Z](?:[-_][a-zA-Z][a-zA-Z])?; )?(?:[^;]+; ?)?([^\/;]+)\) /u', $ua, $match)) {
281
  $candidates[] = $match[1];
282
  } elseif (preg_match('/\(([^;]+);U;Android\/[^;]+;[0-9]+\*[0-9]+;CTC\/2.0\)/u', $ua, $match)) {
283
  $candidates[] = $match[1];
284
  }
285
  } else {
 
286
  /* Other applications */
287
 
288
  if (preg_match('/[34]G Explorer\/[0-9.]+ \(Linux;Android [0-9.]+,([^\)]+)\)/u', $ua, $match)) {
307
  continue;
308
  }
309
 
310
+ /* Ignore "K" or "Unspecified Device" as a device, as it is a dummy value used by Chrome UA reduction */
311
+
312
+ if ($candidates[$c] == 'K' || $candidates[$c] == 'Unspecified Device') {
313
+ unset($candidates[$c]);
314
+ continue;
315
+ }
316
+
317
  $candidates[$c] = preg_replace('/^[a-zA-Z][a-zA-Z][-_][a-zA-Z][a-zA-Z]\s+/u', '', $candidates[$c]);
318
  $candidates[$c] = preg_replace('/(.*) - [0-9\.]+ - (?:with Google Apps - )?API [0-9]+ - [0-9]+x[0-9]+/', '\\1', $candidates[$c]);
319
  $candidates[$c] = preg_replace('/^sprd-/u', '', $candidates[$c]);
320
+ $candidates[$c] = preg_replace('/^HarmonyOS; /u', '', $candidates[$c]);
321
+ $candidates[$c] = preg_replace('/; GMSCore.*/u', '', $candidates[$c]);
322
+ $candidates[$c] = preg_replace('/; HMSCore.*/u', '', $candidates[$c]);
323
  }
324
 
325
  $candidates = array_unique($candidates);
400
  }
401
  }
402
 
403
+
404
+ /* Harmony OS */
405
+
406
+ if (preg_match('/HarmonyOS/u', $ua)) {
407
+ $this->data->os->name = 'Harmony OS';
408
+ $this->data->os->version = new Version();
409
+
410
+
411
+ if (preg_match('/; Android ([0-9\.]+);/u', $ua, $match)) {
412
+ $this->data->os->family = new Family([
413
+ 'name' => 'Android',
414
+ 'version' => new Version([ 'value' => $match[1], 'details' => 3 ])
415
+ ]);
416
+ }
417
+ }
418
+
419
+
420
  /* Aliyun OS */
421
 
422
  if (preg_match('/Aliyun/u', $ua) || preg_match('/YunOs/ui', $ua)) {
1536
  {
1537
  if (preg_match('/(?:web|hpw)OS\/(?:HP webOS )?([0-9.]*)/u', $ua, $match)) {
1538
  $this->data->os->name = 'webOS';
1539
+ $this->data->os->version = new Version([ 'value' => $match[1] ]);
1540
  $this->data->device->type = preg_match('/Tablet/iu', $ua) ? Constants\DeviceType::TABLET : Constants\DeviceType::MOBILE;
1541
  $this->data->device->generic = false;
1542
  }
1892
 
1893
  if (preg_match('/SunOS 5\.([123456](?:\.[0-9\.]*)?) /u', $ua, $match)) {
1894
  $this->data->os->version = new Version([ 'value' => '2.' . $match[1] ]);
1895
+ } elseif (preg_match('/SunOS 5\.([0-9\.]*)/u', $ua, $match)) {
1896
  $this->data->os->version = new Version([ 'value' => $match[1] ]);
1897
  }
1898
 
2449
  $count = count($patterns);
2450
  for ($b = 0; $b < $count; $b++) {
2451
  for ($r = 0; $r < count($patterns[$b]['regexp']); $r++) {
 
2452
  if (preg_match($patterns[$b]['regexp'][$r], $ua, $match)) {
2453
  $this->data->os->name = $patterns[$b]['name'];
2454
 
includes/vendor/whichbrowser/parser/src/Data/Applications.php CHANGED
@@ -26,7 +26,6 @@ class Applications
26
 
27
  foreach (self::$BROWSERS as $type => $list) {
28
  foreach ($list as $i => $item) {
29
-
30
  if (preg_match($item['regexp'], $ua, $match)) {
31
  return [
32
  'browser' => [
@@ -57,7 +56,6 @@ class Applications
57
 
58
  foreach (self::$OTHERS as $type => $list) {
59
  foreach ($list as $i => $item) {
60
-
61
  if (preg_match($item['regexp'], $ua, $match)) {
62
  return [
63
  'browser' => [
@@ -80,6 +78,10 @@ class Applications
80
  }
81
  public static function identifyBot($ua)
82
  {
 
 
 
 
83
  require_once __DIR__ . '/../../data/regexes/applications-bots.php';
84
 
85
  if (preg_match(self::$BOTS_REGEX, $ua)) {
26
 
27
  foreach (self::$BROWSERS as $type => $list) {
28
  foreach ($list as $i => $item) {
 
29
  if (preg_match($item['regexp'], $ua, $match)) {
30
  return [
31
  'browser' => [
56
 
57
  foreach (self::$OTHERS as $type => $list) {
58
  foreach ($list as $i => $item) {
 
59
  if (preg_match($item['regexp'], $ua, $match)) {
60
  return [
61
  'browser' => [
78
  }
79
  public static function identifyBot($ua)
80
  {
81
+ if (is_null($ua)) {
82
+ return;
83
+ }
84
+
85
  require_once __DIR__ . '/../../data/regexes/applications-bots.php';
86
 
87
  if (preg_match(self::$BOTS_REGEX, $ua)) {
includes/vendor/whichbrowser/parser/src/Data/DeviceModels.php CHANGED
@@ -262,7 +262,7 @@ class DeviceModels
262
 
263
  public static function applyMatches($model, $original, $pattern)
264
  {
265
- if (strpos($model, '$') !== false && substr($pattern, -1) == "!") {
266
  if (preg_match('/^' . substr($pattern, 0, -1) . '/iu', $original, $matches)) {
267
  foreach ($matches as $k => $v) {
268
  $model = str_replace('$' . $k, $v, $model);
262
 
263
  public static function applyMatches($model, $original, $pattern)
264
  {
265
+ if (!is_null($model) && strpos($model, '$') !== false && substr($pattern, -1) == "!") {
266
  if (preg_match('/^' . substr($pattern, 0, -1) . '/iu', $original, $matches)) {
267
  foreach ($matches as $k => $v) {
268
  $model = str_replace('$' . $k, $v, $model);
includes/vendor/whichbrowser/parser/src/Model/Primitive/Base.php CHANGED
@@ -76,6 +76,6 @@ class Base
76
  }
77
  }
78
 
79
- return implode($lines, ", ");
80
  }
81
  }
76
  }
77
  }
78
 
79
+ return implode(", ", $lines);
80
  }
81
  }
includes/vendor/whichbrowser/parser/src/Model/Primitive/NameVersion.php CHANGED
@@ -12,14 +12,19 @@ class NameVersion extends Base
12
  {
13
  /**
14
  * @var string $name The name
15
- * @var string $alias An alternative name that is used for readable strings
16
- * @var \WhichBrowser\Model\Version $version Version information
17
  */
18
  public $name;
 
 
 
 
19
  public $alias;
 
 
 
 
20
  public $version;
21
 
22
-
23
  /**
24
  * Set the properties to the default values
25
  *
12
  {
13
  /**
14
  * @var string $name The name
 
 
15
  */
16
  public $name;
17
+
18
+ /**
19
+ * @var string $alias An alternative name that is used for readable strings
20
+ */
21
  public $alias;
22
+
23
+ /**
24
+ * @var \WhichBrowser\Model\Version $version Version information
25
+ */
26
  public $version;
27
 
 
28
  /**
29
  * Set the properties to the default values
30
  *
includes/vendor/whichbrowser/parser/src/Model/Version.php CHANGED
@@ -91,7 +91,7 @@ class Version extends Base
91
 
92
  public function getParts()
93
  {
94
- $parts = explode('.', $this->value);
95
 
96
  return (object) [
97
  'major' => !empty($parts[0]) ? intval($parts[0]) : 0,
91
 
92
  public function getParts()
93
  {
94
+ $parts = !is_null($this->value) ? explode('.', $this->value) : [];
95
 
96
  return (object) [
97
  'major' => !empty($parts[0]) ? intval($parts[0]) : 0,
includes/vendor/whichbrowser/parser/tests/data/appliance/amstrad.yaml DELETED
@@ -1,4 +0,0 @@
1
- -
2
- headers: 'User-Agent: MobileExplorer/3.00 (Mozilla/1.22; compatible; MMEF300; Amstrad; Gamma)'
3
- readable: 'Microsoft Mobile Explorer 3.0 on an Amstrad E-m@iler Plus'
4
- result: { browser: { name: 'Microsoft Mobile Explorer', version: '3.0', type: browser }, device: { type: desktop, manufacturer: Amstrad, model: 'E-m@iler Plus' } }
 
 
 
 
includes/vendor/whichbrowser/parser/tests/data/appliance/familyhub.yaml DELETED
@@ -1,4 +0,0 @@
1
- -
2
- headers: 'User-Agent: Mozilla/5.0 (Linux; Tizen 2.3; FamilyHub) AppleWebKit/537.3 (KHTML, like Gecko) Version/2.3 Mobile Safari/537.3'
3
- readable: 'Samsung Browser on a Samsung Family Hub running Tizen 2.3'
4
- result: { browser: { name: 'Samsung Browser' }, engine: { name: Webkit, version: '537.3' }, os: { name: Tizen, version: '2.3' }, device: { type: appliance, manufacturer: Samsung, model: 'Family Hub' } }
 
 
 
 
includes/vendor/whichbrowser/parser/tests/data/appliance/i-opener.yaml DELETED
@@ -1,4 +0,0 @@
1
- -
2
- headers: 'User-Agent: Mozilla/3.x (I-Opener 1.1; Netpliance)'
3
- readable: 'a Netpliance i-Opener'
4
- result: { device: { type: desktop, manufacturer: Netpliance, model: i-Opener } }
 
 
 
 
includes/vendor/whichbrowser/parser/tests/data/appliance/weblight.yaml DELETED
@@ -1,8 +0,0 @@
1
- -
2
- headers: 'User-Agent: Mozilla/3.0 KOMATSU (AveFront/2.6 WebLight) WL/3.0 V2.45ohi M=11E2A2499945'
3
- readable: 'NetFront 2.6 on a KOMATSU WebLight'
4
- result: { browser: { name: NetFront, version: '2.6', type: browser }, engine: { name: NetFront }, device: { type: desktop, manufacturer: KOMATSU, model: WebLight } }
5
- -
6
- headers: 'User-Agent: Mozilla/3.0 KOMATSU WL/3.0'
7
- readable: 'Netscape Navigator 3.0 on a KOMATSU WebLight'
8
- result: { browser: { name: 'Netscape Navigator', version: '3.0', type: browser }, device: { type: desktop, manufacturer: KOMATSU, model: WebLight } }
 
 
 
 
 
 
 
 
includes/vendor/whichbrowser/parser/tests/data/bots/disabled.yaml DELETED
@@ -1,25 +0,0 @@
1
- -
2
- detectBots: false
3
- headers: 'User-Agent: (Windows NT 10.0; Googlebot Googlebot-Image/1.0 msnbot-media/1.1 facebookexternalhit/1.1 Trident/7.0) Maxthon/4.4.5.3000 Firefox/38'
4
- result: { browser: { name: "Maxthon", family: { name: "Firefox", version: "38" }, version: "4.4.5", type: "browser" }, engine: { name: "Trident", version: "7.0" }, os: { name: "Windows", version: { value: "10.0", alias: "10" } }, device: { type: "desktop" } }
5
- readable: 'Maxthon 4.4.5 on Windows 10'
6
- -
7
- detectBots: false
8
- headers: 'User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/534+ (KHTML, like Gecko) MsnBot-Media /1.0b'
9
- result: { engine: { name: "Webkit", version: "534" }, os: { name: "Windows", version: { value: "6.1", alias: "7" } }, device: { type: "desktop" } }
10
- readable: 'an unknown browser based on Webkit 534 running on Windows 7'
11
- -
12
- detectBots: false
13
- headers: 'User-Agent: Mozilla/5.0 (iPhone; CPU iPhone OS 6_0 like Mac OS X) AppleWebKit/536.26 (KHTML, like Gecko) Version/6.0 Mobile/10A5376e Safari/8536.25 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)'
14
- result: { browser: { name: "Safari", version: "6.0", type: "browser" }, engine: { name: "Webkit", version: "536.26" }, os: { name: "iOS", version: "6.0" }, device: { type: "mobile", subtype: "smart", manufacturer: "Apple", model: "iPhone" }}
15
- readable: 'Safari on an Apple iPhone running iOS 6.0'
16
- -
17
- detectBots: false
18
- headers: 'User-Agent: Mozilla/5.0 (iPhone; CPU iPhone OS 7_0 like Mac OS X) AppleWebKit/537.51.1 (KHTML, like Gecko) Version/7.0 Mobile/11A465 Safari/9537.53 (compatible; bingbot/2.0; +http://www.bing.com/bingbot.htm)'
19
- result: { browser: { name: "Safari", version: "7.0", type: "browser" }, engine: { name: "Webkit", version: "537.51.1" }, os: { name: "iOS", version: "7.0" }, device: { type: "mobile", subtype: "smart", manufacturer: "Apple", model: "iPhone" }}
20
- readable: 'Safari on an Apple iPhone running iOS 7.0'
21
- -
22
- detectBots: false
23
- headers: 'User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko; Google Page Speed Insights) Chrome/27.0.1453 Safari/537.36'
24
- result: { browser: { name: "Chrome", version: "27", type: "browser" }, engine: { name: "Blink" }, os: { name: "Linux" }, device: { type: "desktop" }, camouflage: true }
25
- readable: 'an unknown browser that imitates Chrome 27 on Linux'
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
includes/vendor/whichbrowser/parser/tests/data/bots/false-positive.yaml DELETED
@@ -1,8 +0,0 @@
1
- -
2
- headers: 'User-Agent: Mozilla/5.0 (Linux; U; Android 4.2.2; tr-tr; S308 Build/CUBOT) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30 [FB_IAB/FB4A;FBAV/71.0.0.17.73;]'
3
- readable: 'Facebook on a Cubot S308 running Android 4.2.2'
4
- result: { browser: { name: Facebook, type: 'app:social' }, engine: { name: Webkit, version: '534.30' }, os: { name: Android, version: 4.2.2 }, device: { type: mobile, subtype: smart, manufacturer: Cubot, model: S308 } }
5
- -
6
- headers: 'User-Agent: Mozilla/5.0 (Linux; U; Android 4.2.2; de-de; CUBOT S108 Build/CUBOT) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30 [FB_IAB/FB4A;FBAV/55.0.0.18.66;]'
7
- readable: 'Facebook on a Cubot S108 running Android 4.2.2'
8
- result: { browser: { name: Facebook, type: 'app:social' }, engine: { name: Webkit, version: '534.30' }, os: { name: Android, version: 4.2.2 }, device: { type: mobile, subtype: smart, manufacturer: Cubot, model: S108 } }
 
 
 
 
 
 
 
 
includes/vendor/whichbrowser/parser/tests/data/bots/generic.yaml DELETED
@@ -1,508 +0,0 @@
1
- -
2
- headers: 'User-Agent: (Windows NT 10.0; Googlebot Googlebot-Image/1.0 msnbot-media/1.1 facebookexternalhit/1.1 Trident/7.0) Maxthon/4.0'
3
- result: { browser: { name: Bing, version: '1.1' }, device: { type: bot } }
4
- readable: 'Bing 1.1'
5
- -
6
- headers: 'User-Agent: (Windows NT 10.0; Googlebot Googlebot-Image/1.0 msnbot-media/1.1 facebookexternalhit/1.1 Trident/7.0) Maxthon/4.4.5.3000 Firefox/38'
7
- result: { browser: { name: Bing, version: '1.1' }, device: { type: bot } }
8
- readable: 'Bing 1.1'
9
- -
10
- headers: 'User-Agent: 360spider-image'
11
- result: { browser: { name: 360spider }, device: { type: bot } }
12
- readable: 360spider
13
- -
14
- headers: 'User-Agent: 5acd734a-1ed3-4a17-ad9d-0b09ae7bc2d2/Nutch-1.7'
15
- result: { browser: { name: 'Apache Nutch', version: '1.7' }, device: { type: bot } }
16
- readable: 'Apache Nutch 1.7'
17
- -
18
- headers: 'User-Agent: ADmantX Platform Semantic Analyzer - ADmantX Inc. - www.admantx.com - support@admantx.com'
19
- result: { browser: { name: ADmantX }, device: { type: bot } }
20
- readable: ADmantX
21
- -
22
- headers: 'User-Agent: Aboundex/0.3 (http://www.aboundex.com/crawler/)'
23
- result: { browser: { name: Aboundex, version: '0.3' }, device: { type: bot } }
24
- readable: 'Aboundex 0.3'
25
- -
26
- headers: 'User-Agent: Ad Muncher v4.93.33707/4957'
27
- result: { browser: { name: 'Ad Muncher', version: 4.93.33707 }, device: { type: bot } }
28
- readable: 'Ad Muncher 4.93.33707'
29
- -
30
- headers: 'User-Agent: AddThis.com robot tech.support@clearspring.com'
31
- result: { browser: { name: AddThis.com }, device: { type: bot } }
32
- readable: AddThis.com
33
- -
34
- headers: 'User-Agent: AdsBot-Google ( http://www.google.com/adsbot.html)'
35
- result: { browser: { name: 'Google Ads Bot' }, device: { type: bot } }
36
- readable: 'Google Ads Bot'
37
- -
38
- headers: 'User-Agent: AdsBot-Google (+http://www.google.com/adsbot.html)'
39
- result: { browser: { name: 'Google Ads Bot' }, device: { type: bot } }
40
- readable: 'Google Ads Bot'
41
- -
42
- headers: 'User-Agent: AdsBot-Google-Mobile (+http://www.google.com/mobile/adsbot.html) Mozilla (iPhone; U; CPU iPhone OS 3 0 like Mac OS X) AppleWebKit (KHTML, like Gecko) Mobile Safari'
43
- result: { browser: { name: 'Google Ads Bot' }, device: { type: bot } }
44
- readable: 'Google Ads Bot'
45
- -
46
- headers: 'User-Agent: AdsBot-Google-Mobile (+http://www.google.com/mobile/adsbot.html) Mozilla (iPhone; U; CPU iPhone OS 3 0 like Mac OS X) AppleWebKit/537.36 (KHTML, like Gecko) Mobile Safari/537.36'
47
- result: { browser: { name: 'Google Ads Bot' }, device: { type: bot } }
48
- readable: 'Google Ads Bot'
49
- -
50
- headers: 'User-Agent: AhrefsBot.Feeds v0.1; http://ahrefs.com/'
51
- result: { browser: { name: AhrefsBot, version: '0.1' }, device: { type: bot } }
52
- readable: 'AhrefsBot 0.1'
53
- -
54
- headers: 'User-Agent: AmorankSpider/0.1; +http://amorank.com/webcrawler.html'
55
- result: { browser: { name: 'Amorank Spider', version: '0.1' }, device: { type: bot } }
56
- readable: 'Amorank Spider 0.1'
57
- -
58
- headers: 'User-Agent: AppEngine-Google; (+http://code.google.com/appengine; appid: xbmacx)'
59
- result: { browser: { name: 'Google App Engine' }, device: { type: bot } }
60
- readable: 'Google App Engine'
61
- -
62
- headers: 'User-Agent: ArchiveTeam ArchiveBot/20140807.01 (wpull 0.37a1) and not Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1985.125 Safari/537.36'
63
- result: { browser: { name: ArchiveBot }, device: { type: bot } }
64
- readable: ArchiveBot
65
- -
66
- headers: 'User-Agent: Backlink-Ceck.de (+http://www.backlink-check.de/bot.html)'
67
- result: { browser: { name: Backlink-Check }, device: { type: bot } }
68
- readable: Backlink-Check
69
- -
70
- headers: 'User-Agent: BacklinkCrawler (http://www.backlinktest.com/crawler.html)'
71
- result: { browser: { name: BacklinkCrawler }, device: { type: bot } }
72
- readable: BacklinkCrawler
73
- -
74
- headers: 'User-Agent: Baiduspider ( http://www.baidu.com/search/spider.htm)'
75
- result: { browser: { name: Baiduspider }, device: { type: bot } }
76
- readable: Baiduspider
77
- -
78
- headers: 'User-Agent: Baiduspider+(+http://www.baidu.com/search/spider_jp.html)'
79
- result: { browser: { name: Baiduspider }, device: { type: bot } }
80
- readable: Baiduspider
81
- -
82
- headers: 'User-Agent: Bloglovin/1.0 (http://www.bloglovin.com; 1 subscribers)'
83
- result: { browser: { name: Bloglovin, version: '1.0' }, device: { type: bot } }
84
- readable: 'Bloglovin 1.0'
85
- -
86
- headers: 'User-Agent: BlogramCrawler/1.0.1(+http://blogram.jp/)'
87
- result: { browser: { name: Blogram, version: 1.0.1 }, device: { type: bot } }
88
- readable: 'Blogram 1.0.1'
89
- -
90
- headers: 'User-Agent: Browsershots'
91
- result: { browser: { name: Browsershots }, device: { type: bot } }
92
- readable: Browsershots
93
- -
94
- headers: 'User-Agent: CCBot/2.0 (http://commoncrawl.org/faq/)'
95
- result: { browser: { name: CommonCrawl, version: '2.0' }, device: { type: bot } }
96
- readable: 'CommonCrawl 2.0'
97
- -
98
- headers: 'User-Agent: Cliqzbot/0.1 (+http://cliqz.com/company/cliqzbot)'
99
- result: { browser: { name: Cliqzbot, version: '0.1' }, device: { type: bot } }
100
- readable: 'Cliqzbot 0.1'
101
- -
102
- headers: 'User-Agent: CommaFeed/1.0 (http://www.commafeed.com)'
103
- result: { browser: { name: CommaFeed, version: '1.0' }, device: { type: bot } }
104
- readable: 'CommaFeed 1.0'
105
- -
106
- headers: 'User-Agent: CrawlerProcess (http://www.PowerMapper.com) /5.5.678.0'
107
- result: { browser: { name: PowerMapper, version: 5.5.678.0 }, device: { type: bot } }
108
- readable: 'PowerMapper 5.5.678.0'
109
- -
110
- headers: 'User-Agent: Curious George - www.analyticsseo.com/crawler'
111
- result: { browser: { name: 'Analytics SEO' }, device: { type: bot } }
112
- readable: 'Analytics SEO'
113
- -
114
- headers: 'User-Agent: Data-Hotel-Watchdog/1.1'
115
- result: { browser: { name: 'Data Hotel Watchdog', version: '1.1' }, device: { type: bot } }
116
- readable: 'Data Hotel Watchdog 1.1'
117
- -
118
- headers: 'User-Agent: DoCoMo/2.0 N905i(c100;TB;W24H16) (compatible; Googlebot-Mobile/2.1; +http://www.google.com/bot.html)'
119
- result: { browser: { name: 'Googlebot Mobile', version: '2.1' }, device: { type: bot } }
120
- readable: 'Googlebot Mobile 2.1'
121
- -
122
- headers: 'User-Agent: DoCoMo/2.0 P900i(c100;TB;W24H11) (compatible; ichiro/mobile goo; +http://help.goo.ne.jp/help/article/1142/)'
123
- result: { browser: { name: Goo }, device: { type: bot } }
124
- readable: Goo
125
- -
126
- headers: 'User-Agent: DoCoMo/2.0 SH905i(c100;TB;W24H16) (compatible; Mediapartners-Google/2.1; +http://www.google.com/bot.html)'
127
- result: { browser: { name: 'Google Mediapartners', version: '2.1' }, device: { type: bot } }
128
- readable: 'Google Mediapartners 2.1'
129
- -
130
- headers: 'User-Agent: ExactSeek Crawler (nutch 1.4)/Nutch-1.4 (ExactSeek Crawler; http://www.exactseek.com)'
131
- result: { browser: { name: ExactSeek }, device: { type: bot } }
132
- readable: ExactSeek
133
- -
134
- headers: 'User-Agent: FAST Enterprise Crawler/5.3.4 (crawler@fast.no)'
135
- result: { browser: { name: 'FAST Enterprise Crawler', version: 5.3.4 }, device: { type: bot } }
136
- readable: 'FAST Enterprise Crawler 5.3.4'
137
- -
138
- headers: 'User-Agent: FAST-WebCrawler/3.8 (atw-crawler at fast dot no; http://fast.no/support/crawler.asp)'
139
- result: { browser: { name: 'FAST Web Crawler', version: '3.8' }, device: { type: bot } }
140
- readable: 'FAST Web Crawler 3.8'
141
- -
142
- headers: 'User-Agent: FTRF: Friendly robot/1.3'
143
- result: { browser: { name: 'FTRF: Friendly Robot', version: '1.3' }, device: { type: bot } }
144
- readable: 'FTRF: Friendly Robot 1.3'
145
- -
146
- headers: 'User-Agent: FacebookSecurity/2.1 ([www.FacebookSecurity.com])'
147
- result: { browser: { name: Facebook, version: '2.1' }, device: { type: bot } }
148
- readable: 'Facebook 2.1'
149
- -
150
- headers: 'User-Agent: Fastladder FeedFetcher/0.01 (http://fastladder.com/; 27 subscribers)'
151
- result: { browser: { name: Fastladder, version: '0.01' }, device: { type: bot } }
152
- readable: 'Fastladder 0.01'
153
- -
154
- headers: 'User-Agent: Feed Wrangler/1.0 (3 subscribers; feed-id=248559; http://feedwrangler.net; Allow like Gecko)'
155
- result: { browser: { name: FeedWrangler, version: '1.0' }, device: { type: bot } }
156
- readable: 'FeedWrangler 1.0'
157
- -
158
- headers: 'User-Agent: FeedBurner/1.0 (http://www.FeedBurner.com)'
159
- result: { browser: { name: 'Google FeedBurner', version: '1.0' }, device: { type: bot } }
160
- readable: 'Google FeedBurner 1.0'
161
- -
162
- headers: 'User-Agent: FeedFetcher-Google; ( http://www.google.com/feedfetcher.html)'
163
- result: { browser: { name: 'Google Feedfetcher' }, device: { type: bot } }
164
- readable: 'Google Feedfetcher'
165
- -
166
- headers: 'User-Agent: Feedbin - 9 subscribers'
167
- result: { browser: { name: Feedbin }, device: { type: bot } }
168
- readable: Feedbin
169
- -
170
- headers: 'User-Agent: Feedfetcher-Google; (+http://www.google.com/feedfetcher.html; 19 subscribers; feed-id=13965549748850348809)'
171
- result: { browser: { name: 'Google Feedfetcher' }, device: { type: bot } }
172
- readable: 'Google Feedfetcher'
173
- -
174
- headers: 'User-Agent: FeedlyApp/1.0 (http://www.feedly.com)'
175
- result: { browser: { name: Feedly, version: '1.0' }, device: { type: bot } }
176
- readable: 'Feedly 1.0'
177
- -
178
- headers: 'User-Agent: FeedlyBot/1.0 (http://feedly.com)'
179
- result: { browser: { name: Feedly, version: '1.0' }, device: { type: bot } }
180
- readable: 'Feedly 1.0'
181
- -
182
- headers: 'User-Agent: Feedspot http://www.feedspot.com'
183
- result: { browser: { name: Feedspot }, device: { type: bot } }
184
- readable: Feedspot
185
- -
186
- headers: 'User-Agent: Fever/1.38 (Feed Parser; http://feedafever.com; Allow like Gecko)'
187
- result: { browser: { name: Fever, version: '1.38' }, device: { type: bot } }
188
- readable: 'Fever 1.38'
189
- -
190
- headers: 'User-Agent: Flamingo_SearchEngine (+http://www.flamingosearch.com/bot)'
191
- result: { browser: { name: 'Flamingo Search' }, device: { type: bot } }
192
- readable: 'Flamingo Search'
193
- -
194
- headers: 'User-Agent: Google-Sitemaps/1.0'
195
- result: { browser: { name: 'Google Sitemaps', version: '1.0' }, device: { type: bot } }
196
- readable: 'Google Sitemaps 1.0'
197
- -
198
- headers: 'User-Agent: GoogleProducer; (+http://goo.gl/7y4SX)'
199
- result: { browser: { name: 'Google Play Newsstand' }, device: { type: bot } }
200
- readable: 'Google Play Newsstand'
201
- -
202
- headers: 'User-Agent: Googlebot (gocrawl v0.4)'
203
- result: { browser: { name: Gocrawl, version: '0.4' }, device: { type: bot } }
204
- readable: 'Gocrawl 0.4'
205
- -
206
- headers: 'User-Agent: Googlebot-Image/1.0'
207
- result: { browser: { name: 'Googlebot Image', version: '1.0' }, device: { type: bot } }
208
- readable: 'Googlebot Image 1.0'
209
- -
210
- headers: 'User-Agent: Googlebot-News'
211
- result: { browser: { name: 'Google News' }, device: { type: bot } }
212
- readable: 'Google News'
213
- -
214
- headers: 'User-Agent: Googlebot-Video/1.0'
215
- result: { browser: { name: 'Googlebot Video', version: '1.0' }, device: { type: bot } }
216
- readable: 'Googlebot Video 1.0'
217
- -
218
- headers: 'User-Agent: Googlebot/2.1 ( http://www.googlebot.com/bot.html)'
219
- result: { browser: { name: Googlebot, version: '2.1' }, device: { type: bot } }
220
- readable: 'Googlebot 2.1'
221
- -
222
- headers: 'User-Agent: Googlebot/2.1 (+http://www.google.com/bot.html)'
223
- result: { browser: { name: Googlebot, version: '2.1' }, device: { type: bot } }
224
- readable: 'Googlebot 2.1'
225
- -
226
- headers: 'User-Agent: Googlebot/2.1(+http://www.googlebot.com/bot.html)'
227
- result: { browser: { name: Googlebot, version: '2.1' }, device: { type: bot } }
228
- readable: 'Googlebot 2.1'
229
- -
230
- headers: 'User-Agent: Mediapartners-Google'
231
- result: { browser: { name: 'Google Mediapartners' }, device: { type: bot } }
232
- readable: 'Google Mediapartners'
233
- -
234
- headers: 'User-Agent: MetaFeedly/1.0 (http://www.feedly.com)'
235
- result: { browser: { name: Feedly, version: '1.0' }, device: { type: bot } }
236
- readable: 'Feedly 1.0'
237
- -
238
- headers: 'User-Agent: Mozilla/2.0 (compatible; Ask Jeeves/Teoma)'
239
- result: { browser: { name: 'Ask Jeeves' }, device: { type: bot } }
240
- readable: 'Ask Jeeves'
241
- -
242
- headers: 'User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; Google Wireless Transcoder;)'
243
- result: { browser: { name: 'Google Wireless Transcoder' }, device: { type: bot } }
244
- readable: 'Google Wireless Transcoder'
245
- -
246
- headers: 'User-Agent: Mozilla/5.0 (Android; Mobile; rv:29.0) Gecko/29.0 Firefox/29.0 AppEngine-Google; (+http://code.google.com/appengine; appid: s~oldecreator)'
247
- result: { browser: { name: 'Google App Engine' }, device: { type: bot } }
248
- readable: 'Google App Engine'
249
- -
250
- headers: 'User-Agent: Mozilla/5.0 (Linux; U; Android 2.3.4; generic) AppleWebKit/537.4 (KHTML, like Gecko; Google Web Preview) Version/4.0 Mobile Safari/537.4'
251
- result: { browser: { name: 'Google Web Preview' }, device: { type: bot } }
252
- readable: 'Google Web Preview'
253
- -
254
- headers: 'User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2486.0 Safari/537.36 Edge/13.11067 BingPreview/1.0b'
255
- result: { browser: { name: 'Bing Preview', version: '1.0' }, device: { type: bot } }
256
- readable: 'Bing Preview 1.0'
257
- -
258
- headers: 'User-Agent: Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/21.0.1180.89 Safari/537.1; 360Spider'
259
- result: { browser: { name: 360spider }, device: { type: bot } }
260
- readable: 360spider
261
- -
262
- headers: 'User-Agent: Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1626.1 Safari/537.36 AppEngine-Google; (+http://code.google.com/appengine; appid: s~hex-plus)'
263
- result: { browser: { name: 'Google App Engine' }, device: { type: bot } }
264
- readable: 'Google App Engine'
265
- -
266
- headers: 'User-Agent: Mozilla/5.0 (Windows NT 6.3; Trident/7.0; rv:11.0) like Gecko AppEngine-Google; (+http://code.google.com/appengine; appid: s~oowsxs)'
267
- result: { browser: { name: 'Google App Engine' }, device: { type: bot } }
268
- readable: 'Google App Engine'
269
- -
270
- headers: 'User-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/538.14 (KHTML, like Gecko) BingPreview/1.0b'
271
- result: { browser: { name: 'Bing Preview', version: '1.0' }, device: { type: bot } }
272
- readable: 'Bing Preview 1.0'
273
- -
274
- headers: 'User-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64; rv:27.0) Gecko/20100101 Firefox/27.0 AppEngine-Google; (+http://code.google.com/appengine; appid: s~chengzhoukun)'
275
- result: { browser: { name: 'Google App Engine' }, device: { type: bot } }
276
- readable: 'Google App Engine'
277
- -
278
- headers: 'User-Agent: Mozilla/5.0 (Windows Phone 10.0; Android 4.2.1; Nokia; Lumia 520) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.71 Mobile Safari/537.36 Edge/12.0 BingPreview/1.0b'
279
- result: { browser: { name: 'Bing Preview', version: '1.0' }, device: { type: bot } }
280
- readable: 'Bing Preview 1.0'
281
- -
282
- headers: 'User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko; Google Page Speed Insights) Chrome/27.0.1453 Safari/537.36'
283
- result: { browser: { name: 'Google Page Speed' }, device: { type: bot } }
284
- readable: 'Google Page Speed'
285
- -
286
- headers: 'User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko; Google Page Speed Insights) Chrome/27.0.1453 Safari/537.36 GoogleBot/2.1'
287
- result: { browser: { name: Googlebot, version: '2.1' }, device: { type: bot } }
288
- readable: 'Googlebot 2.1'
289
- -
290
- headers: 'User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko; Google Web Preview) Chrome/27.0.1453 Safari/537.36'
291
- result: { browser: { name: 'Google Web Preview' }, device: { type: bot } }
292
- readable: 'Google Web Preview'
293
- -
294
- headers: 'User-Agent: Mozilla/5.0 (X11; U; Linux i686; xx; rv:1.9.2.18) Gecko/20110622 HeartRails_Capture/1.0.5 (+http://capture.heartrails.com/) Namoroka/3.6.18'
295
- result: { browser: { name: 'HeartRails Capture', version: 1.0.5 }, device: { type: bot } }
296
- readable: 'HeartRails Capture 1.0.5'
297
- -
298
- headers: 'User-Agent: Mozilla/5.0 (compatible; 008/0.83; http://www.80legs.com/webcrawler.html) Gecko/2008032620'
299
- result: { browser: { name: 80legs, version: '0.83' }, device: { type: bot } }
300
- readable: '80legs 0.83'
301
- -
302
- headers: 'User-Agent: Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html) ASProxy/5.5b5'
303
- result: { browser: { name: Googlebot, version: '2.1' }, device: { type: bot } }
304
- readable: 'Googlebot 2.1'
305
- -
306
- headers: 'User-Agent: Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; Trident/6.0) BingPreview/1.0b'
307
- result: { browser: { name: 'Bing Preview', version: '1.0' }, device: { type: bot } }
308
- readable: 'Bing Preview 1.0'
309
- -
310
- headers: 'User-Agent: Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; Trident/6.0; WOW64; Trident/6.0; BingPreview/1.0b)'
311
- result: { browser: { name: 'Bing Preview', version: '1.0' }, device: { type: bot } }
312
- readable: 'Bing Preview 1.0'
313
- -
314
- headers: 'User-Agent: Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; WOW64; Trident/6.0) CrawlerProcess (http://www.PowerMapper.com) /5.10.736.0'
315
- result: { browser: { name: PowerMapper, version: 5.10.736.0 }, device: { type: bot } }
316
- readable: 'PowerMapper 5.10.736.0'
317
- -
318
- headers: 'User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0); 360Spider'
319
- result: { browser: { name: 360spider }, device: { type: bot } }
320
- readable: 360spider
321
- -
322
- headers: 'User-Agent: Mozilla/5.0 (compatible; Yahoo! Slurp China; http://misc.yahoo.com.cn/help.html)'
323
- result: { browser: { name: 'Yahoo! Slurp' }, device: { type: bot } }
324
- readable: 'Yahoo! Slurp'
325
- -
326
- headers: 'User-Agent: Mozilla/5.0 (compatible; Yahoo! Slurp/3.0; http://help.yahoo.com/help/us/ysearch/slurp)'
327
- result: { browser: { name: 'Yahoo! Slurp', version: '3.0' }, device: { type: bot } }
328
- readable: 'Yahoo! Slurp 3.0'
329
- -
330
- headers: 'User-Agent: Mozilla/5.0 (compatible; Yahoo! Slurp/3.0; http://help.yahoo.com/help/us/ysearch/slurp) NOT Firefox/3.5'
331
- result: { browser: { name: 'Yahoo! Slurp', version: '3.0' }, device: { type: bot } }
332
- readable: 'Yahoo! Slurp 3.0'
333
- -
334
- headers: 'User-Agent: Mozilla/5.0 (compatible; bingbot/2.0 +http://www.bing.com/bingbot.htm)'
335
- result: { browser: { name: Bing, version: '2.0' }, device: { type: bot } }
336
- readable: 'Bing 2.0'
337
- -
338
- headers: 'User-Agent: Mozilla/5.0 (compatible; bingbot/2.0; )"'
339
- result: { browser: { name: Bing, version: '2.0' }, device: { type: bot } }
340
- readable: 'Bing 2.0'
341
- -
342
- headers: 'User-Agent: Mozilla/5.0 (compatible; bingbot/2.1; +http://www.bing.com/bingbot.htm)'
343
- result: { browser: { name: Bing, version: '2.1' }, device: { type: bot } }
344
- readable: 'Bing 2.1'
345
- -
346
- headers: 'User-Agent: Mozilla/5.0 (compatible; heritrix/1.14.4 +http://netarkivet.dk/webcrawler/)'
347
- result: { browser: { name: CiteSeerX, version: 1.14.4 }, device: { type: bot } }
348
- readable: 'CiteSeerX 1.14.4'
349
- -
350
- headers: 'User-Agent: Mozilla/5.0 (compatible; heritrix/3.1.2-SNAPSHOT-20131029-0036 +http://archive.org/details/archive.org_bot)'
351
- result: { browser: { name: Archive.org }, device: { type: bot } }
352
- readable: Archive.org
353
- -
354
- headers: 'User-Agent: Mozilla/5.0 (en-us) AppleWebKit/525.13 (KHTML, like Gecko; Google Web Preview) Version/3.1 Safari/525.13'
355
- result: { browser: { name: 'Google Web Preview' }, device: { type: bot } }
356
- readable: 'Google Web Preview'
357
- -
358
- headers: 'User-Agent: Mozilla/5.0 (en-us) AppleWebKit/534.14 (KHTML, like Gecko; Google Wireless Transcoder) Chrome/9.0.597 Safari/534.14'
359
- result: { browser: { name: 'Google Wireless Transcoder' }, device: { type: bot } }
360
- readable: 'Google Wireless Transcoder'
361
- -
362
- headers: 'User-Agent: Mozilla/5.0 (iPhone; CPU iPhone OS 6_0 like Mac OS X) AppleWebKit/536.26 (KHTML, like Gecko) Version/6.0 Mobile/10A5376e Safari/8536.25 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)'
363
- result: { browser: { name: Googlebot, version: '2.1' }, device: { type: bot } }
364
- readable: 'Googlebot 2.1'
365
- -
366
- headers: 'User-Agent: Mozilla/5.0 (iPhone; CPU iPhone OS 7_0 like Mac OS X) AppleWebKit/537.51.1 (KHTML, like Gecko) Version/7.0 Mobile/11A465 Safari/9537.53 (compatible; bingbot/2.0; +http://www.bing.com/bingbot.htm)'
367
- result: { browser: { name: Bing, version: '2.0' }, device: { type: bot } }
368
- readable: 'Bing 2.0'
369
- -
370
- headers: 'User-Agent: Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; Google Web Preview Analytics) Chrome/27.0.1453 Safari/537.36 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)'
371
- result: { browser: { name: Googlebot, version: '2.1' }, device: { type: bot } }
372
- readable: 'Googlebot 2.1'
373
- -
374
- headers: 'User-Agent: Mozilla/5.0 AppleWebKit/537.4 (KHTML, like Gecko; compatible; Googlebot/2.1; +http://www.google.com/bot.html) Safari/537.4'
375
- result: { browser: { name: Googlebot, version: '2.1' }, device: { type: bot } }
376
- readable: 'Googlebot 2.1'
377
- -
378
- headers: 'User-Agent: Mozilla/5.0+(compatible;+Baiduspider/2.0;++http://www.baidu.com/search/spider.html)'
379
- result: { browser: { name: Baiduspider, version: '2.0' }, device: { type: bot } }
380
- readable: 'Baiduspider 2.0'
381
- -
382
- headers: 'User-Agent: Opera/30.0.1835.59 (X11; Linux i686; Ubuntu/14.10) Presto/2.12.388 Version/29.16 AppleWebKit/599.0+ (KHTML, like Gecko) Chrome/41.0.2272.118 Safari/537.36 FAST-WebCrawler/3.8'
383
- result: { browser: { name: 'FAST Web Crawler', version: '3.8' }, device: { type: bot } }
384
- readable: 'FAST Web Crawler 3.8'
385
- -
386
- headers: 'User-Agent: Scrapy/0.24.6 (+http://scrapy.org)'
387
- result: { browser: { name: Scrapy, version: 0.24.6 }, device: { type: bot } }
388
- readable: 'Scrapy 0.24.6'
389
- -
390
- headers: 'User-Agent: Wget/1.11.4'
391
- result: { browser: { name: Wget, version: 1.11.4 }, device: { type: bot } }
392
- readable: 'Wget 1.11.4'
393
- -
394
- headers: 'User-Agent: Wget/1.15 (linux-gnu)'
395
- result: { browser: { name: Wget, version: '1.15' }, device: { type: bot } }
396
- readable: 'Wget 1.15'
397
- -
398
- headers: 'User-Agent: Wget/1.16.1 (darwin14.0.0)'
399
- result: { browser: { name: Wget, version: 1.16.1 }, device: { type: bot } }
400
- readable: 'Wget 1.16.1'
401
- -
402
- headers: 'User-Agent: Wget/1.6'
403
- result: { browser: { name: Wget, version: '1.6' }, device: { type: bot } }
404
- readable: 'Wget 1.6'
405
- -
406
- headers: 'User-Agent: facebookexternalhit/1.1'
407
- result: { browser: { name: Facebook, version: '1.1' }, device: { type: bot } }
408
- readable: 'Facebook 1.1'
409
- -
410
- headers: 'User-Agent: facebookexternalhit/1.1 (+http(s)://www.facebook.com/externalhit_uatext.php)'
411
- result: { browser: { name: Facebook, version: '1.1' }, device: { type: bot } }
412
- readable: 'Facebook 1.1'
413
- -
414
- headers: 'User-Agent: facebookexternalhit/1.1 (+http://www.facebook.com/externalhit_uatext.php)'
415
- result: { browser: { name: Facebook, version: '1.1' }, device: { type: bot } }
416
- readable: 'Facebook 1.1'
417
- -
418
- headers: 'User-Agent: facebookscraper/1.0( http://www.facebook.com/sharescraper_help.php)'
419
- result: { browser: { name: Facebook, version: '1.0' }, device: { type: bot } }
420
- readable: 'Facebook 1.0'
421
- -
422
- headers: 'User-Agent: grub-client-1.5.3; (grub-client-1.5.3; Crawl your own stuff with http://grub.org)'
423
- result: { browser: { name: Grub, version: 1.5.3 }, device: { type: bot } }
424
- readable: 'Grub 1.5.3'
425
- -
426
- headers: 'User-Agent: mapion-news-bot/1.0 (http://www.mapion.co.jp/news/)'
427
- result: { browser: { name: 'Mapian News Bot', version: '1.0' }, device: { type: bot } }
428
- readable: 'Mapian News Bot 1.0'
429
- -
430
- headers: 'User-Agent: msnbot-NewsBlogs/2.0b (+http://search.msn.com/msnbot.htm)'
431
- result: { browser: { name: Bing, version: '2.0' }, device: { type: bot } }
432
- readable: 'Bing 2.0'
433
- -
434
- headers: 'User-Agent: msnbot/1.1 ( http://search.msn.com/msnbot.htm)'
435
- result: { browser: { name: Bing, version: '1.1' }, device: { type: bot } }
436
- readable: 'Bing 1.1'
437
- -
438
- headers: 'User-Agent: msnbot/2.0b ( http://search.msn.com/msnbot.htm)'
439
- result: { browser: { name: Bing, version: '2.0' }, device: { type: bot } }
440
- readable: 'Bing 2.0'
441
- -
442
- headers: 'User-Agent: Mozilla/3.0 (compatible; Indy Library)'
443
- result: { browser: { name: 'Borland Delphi' }, device: { type: bot } }
444
- readable: 'Borland Delphi'
445
- -
446
- headers: 'User-Agent: 1NET/Crawler (compatible; 1NET; robot; http://www.1NET.gr)'
447
- result: { device: { type: bot } }
448
- readable: 'an unknown bot'
449
- -
450
- headers: 'User-Agent: abot/0.1 (abot; http://www.abot.com; abot@abot.com)'
451
- result: { device: { type: bot } }
452
- readable: 'an unknown bot'
453
- -
454
- headers: 'User-Agent: Amfibibot/0.07 (Amfibi Robot; http://www.amfibi.com; agent@amfibi.com)'
455
- result: { device: { type: bot } }
456
- readable: 'an unknown bot'
457
- -
458
- headers: 'User-Agent: envolk/1.7 (+http://www.envolk.com/envolkspiderinfo.html)'
459
- result: { device: { type: bot } }
460
- readable: 'an unknown bot'
461
- -
462
- headers: 'User-Agent: EnaBot/1.2 (http://www.enaball.com/crawler.html)'
463
- result: { device: { type: bot } }
464
- readable: 'an unknown bot'
465
- -
466
- headers: 'User-Agent: EuripBot/0.5 (+http://www.eurip.com) PreCheck'
467
- result: { device: { type: bot } }
468
- readable: 'an unknown bot'
469
- -
470
- headers: 'User-Agent: FaviconArchiver/1.0 (+http://moblur.org/workshop/favicon_archive/)'
471
- result: { device: { type: bot } }
472
- readable: 'an unknown bot'
473
- -
474
- headers: 'User-Agent: Feedfetcher-feedraider; (+http://feedraider.com/help/feedfetcher.html; X subscribers; Allow like Gecko)'
475
- result: { device: { type: bot } }
476
- readable: 'an unknown bot'
477
- -
478
- headers: 'User-Agent: Mozilla/4.0 (compatible; MSIE 5.01; GomezAgent 2.0; Windows NT)'
479
- result: { browser: { name: GomezAgent, version: '2.0' }, device: { type: bot } }
480
- readable: 'GomezAgent 2.0'
481
- -
482
- headers: 'User-Agent: Mozilla/4.0 (compatible; MSIE 4.01; Windows CE; PPC; 240x320; SPV M700; OpVer 19.123.2.733) OrangeBot-Mobile 2008.0 (mobilesearch.support@orange-ftgroup.com)'
483
- result: { browser: { name: OrangeBot }, device: { type: bot } }
484
- readable: OrangeBot
485
- -
486
- headers: 'User-Agent: Mozilla/5.0 (compatible; XML Sitemaps Generator; http://www.xml-sitemaps.com) Gecko XML-Sitemaps/1.0'
487
- result: { browser: { name: 'XML Sitemaps Generator', version: '1.0' }, device: { type: bot } }
488
- readable: 'XML Sitemaps Generator 1.0'
489
- -
490
- headers: 'User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/534+ (KHTML, like Gecko) MsnBot-Media /1.0b'
491
- result: { browser: { name: Bing, version: '1.0' }, device: { type: bot } }
492
- readable: 'Bing 1.0'
493
- -
494
- headers: 'User-Agent: Mozilla/5.0 (compatible; MSIE or Firefox mutant; not on Windows server;) Daumoa 4.0'
495
- result: { browser: { name: Daumoa, version: '4.0' }, device: { type: bot } }
496
- readable: 'Daumoa 4.0'
497
- -
498
- headers: 'User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.6) Gecko/20070725 Firefox/2.0.0.6 - James BOT - WebCrawler http://cognitiveseo.com/bot.html'
499
- result: { browser: { name: JamesBOT }, device: { type: bot } }
500
- readable: JamesBOT
501
- -
502
- headers: 'User-Agent: Pinterest/0.1'
503
- readable: 'Pinterest 0.1'
504
- result: { browser: { name: Pinterest, version: '0.1' }, device: { type: bot } }
505
- -
506
- headers: 'User-Agent: Pinterest/0.2 (+http://www.pinterest.com/)'
507
- readable: 'Pinterest 0.2'
508
- result: { browser: { name: Pinterest, version: '0.2' }, device: { type: bot } }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
includes/vendor/whichbrowser/parser/tests/data/camera/os-android.yaml DELETED
@@ -1,4 +0,0 @@
1
- -
2
- headers: 'User-Agent: Mozilla/5.0 (Linux; U; Android 2.3.3; ja-jp; COOLPIX S800c Build/CP01_WW) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1'
3
- result: { browser: { name: 'Android Browser' }, engine: { name: Webkit, version: '533.1' }, os: { name: Android, version: 2.3.3 }, device: { type: camera, manufacturer: Nikon, model: 'Coolpix S800c' } }
4
- readable: 'Android Browser on a Nikon Coolpix S800c running Android 2.3.3'
 
 
 
 
includes/vendor/whichbrowser/parser/tests/data/camera/os-tizen.yaml DELETED
@@ -1,8 +0,0 @@
1
- -
2
- headers: 'User-Agent: Mozilla/5.0 (Linux; U; Android 4.3; ko-kr; SAMSUNG; NX30) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.166 Mobile Safari/535.19'
3
- result: { browser: { family: { name: Chrome, version: 18 } }, engine: { name: Webkit, version: '535.19' }, os: { name: Tizen }, device: { type: camera, manufacturer: Samsung, model: NX30 } }
4
- readable: 'a Samsung NX30 running Tizen'
5
- -
6
- headers: 'User-Agent: Mozilla/5.0 (Linux; U; Tizen 1.0; xx; Samsung NX300) AppleWebKit/534.16 (KHTML, like Gecko) Version/1.0 Mobile Android compatible'
7
- result: { engine: { name: Webkit, version: '534.16' }, os: { name: Tizen, version: '1.0' }, device: { type: camera, manufacturer: Samsung, model: NX300 } }
8
- readable: 'a Samsung NX300 running Tizen 1.0'
 
 
 
 
 
 
 
 
includes/vendor/whichbrowser/parser/tests/data/car/tesla.yaml DELETED
@@ -1,8 +0,0 @@
1
- -
2
- headers: 'User-Agent: Mozilla/5.0 (X11; Linux) AppleWebKit/534.34 (KHTML, like Gecko) QtCarBrowser Safari/534.34'
3
- result: { engine: { name: Webkit, version: '534.34' }, device: { type: car, manufacturer: Tesla, model: 'Model S' } }
4
- readable: 'a Tesla Model S'
5
- -
6
- headers: 'User-Agent: Mozilla/5.0 (X11; U; Linux; C) AppleWebKit/533.3 (KHTML, like Gecko) QtCarBrowser Safari/533.3'
7
- result: { engine: { name: Webkit, version: '533.3' }, device: { type: car, manufacturer: Tesla, model: 'Model S' } }
8
- readable: 'a Tesla Model S'
 
 
 
 
 
 
 
 
includes/vendor/whichbrowser/parser/tests/data/car/volvo.yaml DELETED
@@ -1,9 +0,0 @@
1
- -
2
- headers: 'User-Agent: Mozilla/5.0 (VCC; 1.0; like Gecko) NetFront/4.2'
3
- readable: 'NetFront 4.2'
4
- result: { browser: { name: NetFront, version: '4.2', type: browser }, engine: { name: NetFront }, device: { type: car } }
5
- -
6
- headers: 'User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; MSIE 5.5; Windows NT 5.0) Opera 7.02 Bork-edition [en]'
7
- useragent: 'Mozilla/5.0 (VCC; 1.0; like Gecko) NetFront/4.2'
8
- readable: 'Opera 7.02 on Windows 2000'
9
- result: { browser: { name: Opera, version: '7.02', type: browser }, engine: { name: Presto }, os: { name: Windows, version: { value: '5.0', alias: '2000' } }, device: { type: desktop } }
 
 
 
 
 
 
 
 
 
includes/vendor/whichbrowser/parser/tests/data/desktop/app-editor.yaml DELETED
@@ -1,28 +0,0 @@
1
- -
2
- headers: 'User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/537.36 (KHTML, like Gecko) Brackets/1.1.0 Chrome/39.0.2171.36 Safari/537.36'
3
- result: { browser: { name: Brackets, family: { name: Chrome, version: 39 }, version: 1.1.0, type: 'app:editor' }, engine: { name: Blink }, os: { name: 'OS X', version: { value: '10.9', nickname: Mavericks } }, device: { type: desktop, manufacturer: Apple, model: Macintosh } }
4
- readable: 'Brackets 1.1.0 on OS X Mavericks 10.9'
5
- -
6
- headers: 'User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Atom/1.0.19 Chrome/43.0.2357.65 Electron/0.30.7 Safari/537.36'
7
- result: { browser: { name: Atom, using: { name: Electron, version: 0.30.7 }, family: { name: Chrome, version: 43 }, version: 1.0.19, type: 'app:editor' }, engine: { name: Blink }, os: { name: Linux }, device: { type: desktop } }
8
- readable: 'Atom 1.0.19 on Linux'
9
- -
10
- headers: 'User-Agent: Mozilla/3.0 (compatible; GoLive 6.0; Windows 2000)'
11
- result: { browser: { name: 'Adobe GoLive', version: '6.0', type: 'app:editor' }, os: { name: Windows, version: { value: '5.0', alias: '2000' } }, device: { type: desktop } }
12
- readable: 'Adobe GoLive 6.0 on Windows 2000'
13
- -
14
- headers: 'User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10) AppleWebKit/600.1.25 (KHTML, like Gecko) iWeb/304'
15
- result: { browser: { name: iWeb, version: '3', type: 'app:editor' }, engine: { name: Webkit, version: 600.1.25 }, os: { name: 'OS X', version: { value: '10.10', nickname: Yosemite } }, device: { type: desktop, manufacturer: Apple, model: Macintosh } }
16
- readable: 'iWeb 3 on OS X Yosemite 10.10'
17
- -
18
- headers: 'User-Agent: Mozilla/4.0 (IBM WebSphere Homepage Builder V12.0/Version 12.0.4.0)'
19
- readable: 'IBM WebSphere Homepage Builder 12.0'
20
- result: { browser: { name: 'IBM WebSphere Homepage Builder', version: '12.0', type: 'app:editor' } }
21
- -
22
- headers: 'User-Agent: Mozilla/4.0 (IBM WebSphere Homepage Builder V7.0/Version 7.0.1.0)'
23
- readable: 'IBM WebSphere Homepage Builder 7.0'
24
- result: { browser: { name: 'IBM WebSphere Homepage Builder', version: '7.0', type: 'app:editor' } }
25
- -
26
- headers: 'User-Agent: Mozilla/4.0 (IBM WebSphere Homepage Builder V10.0/Version 10.0.3.0)'
27
- readable: 'IBM WebSphere Homepage Builder 10.0'
28
- result: { browser: { name: 'IBM WebSphere Homepage Builder', version: '10.0', type: 'app:editor' } }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
includes/vendor/whichbrowser/parser/tests/data/desktop/app-mediaplayer.yaml DELETED
@@ -1,4 +0,0 @@
1
- -
2
- headers: 'User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.2.28) Gecko/20130316 Nightingale/1.12.2 (20140112193149)'
3
- result: { browser: { name: Nightingale, version: 1.12.2, type: 'app:mediaplayer' }, engine: { name: Gecko, version: 1.9.2 }, os: { name: Linux }, device: { type: desktop } }
4
- readable: 'Nightingale 1.12.2 on Linux'
 
 
 
 
includes/vendor/whichbrowser/parser/tests/data/desktop/browser-arachne.yaml DELETED
@@ -1,8 +0,0 @@
1
- -
2
- headers: 'User-Agent: xChaos_Arachne/4.1.71;UE01 (DOS x86;WATTCP/1.05; 640x480,16c; www.arachne.cz)'
3
- result: { browser: { name: Arachne, version: '1.71', type: browser }, device: { type: desktop } }
4
- readable: 'Arachne 1.71'
5
- -
6
- headers: 'User-Agent: xChaos_Arachne/5.1.89;GPL,386+'
7
- result: { browser: { name: Arachne, version: '1.89', type: browser }, device: { type: desktop } }
8
- readable: 'Arachne 1.89'
 
 
 
 
 
 
 
 
includes/vendor/whichbrowser/parser/tests/data/desktop/browser-brave.yaml DELETED
@@ -1,12 +0,0 @@
1
- -
2
- headers: 'User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_2) AppleWebKit/537.36 (KHTML, like Gecko) brave/0.0.2 Chrome/47.0.2526.73 Electron/0.36.1 Safari/537.36'
3
- result: { browser: { name: Brave, using: { name: Electron, version: 0.36.1 }, family: { name: Chrome, version: 47 }, version: 0.0.2, type: browser }, engine: { name: Blink }, os: { name: 'OS X', version: { value: '10.11', nickname: 'El Capitan' } }, device: { type: desktop, manufacturer: Apple, model: Macintosh } }
4
- readable: 'Brave 0.0.2 on OS X El Capitan 10.11'
5
- -
6
- headers: 'User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_0) AppleWebKit/537.36 (KHTML, like Gecko) brave/0.7.7 Chrome/47.0.2526.73 Electron/0.36.2 Safari/537.36'
7
- result: { browser: { name: Brave, using: { name: Electron, version: 0.36.2 }, family: { name: Chrome, version: 47 }, version: 0.7.7, type: browser }, engine: { name: Blink }, os: { name: 'OS X', version: { value: '10.11', nickname: 'El Capitan' } }, device: { type: desktop, manufacturer: Apple, model: Macintosh } }
8
- readable: 'Brave 0.7.7 on OS X El Capitan 10.11'
9
- -
10
- headers: 'User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_2) AppleWebKit/537.36 (KHTML, like Gecko) brave/0.7.7 Chrome/47.0.2526.73 Electron/0.36.2 Safari/537.36'
11
- result: { browser: { name: Brave, using: { name: Electron, version: 0.36.2 }, family: { name: Chrome, version: 47 }, version: 0.7.7, type: browser }, engine: { name: Blink }, os: { name: 'OS X', version: { value: '10.11', nickname: 'El Capitan' } }, device: { type: desktop, manufacturer: Apple, model: Macintosh } }
12
- readable: 'Brave 0.7.7 on OS X El Capitan 10.11'
 
 
 
 
 
 
 
 
 
 
 
 
includes/vendor/whichbrowser/parser/tests/data/desktop/browser-chrome.yaml DELETED
@@ -1,64 +0,0 @@
1
- -
2
- headers: 'User-Agent: Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_5_8; en-US) AppleWebKit/532.0 (KHTML, like Gecko) Chrome/4.0.202.0 Safari/532.0'
3
- result: { browser: { name: Chrome, version: 4.0.202.0, type: browser }, engine: { name: Webkit, version: '532.0' }, os: { name: 'OS X', alias: 'Mac OS X', version: '10.5' }, device: { type: desktop, manufacturer: Apple, model: Macintosh } }
4
- readable: 'Chrome Dev 4.0.202.0 on Mac OS X 10.5'
5
- -
6
- headers: 'User-Agent: Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_2; en-US) AppleWebKit/533.4 (KHTML, like Gecko) Chrome/5.0.375.99 Safari/533.4'
7
- result: { browser: { name: Chrome, version: '5', type: browser }, engine: { name: Webkit, version: '533.4' }, os: { name: 'OS X', alias: 'Mac OS X', version: '10.6' }, device: { type: desktop, manufacturer: Apple, model: Macintosh } }
8
- readable: 'Chrome 5 on Mac OS X 10.6'
9
- -
10
- headers: 'User-Agent: Mozilla/5.0 (Windows NT 6.0) AppleWebKit/535.2 (KHTML, like Gecko) Chrome/15.0.874.120 Safari/535.2'
11
- result: { browser: { name: Chrome, version: '15', type: browser }, engine: { name: Webkit, version: '535.2' }, os: { name: Windows, version: { value: '6.0', alias: Vista } }, device: { type: desktop } }
12
- readable: 'Chrome 15 on Windows Vista'
13
- -
14
- headers: 'User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.0; en-US) AppleWebKit/525.13 (KHTML, like Gecko) Chrome/0.2.149.27 Safari/525.13'
15
- result: { browser: { name: Chrome, version: 0.2.149.27, type: browser }, engine: { name: Webkit, version: '525.13' }, os: { name: Windows, version: { value: '5.0', alias: '2000' } }, device: { type: desktop } }
16
- readable: 'Chrome Beta 0.2.149.27 on Windows 2000'
17
- -
18
- headers: 'User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/525.19 (KHTML, like Gecko) Chrome/0.2.153.0 Safari/525.19'
19
- result: { browser: { name: Chrome, version: 0.2.153.0, type: browser }, engine: { name: Webkit, version: '525.19' }, os: { name: Windows, version: { value: '5.1', alias: XP } }, device: { type: desktop } }
20
- readable: 'Chrome Dev 0.2.153.0 on Windows XP'
21
- -
22
- headers: 'User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/525.19 (KHTML, like Gecko) Chrome/0.4.154.18 Safari/525.19'
23
- result: { browser: { name: Chrome, version: 0.4.154.18, type: browser }, engine: { name: Webkit, version: '525.19' }, os: { name: Windows, version: { value: '5.1', alias: XP } }, device: { type: desktop } }
24
- readable: 'Chrome Beta 0.4.154.18 on Windows XP'
25
- -
26
- headers: 'User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/525.19 (KHTML, like Gecko) Chrome/1.0.154.39 Safari/525.19'
27
- result: { browser: { name: Chrome, version: '1', type: browser }, engine: { name: Webkit, version: '525.19' }, os: { name: Windows, version: { value: '5.1', alias: XP } }, device: { type: desktop } }
28
- readable: 'Chrome 1 on Windows XP'
29
- -
30
- headers: 'User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.2; en-US) AppleWebKit/525.13 (KHTML, like Gecko) Chrome/0.2.149.6 Safari/525.13'
31
- result: { browser: { name: Chrome, version: 0.2.149.6, type: browser }, engine: { name: Webkit, version: '525.13' }, os: { name: Windows, version: { value: '5.2', alias: 'Server 2003' } }, device: { type: desktop } }
32
- readable: 'Chrome Beta 0.2.149.6 on Windows Server 2003'
33
- -
34
- headers: 'User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.2; en-US) AppleWebKit/530.4 (KHTML, like Gecko) Chrome/2.0.172.0 Safari/530.4'
35
- result: { browser: { name: Chrome, version: '2', type: browser }, engine: { name: Webkit, version: '530.4' }, os: { name: Windows, version: { value: '5.2', alias: 'Server 2003' } }, device: { type: desktop } }
36
- readable: 'Chrome 2 on Windows Server 2003'
37
- -
38
- headers: 'User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US) AppleWebKit/525.19 (KHTML, like Gecko) Chrome/1.0.154.43 Safari/525.19'
39
- result: { browser: { name: Chrome, version: '1', type: browser }, engine: { name: Webkit, version: '525.19' }, os: { name: Windows, version: { value: '6.0', alias: Vista } }, device: { type: desktop } }
40
- readable: 'Chrome 1 on Windows Vista'
41
- -
42
- headers: 'User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US) AppleWebKit/528.8 (KHTML, like Gecko) Chrome/2.0.156.1 Safari/528.8'
43
- result: { browser: { name: Chrome, version: 2.0.156.1, type: browser }, engine: { name: Webkit, version: '528.8' }, os: { name: Windows, version: { value: '6.0', alias: Vista } }, device: { type: desktop } }
44
- readable: 'Chrome Dev 2.0.156.1 on Windows Vista'
45
- -
46
- headers: 'User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US) AppleWebKit/531.3 (KHTML, like Gecko) Chrome/3.0.193.2 Safari/531.3'
47
- result: { browser: { name: Chrome, version: 3.0.193.2, type: browser }, engine: { name: Webkit, version: '531.3' }, os: { name: Windows, version: { value: '6.0', alias: Vista } }, device: { type: desktop } }
48
- readable: 'Chrome Dev 3.0.193.2 on Windows Vista'
49
- -
50
- headers: 'User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/525.19 (KHTML, like Gecko) Chrome/0.3.154.9 Safari/525.19'
51
- result: { browser: { name: Chrome, version: 0.3.154.9, type: browser }, engine: { name: Webkit, version: '525.19' }, os: { name: Windows, version: { value: '6.1', alias: '7' } }, device: { type: desktop } }
52
- readable: 'Chrome Beta 0.3.154.9 on Windows 7'
53
- -
54
- headers: 'User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/532.5 (KHTML, like Gecko) Chrome/4.1.249.1025 Safari/532.5'
55
- result: { browser: { name: Chrome, version: '4.1', type: browser }, engine: { name: Webkit, version: '532.5' }, os: { name: Windows, version: { value: '6.1', alias: '7' } }, device: { type: desktop } }
56
- readable: 'Chrome 4.1 on Windows 7'
57
- -
58
- headers: 'User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; it-IT) AppleWebKit/532.5 (KHTML, like Gecko) Chrome/4.0.249.25 Safari/532.5'
59
- result: { browser: { name: Chrome, version: '4', type: browser }, engine: { name: Webkit, version: '532.5' }, os: { name: Windows, version: { value: '6.1', alias: '7' } }, device: { type: desktop } }
60
- readable: 'Chrome 4 on Windows 7'
61
- -
62
- headers: 'User-Agent: Mozilla/5.0 (X11; U; Linux x86_64; en-US) AppleWebKit/534.16 (KHTML, like Gecko) Chrome/10.0.648.11 Safari/534.16'
63
- result: { browser: { name: Chrome, version: '10', type: browser }, engine: { name: Webkit, version: '534.16' }, os: { name: Linux }, device: { type: desktop } }
64
- readable: 'Chrome 10 on Linux'
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
includes/vendor/whichbrowser/parser/tests/data/desktop/browser-chromium.yaml DELETED
@@ -1,52 +0,0 @@
1
- -
2
- headers: 'User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.6+ (KHTML, like Gecko) Chromium/17.0.963.56 Chrome/17.0.963.56 Safari/537.6+'
3
- result: { browser: { name: Chromium, family: { name: Chrome, version: 17 }, version: 17.0.963.56, type: browser }, engine: { name: Webkit, version: '537.6' }, os: { name: Windows, version: { value: '6.1', alias: '7' } }, device: { type: desktop } }
4
- readable: 'Chromium 17.0.963.56 on Windows 7'
5
- -
6
- headers: 'User-Agent: Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.6+ (KHTML, like Gecko) Chromium/23.0.1271.95 Chrome/23.0.1271.95 Safari/537.6+'
7
- result: { browser: { name: Chromium, family: { name: Chrome, version: 23 }, version: 23.0.1271.95, type: browser }, engine: { name: Webkit, version: '537.6' }, os: { name: Windows, version: { value: '6.2', alias: '8' } }, device: { type: desktop } }
8
- readable: 'Chromium 23.0.1271.95 on Windows 8'
9
- -
10
- headers: 'User-Agent: Mozilla/5.0 (X11; FreeBSD amd64) AppleWebKit/538.1 (KHTML, like Gecko) Chromium/25.0.1349.2 Chrome/25.0.1349.2 Safari/538.1'
11
- result: { browser: { name: Chromium, family: { name: Chrome, version: 25 }, version: 25.0.1349.2, type: browser }, engine: { name: Webkit, version: '538.1' }, os: { name: FreeBSD, family: BSD }, device: { type: desktop } }
12
- readable: 'Chromium 25.0.1349.2 on FreeBSD'
13
- -
14
- headers: 'User-Agent: Mozilla/5.0 (X11; Linux armv7l) AppleWebKit/535.22+ (KHTML, like Gecko) Chromium/17.0.963.56 Chrome/17.0.963.56 Safari/535.22+'
15
- result: { browser: { name: Chromium, family: { name: Chrome, version: 17 }, version: 17.0.963.56, type: browser }, engine: { name: Webkit, version: '535.22' }, os: { name: Linux }, device: { type: desktop } }
16
- readable: 'Chromium 17.0.963.56 on Linux'
17
- -
18
- headers: 'User-Agent: Mozilla/5.0 (X11; Linux armv7l) AppleWebKit/537.42+ (KHTML, like Gecko) Chromium/25.0.1349.2 Chrome/25.0.1349.2 Safari/537.42+'
19
- result: { browser: { name: Chromium, family: { name: Chrome, version: 25 }, version: 25.0.1349.2, type: browser }, engine: { name: Webkit, version: '537.42' }, os: { name: Linux }, device: { type: desktop } }
20
- readable: 'Chromium 25.0.1349.2 on Linux'
21
- -
22
- headers: 'User-Agent: Mozilla/5.0 (X11; Linux i686 (x86_64)) AppleWebKit/537.36 (KHTML, like Gecko) Ubuntu Chromium/33.0.1750.152 Chrome/33.0.1750.152 Safari/537.36'
23
- result: { browser: { name: Chromium, family: { name: Chrome, version: 33 }, version: 33.0.1750.152, type: browser }, engine: { name: Blink }, os: { name: Ubuntu }, device: { type: desktop } }
24
- readable: 'Chromium 33.0.1750.152 on Ubuntu'
25
- -
26
- headers: 'User-Agent: Mozilla/5.0 (X11; Linux i686) AppleWebKit/534.24 (KHTML, like Gecko) Ubuntu/11.04 Chromium/11.0.696.68 Chrome/11.0.696.68 Safari/534.24'
27
- result: { browser: { name: Chromium, family: { name: Chrome, version: 11 }, version: 11.0.696.68, type: browser }, engine: { name: Webkit, version: '534.24' }, os: { name: Ubuntu, version: '11.04' }, device: { type: desktop } }
28
- readable: 'Chromium 11.0.696.68 on Ubuntu 11.04'
29
- -
30
- headers: 'User-Agent: Mozilla/5.0 (X11; Linux i686) AppleWebKit/537.36 (KHTML, like Gecko) Ubuntu Chromium/29.0.1547.62 Chrome/29.0.1547.62 Safari/537.36'
31
- result: { browser: { name: Chromium, family: { name: Chrome, version: 29 }, version: 29.0.1547.62, type: browser }, engine: { name: Blink }, os: { name: Ubuntu }, device: { type: desktop } }
32
- readable: 'Chromium 29.0.1547.62 on Ubuntu'
33
- -
34
- headers: 'User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/535.2 (KHTML, like Gecko) Fedora/16 (NRCBBXGu8kHISSSeydKmMptKvoa0gMvZ1htgTp2WpNQ=) Chromium/21.0.1180.81 Chrome/21.0.1180.81 Safari/535.2'
35
- result: { browser: { name: Chromium, family: { name: Chrome, version: 21 }, version: 21.0.1180.81, type: browser }, engine: { name: Webkit, version: '535.2' }, os: { name: Fedora }, device: { type: desktop } }
36
- readable: 'Chromium 21.0.1180.81 on Fedora'
37
- -
38
- headers: 'User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Ubuntu Chromium/45.0.2454.7 Chrome/45.0.2454.7 Safari/537.36'
39
- result: { browser: { name: Chromium, family: { name: Chrome, version: 45 }, version: 45.0.2454.7, type: browser }, engine: { name: Blink }, os: { name: Ubuntu }, device: { type: desktop } }
40
- readable: 'Chromium 45.0.2454.7 on Ubuntu'
41
- -
42
- headers: 'User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.4 (KHTML, like Gecko) Chromium/18.0.1025.168 Chrome/18.0.1025.168 Safari/537.4'
43
- result: { browser: { name: Chromium, family: { name: Chrome, version: 18 }, version: 18.0.1025.168, type: browser }, engine: { name: Webkit, version: '537.4' }, os: { name: Linux }, device: { type: desktop } }
44
- readable: 'Chromium 18.0.1025.168 on Linux'
45
- -
46
- headers: 'User-Agent: Mozilla/5.0 (X11; U; Linux i686; xx) AppleWebKit/534.13 (KHTML, like Gecko) Ubuntu/10.10 Chromium/9.0.597.107 Chrome/9.0.597.107 Safari/534.13'
47
- result: { browser: { name: Chromium, family: { name: Chrome, version: 9 }, version: 9.0.597.107, type: browser }, engine: { name: Webkit, version: '534.13' }, os: { name: Ubuntu, version: '10.10' }, device: { type: desktop } }
48
- readable: 'Chromium 9.0.597.107 on Ubuntu 10.10'
49
- -
50
- headers: 'User-Agent: Mozilla/5.0 (Unknown; Linux mips) Chromium/25.0.1349.2'
51
- result: { browser: { name: Chromium, family: { name: Chrome, version: 25 }, version: 25.0.1349.2, type: browser }, os: { name: Linux }, device: { type: desktop } }
52
- readable: 'Chromium 25.0.1349.2 on Linux'
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
includes/vendor/whichbrowser/parser/tests/data/desktop/browser-edge.yaml DELETED
@@ -1,32 +0,0 @@
1
- -
2
- headers: 'User-Agent: Mozilla/5.0 (Windows NT 10.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.135 Safari/537.36 Edge/12.10162'
3
- result: { browser: { name: Edge, version: '12', type: browser }, engine: { name: EdgeHTML, version: '12.10162' }, os: { name: Windows, version: { value: '10.0', alias: '10' } }, device: { type: desktop } }
4
- readable: 'Edge 12 on Windows 10'
5
- -
6
- headers: 'User-Agent: Mozilla/5.0 (Windows NT 10.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.135 Safari/537.36 Edge/12.10240'
7
- result: { browser: { name: Edge, version: '12', type: browser }, engine: { name: EdgeHTML, version: '12.10240' }, os: { name: Windows, version: { value: '10.0', alias: '10' } }, device: { type: desktop } }
8
- readable: 'Edge 12 on Windows 10'
9
- -
10
- headers: 'User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.135 Safari/537.36 Edge/12.10525'
11
- result: { browser: { name: Edge, version: '12', type: browser }, engine: { name: EdgeHTML, version: '12.10525' }, os: { name: Windows, version: { value: '10.0', alias: '10' } }, device: { type: desktop } }
12
- readable: 'Edge 12 on Windows 10'
13
- -
14
- headers: 'User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2486.0 Safari/537.36 Edge/13.10537'
15
- result: { browser: { name: Edge, version: '13', type: browser }, engine: { name: EdgeHTML, version: '13.10537' }, os: { name: Windows, version: { value: '10.0', alias: '10' } }, device: { type: desktop } }
16
- readable: 'Edge 13 on Windows 10'
17
- -
18
- headers: 'User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.71 Safari/537.36 Edge/12.0'
19
- result: { browser: { name: Edge, version: '12', type: browser }, engine: { name: EdgeHTML, version: '12.0' }, os: { name: Windows, version: { value: '10.0', alias: '10' } }, device: { type: desktop } }
20
- readable: 'Edge 12 on Windows 10'
21
- -
22
- headers: 'User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.135 Safari/537.36 Edge/12.10240'
23
- result: { browser: { name: Edge, version: '12', type: browser }, engine: { name: EdgeHTML, version: '12.10240' }, os: { name: Windows, version: { value: '10.0', alias: '10' } }, device: { type: desktop } }
24
- readable: 'Edge 12 on Windows 10'
25
- -
26
- headers: 'User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.135 Safari/537.36 Edge/12.10514'
27
- result: { browser: { name: Edge, version: '12', type: browser }, engine: { name: EdgeHTML, version: '12.10514' }, os: { name: Windows, version: { value: '10.0', alias: '10' } }, device: { type: desktop } }
28
- readable: 'Edge 12 on Windows 10'
29
- -
30
- headers: 'User-Agent: Mozilla/5.0 (Windows NT 10.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2486.0 Safari/537.36 Edge/14.11111'
31
- result: { browser: { name: Edge, version: '14', type: browser }, engine: { name: EdgeHTML, version: '14.11111' }, os: { name: Windows, version: { value: '10.1', alias: '10' } }, device: { type: desktop } }
32
- readable: 'Edge 14 on Windows 10'
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
includes/vendor/whichbrowser/parser/tests/data/desktop/browser-firefox.yaml DELETED
@@ -1,256 +0,0 @@
1
- -
2
- headers: 'User-Agent: Mozilla/5.0 (BeOS; U; Haiku BePC; xx; rv:1.8.1.25pre) Gecko/20120930 BonEcho/2.0.0.22pre'
3
- result: { browser: { name: Firefox, version: 2.0.0.22, type: browser }, engine: { name: Gecko, version: 1.8.1 }, os: { name: Haiku }, device: { type: desktop } }
4
- readable: 'Firefox BonEcho 2.0.0.22 on Haiku'
5
- -
6
- headers: 'User-Agent: Mozilla/5.0 (ChoX11; U; RISC OS; xx; rv:1.8.1.20) Gecko/20090803 BonEcho/2.0.0.20'
7
- result: { browser: { name: Firefox, version: 2.0.0.20, type: browser }, engine: { name: Gecko, version: 1.8.1 }, os: { name: 'RISC OS' }, device: { type: desktop } }
8
- readable: 'Firefox BonEcho 2.0.0.20 on RISC OS'
9
- -
10
- headers: 'User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.8; rv:19.0) Gecko/20121220 Firefox/19.0'
11
- result: { browser: { name: Firefox, version: '19.0', type: browser }, engine: { name: Gecko, version: '19.0' }, os: { name: 'OS X', version: { value: '10.8', nickname: 'Mountain Lion' } }, device: { type: desktop, manufacturer: Apple, model: Macintosh } }
12
- readable: 'Firefox 19.0 on OS X Mountain Lion 10.8'
13
- -
14
- headers: 'User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.8; rv:20.0) Gecko/20130102 Firefox/20.0'
15
- result: { browser: { name: Firefox, version: '20.0', type: browser }, engine: { name: Gecko, version: '20.0' }, os: { name: 'OS X', version: { value: '10.8', nickname: 'Mountain Lion' } }, device: { type: desktop, manufacturer: Apple, model: Macintosh } }
16
- readable: 'Firefox 20.0 on OS X Mountain Lion 10.8'
17
- -
18
- headers: 'User-Agent: Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.8; xx; rv:1.9.0.19) Gecko/2010031218 Firefox/3.0.19'
19
- result: { browser: { name: Firefox, version: 3.0.19, type: browser }, engine: { name: Gecko, version: 1.9.0 }, os: { name: 'OS X', version: { value: '10.8', nickname: 'Mountain Lion' } }, device: { type: desktop, manufacturer: Apple, model: Macintosh } }
20
- readable: 'Firefox 3.0.19 on OS X Mountain Lion 10.8'
21
- -
22
- headers: 'User-Agent: Mozilla/5.0 (Macintosh; U; PPC Mac OS X Mach-O; xx; rv:1.8.0.12) Gecko/20070508 Firefox/1.5.0.12'
23
- result: { browser: { name: Firefox, version: 1.5.0.12, type: browser }, engine: { name: Gecko, version: 1.8.0 }, os: { name: 'OS X' }, device: { type: desktop, manufacturer: Apple, model: Macintosh } }
24
- readable: 'Firefox 1.5.0.12 on OS X'
25
- -
26
- headers: 'User-Agent: Mozilla/5.0 (Macintosh; U; PPC Mac OS X Mach-O; xx; rv:1.8.1.15) Gecko/20080623 Firefox/2.0.0.15'
27
- result: { browser: { name: Firefox, version: 2.0.0.15, type: browser }, engine: { name: Gecko, version: 1.8.1 }, os: { name: 'OS X' }, device: { type: desktop, manufacturer: Apple, model: Macintosh } }
28
- readable: 'Firefox 2.0.0.15 on OS X'
29
- -
30
- headers: 'User-Agent: Mozilla/5.0 (OS/2; U; Warp 3; xx; rv:1.8.1.17) Gecko/20080925 Firefox/2.0.0.17'
31
- result: { browser: { name: Firefox, version: 2.0.0.17, type: browser }, engine: { name: Gecko, version: 1.8.1 }, os: { name: OS/2, version: { value: '3', nickname: Warp } }, device: { type: desktop } }
32
- readable: 'Firefox 2.0.0.17 on OS/2 Warp 3'
33
- -
34
- headers: 'User-Agent: Mozilla/5.0 (OS/2; U; Warp 4.5; xx; rv:1.7.12) Gecko/20050922 Firefox/1.0.7'
35
- result: { browser: { name: Firefox, version: 1.0.7, type: browser }, engine: { name: Gecko, version: 1.7.12 }, os: { name: OS/2, version: { value: '4.5', nickname: Warp } }, device: { type: desktop } }
36
- readable: 'Firefox 1.0.7 on OS/2 Warp 4.5'
37
- -
38
- headers: 'User-Agent: Mozilla/5.0 (OS/2; U; Warp 4.5; xx; rv:1.8.1.11) Gecko/20071209 Firefox/2.0.0.11'
39
- result: { browser: { name: Firefox, version: 2.0.0.11, type: browser }, engine: { name: Gecko, version: 1.8.1 }, os: { name: OS/2, version: { value: '4.5', nickname: Warp } }, device: { type: desktop } }
40
- readable: 'Firefox 2.0.0.11 on OS/2 Warp 4.5'
41
- -
42
- headers: 'User-Agent: Mozilla/5.0 (OS/2; Warp 4.5; rv:10.0.9) Gecko/20100101 Firefox/10.0.9'
43
- result: { browser: { name: Firefox, version: 10.0.9, type: browser }, engine: { name: Gecko, version: 10.0.9 }, os: { name: OS/2, version: { value: '4.5', nickname: Warp } }, device: { type: desktop } }
44
- readable: 'Firefox 10.0.9 on OS/2 Warp 4.5'
45
- -
46
- headers: 'User-Agent: Mozilla/5.0 (OS/2; Warp 4.5; rv:17.0) Gecko/20100101 Firefox/17.0'
47
- result: { browser: { name: Firefox, version: '17.0', type: browser }, engine: { name: Gecko, version: '17.0' }, os: { name: OS/2, version: { value: '4.5', nickname: Warp } }, device: { type: desktop } }
48
- readable: 'Firefox 17.0 on OS/2 Warp 4.5'
49
- -
50
- headers: 'User-Agent: Mozilla/5.0 (OS/2; Warp 4.5; rv:31.0) Gecko/20100101 Firefox/31.0'
51
- result: { browser: { name: Firefox, version: '31.0', type: browser }, engine: { name: Gecko, version: '31.0' }, os: { name: OS/2, version: { value: '4.5', nickname: Warp } }, device: { type: desktop } }
52
- readable: 'Firefox 31.0 on OS/2 Warp 4.5'
53
- -
54
- headers: 'User-Agent: Mozilla/5.0 (OS/2; Warp 4.5; rv:6.0) Gecko/20100101 Firefox/6.0'
55
- result: { browser: { name: Firefox, version: '6.0', type: browser }, engine: { name: Gecko, version: '6.0' }, os: { name: OS/2, version: { value: '4.5', nickname: Warp } }, device: { type: desktop } }
56
- readable: 'Firefox 6.0 on OS/2 Warp 4.5'
57
- -
58
- headers: 'User-Agent: Mozilla/5.0 (Photon; U; QNX x86pc; xx; rv:1.8.1.20) Gecko/-0000001 BonEcho/2.0.0.20'
59
- result: { browser: { name: Firefox, version: 2.0.0.20, type: browser }, engine: { name: Gecko, version: 1.8.1 }, os: { name: QNX }, device: { type: mobile, subtype: feature } }
60
- readable: 'Firefox BonEcho 2.0.0.20 on QNX'
61
- -
62
- headers: 'User-Agent: Mozilla/5.0 (Photon; U; QNX x86pc; xx; rv:1.8.1.5pre) Gecko/20070709 BonEcho/2.0.0.5pre'
63
- result: { browser: { name: Firefox, version: 2.0.0.5, type: browser }, engine: { name: Gecko, version: 1.8.1 }, os: { name: QNX }, device: { type: mobile, subtype: feature } }
64
- readable: 'Firefox BonEcho 2.0.0.5 on QNX'
65
- -
66
- headers: 'User-Agent: Mozilla/5.0 (Windows NT 4.0; rv:35.0) Gecko/20100101 Firefox/35.0'
67
- result: { browser: { name: Firefox, version: '35.0', type: browser }, engine: { name: Gecko, version: '35.0' }, os: { name: Windows, version: { value: '4.0', alias: 'NT 4.0' } }, device: { type: desktop } }
68
- readable: 'Firefox 35.0 on Windows NT 4.0'
69
- -
70
- headers: 'User-Agent: Mozilla/5.0 (Windows NT 5.1; rv:13.0) Gecko/20120329 Firefox/13.0a2'
71
- result: { browser: { name: Firefox, version: 13.0a2, type: browser }, engine: { name: Gecko, version: '13.0' }, os: { name: Windows, version: { value: '5.1', alias: XP } }, device: { type: desktop } }
72
- readable: 'Firefox Aurora 13.0a2 on Windows XP'
73
- -
74
- headers: 'User-Agent: Mozilla/5.0 (Windows NT 5.1; rv:19.0) Gecko/19.0 Firefox/19.0'
75
- result: { browser: { name: Firefox, version: '19.0', type: browser }, engine: { name: Gecko, version: '19.0' }, os: { name: Windows, version: { value: '5.1', alias: XP } }, device: { type: desktop } }
76
- readable: 'Firefox 19.0 on Windows XP'
77
- -
78
- headers: 'User-Agent: Mozilla/5.0 (Windows NT 5.1; rv:2.0b6) Gecko/20100101 Firefox/4.0b6'
79
- result: { browser: { name: Firefox, version: 4.0b6, type: browser }, engine: { name: Gecko, version: 2.0b6 }, os: { name: Windows, version: { value: '5.1', alias: XP } }, device: { type: desktop } }
80
- readable: 'Firefox Beta 4.0b6 on Windows XP'
81
- -
82
- headers: 'User-Agent: Mozilla/5.0 (Windows NT 5.2; WOW64; rv:15.0) Gecko/20100101 Firefox/15.0'
83
- result: { browser: { name: Firefox, version: '15.0', type: browser }, engine: { name: Gecko, version: '15.0' }, os: { name: Windows, version: { value: '5.2', alias: 'Server 2003' } }, device: { type: desktop } }
84
- readable: 'Firefox 15.0 on Windows Server 2003'
85
- -
86
- headers: 'User-Agent: Mozilla/5.0 (Windows NT 6.0; rv:21.0) Gecko/20130113 Firefox/21.0'
87
- result: { browser: { name: Firefox, version: '21.0', type: browser }, engine: { name: Gecko, version: '21.0' }, os: { name: Windows, version: { value: '6.0', alias: Vista } }, device: { type: desktop } }
88
- readable: 'Firefox 21.0 on Windows Vista'
89
- -
90
- headers: 'User-Agent: Mozilla/5.0 (Windows NT 6.0; rv:3.0) Gecko/20100101 Firefox/3.0'
91
- result: { browser: { name: Firefox, version: '3.0', type: browser }, engine: { name: Gecko, version: '3.0' }, os: { name: Windows, version: { value: '6.0', alias: Vista } }, device: { type: desktop } }
92
- readable: 'Firefox 3.0 on Windows Vista'
93
- -
94
- headers: 'User-Agent: Mozilla/5.0 (Windows NT 6.0; rv:5.0) Gecko/20100101 Firefox/5.0'
95
- result: { browser: { name: Firefox, version: '5.0', type: browser }, engine: { name: Gecko, version: '5.0' }, os: { name: Windows, version: { value: '6.0', alias: Vista } }, device: { type: desktop } }
96
- readable: 'Firefox 5.0 on Windows Vista'
97
- -
98
- headers: 'User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:25.0) Gecko/20130627 Firefox/25.0'
99
- result: { browser: { name: Firefox, version: '25.0', type: browser }, engine: { name: Gecko, version: '25.0' }, os: { name: Windows, version: { value: '6.1', alias: '7' } }, device: { type: desktop } }
100
- readable: 'Firefox 25.0 on Windows 7'
101
- -
102
- headers: 'User-Agent: Mozilla/5.0 (Windows NT 6.1; rv:16.0) Gecko/16.0 Firefox/16.0'
103
- result: { browser: { name: Firefox, version: '16.0', type: browser }, engine: { name: Gecko, version: '16.0' }, os: { name: Windows, version: { value: '6.1', alias: '7' } }, device: { type: desktop } }
104
- readable: 'Firefox 16.0 on Windows 7'
105
- -
106
- headers: 'User-Agent: Mozilla/5.0 (Windows NT 6.1; rv:7.0) Gecko/20110814 Firefox/7.0'
107
- result: { browser: { name: Firefox, version: '7.0', type: browser }, engine: { name: Gecko, version: '7.0' }, os: { name: Windows, version: { value: '6.1', alias: '7' } }, device: { type: desktop } }
108
- readable: 'Firefox 7.0 on Windows 7'
109
- -
110
- headers: 'User-Agent: Mozilla/5.0 (Windows NT 6.2; rv:20.0) Gecko/20130129 Firefox/20.0'
111
- result: { browser: { name: Firefox, version: '20.0', type: browser }, engine: { name: Gecko, version: '20.0' }, os: { name: Windows, version: { value: '6.2', alias: '8' } }, device: { type: desktop } }
112
- readable: 'Firefox 20.0 on Windows 8'
113
- -
114
- headers: 'User-Agent: Mozilla/5.0 (Windows; U; Win95; xx; rv:1.7.13) Gecko/20060410 Firefox/1.0.8'
115
- result: { browser: { name: Firefox, version: 1.0.8, type: browser }, engine: { name: Gecko, version: 1.7.13 }, os: { name: Windows, version: { value: '4.0', alias: '95' } }, device: { type: desktop } }
116
- readable: 'Firefox 1.0.8 on Windows 95'
117
- -
118
- headers: 'User-Agent: Mozilla/5.0 (Windows; U; Win98; xx; rv:1.7.12) Gecko/20050915 Firefox/1.0.7'
119
- result: { browser: { name: Firefox, version: 1.0.7, type: browser }, engine: { name: Gecko, version: 1.7.12 }, os: { name: Windows, version: { value: '4.1', alias: '98' } }, device: { type: desktop } }
120
- readable: 'Firefox 1.0.7 on Windows 98'
121
- -
122
- headers: 'User-Agent: Mozilla/5.0 (Windows; U; WinNT4.0; xx; rv:1.8.1) Gecko/20061010 Firefox/2.0'
123
- result: { browser: { name: Firefox, version: '2.0', type: browser }, engine: { name: Gecko, version: 1.8.1 }, os: { name: Windows, version: { value: '4.0', alias: 'NT 4.0' } }, device: { type: desktop } }
124
- readable: 'Firefox 2.0 on Windows NT 4.0'
125
- -
126
- headers: 'User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; xx; rv:1.9.1.5pre) Gecko/20091017 Shiretoko/3.5.5pre'
127
- result: { browser: { name: Firefox, version: 3.5.5, type: browser }, engine: { name: Gecko, version: 1.9.1 }, os: { name: Windows, version: { value: '5.1', alias: XP } }, device: { type: desktop } }
128
- readable: 'Firefox Shiretoko 3.5.5 on Windows XP'
129
- -
130
- headers: 'User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.0; xx; rv:1.9.0.12) Gecko/2009070611 Firefox/3.0.12'
131
- result: { browser: { name: Firefox, version: 3.0.12, type: browser }, engine: { name: Gecko, version: 1.9.0 }, os: { name: Windows, version: { value: '6.0', alias: Vista } }, device: { type: desktop } }
132
- readable: 'Firefox 3.0.12 on Windows Vista'
133
- -
134
- headers: 'User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; xx; rv:1.5a) Gecko/20030728 Mozilla Firebird/0.6.1'
135
- result: { browser: { name: Firebird, family: { name: Firefox, version: 0.6.1 }, version: 0.6.1, type: browser }, engine: { name: Gecko, version: 1.5a }, os: { name: Windows, version: { value: '6.1', alias: '7' } }, device: { type: desktop } }
136
- readable: 'Firebird 0.6.1 on Windows 7'
137
- -
138
- headers: 'User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; xx; rv:1.8.1.22pre) Gecko/20090330 BonEcho/2.0.0.22pre'
139
- result: { browser: { name: Firefox, version: 2.0.0.22, type: browser }, engine: { name: Gecko, version: 1.8.1 }, os: { name: Windows, version: { value: '6.1', alias: '7' } }, device: { type: desktop } }
140
- readable: 'Firefox BonEcho 2.0.0.22 on Windows 7'
141
- -
142
- headers: 'User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; xx; rv:1.9.3a4pre) Gecko/20100405 Minefield/3.7a4pre'
143
- result: { browser: { name: Firefox, version: 3.7a4, type: browser }, engine: { name: Gecko, version: 1.9.3a4pre }, os: { name: Windows, version: { value: '6.1', alias: '7' } }, device: { type: desktop } }
144
- readable: 'Firefox Minefield 3.7a4 on Windows 7'
145
- -
146
- headers: 'User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.2; xx; rv:1.5) Gecko/20031006 Firebird/0.7'
147
- result: { browser: { name: Firebird, family: { name: Firefox, version: '0.7' }, version: '0.7', type: browser }, engine: { name: Gecko, version: '1.5' }, os: { name: Windows, version: { value: '6.2', alias: '8' } }, device: { type: desktop } }
148
- readable: 'Firebird 0.7 on Windows 8'
149
- -
150
- headers: 'User-Agent: Mozilla/5.0 (X11; Fedora; Linux x86_64; rv:41.0) Gecko/20100101 Firefox/41.0'
151
- result: { browser: { name: Firefox, version: '41.0', type: browser }, engine: { name: Gecko, version: '41.0' }, os: { name: Fedora }, device: { type: desktop } }
152
- readable: 'Firefox 41.0 on Fedora'
153
- -
154
- headers: 'User-Agent: Mozilla/5.0 (X11; FreeBSD amd64; rv:17.0) Gecko/201071 Firefox/17.0'
155
- result: { browser: { name: Firefox, version: '17.0', type: browser }, engine: { name: Gecko, version: '17.0' }, os: { name: FreeBSD, family: BSD }, device: { type: desktop } }
156
- readable: 'Firefox 17.0 on FreeBSD'
157
- -
158
- headers: 'User-Agent: Mozilla/5.0 (X11; FreeBSD amd64; rv:27.0) Gecko/20100101 Firefox/27.0'
159
- result: { browser: { name: Firefox, version: '27.0', type: browser }, engine: { name: Gecko, version: '27.0' }, os: { name: FreeBSD, family: BSD }, device: { type: desktop } }
160
- readable: 'Firefox 27.0 on FreeBSD'
161
- -
162
- headers: 'User-Agent: Mozilla/5.0 (X11; Linux x86_64) Gecko/20100101 Firefox/17.0'
163
- result: { browser: { name: Firefox, version: '17.0', type: browser }, engine: { name: Gecko }, os: { name: Linux }, device: { type: desktop } }
164
- readable: 'Firefox 17.0 on Linux'
165
- -
166
- headers: 'User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:20.0) Gecko/20130117 Firefox/20.0 Aurora/20.0a2'
167
- result: { browser: { name: Firefox, version: 20.0a2, type: browser }, engine: { name: Gecko, version: '20.0' }, os: { name: Linux }, device: { type: desktop } }
168
- readable: 'Firefox Aurora 20.0a2 on Linux'
169
- -
170
- headers: 'User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20130614 Firefox/24.0'
171
- result: { browser: { name: Firefox, version: '24.0', type: browser }, engine: { name: Gecko, version: '24.0' }, os: { name: Linux }, device: { type: desktop } }
172
- readable: 'Firefox 24.0 on Linux'
173
- -
174
- headers: 'User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20130717 Firefox/24.0 Aurora/24.0a2'
175
- result: { browser: { name: Firefox, version: 24.0a2, type: browser }, engine: { name: Gecko, version: '24.0' }, os: { name: Linux }, device: { type: desktop } }
176
- readable: 'Firefox Aurora 24.0a2 on Linux'
177
- -
178
- headers: 'User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:27.0) Gecko/20100101 Firefox/27.0 Aurora/27.0a2'
179
- result: { browser: { name: Firefox, version: 27.0a2, type: browser }, engine: { name: Gecko, version: '27.0' }, os: { name: Linux }, device: { type: desktop } }
180
- readable: 'Firefox Aurora 27.0a2 on Linux'
181
- -
182
- headers: 'User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:8.0) Gecko/20111218 Firefox/8.0'
183
- result: { browser: { name: Firefox, version: '8.0', type: browser }, engine: { name: Gecko, version: '8.0' }, os: { name: Linux }, device: { type: desktop } }
184
- readable: 'Firefox 8.0 on Linux'
185
- -
186
- headers: 'User-Agent: Mozilla/5.0 (X11; OpenBSD amd64; rv:12.0) Gecko/20100101 Firefox/12.0'
187
- result: { browser: { name: Firefox, version: '12.0', type: browser }, engine: { name: Gecko, version: '12.0' }, os: { name: OpenBSD, family: BSD }, device: { type: desktop } }
188
- readable: 'Firefox 12.0 on OpenBSD'
189
- -
190
- headers: 'User-Agent: Mozilla/5.0 (X11; OpenBSD i386; rv:25.0) Gecko/20100101 Firefox/25.0'
191
- result: { browser: { name: Firefox, version: '25.0', type: browser }, engine: { name: Gecko, version: '25.0' }, os: { name: OpenBSD, family: BSD }, device: { type: desktop } }
192
- readable: 'Firefox 25.0 on OpenBSD'
193
- -
194
- headers: 'User-Agent: Mozilla/5.0 (X11; OpenBSD i386; rv:8.0.1) Gecko/20100101 Firefox/8.0.1'
195
- result: { browser: { name: Firefox, version: 8.0.1, type: browser }, engine: { name: Gecko, version: 8.0.1 }, os: { name: OpenBSD, family: BSD }, device: { type: desktop } }
196
- readable: 'Firefox 8.0.1 on OpenBSD'
197
- -
198
- headers: 'User-Agent: Mozilla/5.0 (X11; Scientific Linux x86_64; rv:17.0) Red Hat/6.4 Gecko/20130917 Firefox/17.0'
199
- result: { browser: { name: Firefox, version: '17.0', type: browser }, engine: { name: Gecko, version: '17.0' }, os: { name: 'Red Hat' }, device: { type: desktop } }
200
- readable: 'Firefox 17.0 on Red Hat'
201
- -
202
- headers: 'User-Agent: Mozilla/5.0 (X11; SunOS i86pc; rv:2.0) Gecko/20100101 Firefox/4.0'
203
- result: { browser: { name: Firefox, version: '4.0', type: browser }, engine: { name: Gecko, version: '2.0' }, os: { name: Solaris, family: UNIX }, device: { type: desktop } }
204
- readable: 'Firefox 4.0 on Solaris'
205
- -
206
- headers: 'User-Agent: Mozilla/5.0 (X11; SunOS sun4u; rv:17.0) Gecko/17.0 Firefox/17.0'
207
- result: { browser: { name: Firefox, version: '17.0', type: browser }, engine: { name: Gecko, version: '17.0' }, os: { name: Solaris, family: UNIX }, device: { type: desktop } }
208
- readable: 'Firefox 17.0 on Solaris'
209
- -
210
- headers: 'User-Agent: Mozilla/5.0 (X11; U; Linux i686; xx; rv:1.8.1.18) Gecko/20110906 BonEcho/2.0.0.18'
211
- result: { browser: { name: Firefox, version: 2.0.0.18, type: browser }, engine: { name: Gecko, version: 1.8.1 }, os: { name: Linux }, device: { type: desktop } }
212
- readable: 'Firefox BonEcho 2.0.0.18 on Linux'
213
- -
214
- headers: 'User-Agent: Mozilla/5.0 (X11; U; Linux i686; xx; rv:1.9.1.7) Gecko/20100303 Shiretoko/3.5.7'
215
- result: { browser: { name: Firefox, version: 3.5.7, type: browser }, engine: { name: Gecko, version: 1.9.1 }, os: { name: Linux }, device: { type: desktop } }
216
- readable: 'Firefox Shiretoko 3.5.7 on Linux'
217
- -
218
- headers: 'User-Agent: Mozilla/5.0 (X11; U; Linux i686; xx; rv:1.9.1.9) Gecko/20100330 Fedora/3.5.9-2.fc12 Firefox/3.5.9'
219
- result: { browser: { name: Firefox, version: 3.5.9, type: browser }, engine: { name: Gecko, version: 1.9.1 }, os: { name: Fedora, version: '12' }, device: { type: desktop } }
220
- readable: 'Firefox 3.5.9 on Fedora 12'
221
- -
222
- headers: 'User-Agent: Mozilla/5.0 (X11; U; Linux i686; xx; rv:1.9b3pre) Gecko/2008020404 Minefield/3.0b3pre'
223
- result: { browser: { name: Firefox, version: 3.0b3, type: browser }, engine: { name: Gecko, version: 1.9b3pre }, os: { name: Linux }, device: { type: desktop } }
224
- readable: 'Firefox Minefield 3.0b3 on Linux'
225
- -
226
- headers: 'User-Agent: Mozilla/5.0 (X11; U; OpenVMS HP_rx2660__(1.42GHz/6.0MB); xx; rv:1.8.1.18) Gecko/20081201 BonEcho/2.0.0.18'
227
- result: { browser: { name: Firefox, version: 2.0.0.18, type: browser }, engine: { name: Gecko, version: 1.8.1 }, os: { name: OpenVMS }, device: { type: desktop } }
228
- readable: 'Firefox BonEcho 2.0.0.18 on OpenVMS'
229
- -
230
- headers: 'User-Agent: Mozilla/5.0 (X11; U; QNX x86pc; xx; rv:1.9.2.15) Gecko/20110316 Namoroka/3.6.15'
231
- result: { browser: { name: Firefox, version: 3.6.15, type: browser }, engine: { name: Gecko, version: 1.9.2 }, os: { name: QNX }, device: { type: mobile, subtype: feature } }
232
- readable: 'Firefox Namoroka 3.6.15 on QNX'
233
- -
234
- headers: 'User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:15.0) Gecko/20120426 Firefox/15.0a1'
235
- result: { browser: { name: Firefox, version: 15.0a1, type: browser }, engine: { name: Gecko, version: '15.0' }, os: { name: Ubuntu }, device: { type: desktop } }
236
- readable: 'Firefox Aurora 15.0a1 on Ubuntu'
237
- -
238
- headers: 'User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:37.0) Gecko/20100101 Firefox/37.0'
239
- result: { browser: { name: Firefox, version: '37.0', type: browser }, engine: { name: Gecko, version: '37.0' }, os: { name: Ubuntu }, device: { type: desktop } }
240
- readable: 'Firefox 37.0 on Ubuntu'
241
- -
242
- headers: 'User-Agent: Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.0.3) Gecko/2008100314 GranParadiso/3.0.3'
243
- result: { browser: { name: Firefox, version: 3.0.3, type: browser }, engine: { name: Gecko, version: 1.9.0 }, os: { name: Linux }, device: { type: desktop } }
244
- readable: 'Firefox Gran Paradiso 3.0.3 on Linux'
245
- -
246
- headers: 'User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:33.0) Gecko/20100101 Firefox/33.0 Slackware/14.1'
247
- result: { browser: { name: Firefox, version: '33.0', type: browser }, engine: { name: Gecko, version: '33.0' }, os: { name: Slackware, version: '14.1' }, device: { type: desktop } }
248
- readable: 'Firefox 33.0 on Slackware 14.1'
249
- -
250
- headers: 'User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.2b) Gecko/20021029 Phoenix/0.4'
251
- result: { browser: { name: Phoenix, version: '0.4', type: browser }, engine: { name: Gecko, version: 1.2b }, os: { name: Linux }, device: { type: desktop } }
252
- readable: 'Phoenix 0.4 on Linux'
253
- -
254
- headers: 'User-Agent: Mozilla/5.0 (X11; U; Darwin i386; en-US; rv:1.9.1.4) Gecko/20100311 Shiretoko/3.5.5'
255
- readable: 'Firefox Shiretoko 3.5.5 on Darwin'
256
- result: { browser: { name: Firefox, version: 3.5.5, type: browser }, engine: { name: Gecko, version: 1.9.1 }, os: { name: Darwin }, device: { type: desktop } }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
includes/vendor/whichbrowser/parser/tests/data/desktop/browser-icab.yaml DELETED
@@ -1,40 +0,0 @@
1
- -
2
- headers: 'User-Agent: iCab J/2.8.2 (Macintosh; U; PPC)'
3
- result: { browser: { name: iCab, version: 2.8.2, type: browser }, os: { name: 'Mac OS' }, device: { type: desktop, manufacturer: Apple, model: Macintosh } }
4
- readable: 'iCab 2.8.2 on Mac OS'
5
- -
6
- headers: 'User-Agent: iCab J/2.9.8 (Macintosh; U; PPC; Mac OS X)'
7
- result: { browser: { name: iCab, version: 2.9.8, type: browser }, os: { name: 'OS X' }, device: { type: desktop, manufacturer: Apple, model: Macintosh } }
8
- readable: 'iCab 2.9.8 on OS X'
9
- -
10
- headers: 'User-Agent: iCab/2.9 (Macintosh; U; PPC)'
11
- result: { browser: { name: iCab, version: '2.9', type: browser }, os: { name: 'Mac OS' }, device: { type: desktop, manufacturer: Apple, model: Macintosh } }
12
- readable: 'iCab 2.9 on Mac OS'
13
- -
14
- headers: 'User-Agent: iCab/2.9 (Macintosh; U; PPC; Mac OS X)'
15
- result: { browser: { name: iCab, version: '2.9', type: browser }, os: { name: 'OS X' }, device: { type: desktop, manufacturer: Apple, model: Macintosh } }
16
- readable: 'iCab 2.9 on OS X'
17
- -
18
- headers: 'User-Agent: iCab/5.0 (Macintosh; U; Intel Mac OS X)'
19
- result: { browser: { name: iCab, version: '5.0', type: browser }, os: { name: 'OS X' }, device: { type: desktop, manufacturer: Apple, model: Macintosh } }
20
- readable: 'iCab 5.0 on OS X'
21
- -
22
- headers: 'User-Agent: iCab/5.0 (Macintosh; U; PPC Mac OS X)'
23
- result: { browser: { name: iCab, version: '5.0', type: browser }, os: { name: 'OS X' }, device: { type: desktop, manufacturer: Apple, model: Macintosh } }
24
- readable: 'iCab 5.0 on OS X'
25
- -
26
- headers: 'User-Agent: iCab/5.0 CFNetwork/454.12.4 Darwin/10.8.0 (i386) (iMac7%2C1)'
27
- result: { browser: { name: iCab, version: '5.0', type: browser }, os: { name: 'OS X', alias: 'Mac OS X', version: 10.6.8 }, device: { type: desktop, manufacturer: Apple, model: Macintosh } }
28
- readable: 'iCab 5.0 on Mac OS X 10.6.8'
29
- -
30
- headers: 'User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/600.1.25 (KHTML, like Gecko) iCab/5.5 Safari/533.16'
31
- result: { browser: { name: iCab, version: '5.5', type: browser }, engine: { name: Webkit, version: 600.1.25 }, os: { name: 'OS X', version: { value: '10.10', nickname: Yosemite } }, device: { type: desktop, manufacturer: Apple, model: Macintosh } }
32
- readable: 'iCab 5.5 on OS X Yosemite 10.10'
33
- -
34
- headers: 'User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_2) AppleWebKit/534.52.7 (KHTML, like Gecko) iCab/4.8 Safari/533.16'
35
- result: { browser: { name: iCab, version: '4.8', type: browser }, engine: { name: Webkit, version: 534.52.7 }, os: { name: 'OS X', version: { value: '10.7', nickname: Lion } }, device: { type: desktop, manufacturer: Apple, model: Macintosh } }
36
- readable: 'iCab 4.8 on OS X Lion 10.7'
37
- -
38
- headers: 'User-Agent: Mozilla/5.0 (Macintosh; U; PPC Mac OS X; xx) AppleWebKit/523.10.3 (KHTML, like Gecko) iCab/4.9 Safari/533.16'
39
- result: { browser: { name: iCab, version: '4.9', type: browser }, engine: { name: Webkit, version: 523.10.3 }, os: { name: 'OS X' }, device: { type: desktop, manufacturer: Apple, model: Macintosh } }
40
- readable: 'iCab 4.9 on OS X'
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
includes/vendor/whichbrowser/parser/tests/data/desktop/browser-ie.yaml DELETED
@@ -1,104 +0,0 @@
1
- -
2
- headers: 'User-Agent: Mozilla/1.0 (compatible; MSIE 1.0; Windows 95)'
3
- result: { browser: { name: 'Internet Explorer', version: '1.0', type: browser }, os: { name: Windows, version: { value: '4.0', alias: '95' } }, device: { type: desktop } }
4
- readable: 'Internet Explorer 1.0 on Windows 95'
5
- -
6
- headers: 'User-Agent: Mozilla/1.22 (compatible; MSIE 2.0; Windows 95)'
7
- result: { browser: { name: 'Internet Explorer', version: '2.0', type: browser }, os: { name: Windows, version: { value: '4.0', alias: '95' } }, device: { type: desktop } }
8
- readable: 'Internet Explorer 2.0 on Windows 95'
9
- -
10
- headers: 'User-Agent: Mozilla/2.0 (compatible; MSIE 2.1; Mac_PowerPC)'
11
- result: { browser: { name: 'Internet Explorer', version: '2.1', type: browser }, engine: { name: Tasman }, os: { name: 'Mac OS' }, device: { type: desktop, manufacturer: Apple, model: Macintosh } }
12
- readable: 'Internet Explorer 2.1 on Mac OS'
13
- -
14
- headers: 'User-Agent: Mozilla/2.0 (compatible; MSIE 3.01; Windows 95)'
15
- result: { browser: { name: 'Internet Explorer', version: 3.0.1, type: browser }, os: { name: Windows, version: { value: '4.0', alias: '95' } }, device: { type: desktop } }
16
- readable: 'Internet Explorer 3.0.1 on Windows 95'
17
- -
18
- headers: 'User-Agent: Mozilla/2.0 (compatible; MSIE 3.02; Update a; AOL 3.0; Windows 95)'
19
- result: { browser: { name: 'Internet Explorer', version: 3.0.2, type: browser }, os: { name: Windows, version: { value: '4.0', alias: '95' } }, device: { type: desktop } }
20
- readable: 'Internet Explorer 3.0.2 on Windows 95'
21
- -
22
- headers: 'User-Agent: Mozilla/2.0 (compatible; MSIE 3.0; Windows 3.1)'
23
- result: { browser: { name: 'Internet Explorer', version: '3.0', type: browser }, os: { name: Windows, version: '3.1' }, device: { type: desktop } }
24
- readable: 'Internet Explorer 3.0 on Windows 3.1'
25
- -
26
- headers: 'User-Agent: Mozilla/2.0 (compatible; MSIE 4.0; Windows 98)'
27
- result: { browser: { name: 'Internet Explorer', version: '4.0', type: browser }, engine: { name: Trident }, os: { name: Windows, version: { value: '4.1', alias: '98' } }, device: { type: desktop } }
28
- readable: 'Internet Explorer 4.0 on Windows 98'
29
- -
30
- headers: 'User-Agent: Mozilla/4.0 (compatible; MSIE 4.01; Mac_PowerPC)'
31
- result: { browser: { name: 'Internet Explorer', version: 4.0.1, type: browser }, engine: { name: Tasman }, os: { name: 'Mac OS' }, device: { type: desktop, manufacturer: Apple, model: Macintosh } }
32
- readable: 'Internet Explorer 4.0.1 on Mac OS'
33
- -
34
- headers: 'User-Agent: Mozilla/4.0 (compatible; MSIE 4.01; Mac_PowerPC)'
35
- result: { browser: { name: 'Internet Explorer', version: 4.0.1, type: browser }, engine: { name: Tasman }, os: { name: 'Mac OS' }, device: { type: desktop, manufacturer: Apple, model: Macintosh } }
36
- readable: 'Internet Explorer 4.0.1 on Mac OS'
37
- -
38
- headers: 'User-Agent: Mozilla/4.0 (compatible; MSIE 4.5; Mac_PowerPC)'
39
- result: { browser: { name: 'Internet Explorer', version: '4.5', type: browser }, engine: { name: Tasman }, os: { name: 'Mac OS' }, device: { type: desktop, manufacturer: Apple, model: Macintosh } }
40
- readable: 'Internet Explorer 4.5 on Mac OS'
41
- -
42
- headers: 'User-Agent: Mozilla/4.0 (compatible; MSIE 5.0; SunOS 5.10 sun4u; X11)'
43
- result: { browser: { name: 'Internet Explorer', version: '5.0', type: browser }, engine: { name: Trident }, os: { name: Solaris, family: UNIX, version: '10' }, device: { type: desktop } }
44
- readable: 'Internet Explorer 5.0 on Solaris 10'
45
- -
46
- headers: 'User-Agent: Mozilla/4.0 (compatible; MSIE 5.0b1; Mac_PowerPC)'
47
- result: { browser: { name: 'Internet Explorer', version: '5.0', type: browser }, engine: { name: Tasman }, os: { name: 'Mac OS' }, device: { type: desktop, manufacturer: Apple, model: Macintosh } }
48
- readable: 'Internet Explorer 5.0 on Mac OS'
49
- -
50
- headers: 'User-Agent: Mozilla/4.0 (compatible; MSIE 5.12; Mac_PowerPC)'
51
- result: { browser: { name: 'Internet Explorer', version: 5.1.2, type: browser }, engine: { name: Tasman }, os: { name: 'OS X' }, device: { type: desktop, manufacturer: Apple, model: Macintosh } }
52
- readable: 'Internet Explorer 5.1.2 on OS X'
53
- -
54
- headers: 'User-Agent: Mozilla/4.0 (compatible; MSIE 5.22; Mac_PowerPC)'
55
- result: { browser: { name: 'Internet Explorer', version: 5.2.2, type: browser }, engine: { name: Tasman }, os: { name: 'OS X' }, device: { type: desktop, manufacturer: Apple, model: Macintosh } }
56
- readable: 'Internet Explorer 5.2.2 on OS X'
57
- -
58
- headers: 'User-Agent: Mozilla/4.0 (compatible; MSIE 5.5; Windows 98; Win 9x 4.90)'
59
- result: { browser: { name: 'Internet Explorer', version: '5.5', type: browser }, engine: { name: Trident }, os: { name: Windows, version: { value: '4.9', alias: ME } }, device: { type: desktop } }
60
- readable: 'Internet Explorer 5.5 on Windows ME'
61
- -
62
- headers: 'User-Agent: Mozilla/4.0 (compatible; MSIE 5.5; Windows NT 5.0 )'
63
- result: { browser: { name: 'Internet Explorer', version: '5.5', type: browser }, engine: { name: Trident }, os: { name: Windows, version: { value: '5.0', alias: '2000' } }, device: { type: desktop } }
64
- readable: 'Internet Explorer 5.5 on Windows 2000'
65
- -
66
- headers: 'User-Agent: Mozilla/4.0 (compatible; MSIE 5.5b1; Mac_PowerPC)'
67
- result: { browser: { name: 'Internet Explorer', version: '5.5', type: browser }, engine: { name: Tasman }, os: { name: 'OS X' }, device: { type: desktop, manufacturer: Apple, model: Macintosh } }
68
- readable: 'Internet Explorer 5.5 on OS X'
69
- -
70
- headers: 'User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows 98; Win 9x 4.90; .NET CLR 1.1.4322)'
71
- result: { browser: { name: 'Internet Explorer', version: '6.0', type: browser }, engine: { name: Trident }, os: { name: Windows, version: { value: '4.9', alias: ME } }, device: { type: desktop } }
72
- readable: 'Internet Explorer 6.0 on Windows ME'
73
- -
74
- headers: 'User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; InfoPath.1)'
75
- result: { browser: { name: 'Internet Explorer', version: '6.0', type: browser }, engine: { name: Trident }, os: { name: Windows, version: { value: '5.0', alias: '2000' } }, device: { type: desktop } }
76
- readable: 'Internet Explorer 6.0 on Windows 2000'
77
- -
78
- headers: 'User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; InfoPath.3; .NET4.0C; .NET4.0E)'
79
- result: { browser: { name: 'Internet Explorer', version: '8.0', type: browser }, engine: { name: Trident, version: '4.0' }, os: { name: Windows, version: { value: '6.1', alias: '7' } }, device: { type: desktop } }
80
- readable: 'Internet Explorer 8.0 on Windows 7'
81
- -
82
- headers: 'User-Agent: Mozilla/5.0 (IE 11.0; Windows NT 6.2; WOW64; Trident/7.0; .NET4.0E; .NET4.0C; rv:11.0) like Gecko'
83
- result: { browser: { name: 'Internet Explorer', version: '11.0', type: browser }, engine: { name: Trident, version: '7.0' }, os: { name: Windows, version: { value: '6.2', alias: '8' } }, device: { type: desktop } }
84
- readable: 'Internet Explorer 11.0 on Windows 8'
85
- -
86
- headers: 'User-Agent: Mozilla/5.0 (IE 11.0; Windows NT 6.3; WOW64; Trident/7.0; rv:11.0) like Gecko'
87
- result: { browser: { name: 'Internet Explorer', version: '11.0', type: browser }, engine: { name: Trident, version: '7.0' }, os: { name: Windows, version: { value: '6.3', alias: '8.1' } }, device: { type: desktop } }
88
- readable: 'Internet Explorer 11.0 on Windows 8.1'
89
- -
90
- headers: 'User-Agent: Mozilla/5.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/5.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E)'
91
- result: { browser: { name: 'Internet Explorer', version: '9.0', type: browser }, engine: { name: Trident, version: '5.0' }, os: { name: Windows, version: { value: '6.1', alias: '7' } }, device: { type: desktop } }
92
- readable: 'Internet Explorer 9.0 on Windows 7'
93
- -
94
- headers: 'User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/6.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET4.0C; .NET4.0E; MALN)'
95
- result: { browser: { name: 'Internet Explorer', version: '10.0', type: browser }, engine: { name: Trident, version: '6.0' }, os: { name: Windows, version: { value: '6.1', alias: '7' } }, device: { type: desktop, manufacturer: Lenovo } }
96
- readable: 'Internet Explorer 10.0 on Windows 7'
97
- -
98
- headers: 'User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/7.0)'
99
- result: { browser: { name: 'Internet Explorer', version: '11.0', type: browser }, engine: { name: Trident, version: '7.0' }, os: { name: Windows, version: { value: '6.1', alias: '7' } }, device: { type: desktop } }
100
- readable: 'Internet Explorer 11.0 on Windows 7'
101
- -
102
- headers: 'User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 10.0; Trident/8.0; .NET4.0C; .NET4.0E; .NET CLR 2.0.50727; .NET CLR 3.0.30729; .NET CLR 3.5.30729; SLCC2)'
103
- readable: 'Internet Explorer 11.0 on Windows 10'
104
- result: { browser: { name: 'Internet Explorer', version: '11.0', type: browser }, engine: { name: Trident, version: '8.0' }, os: { name: Windows, version: { value: '10.0', alias: '10' } }, device: { type: desktop } }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
includes/vendor/whichbrowser/parser/tests/data/desktop/browser-konqueror.yaml DELETED
@@ -1,80 +0,0 @@
1
- -
2
- headers: 'User-Agent: Mozilla/5.0 (X11) KHTML/4.14.3 (like Gecko) Konqueror/4.14'
3
- result: { browser: { name: Konqueror, version: '4.14', type: browser }, engine: { name: KHTML, version: 4.14.3 }, device: { type: desktop } }
4
- readable: 'Konqueror 4.14'
5
- -
6
- headers: 'User-Agent: Mozilla/5.0 (X11; BSD Four) AppleWebKit/534.34 (KHTML, like Gecko) konqueror/4.10.5 Safari/534.34'
7
- result: { browser: { name: Konqueror, version: 4.10.5, type: browser }, engine: { name: Webkit, version: '534.34' }, device: { type: desktop } }
8
- readable: 'Konqueror 4.10.5'
9
- -
10
- headers: 'User-Agent: Mozilla/5.0 (X11; Cygwin) AppleWebKit/534.34 (KHTML, like Gecko) konqueror/4.13.3 Safari/534.34'
11
- result: { browser: { name: Konqueror, version: 4.13.3, type: browser }, engine: { name: Webkit, version: '534.34' }, device: { type: desktop } }
12
- readable: 'Konqueror 4.13.3'
13
- -
14
- headers: 'User-Agent: Mozilla/5.0 (X11; FreeBSD amd64) KHTML/4.12.4 (like Gecko) Konqueror/4.12'
15
- result: { browser: { name: Konqueror, version: '4.12', type: browser }, engine: { name: KHTML, version: 4.12.4 }, os: { name: FreeBSD, family: BSD }, device: { type: desktop } }
16
- readable: 'Konqueror 4.12 on FreeBSD'
17
- -
18
- headers: 'User-Agent: Mozilla/5.0 (X11; FreeBSD) KHTML/4.9.1 (like Gecko) Konqueror/4.9'
19
- result: { browser: { name: Konqueror, version: '4.9', type: browser }, engine: { name: KHTML, version: 4.9.1 }, os: { name: FreeBSD, family: BSD }, device: { type: desktop } }
20
- readable: 'Konqueror 4.9 on FreeBSD'
21
- -
22
- headers: 'User-Agent: Mozilla/5.0 (X11; Linux 3.13.0-30-generic) KHTML/4.13.2 (like Gecko) Konqueror/4.13'
23
- result: { browser: { name: Konqueror, version: '4.13', type: browser }, engine: { name: KHTML, version: 4.13.2 }, os: { name: Linux }, device: { type: desktop } }
24
- readable: 'Konqueror 4.13 on Linux'
25
- -
26
- headers: 'User-Agent: Mozilla/5.0 (X11; Linux 3.15.3-1-ARCH x86_64) KHTML/4.13.2 (like Gecko) Konqueror/4.13'
27
- result: { browser: { name: Konqueror, version: '4.13', type: browser }, engine: { name: KHTML, version: 4.13.2 }, os: { name: Linux }, device: { type: desktop } }
28
- readable: 'Konqueror 4.13 on Linux'
29
- -
30
- headers: 'User-Agent: Mozilla/5.0 (X11; Linux ; xx) AppleWebKit/534.34 (KHTML, like Gecko) konqueror/4.11.5 Safari/534.34'
31
- result: { browser: { name: Konqueror, version: 4.11.5, type: browser }, engine: { name: Webkit, version: '534.34' }, os: { name: Linux }, device: { type: desktop } }
32
- readable: 'Konqueror 4.11.5 on Linux'
33
- -
34
- headers: 'User-Agent: Mozilla/5.0 (X11; Linux armv7l) KHTML/4.10.4 (like Gecko) Konqueror/4.10'
35
- result: { browser: { name: Konqueror, version: '4.10', type: browser }, engine: { name: KHTML, version: 4.10.4 }, os: { name: Linux }, device: { type: desktop } }
36
- readable: 'Konqueror 4.10 on Linux'
37
- -
38
- headers: 'User-Agent: Mozilla/5.0 (X11; Linux i686) AppleWebKit/534.34 (KHTML, like Gecko) konqueror/4.14.1 Safari/534.34'
39
- result: { browser: { name: Konqueror, version: 4.14.1, type: browser }, engine: { name: Webkit, version: '534.34' }, os: { name: Linux }, device: { type: desktop } }
40
- readable: 'Konqueror 4.14.1 on Linux'
41
- -
42
- headers: 'User-Agent: Mozilla/5.0 (X11; Linux i686) KHTML/4.8.2 (like Gecko) Konqueror/4.8'
43
- result: { browser: { name: Konqueror, version: '4.8', type: browser }, engine: { name: KHTML, version: 4.8.2 }, os: { name: Linux }, device: { type: desktop } }
44
- readable: 'Konqueror 4.8 on Linux'
45
- -
46
- headers: 'User-Agent: Mozilla/5.0 (X11; Linux x86_64) KHTML/4.10.4 (like Gecko) Konqueror/4.10 Fedora/4.10.4-1.fc18'
47
- result: { browser: { name: Konqueror, version: '4.10', type: browser }, engine: { name: KHTML, version: 4.10.4 }, os: { name: Fedora, version: '18' }, device: { type: desktop } }
48
- readable: 'Konqueror 4.10 on Fedora 18'
49
- -
50
- headers: 'User-Agent: Mozilla/5.0 (X11; Linux x86_64; en_US) KHTML/4.13.0 (like Gecko) Konqueror/4.13'
51
- result: { browser: { name: Konqueror, version: '4.13', type: browser }, engine: { name: KHTML, version: 4.13.0 }, os: { name: Linux }, device: { type: desktop } }
52
- readable: 'Konqueror 4.13 on Linux'
53
- -
54
- headers: 'User-Agent: Mozilla/5.0 (X11; Linux x86_64; xx) AppleWebKit/534.34 (KHTML, like Gecko) konqueror/4.14.2 Safari/534.34'
55
- result: { browser: { name: Konqueror, version: 4.14.2, type: browser }, engine: { name: Webkit, version: '534.34' }, os: { name: Linux }, device: { type: desktop } }
56
- readable: 'Konqueror 4.14.2 on Linux'
57
- -
58
- headers: 'User-Agent: Mozilla/5.0 (compatible; Konqueror/3.5; Linux) KHTML/3.5.10 (like Gecko) SUSE'
59
- result: { browser: { name: Konqueror, version: '3.5', type: browser }, engine: { name: KHTML, version: 3.5.10 }, os: { name: SUSE }, device: { type: desktop } }
60
- readable: 'Konqueror 3.5 on SUSE'
61
- -
62
- headers: 'User-Agent: Mozilla/5.0 (compatible; Konqueror/3.5; Linux) KHTML/3.5.7 (like Gecko)'
63
- result: { browser: { name: Konqueror, version: '3.5', type: browser }, engine: { name: KHTML, version: 3.5.7 }, os: { name: Linux }, device: { type: desktop } }
64
- readable: 'Konqueror 3.5 on Linux'
65
- -
66
- headers: 'User-Agent: Mozilla/5.0 (compatible; Konqueror/4.2; Linux) KHTML/4.2.4 (like Gecko)'
67
- result: { browser: { name: Konqueror, version: '4.2', type: browser }, engine: { name: KHTML, version: 4.2.4 }, os: { name: Linux }, device: { type: desktop } }
68
- readable: 'Konqueror 4.2 on Linux'
69
- -
70
- headers: 'User-Agent: Mozilla/5.0 (compatible; Konqueror/4.5; Linux) KHTML/4.5.5 (like Gecko)'
71
- result: { browser: { name: Konqueror, version: '4.5', type: browser }, engine: { name: KHTML, version: 4.5.5 }, os: { name: Linux }, device: { type: desktop } }
72
- readable: 'Konqueror 4.5 on Linux'
73
- -
74
- headers: 'User-Agent: Mozilla/5.0 (compatible; Konqueror/4.6; Linux) KHTML/4.6.5 (like Gecko) Fedora/4.6.5-8.fc14'
75
- result: { browser: { name: Konqueror, version: '4.6', type: browser }, engine: { name: KHTML, version: 4.6.5 }, os: { name: Fedora, version: '14' }, device: { type: desktop } }
76
- readable: 'Konqueror 4.6 on Fedora 14'
77
- -
78
- headers: 'User-Agent: Mozilla/5.0 (compatible; Konqueror/4.6; Linux; X11; x86_64; xx) KHTML/4.6.5 (like Gecko) Mageia/4.6.5-1.7.mga1'
79
- result: { browser: { name: Konqueror, version: '4.6', type: browser }, engine: { name: KHTML, version: 4.6.5 }, os: { name: Mageia, version: '1' }, device: { type: desktop } }
80
- readable: 'Konqueror 4.6 on Mageia 1'
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
includes/vendor/whichbrowser/parser/tests/data/desktop/browser-maxthon.yaml DELETED
@@ -1,136 +0,0 @@
1
- -
2
- headers: 'User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; QQDownload 691; Maxthon; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)'
3
- result: { browser: { name: Maxthon, type: browser }, os: { name: Windows, version: { value: '5.1', alias: XP } }, device: { type: desktop } }
4
- readable: 'Maxthon on Windows XP'
5
- -
6
- headers: 'User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; Trident/4.0; .NET CLR 1.1.4322; MAXTHON 2.0)'
7
- result: { browser: { name: Maxthon, version: '2', type: browser }, engine: { name: Trident, version: '4.0' }, os: { name: Windows, version: { value: '5.1', alias: XP } }, device: { type: desktop } }
8
- readable: 'Maxthon 2 on Windows XP'
9
- -
10
- headers: 'User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; WOW64; Trident/4.0; .NET4.0E; .NET4.0C; InfoPath.3; MAXTHON)'
11
- result: { browser: { name: Maxthon, type: browser }, engine: { name: Trident, version: '4.0' }, os: { name: Windows, version: { value: '5.1', alias: XP } }, device: { type: desktop } }
12
- readable: 'Maxthon on Windows XP'
13
- -
14
- headers: 'User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Trident/4.0; .NET CLR 1.1.4322; .NET CLR 2.0.50727; Maxthon/3.0)'
15
- result: { browser: { name: Maxthon, version: '3', type: browser }, engine: { name: Trident, version: '4.0' }, os: { name: Windows, version: { value: '5.1', alias: XP } }, device: { type: desktop } }
16
- readable: 'Maxthon 3 on Windows XP'
17
- -
18
- headers: 'User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Trident/4.0; .NET CLR 2.0.50727; .NET CLR 3.0.04506.30; Maxthon 2.0)'
19
- result: { browser: { name: Maxthon, version: '2', type: browser }, engine: { name: Trident, version: '4.0' }, os: { name: Windows, version: { value: '5.1', alias: XP } }, device: { type: desktop } }
20
- readable: 'Maxthon 2 on Windows XP'
21
- -
22
- headers: 'User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Trident/4.0; .NET CLR 2.0.50727; .NET CLR 3.0.04506.30; Maxthon/3.0)'
23
- result: { browser: { name: Maxthon, version: '3', type: browser }, engine: { name: Trident, version: '4.0' }, os: { name: Windows, version: { value: '5.1', alias: XP } }, device: { type: desktop } }
24
- readable: 'Maxthon 3 on Windows XP'
25
- -
26
- headers: 'User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Trident/4.0; Maxthon; .NET CLR 1.1.4322; .NET CLR 2.0.50727)'
27
- result: { browser: { name: Maxthon, type: browser }, engine: { name: Trident, version: '4.0' }, os: { name: Windows, version: { value: '5.1', alias: XP } }, device: { type: desktop } }
28
- readable: 'Maxthon on Windows XP'
29
- -
30
- headers: 'User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.2; Trident/6.0; .NET4.0E; .NET4.0C; .NET CLR 3.5.30729; .NET CLR 2.0.50727; .NET CLR 3.0.30729; Maxthon/3.0)'
31
- result: { browser: { name: Maxthon, version: '3', type: browser }, engine: { name: Trident, version: '6.0' }, os: { name: Windows, version: { value: '6.2', alias: '8' } }, device: { type: desktop } }
32
- readable: 'Maxthon 3 on Windows 8'
33
- -
34
- headers: 'User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_5) AppleWebKit/537.22 (KHTML, like Gecko) Maxthon/4.1.2.1000 Chrome/25.0.1364.99 Safari/537.22'
35
- result: { browser: { name: Maxthon, family: { name: Chrome, version: 25 }, version: 4.1.2, type: browser }, engine: { name: Webkit, version: '537.22' }, os: { name: 'OS X', version: { value: '10.8', nickname: 'Mountain Lion' } }, device: { type: desktop, manufacturer: Apple, model: Macintosh } }
36
- readable: 'Maxthon 4.1.2 on OS X Mountain Lion 10.8'
37
- -
38
- headers: 'User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_2) AppleWebKit/537.22 (KHTML, like Gecko) Maxthon/4.0.6.3000 Chrome/25.0.1364.99 Safari/537.22'
39
- result: { browser: { name: Maxthon, family: { name: Chrome, version: 25 }, version: 4.0.6, type: browser }, engine: { name: Webkit, version: '537.22' }, os: { name: 'OS X', version: { value: '10.9', nickname: Mavericks } }, device: { type: desktop, manufacturer: Apple, model: Macintosh } }
40
- readable: 'Maxthon 4.0.6 on OS X Mavericks 10.9'
41
- -
42
- headers: 'User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_4) AppleWebKit/537.77.4 (KHTML, like Gecko) Maxthon/4.2.3'
43
- result: { browser: { name: Maxthon, version: 4.2.3, type: browser }, engine: { name: Webkit, version: 537.77.4 }, os: { name: 'OS X', version: { value: '10.9', nickname: Mavericks } }, device: { type: desktop, manufacturer: Apple, model: Macintosh } }
44
- readable: 'Maxthon 4.2.3 on OS X Mavericks 10.9'
45
- -
46
- headers: 'User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/537.22 (KHTML, like Gecko) Maxthon/4.1.2.1000 Chrome/25.0.1364.99 Safari/537.22'
47
- result: { browser: { name: Maxthon, family: { name: Chrome, version: 25 }, version: 4.1.2, type: browser }, engine: { name: Webkit, version: '537.22' }, os: { name: 'OS X', version: { value: '10.9', nickname: Mavericks } }, device: { type: desktop, manufacturer: Apple, model: Macintosh } }
48
- readable: 'Maxthon 4.1.2 on OS X Mavericks 10.9'
49
- -
50
- headers: 'User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/537.78.2 (KHTML, like Gecko) Maxthon/4.4.0'
51
- result: { browser: { name: Maxthon, version: 4.4.0, type: browser }, engine: { name: Webkit, version: 537.78.2 }, os: { name: 'OS X', version: { value: '10.9', nickname: Mavericks } }, device: { type: desktop, manufacturer: Apple, model: Macintosh } }
52
- readable: 'Maxthon 4.4.0 on OS X Mavericks 10.9'
53
- -
54
- headers: 'User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/537.78.2 (KHTML, like Gecko) Maxthon/4.5.0'
55
- result: { browser: { name: Maxthon, version: 4.5.0, type: browser }, engine: { name: Webkit, version: 537.78.2 }, os: { name: 'OS X', version: { value: '10.9', nickname: Mavericks } }, device: { type: desktop, manufacturer: Apple, model: Macintosh } }
56
- readable: 'Maxthon 4.5.0 on OS X Mavericks 10.9'
57
- -
58
- headers: 'User-Agent: Mozilla/5.0 (Windows NT 10.0) AppleWebKit/537.36 (KHTML, like Gecko) Maxthon/4.0 Chrome/30.0.1599.101 Safari/537.36'
59
- result: { browser: { name: Maxthon, family: { name: Chrome, version: 30 }, version: '4.0', type: browser }, engine: { name: Blink }, os: { name: Windows, version: { value: '10.0', alias: '10' } }, device: { type: desktop } }
60
- readable: 'Maxthon 4.0 on Windows 10'
61
- -
62
- headers: 'User-Agent: Mozilla/5.0 (Windows NT 10.0) AppleWebKit/537.36 (KHTML, like Gecko) Maxthon/4.0 Chrome/44.0.2403.69 Safari/537.36'
63
- result: { browser: { name: Maxthon, family: { name: Chrome, version: 44 }, version: '4.0', type: browser }, engine: { name: Blink }, os: { name: Windows, version: { value: '10.0', alias: '10' } }, device: { type: desktop } }
64
- readable: 'Maxthon 4.0 on Windows 10'
65
- -
66
- headers: 'User-Agent: Mozilla/5.0 (Windows NT 5.1) AppleWebKit/535.12 (KHTML, like Gecko) Maxthon/3.0 Chrome/23.0.1229.79 Safari/535.12'
67
- result: { browser: { name: Maxthon, family: { name: Chrome, version: 23 }, version: '3', type: browser }, engine: { name: Webkit, version: '535.12' }, os: { name: Windows, version: { value: '5.1', alias: XP } }, device: { type: desktop } }
68
- readable: 'Maxthon 3 on Windows XP'
69
- -
70
- headers: 'User-Agent: Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) MxNitro/1.0.0.1010 Chrome/39.0.2146.0 Safari/537.36'
71
- result: { browser: { name: 'Maxthon Nitro', family: { name: Chrome, version: 39 }, version: 1.0.0, type: browser }, engine: { name: Blink }, os: { name: Windows, version: { value: '5.1', alias: XP } }, device: { type: desktop } }
72
- readable: 'Maxthon Nitro 1.0.0 on Windows XP'
73
- -
74
- headers: 'User-Agent: Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) MxNitro/1.0.0.500 Chrome/35.0.1849.0 Safari/537.36'
75
- result: { browser: { name: 'Maxthon Nitro', family: { name: Chrome, version: 35 }, version: 1.0.0, type: browser }, engine: { name: Blink }, os: { name: Windows, version: { value: '5.1', alias: XP } }, device: { type: desktop } }
76
- readable: 'Maxthon Nitro 1.0.0 on Windows XP'
77
- -
78
- headers: 'User-Agent: Mozilla/5.0 (Windows NT 6.0) AppleWebKit/537.36 (KHTML, like Gecko) MxNitro/1.0.0.700 Chrome/35.0.1849.0 Safari/537.36'
79
- result: { browser: { name: 'Maxthon Nitro', family: { name: Chrome, version: 35 }, version: 1.0.0, type: browser }, engine: { name: Blink }, os: { name: Windows, version: { value: '6.0', alias: Vista } }, device: { type: desktop } }
80
- readable: 'Maxthon Nitro 1.0.0 on Windows Vista'
81
- -
82
- headers: 'User-Agent: Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) MxNitro/1.0.0.900 Chrome/35.0.1849.0 Safari/537.36'
83
- result: { browser: { name: 'Maxthon Nitro', family: { name: Chrome, version: 35 }, version: 1.0.0, type: browser }, engine: { name: Blink }, os: { name: Windows, version: { value: '6.1', alias: '7' } }, device: { type: desktop } }
84
- readable: 'Maxthon Nitro 1.0.0 on Windows 7'
85
- -
86
- headers: 'User-Agent: Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) MxNitro/1.0.1.2000 Chrome/35.0.1849.0 Safari/537.36'
87
- result: { browser: { name: 'Maxthon Nitro', family: { name: Chrome, version: 35 }, version: 1.0.1, type: browser }, engine: { name: Blink }, os: { name: Windows, version: { value: '6.1', alias: '7' } }, device: { type: desktop } }
88
- readable: 'Maxthon Nitro 1.0.1 on Windows 7'
89
- -
90
- headers: 'User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) MxNitro/1.1.0.601 Chrome/39.0.2146.0 Safari/537.36'
91
- result: { browser: { name: 'Maxthon Nitro', family: { name: Chrome, version: 39 }, version: 1.1.0, type: browser }, engine: { name: Blink }, os: { name: Windows, version: { value: '6.1', alias: '7' } }, device: { type: desktop } }
92
- readable: 'Maxthon Nitro 1.1.0 on Windows 7'
93
- -
94
- headers: 'User-Agent: Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) MxNitro/1.1.0.2000 Chrome/39.0.2146.0 Safari/537.36'
95
- result: { browser: { name: 'Maxthon Nitro', family: { name: Chrome, version: 39 }, version: 1.1.0, type: browser }, engine: { name: Blink }, os: { name: Windows, version: { value: '6.2', alias: '8' } }, device: { type: desktop } }
96
- readable: 'Maxthon Nitro 1.1.0 on Windows 8'
97
- -
98
- headers: 'User-Agent: Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; Trident/6.0; Maxthon/3.0)'
99
- result: { browser: { name: Maxthon, version: '3', type: browser }, engine: { name: Trident, version: '6.0' }, os: { name: Windows, version: { value: '6.1', alias: '7' } }, device: { type: desktop } }
100
- readable: 'Maxthon 3 on Windows 7'
101
- -
102
- headers: 'User-Agent: Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; Trident/6.0; Maxthon/4.0.1.1000)'
103
- result: { browser: { name: Maxthon, version: 4.0.1, type: browser }, engine: { name: Trident, version: '6.0' }, os: { name: Windows, version: { value: '6.1', alias: '7' } }, device: { type: desktop } }
104
- readable: 'Maxthon 4.0.1 on Windows 7'
105
- -
106
- headers: 'User-Agent: Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; Trident/6.0; Maxthon/4.0.3.5000)'
107
- result: { browser: { name: Maxthon, version: 4.0.3, type: browser }, engine: { name: Trident, version: '6.0' }, os: { name: Windows, version: { value: '6.1', alias: '7' } }, device: { type: desktop } }
108
- readable: 'Maxthon 4.0.3 on Windows 7'
109
- -
110
- headers: 'User-Agent: Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; Trident/6.0; Maxthon/4.1.2.3000)'
111
- result: { browser: { name: Maxthon, version: 4.1.2, type: browser }, engine: { name: Trident, version: '6.0' }, os: { name: Windows, version: { value: '6.1', alias: '7' } }, device: { type: desktop } }
112
- readable: 'Maxthon 4.1.2 on Windows 7'
113
- -
114
- headers: 'User-Agent: Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; Trident/6.0; Maxthon/4.2.2.600)'
115
- result: { browser: { name: Maxthon, version: 4.2.2, type: browser }, engine: { name: Trident, version: '6.0' }, os: { name: Windows, version: { value: '6.1', alias: '7' } }, device: { type: desktop } }
116
- readable: 'Maxthon 4.2.2 on Windows 7'
117
- -
118
- headers: 'User-Agent: Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; WOW64; Trident/6.0; Maxthon/4.2.0.3000)'
119
- result: { browser: { name: Maxthon, version: 4.2.0, type: browser }, engine: { name: Trident, version: '6.0' }, os: { name: Windows, version: { value: '6.1', alias: '7' } }, device: { type: desktop } }
120
- readable: 'Maxthon 4.2.0 on Windows 7'
121
- -
122
- headers: 'User-Agent: Mozilla/5.0 (compatible; Windows NT 6.3) AppleWebKit/537.36 (KHTML, like Gecko) Maxthon/4.4.6.600 Chrome/43.0.2357.124 Safari/537.36'
123
- result: { browser: { name: Maxthon, family: { name: Chrome, version: 43 }, version: 4.4.6, type: browser }, engine: { name: Blink }, os: { name: Windows, version: { value: '6.3', alias: '8.1' } }, device: { type: desktop } }
124
- readable: 'Maxthon 4.4.6 on Windows 8.1'
125
- -
126
- headers: 'User-Agent: Mozilla/5.0 (compatible; Windows NT 6.3; U; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Maxthon/4.4.5.3000 Chrome/43.0.2357.81 Safari/537.36'
127
- result: { browser: { name: Maxthon, family: { name: Chrome, version: 43 }, version: 4.4.5, type: browser }, engine: { name: Blink }, os: { name: Windows, version: { value: '6.3', alias: '8.1' } }, device: { type: desktop } }
128
- readable: 'Maxthon 4.4.5 on Windows 8.1'
129
- -
130
- headers: 'User-Agent: Mozilla/5.0 (compatible; Windows NT 6.3; U; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Maxthon/4.4.7.1000 Chrome/44.0.2403.157 Safari/537.36'
131
- result: { browser: { name: Maxthon, family: { name: Chrome, version: 44 }, version: 4.4.7, type: browser }, engine: { name: Blink }, os: { name: Windows, version: { value: '6.3', alias: '8.1' } }, device: { type: desktop } }
132
- readable: 'Maxthon 4.4.7 on Windows 8.1'
133
- -
134
- headers: 'User-Agent: Mozilla/5.0 (compatible; Windows NT 6.3; U; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Maxthon/4.4.8.1000 Chrome/46.0.2490.86 Safari/537.36'
135
- result: { browser: { name: Maxthon, family: { name: Chrome, version: 46 }, version: 4.4.8, type: browser }, engine: { name: Blink }, os: { name: Windows, version: { value: '6.3', alias: '8.1' } }, device: { type: desktop } }
136
- readable: 'Maxthon 4.4.8 on Windows 8.1'
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
includes/vendor/whichbrowser/parser/tests/data/desktop/browser-midori.yaml DELETED
@@ -1,60 +0,0 @@
1
- -
2
- headers: 'User-Agent: Midori/0.1.9 (X11; Linux i686; U; xx) WebKit/532+'
3
- result: { browser: { name: Midori, version: 0.1.9, type: browser }, engine: { name: Webkit, version: '532' }, os: { name: Linux }, device: { type: desktop } }
4
- readable: 'Midori 0.1.9 on Linux'
5
- -
6
- headers: 'User-Agent: Midori/0.2 (X11; Linux; U; c) WebKit/534.7+'
7
- result: { browser: { name: Midori, version: '0.2', type: browser }, engine: { name: Webkit, version: '534.7' }, os: { name: Linux }, device: { type: desktop } }
8
- readable: 'Midori 0.2 on Linux'
9
- -
10
- headers: 'User-Agent: Midori/0.2.2 (X11; Linux ppc; U; xx) WebKit/531.2'
11
- result: { browser: { name: Midori, version: 0.2.2, type: browser }, engine: { name: Webkit, version: '531.2' }, os: { name: Linux }, device: { type: desktop } }
12
- readable: 'Midori 0.2.2 on Linux'
13
- -
14
- headers: 'User-Agent: Midori/0.3 (X11; Linux; U; xx) WebKit/534.21+'
15
- result: { browser: { name: Midori, version: '0.3', type: browser }, engine: { name: Webkit, version: '534.21' }, os: { name: Linux }, device: { type: desktop } }
16
- readable: 'Midori 0.3 on Linux'
17
- -
18
- headers: 'User-Agent: Midori/0.4 (CentOS 6.5)'
19
- result: { browser: { name: Midori, version: '0.4', type: browser }, device: { type: desktop } }
20
- readable: 'Midori 0.4'
21
- -
22
- headers: 'User-Agent: Midori/0.5 (X11; FreeBSD/11) WebKit/2.4.7 Midori/0.5.9'
23
- result: { browser: { name: Midori, version: '0.5', type: browser }, engine: { name: Webkit, version: 2.4.7 }, os: { name: FreeBSD, family: BSD, version: '11' }, device: { type: desktop } }
24
- readable: 'Midori 0.5 on FreeBSD 11'
25
- -
26
- headers: 'User-Agent: Mozilla/5.0 (Macintosh; U; Intel Mac OS X; c) AppleWebKit/535+ (KHTML, like Gecko) Version/5.0 Safari/535.10+ Midori/0.4'
27
- result: { browser: { name: Midori, version: '0.4', type: browser }, engine: { name: Webkit, version: '535' }, device: { type: desktop } }
28
- readable: 'Midori 0.4'
29
- -
30
- headers: 'User-Agent: Mozilla/5.0 (Macintosh; U; Intel Mac OS X; xx) AppleWebKit/538+ (KHTML, like Gecko) Version/8.0 Safari/538.15+ Midori/0.5'
31
- result: { browser: { name: Midori, version: '0.5', type: browser }, engine: { name: Webkit, version: '538' }, device: { type: desktop } }
32
- readable: 'Midori 0.5'
33
- -
34
- headers: 'User-Agent: Mozilla/5.0 (Windows NT 6.0) AppleWebKit/537.6 (KHTML, like Gecko) Chrome/18.0.1025.133 Safari/537.6 Midori/0.4'
35
- result: { browser: { name: Midori, family: { name: Chrome, version: 18 }, version: '0.4', type: browser }, engine: { name: Webkit, version: '537.6' }, os: { name: Windows, version: { value: '6.0', alias: Vista } }, device: { type: desktop } }
36
- readable: 'Midori 0.4 on Windows Vista'
37
- -
38
- headers: 'User-Agent: Mozilla/5.0 (X11; CYGWIN_NT-6.1) AppleWebKit/537.32 (KHTML, like Gecko) Chrome/18.0.1025.133 Safari/537.32 Midori/0.5'
39
- result: { browser: { name: Midori, family: { name: Chrome, version: 18 }, version: '0.5', type: browser }, engine: { name: Webkit, version: '537.32' }, device: { type: desktop } }
40
- readable: 'Midori 0.5'
41
- -
42
- headers: 'User-Agent: Mozilla/5.0 (X11; FreeBSD) AppleWebKit/535.22 (KHTML, like Gecko) Chrome/18.0.1025.133 Safari/535.22 Midori/0.5'
43
- result: { browser: { name: Midori, family: { name: Chrome, version: 18 }, version: '0.5', type: browser }, engine: { name: Webkit, version: '535.22' }, os: { name: FreeBSD, family: BSD }, device: { type: desktop } }
44
- readable: 'Midori 0.5 on FreeBSD'
45
- -
46
- headers: 'User-Agent: Mozilla/5.0 (X11; Linux) AppleWebKit/537.4 (KHTML, like Gecko) Chrome/18.0.1025.133 Safari/537.4 Midori/0.4'
47
- result: { browser: { name: Midori, family: { name: Chrome, version: 18 }, version: '0.4', type: browser }, engine: { name: Webkit, version: '537.4' }, os: { name: Linux }, device: { type: desktop } }
48
- readable: 'Midori 0.4 on Linux'
49
- -
50
- headers: 'User-Agent: Mozilla/5.0 (X11; U; Linux x86_64; xx) AppleWebKit/525.1+ (KHTML, like Gecko, Safari/525.1+) midori'
51
- result: { browser: { name: Midori, type: browser }, engine: { name: Webkit, version: '525.1' }, os: { name: Linux }, device: { type: desktop } }
52
- readable: 'Midori on Linux'
53
- -
54
- headers: 'User-Agent: Mozilla/5.0 (iPhone; U; CPU like Mac OS X; xx) AppleWebKit/532 (KHTML, like Gecko) Version/3.0 Mobile/1A538b Safari/419.3 Midori/0.4'
55
- result: { browser: { name: Midori, version: '0.4', type: browser }, engine: { name: Webkit, version: '532' }, os: { name: iOS, alias: 'iPhone OS', version: '1.0' }, device: { type: desktop, manufacturer: Apple } }
56
- readable: 'Midori 0.4 on iPhone OS 1.0'
57
- -
58
- headers: 'User-Agent: Mozilla/5.0 (X11; U; Linux i686; xx) AppleWebKit/525.1 (KHTML, like Gecko, Safari/525.1 ) midori/1.19'
59
- result: { browser: { name: Midori, version: '1.19', type: browser }, engine: { name: Webkit, version: '525.1' }, os: { name: Linux }, device: { type: desktop } }
60
- readable: 'Midori 1.19 on Linux'
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
includes/vendor/whichbrowser/parser/tests/data/desktop/browser-mosaic.yaml DELETED
@@ -1,96 +0,0 @@
1
- -
2
- headers: 'User-Agent: NCSA Mosaic/2.1 (Windows x86)'
3
- result: { browser: { name: 'NCSA Mosaic', family: Mosaic, version: '2.1', type: browser }, os: { name: Windows }, device: { type: desktop } }
4
- readable: 'NCSA Mosaic 2.1 on Windows'
5
- -
6
- headers: 'User-Agent: NCSA Mosaic/2.6b1 (X11;UNIX_System_V 4.2 R4000) libwww/2.12 modified'
7
- result: { browser: { name: 'NCSA Mosaic', family: Mosaic, version: '2.6', type: browser }, os: { name: 'UNIX System V', family: UNIX, version: '4.2' }, device: { type: desktop } }
8
- readable: 'NCSA Mosaic 2.6 on UNIX System V 4.2'
9
- -
10
- headers: 'User-Agent: NCSA Mosaic/2.6b1 [en-gb] (X11;UNIX_System_V 4.2 R4000) libwww/2.12 modified'
11
- result: { browser: { name: 'NCSA Mosaic', family: Mosaic, version: '2.6', type: browser }, os: { name: 'UNIX System V', family: UNIX, version: '4.2' }, device: { type: desktop } }
12
- readable: 'NCSA Mosaic 2.6 on UNIX System V 4.2'
13
- -
14
- headers: 'User-Agent: NCSA Mosaic/3.0.0 (Windows x86)'
15
- result: { browser: { name: 'NCSA Mosaic', family: Mosaic, version: 3.0.0, type: browser }, os: { name: Windows }, device: { type: desktop } }
16
- readable: 'NCSA Mosaic 3.0.0 on Windows'
17
- -
18
- headers: 'User-Agent: NCSA_Mosaic/2.6L10N+ (X11;SunOS 5.6 sun4u) libwww/2.12 modified'
19
- result: { browser: { name: 'NCSA Mosaic', family: Mosaic, version: '2.6', type: browser }, os: { name: Solaris, family: UNIX, version: '2.6' }, device: { type: desktop } }
20
- readable: 'NCSA Mosaic 2.6 on Solaris 2.6'
21
- -
22
- headers: 'User-Agent: NEC MosaicView/1.0 libwww/2.15_Spyglass'
23
- result: { browser: { name: 'Spyglass Mosaic', family: Mosaic, version: '1.0', type: browser } }
24
- readable: 'Spyglass Mosaic 1.0'
25
- -
26
- headers: 'User-Agent: mMosaic/3.6.6 (X11;SunOS 5.8 sun4m)'
27
- result: { browser: { name: mMosaic, family: Mosaic, version: 3.6.6, type: browser }, os: { name: Solaris, family: UNIX, version: '8' }, device: { type: desktop } }
28
- readable: 'mMosaic 3.6.6 on Solaris 8'
29
- -
30
- headers: 'User-Agent: AIR_Mosaic(16bit)/v1.00.198.07'
31
- result: { browser: { name: 'AIR Mosaic', family: Mosaic, version: '1.00', type: browser } }
32
- readable: 'AIR Mosaic 1.00'
33
- -
34
- headers: 'User-Agent: AIR_Mosaic(16bit)/v3.09.04.02'
35
- result: { browser: { name: 'AIR Mosaic', family: Mosaic, version: '3.09', type: browser } }
36
- readable: 'AIR Mosaic 3.09'
37
- -
38
- headers: 'User-Agent: AIR_Mosaic(16bit)/v3.10.06.07'
39
- result: { browser: { name: 'AIR Mosaic', family: Mosaic, version: '3.10', type: browser } }
40
- readable: 'AIR Mosaic 3.10'
41
- -
42
- headers: 'User-Agent: DCL SuperMosaic/1.0.2.9J_Win32'
43
- result: { browser: { name: SuperMosaic, family: Mosaic, version: '1.0', type: browser }, os: { name: Windows }, device: { type: desktop } }
44
- readable: 'SuperMosaic 1.0 on Windows'
45
- -
46
- headers: 'User-Agent: SPRY_Mosaic(16bit)/v3.10.198.07'
47
- result: { browser: { name: 'SPRY Mosaic', family: Mosaic, version: '3.10', type: browser } }
48
- readable: 'SPRY Mosaic 3.10'
49
- -
50
- headers: 'User-Agent: SPRY_Mosaic/v8.01 (Windows 16-bit) SPRY_package/v4.00'
51
- result: { browser: { name: 'SPRY Mosaic', family: Mosaic, version: '8.01', type: browser }, os: { name: Windows }, device: { type: desktop } }
52
- readable: 'SPRY Mosaic 8.01 on Windows'
53
- -
54
- headers: 'User-Agent: WinMosaic/Version 2.0 (ALPHA 2)'
55
- result: { browser: { name: WinMosaic, family: Mosaic, version: '2.0', type: browser }, os: { name: Windows }, device: { type: desktop } }
56
- readable: 'WinMosaic 2.0 on Windows'
57
- -
58
- headers: 'User-Agent: Spyglass Mosaic/1.0'
59
- result: { browser: { name: 'Spyglass Mosaic', family: Mosaic, version: '1.0', type: browser } }
60
- readable: 'Spyglass Mosaic 1.0'
61
- -
62
- headers: 'User-Agent: Spyglass_Mosaic/2.10 Win32 TGV/2'
63
- result: { browser: { name: 'Spyglass Mosaic', family: Mosaic, version: '2.10', type: browser }, os: { name: Windows }, device: { type: desktop } }
64
- readable: 'Spyglass Mosaic 2.10 on Windows'
65
- -
66
- headers: 'User-Agent: Spyglass_Mosaic/2.11 IRIX5.2 Spyglass/11'
67
- result: { browser: { name: 'Spyglass Mosaic', family: Mosaic, version: '2.11', type: browser }, os: { name: IRIX, family: UNIX }, device: { type: desktop } }
68
- readable: 'Spyglass Mosaic 2.11 on IRIX'
69
- -
70
- headers: 'User-Agent: Spyglass_Mosaic/2.11 Mac_68000 Spyglass/6'
71
- result: { browser: { name: 'Spyglass Mosaic', family: Mosaic, version: '2.11', type: browser } }
72
- readable: 'Spyglass Mosaic 2.11'
73
- -
74
- headers: 'User-Agent: Quarterdeck Mosaic Version 1.0'
75
- result: { browser: { name: 'Quarterdeck Mosaic', family: Mosaic, version: '1.0', type: browser } }
76
- readable: 'Quarterdeck Mosaic 1.0'
77
- -
78
- headers: 'User-Agent: Quarterdeck Mosaic Version 2.0/Final/Export'
79
- result: { browser: { name: 'Quarterdeck Mosaic', family: Mosaic, version: '2.0', type: browser } }
80
- readable: 'Quarterdeck Mosaic 2.0'
81
- -
82
- headers: 'User-Agent: Quarterdeck Mosaic Version 2.01/Release/Export'
83
- result: { browser: { name: 'Quarterdeck Mosaic', family: Mosaic, version: '2.01', type: browser } }
84
- readable: 'Quarterdeck Mosaic 2.01'
85
- -
86
- headers: 'User-Agent: NCSA Mosaic for the X Window System/2.5b5 (L10N-2.4.0)'
87
- result: { browser: { name: 'NCSA Mosaic', family: Mosaic, version: '2.5', type: browser } }
88
- readable: 'NCSA Mosaic 2.5'
89
- -
90
- headers: 'User-Agent: NCSA Mosaic(tm) for Windows/Version 2.0 (ALPHA 7)'
91
- result: { browser: { name: 'NCSA Mosaic', family: Mosaic, version: '2.0', type: browser }, os: { name: Windows }, device: { type: desktop } }
92
- readable: 'NCSA Mosaic 2.0 on Windows'
93
- -
94
- headers: 'User-Agent: Mosaic/1.0r2 (Macintosh; I; 68040)'
95
- result: { browser: { name: 'NCSA Mosaic', family: Mosaic, version: '1.0', type: browser }, os: { name: 'Mac OS' }, device: { type: desktop, manufacturer: Apple, model: Macintosh } }
96
- readable: 'NCSA Mosaic 1.0 on Mac OS'
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
includes/vendor/whichbrowser/parser/tests/data/desktop/browser-netfront.yaml DELETED
@@ -1,20 +0,0 @@
1
- -
2
- headers: 'User-Agent: Mozilla/5.0 (Windows NT 6.1; WKC) AppleWebKit/536.5.1 (KHTML, like Gecko) NetFrontBrowserNX/3.0.0'
3
- result: { browser: { name: 'NetFront NX', version: '3.0', type: browser }, engine: { name: Webkit, version: 536.5.1 }, device: { type: desktop } }
4
- readable: 'NetFront NX 3.0'
5
- -
6
- headers: 'User-Agent: Mozilla/5.0 (Windows NT 6.1; WKC) AppleWebKit/534.52.7 (KHTML, like Gecko) NetFrontBrowserNX/2.1.0'
7
- result: { browser: { name: 'NetFront NX', version: '2.1', type: browser }, engine: { name: Webkit, version: 534.52.7 }, device: { type: desktop } }
8
- readable: 'NetFront NX 2.1'
9
- -
10
- headers: 'User-Agent: Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.15 (KHTML, like Gecko) NX/3.0 Chrome/24.0.1295.0 Safari/537.15'
11
- result: { browser: { name: 'NetFront NX', family: { name: Chrome, version: 24 }, version: '3.0', type: browser }, engine: { name: Webkit, version: '537.15' }, device: { type: desktop } }
12
- readable: 'NetFront NX 3.0'
13
- -
14
- headers: 'User-Agent: NX/2.1'
15
- result: { browser: { name: 'NetFront NX', version: '2.1', type: browser }, device: { type: desktop } }
16
- readable: 'NetFront NX 2.1'
17
- -
18
- headers: 'User-Agent: NX/3.0'
19
- result: { browser: { name: 'NetFront NX', version: '3.0', type: browser }, device: { type: desktop } }
20
- readable: 'NetFront NX 3.0'
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
includes/vendor/whichbrowser/parser/tests/data/desktop/browser-netscape.yaml DELETED
@@ -1,76 +0,0 @@
1
- -
2
- headers: 'User-Agent: Mozilla/2.02E (Win95; U)'
3
- result: { browser: { name: 'Netscape Navigator', version: 2.0.2, type: browser }, os: { name: Windows, version: { value: '4.0', alias: '95' } }, device: { type: desktop } }
4
- readable: 'Netscape Navigator 2.0.2 on Windows 95'
5
- -
6
- headers: 'User-Agent: Mozilla/2.02Gold (Win95; I)'
7
- result: { browser: { name: 'Netscape Navigator', version: 2.0.2, type: browser }, os: { name: Windows, version: { value: '4.0', alias: '95' } }, device: { type: desktop } }
8
- readable: 'Netscape Navigator 2.0.2 on Windows 95'
9
- -
10
- headers: 'User-Agent: Mozilla/3.0 (Win95; N)'
11
- result: { browser: { name: 'Netscape Navigator', version: '3.0', type: browser }, os: { name: Windows, version: { value: '4.0', alias: '95' } }, device: { type: desktop } }
12
- readable: 'Netscape Navigator 3.0 on Windows 95'
13
- -
14
- headers: 'User-Agent: Mozilla/3.0 (X11; I; OSF1 V4.0 alpha)'
15
- result: { browser: { name: 'Netscape Navigator', version: '3.0', type: browser }, os: { name: 'Digital Unix', family: UNIX, version: '4.0' }, device: { type: desktop } }
16
- readable: 'Netscape Navigator 3.0 on Digital Unix 4.0'
17
- -
18
- headers: 'User-Agent: Mozilla/3.01Gold (X11; I; Linux 2.0.32 i486)'
19
- result: { browser: { name: 'Netscape Navigator', version: 3.0.1, type: browser }, os: { name: Linux }, device: { type: desktop } }
20
- readable: 'Netscape Navigator 3.0.1 on Linux'
21
- -
22
- headers: 'User-Agent: Mozilla/3.01Gold (X11; I; SunOS 5.5.1 sun4m)'
23
- result: { browser: { name: 'Netscape Navigator', version: 3.0.1, type: browser }, os: { name: Solaris, family: UNIX, version: 2.5.1 }, device: { type: desktop } }
24
- readable: 'Netscape Navigator 3.0.1 on Solaris 2.5.1'
25
- -
26
- headers: 'User-Agent: Mozilla/3.04Gold (X11; U; IRIX 5.3 IP22)'
27
- result: { browser: { name: 'Netscape Navigator', version: 3.0.4, type: browser }, os: { name: IRIX, family: UNIX, version: '5.3' }, device: { type: desktop } }
28
- readable: 'Netscape Navigator 3.0.4 on IRIX 5.3'
29
- -
30
- headers: 'User-Agent: Mozilla/5.0 (Macintosh; U; Intel Mac OS X; en-US; rv:1.8.1.10pre) Gecko/20071127 Firefox/2.0.0.10 Navigator/9.0.0.4'
31
- result: { browser: { name: 'Netscape Navigator', family: { name: Firefox, version: 2.0.0.10 }, version: 9.0.0, type: browser }, engine: { name: Gecko, version: 1.8.1 }, os: { name: 'OS X' }, device: { type: desktop, manufacturer: Apple, model: Macintosh } }
32
- readable: 'Netscape Navigator 9.0.0 on OS X'
33
- -
34
- headers: 'User-Agent: Mozilla/5.0 (Macintosh; U; Intel Mac OS X; en-US; rv:1.8.1.8pre) Gecko/20071019 Firefox/2.0.0.8 Navigator/9.0.0.1'
35
- result: { browser: { name: 'Netscape Navigator', family: { name: Firefox, version: 2.0.0.8 }, version: 9.0.0, type: browser }, engine: { name: Gecko, version: 1.8.1 }, os: { name: 'OS X' }, device: { type: desktop, manufacturer: Apple, model: Macintosh } }
36
- readable: 'Netscape Navigator 9.0.0 on OS X'
37
- -
38
- headers: 'User-Agent: Mozilla/5.0 (Macintosh; U; PPC; xx; rv:0.9.4.1) Gecko/20020508 Netscape6/6.2.3'
39
- result: { browser: { name: Netscape, version: 6.2.3, type: browser }, engine: { name: Gecko, version: 0.9.4 }, os: { name: 'Mac OS' }, device: { type: desktop, manufacturer: Apple, model: Macintosh } }
40
- readable: 'Netscape 6.2.3 on Mac OS'
41
- -
42
- headers: 'User-Agent: Mozilla/5.0 (Macintosh; U; PPC; xx; rv:1.0.2) Gecko/20030208 Netscape/7.02'
43
- result: { browser: { name: Netscape, version: '7.02', type: browser }, engine: { name: Gecko, version: 1.0.2 }, os: { name: 'Mac OS' }, device: { type: desktop, manufacturer: Apple, model: Macintosh } }
44
- readable: 'Netscape 7.02 on Mac OS'
45
- -
46
- headers: 'User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.12) Gecko/20080219 Firefox/2.0.0.12 Navigator/9.0.0.6'
47
- result: { browser: { name: 'Netscape Navigator', family: { name: Firefox, version: 2.0.0.12 }, version: 9.0.0, type: browser }, engine: { name: Gecko, version: 1.8.1 }, os: { name: Windows, version: { value: '5.1', alias: XP } }, device: { type: desktop } }
48
- readable: 'Netscape Navigator 9.0.0 on Windows XP'
49
- -
50
- headers: 'User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; xx; rv:1.7.5) Gecko/20051012 Netscape/8.0.4'
51
- result: { browser: { name: Netscape, version: 8.0.4, type: browser }, engine: { name: Gecko, version: 1.7.5 }, os: { name: Windows, version: { value: '5.1', alias: XP } }, device: { type: desktop } }
52
- readable: 'Netscape 8.0.4 on Windows XP'
53
- -
54
- headers: 'User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1) Netscape/8.0.4'
55
- result: { browser: { name: Netscape, version: 8.0.4, type: browser }, os: { name: Windows, version: { value: '5.1', alias: XP } }, device: { type: desktop } }
56
- readable: 'Netscape 8.0.4 on Windows XP'
57
- -
58
- headers: 'User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US; rv:1.7.5) Gecko/20070321 Netscape/8.1.3'
59
- result: { browser: { name: Netscape, version: 8.1.3, type: browser }, engine: { name: Gecko, version: 1.7.5 }, os: { name: Windows, version: { value: '6.0', alias: Vista } }, device: { type: desktop } }
60
- readable: 'Netscape 8.1.3 on Windows Vista'
61
- -
62
- headers: 'User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.2; xx; rv:1.7.5) Gecko/20060127 Netscape/8.1'
63
- result: { browser: { name: Netscape, version: '8.1', type: browser }, engine: { name: Gecko, version: 1.7.5 }, os: { name: Windows, version: { value: '6.2', alias: '8' } }, device: { type: desktop } }
64
- readable: 'Netscape 8.1 on Windows 8'
65
- -
66
- headers: 'User-Agent: Mozilla/5.0 (X11; U; Linux i686; xx; rv:0.9.4) Gecko/20011022 Netscape6/6.2'
67
- result: { browser: { name: Netscape, version: '6.2', type: browser }, engine: { name: Gecko, version: 0.9.4 }, os: { name: Linux }, device: { type: desktop } }
68
- readable: 'Netscape 6.2 on Linux'
69
- -
70
- headers: 'User-Agent: Mozilla/5.0 (X11; U; Linux i686; xx; rv:1.4) Gecko/20030624 Netscape/7.1'
71
- result: { browser: { name: Netscape, version: '7.1', type: browser }, engine: { name: Gecko, version: '1.4' }, os: { name: Linux }, device: { type: desktop } }
72
- readable: 'Netscape 7.1 on Linux'
73
- -
74
- headers: 'User-Agent: Mozilla/5.0 (X11; U; Linux x86_64; xx; rv:1.7.2) Gecko/20040805 Netscape/7.2'
75
- result: { browser: { name: Netscape, version: '7.2', type: browser }, engine: { name: Gecko, version: 1.7.2 }, os: { name: Linux }, device: { type: desktop } }
76
- readable: 'Netscape 7.2 on Linux'
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
includes/vendor/whichbrowser/parser/tests/data/desktop/browser-omniweb.yaml DELETED
@@ -1,92 +0,0 @@
1
- -
2
- headers: 'User-Agent: DoCoMo/1.0/SH505i/c20/TC/W24H12 OmniWeb/4.1.1-v424.6'
3
- readable: 'OmniWeb 4.1.1 on OS X'
4
- result: { browser: { name: OmniWeb, version: 4.1.1, type: browser }, os: { name: 'OS X' }, device: { type: desktop, manufacturer: Apple, model: Macintosh } }
5
- -
6
- headers: 'User-Agent: Mozilla/4.0 (compatible; MSIE 5.12; Mac_PowerPC) OmniWeb/4.1.1-v424.6'
7
- readable: 'OmniWeb 4.1.1 on OS X'
8
- result: { browser: { name: OmniWeb, version: 4.1.1, type: browser }, os: { name: 'OS X' }, device: { type: desktop, manufacturer: Apple, model: Macintosh } }
9
- -
10
- headers: 'User-Agent: Mozilla/4.0 (compatible; MSIE 5.2; Mac_PowerPC) OmniWeb/4.1.1-v424.6'
11
- readable: 'OmniWeb 4.1.1 on OS X'
12
- result: { browser: { name: OmniWeb, version: 4.1.1, type: browser }, os: { name: 'OS X' }, device: { type: desktop, manufacturer: Apple, model: Macintosh } }
13
- -
14
- headers: 'User-Agent: Mozilla/4.0 (compatible; MSIE 5.5; Windows 98). OmniWeb/v528'
15
- readable: 'OmniWeb 5 on OS X'
16
- result: { browser: { name: OmniWeb, version: '5', type: browser }, engine: { name: WebCore }, os: { name: 'OS X' }, device: { type: desktop, manufacturer: Apple, model: Macintosh } }
17
- -
18
- headers: 'User-Agent: Mozilla/4.0 (compatible; MSIE 6.0b; Windows 98) OmniWeb/4.1.1-v424.6'
19
- readable: 'OmniWeb 4.1.1 on OS X'
20
- result: { browser: { name: OmniWeb, version: 4.1.1, type: browser }, os: { name: 'OS X' }, device: { type: desktop, manufacturer: Apple, model: Macintosh } }
21
- -
22
- headers: 'User-Agent: Mozilla/4.0 (compatible; MSIE 6.0b; Windows 98) OmniWeb/v496'
23
- readable: 'OmniWeb 4 on OS X'
24
- result: { browser: { name: OmniWeb, version: '4', type: browser }, os: { name: 'OS X' }, device: { type: desktop, manufacturer: Apple, model: Macintosh } }
25
- -
26
- headers: 'User-Agent: Mozilla/4.5 (compatible; OmniWeb/4.0.5; Mac_PowerPC)'
27
- readable: 'OmniWeb 4.0.5 on OS X'
28
- result: { browser: { name: OmniWeb, version: 4.0.5, type: browser }, os: { name: 'OS X' }, device: { type: desktop, manufacturer: Apple, model: Macintosh } }
29
- -
30
- headers: 'User-Agent: Mozilla/4.5 (compatible; OmniWeb/4.1-v422; Mac_PowerPC)'
31
- readable: 'OmniWeb 4.1 on OS X'
32
- result: { browser: { name: OmniWeb, version: '4.1', type: browser }, os: { name: 'OS X' }, device: { type: desktop, manufacturer: Apple, model: Macintosh } }
33
- -
34
- headers: 'User-Agent: Mozilla/4.5 (compatible; OmniWeb/4.2-v435.5; Mac_Intel )'
35
- readable: 'OmniWeb 4.2 on OS X'
36
- result: { browser: { name: OmniWeb, version: '4.2', type: browser }, os: { name: 'OS X' }, device: { type: desktop, manufacturer: Apple, model: Macintosh } }
37
- -
38
- headers: 'User-Agent: Mozilla/4.5 (compatible; OmniWeb/4.2-v435.5; Mac_PowerPC)'
39
- readable: 'OmniWeb 4.2 on OS X'
40
- result: { browser: { name: OmniWeb, version: '4.2', type: browser }, os: { name: 'OS X' }, device: { type: desktop, manufacturer: Apple, model: Macintosh } }
41
- -
42
- headers: 'User-Agent: Mozilla/4.5 (compatible; OmniWeb/5.1.1; Mac_PowerPC)'
43
- readable: 'OmniWeb 5.1.1 on OS X'
44
- result: { browser: { name: OmniWeb, version: 5.1.1, type: browser }, engine: { name: WebCore }, os: { name: 'OS X' }, device: { type: desktop, manufacturer: Apple, model: Macintosh } }
45
- -
46
- headers: 'User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_2; xx) AppleWebKit/10600.3.18 (KHTML, like Gecko) Version/7.0 Safari/537.71 OmniWeb/v625.0'
47
- readable: 'OmniWeb 6 on OS X Yosemite 10.10'
48
- result: { browser: { name: OmniWeb, version: '6', type: browser }, engine: { name: WebKit }, os: { name: 'OS X', version: { value: '10.10', nickname: Yosemite } }, device: { type: desktop, manufacturer: Apple, model: Macintosh } }
49
- -
50
- headers: 'User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_0; xx) AppleWebKit/11601.1.43 (KHTML, like Gecko) Version/7.0 Safari/537.71 OmniWeb/v626.0'
51
- readable: 'OmniWeb 6 on OS X El Capitan 10.11'
52
- result: { browser: { name: OmniWeb, version: '6', type: browser }, engine: { name: WebKit }, os: { name: 'OS X', version: { value: '10.11', nickname: 'El Capitan' } }, device: { type: desktop, manufacturer: Apple, model: Macintosh } }
53
- -
54
- headers: 'User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_2; xx) AppleWebKit/9537.75.14 (KHTML, like Gecko) Version/7.0 Safari/537.71 OmniWeb/v624.0'
55
- readable: 'OmniWeb 6 on OS X Mavericks 10.9'
56
- result: { browser: { name: OmniWeb, version: '6', type: browser }, engine: { name: WebKit }, os: { name: 'OS X', version: { value: '10.9', nickname: Mavericks } }, device: { type: desktop, manufacturer: Apple, model: Macintosh } }
57
- -
58
- headers: 'User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_2) AppleWebKit/537.74.8 (KHTML, like Gecko) OmniWeb'
59
- readable: 'OmniWeb on OS X Mavericks 10.9'
60
- result: { browser: { name: OmniWeb, type: browser }, os: { name: 'OS X', version: { value: '10.9', nickname: Mavericks } }, device: { type: desktop, manufacturer: Apple, model: Macintosh } }
61
- -
62
- headers: 'User-Agent: Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_8; xx) AppleWebKit/533.21.1 (KHTML, like Gecko, Safari/533.19.4) Version/5.11.1 OmniWeb/622.18.0'
63
- readable: 'OmniWeb 6 on Mac OS X 10.6'
64
- result: { browser: { name: OmniWeb, version: '6', type: browser }, engine: { name: WebKit }, os: { name: 'OS X', alias: 'Mac OS X', version: '10.6' }, device: { type: desktop, manufacturer: Apple, model: Macintosh } }
65
- -
66
- headers: 'User-Agent: Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_9_3; xx) AppleWebKit/533.21.1+(KHTML, like Gecko, Safari/533.19.4) Version/5.11.2 OmniWeb/622.19.3.0'
67
- readable: 'OmniWeb 6 on OS X Mavericks 10.9'
68
- result: { browser: { name: OmniWeb, version: '6', type: browser }, engine: { name: WebKit }, os: { name: 'OS X', version: { value: '10.9', nickname: Mavericks } }, device: { type: desktop, manufacturer: Apple, model: Macintosh } }
69
- -
70
- headers: 'User-Agent: Mozilla/5.0 (Macintosh; U; Intel Mac OS X; xx) AppleWebKit/528.16 (KHTML, like Gecko, Safari/528.16) OmniWeb/v622.8.0.112941'
71
- readable: 'OmniWeb 6 on OS X'
72
- result: { browser: { name: OmniWeb, version: '6', type: browser }, engine: { name: WebKit }, os: { name: 'OS X' }, device: { type: desktop, manufacturer: Apple, model: Macintosh } }
73
- -
74
- headers: 'User-Agent: Mozilla/5.0 (Macintosh; U; PPC Mac OS X; en-US) AppleWebKit/523 (KHTML, like Gecko, Safari/523.10) OmniWeb/v615.0.97558'
75
- readable: 'OmniWeb 6 on OS X'
76
- result: { browser: { name: OmniWeb, version: '6', type: browser }, engine: { name: WebKit }, os: { name: 'OS X' }, device: { type: desktop, manufacturer: Apple, model: Macintosh } }
77
- -
78
- headers: 'User-Agent: Mozilla/5.0 (Macintosh; U; PPC Mac OS X; en-US) AppleWebKit/85 (KHTML, like Gecko) OmniWeb/v558.48'
79
- readable: 'OmniWeb 5 on OS X'
80
- result: { browser: { name: OmniWeb, version: '5', type: browser }, engine: { name: WebCore }, os: { name: 'OS X' }, device: { type: desktop, manufacturer: Apple, model: Macintosh } }
81
- -
82
- headers: 'User-Agent: Mozilla/5.0 (Macintosh; U; PPC; en-US; rv:0.9.2) Gecko/20010726 Netscape6/6.1 OmniWeb/4.1-v422'
83
- readable: 'OmniWeb 4.1 on OS X'
84
- result: { browser: { name: OmniWeb, version: '4.1', type: browser }, os: { name: 'OS X' }, device: { type: desktop, manufacturer: Apple, model: Macintosh } }
85
- -
86
- headers: 'User-Agent: Mozilla/5.0 (Windows; U; Win98; en-US; rv:0.9.2) Gecko/20010726 Netscape 6/6.1 OmniWeb/4.1-v422'
87
- readable: 'OmniWeb 4.1 on OS X'
88
- result: { browser: { name: OmniWeb, version: '4.1', type: browser }, os: { name: 'OS X' }, device: { type: desktop, manufacturer: Apple, model: Macintosh } }
89
- -
90
- headers: 'User-Agent: OmniWeb/2.5 OWF/1.0'
91
- readable: 'OmniWeb 2.5 on NextStep'
92
- result: { browser: { name: OmniWeb, version: '2.5', type: browser }, os: { name: NextStep }, device: { type: desktop } }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
includes/vendor/whichbrowser/parser/tests/data/desktop/browser-opera.yaml DELETED
@@ -1,431 +0,0 @@
1
- -
2
- headers: 'User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 4.0; xx) Opera 8.51'
3
- result: { browser: { name: Opera, version: '8.51', type: browser }, engine: { name: Presto }, os: { name: Windows, version: { value: '4.0', alias: 'NT 4.0' } }, device: { type: desktop } }
4
- readable: 'Opera 8.51 on Windows NT 4.0'
5
- -
6
- headers: 'User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; xx) Opera 8.53'
7
- result: { browser: { name: Opera, version: '8.53', type: browser }, engine: { name: Presto }, os: { name: Windows, version: { value: '5.1', alias: XP } }, device: { type: desktop } }
8
- readable: 'Opera 8.53 on Windows XP'
9
- -
10
- headers: 'User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; xx) Opera 9.64'
11
- result: { browser: { name: Opera, version: '9.64', type: browser }, engine: { name: Presto }, os: { name: Windows, version: { value: '5.1', alias: XP } }, device: { type: desktop } }
12
- readable: 'Opera 9.64 on Windows XP'
13
- -
14
- headers: 'User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 6.1; xx) Opera 8.50'
15
- result: { browser: { name: Opera, version: '8.50', type: browser }, engine: { name: Presto }, os: { name: Windows, version: { value: '6.1', alias: '7' } }, device: { type: desktop } }
16
- readable: 'Opera 8.50 on Windows 7'
17
- -
18
- headers: 'User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/37.0.2062.44 Safari/537.36 OPR/24.0.1558.25 (Edition Next)'
19
- result: { browser: { name: Opera, family: { name: Chrome, version: 37 }, version: '24.0', type: browser }, engine: { name: Blink }, os: { name: 'OS X', version: { value: '10.10', nickname: Yosemite } }, device: { type: desktop, manufacturer: Apple, model: Macintosh } }
20
- readable: 'Opera Next 24.0 on OS X Yosemite 10.10'
21
- -
22
- headers: 'User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2101.0 Safari/537.36 OPR/25.0.1592.0 (Edition Developer)'
23
- result: { browser: { name: Opera, family: { name: Chrome, version: 38 }, version: '25.0', type: browser }, engine: { name: Blink }, os: { name: 'OS X', version: { value: '10.10', nickname: Yosemite } }, device: { type: desktop, manufacturer: Apple, model: Macintosh } }
24
- readable: 'Opera Developer 25.0 on OS X Yosemite 10.10'
25
- -
26
- headers: 'User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2159.4 Safari/537.36 OPR/26.0.1646.0 (Edition developer)'
27
- result: { browser: { name: Opera, family: { name: Chrome, version: 39 }, version: '26.0', type: browser }, engine: { name: Blink }, os: { name: 'OS X', version: { value: '10.10', nickname: Yosemite } }, device: { type: desktop, manufacturer: Apple, model: Macintosh } }
28
- readable: 'Opera Developer 26.0 on OS X Yosemite 10.10'
29
- -
30
- headers: 'User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.53 Safari/537.36 OPR/28.0.1750.31 (Edition beta)'
31
- result: { browser: { name: Opera, family: { name: Chrome, version: 41 }, version: '28.0', type: browser }, engine: { name: Blink }, os: { name: 'OS X', version: { value: '10.10', nickname: Yosemite } }, device: { type: desktop, manufacturer: Apple, model: Macintosh } }
32
- readable: 'Opera Beta 28.0 on OS X Yosemite 10.10'
33
- -
34
- headers: 'User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.85 Safari/537.36 OPR/32.0.1948.25'
35
- result: { browser: { name: Opera, family: { name: Chrome, version: 45 }, version: '32.0', type: browser }, engine: { name: Blink }, os: { name: 'OS X', version: { value: '10.11', nickname: 'El Capitan' } }, device: { type: desktop, manufacturer: Apple, model: Macintosh } }
36
- readable: 'Opera 32.0 on OS X El Capitan 10.11'
37
- -
38
- headers: 'User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1700.76 Safari/537.36 OPR/19.0.1326.47'
39
- result: { browser: { name: Opera, family: { name: Chrome, version: 32 }, version: '19.0', type: browser }, engine: { name: Blink }, os: { name: 'OS X', version: { value: '10.7', nickname: Lion } }, device: { type: desktop, manufacturer: Apple, model: Macintosh } }
40
- readable: 'Opera 19.0 on OS X Lion 10.7'
41
- -
42
- headers: 'User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/29.0.1547.49 Safari/537.36 OPR/16.0.1196.45 (Edition Next)'
43
- result: { browser: { name: Opera, family: { name: Chrome, version: 29 }, version: '16.0', type: browser }, engine: { name: Blink }, os: { name: 'OS X', version: { value: '10.9', nickname: Mavericks } }, device: { type: desktop, manufacturer: Apple, model: Macintosh } }
44
- readable: 'Opera Next 16.0 on OS X Mavericks 10.9'
45
- -
46
- headers: 'User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1650.57 Safari/537.36 OPR/18.0.1284.49'
47
- result: { browser: { name: Opera, family: { name: Chrome, version: 31 }, version: '18.0', type: browser }, engine: { name: Blink }, os: { name: 'OS X', version: { value: '10.9', nickname: Mavericks } }, device: { type: desktop, manufacturer: Apple, model: Macintosh } }
48
- readable: 'Opera 18.0 on OS X Mavericks 10.9'
49
- -
50
- headers: 'User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.85 Safari/537.36 OPR/32.0.1948.25'
51
- result: { browser: { name: Opera, family: { name: Chrome, version: 45 }, version: '32.0', type: browser }, engine: { name: Blink }, os: { name: 'OS X', version: { value: '10.9', nickname: Mavericks } }, device: { type: desktop, manufacturer: Apple, model: Macintosh } }
52
- readable: 'Opera 32.0 on OS X Mavericks 10.9'
53
- -
54
- headers: 'User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.155 Safari/537.36 OPR/31.0.1889.180'
55
- result: { browser: { name: Opera, family: { name: Chrome, version: 44 }, version: '31.0', type: browser }, engine: { name: Blink }, os: { name: Windows, version: { value: '10.0', alias: '10' } }, device: { type: desktop } }
56
- readable: 'Opera 31.0 on Windows 10'
57
- -
58
- headers: 'User-Agent: Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1500.71 Safari/537.36 OPR/15.0.1147.138'
59
- result: { browser: { name: Opera, family: { name: Chrome, version: 28 }, version: '15.0', type: browser }, engine: { name: Blink }, os: { name: Windows, version: { value: '5.1', alias: XP } }, device: { type: desktop } }
60
- readable: 'Opera 15.0 on Windows XP'
61
- -
62
- headers: 'User-Agent: Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/30.0.1599.101 Safari/537.36 OPR/17.0.1241.53'
63
- result: { browser: { name: Opera, family: { name: Chrome, version: 30 }, version: '17.0', type: browser }, engine: { name: Blink }, os: { name: Windows, version: { value: '5.1', alias: XP } }, device: { type: desktop } }
64
- readable: 'Opera 17.0 on Windows XP'
65
- -
66
- headers: 'User-Agent: Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1664.3 Safari/537.36 OPR/19.0.1300.0 (Edition Developer)'
67
- result: { browser: { name: Opera, family: { name: Chrome, version: 32 }, version: '19.0', type: browser }, engine: { name: Blink }, os: { name: Windows, version: { value: '5.1', alias: XP } }, device: { type: desktop } }
68
- readable: 'Opera Developer 19.0 on Windows XP'
69
- -
70
- headers: 'User-Agent: Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1700.107 Safari/537.36 OPR/19.0.1326.63'
71
- result: { browser: { name: Opera, family: { name: Chrome, version: 32 }, version: '19.0', type: browser }, engine: { name: Blink }, os: { name: Windows, version: { value: '5.1', alias: XP } }, device: { type: desktop } }
72
- readable: 'Opera 19.0 on Windows XP'
73
- -
74
- headers: 'User-Agent: Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/33.0.1750.149 Safari/537.36 OPR/20.0.1387.77'
75
- result: { browser: { name: Opera, family: { name: Chrome, version: 33 }, version: '20.0', type: browser }, engine: { name: Blink }, os: { name: Windows, version: { value: '5.1', alias: XP } }, device: { type: desktop } }
76
- readable: 'Opera 20.0 on Windows XP'
77
- -
78
- headers: 'User-Agent: Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1985.125 Safari/537.36 OPR/23.0.1522.75'
79
- result: { browser: { name: Opera, family: { name: Chrome, version: 36 }, version: '23.0', type: browser }, engine: { name: Blink }, os: { name: Windows, version: { value: '5.1', alias: XP } }, device: { type: desktop } }
80
- readable: 'Opera 23.0 on Windows XP'
81
- -
82
- headers: 'User-Agent: Mozilla/5.0 (Windows NT 6.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2305.3 Safari/537.36 OPR/29.0.1794.0 (Edition developer)'
83
- result: { browser: { name: Opera, family: { name: Chrome, version: 42 }, version: '29.0', type: browser }, engine: { name: Blink }, os: { name: Windows, version: { value: '6.0', alias: Vista } }, device: { type: desktop } }
84
- readable: 'Opera Developer 29.0 on Windows Vista'
85
- -
86
- headers: 'User-Agent: Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/29.0.1547.32 Safari/537.36 OPR/16.0.1196.29 (Edition Next)'
87
- result: { browser: { name: Opera, family: { name: Chrome, version: 29 }, version: '16.0', type: browser }, engine: { name: Blink }, os: { name: Windows, version: { value: '6.1', alias: '7' } }, device: { type: desktop } }
88
- readable: 'Opera Next 16.0 on Windows 7'
89
- -
90
- headers: 'User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1650.57 Safari/537.36 OPR/18.0.1284.49'
91
- result: { browser: { name: Opera, family: { name: Chrome, version: 31 }, version: '18.0', type: browser }, engine: { name: Blink }, os: { name: Windows, version: { value: '6.1', alias: '7' } }, device: { type: desktop } }
92
- readable: 'Opera 18.0 on Windows 7'
93
- -
94
- headers: 'User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.65 Safari/537.36 OPR/26.0.1656.32'
95
- result: { browser: { name: Opera, family: { name: Chrome, version: 39 }, version: '26.0', type: browser }, engine: { name: Blink }, os: { name: Windows, version: { value: '6.1', alias: '7' } }, device: { type: desktop } }
96
- readable: 'Opera 26.0 on Windows 7'
97
- -
98
- headers: 'User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) Presto/2.12.388 Opera/12.16'
99
- result: { browser: { name: Opera, version: '12.16', type: browser }, engine: { name: Presto, version: 2.12.388 }, os: { name: Windows, version: { value: '6.1', alias: '7' } }, device: { type: desktop } }
100
- readable: 'Opera 12.16 on Windows 7'
101
- -
102
- headers: 'User-Agent: Mozilla/5.0 (Windows NT 6.3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.104 Safari/537.36 OPR/25.0.1614.63'
103
- result: { browser: { name: Opera, family: { name: Chrome, version: 38 }, version: '25.0', type: browser }, engine: { name: Blink }, os: { name: Windows, version: { value: '6.3', alias: '8.1' } }, device: { type: desktop } }
104
- readable: 'Opera 25.0 on Windows 8.1'
105
- -
106
- headers: 'User-Agent: Mozilla/5.0 (Windows NT 6.3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/43.0.2357.81 Safari/537.36 OPR/30.0.1835.140'
107
- result: { browser: { name: Opera, family: { name: Chrome, version: 43 }, version: '30.0', type: browser }, engine: { name: Blink }, os: { name: Windows, version: { value: '6.3', alias: '8.1' } }, device: { type: desktop } }
108
- readable: 'Opera 30.0 on Windows 8.1'
109
- -
110
- headers: 'User-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.30 Safari/537.36 OPR/31.0.1889.16 (Edition beta)'
111
- result: { browser: { name: Opera, family: { name: Chrome, version: 44 }, version: '31.0', type: browser }, engine: { name: Blink }, os: { name: Windows, version: { value: '6.3', alias: '8.1' } }, device: { type: desktop } }
112
- readable: 'Opera Beta 31.0 on Windows 8.1'
113
- -
114
- headers: 'User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/33.0.1750.29 Safari/537.36 OPR/20.0.1396.70617'
115
- result: { browser: { name: Opera, family: { name: Chrome, version: 33 }, version: '20.0', type: browser }, engine: { name: Blink }, os: { name: Linux }, device: { type: desktop } }
116
- readable: 'Opera 20.0 on Linux'
117
- -
118
- headers: 'User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.44 Safari/537.36 OPR/25.0.1614.11 (Edition beta)'
119
- result: { browser: { name: Opera, family: { name: Chrome, version: 38 }, version: '25.0', type: browser }, engine: { name: Blink }, os: { name: Linux }, device: { type: desktop } }
120
- readable: 'Opera Beta 25.0 on Linux'
121
- -
122
- headers: 'User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.59 Safari/537.36 OPR/26.0.1656.87215'
123
- result: { browser: { name: Opera, family: { name: Chrome, version: 39 }, version: '26.0', type: browser }, engine: { name: Blink }, os: { name: Linux }, device: { type: desktop } }
124
- readable: 'Opera 26.0 on Linux'
125
- -
126
- headers: 'User-Agent: Mozilla/5.0 (X11; Slackware Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2188.2 Safari/537.36 OPR/27.0.1683.0 (Edition developer)'
127
- result: { browser: { name: Opera, family: { name: Chrome, version: 40 }, version: '27.0', type: browser }, engine: { name: Blink }, os: { name: Slackware }, device: { type: desktop } }
128
- readable: 'Opera Developer 27.0 on Slackware'
129
- -
130
- headers: 'User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 5.0) Opera 12.12'
131
- result: { browser: { name: Opera, version: '12.12', type: browser }, engine: { name: Presto }, os: { name: Windows, version: { value: '5.0', alias: '2000' } }, device: { type: desktop } }
132
- readable: 'Opera 12.12 on Windows 2000'
133
- -
134
- headers: 'User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 5.1) Opera 12.14'
135
- result: { browser: { name: Opera, version: '12.14', type: browser }, engine: { name: Presto }, os: { name: Windows, version: { value: '5.1', alias: XP } }, device: { type: desktop } }
136
- readable: 'Opera 12.14 on Windows XP'
137
- -
138
- headers: 'User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1) Opera 12.15'
139
- result: { browser: { name: Opera, version: '12.15', type: browser }, engine: { name: Presto }, os: { name: Windows, version: { value: '6.1', alias: '7' } }, device: { type: desktop } }
140
- readable: 'Opera 12.15 on Windows 7'
141
- -
142
- headers: 'User-Agent: Opera/10.00 (Windows NT 5.1; U; xx)'
143
- result: { browser: { name: Opera, version: '10.00', type: browser }, engine: { name: Presto }, os: { name: Windows, version: { value: '5.1', alias: XP } }, device: { type: desktop } }
144
- readable: 'Opera 10.00 on Windows XP'
145
- -
146
- headers: 'User-Agent: Opera/10.00 (Windows NT 5.1; U; xx) Presto/2.2.0'
147
- result: { browser: { name: Opera, version: '10.00', type: browser }, engine: { name: Presto, version: 2.2.0 }, os: { name: Windows, version: { value: '5.1', alias: XP } }, device: { type: desktop } }
148
- readable: 'Opera 10.00 on Windows XP'
149
- -
150
- headers: 'User-Agent: Opera/4.0 (Windows 98;US) [en]'
151
- result: { browser: { name: Opera, version: '4.0', type: browser }, engine: { name: Electra }, os: { name: Windows, version: { value: '4.1', alias: '98' } }, device: { type: desktop } }
152
- readable: 'Opera 4.0 on Windows 98'
153
- -
154
- headers: 'User-Agent: Opera/4.03 (Windows NT 4.0; U)'
155
- result: { browser: { name: Opera, version: '4.03', type: browser }, engine: { name: Electra }, os: { name: Windows, version: { value: '4.0', alias: 'NT 4.0' } }, device: { type: desktop } }
156
- readable: 'Opera 4.03 on Windows NT 4.0'
157
- -
158
- headers: 'User-Agent: Opera/6.03 (Windows 98; U) [en]'
159
- result: { browser: { name: Opera, version: '6.03', type: browser }, engine: { name: Electra }, os: { name: Windows, version: { value: '4.1', alias: '98' } }, device: { type: desktop } }
160
- readable: 'Opera 6.03 on Windows 98'
161
- -
162
- headers: 'User-Agent: Opera/8.01 (Windows 98; U; xx)'
163
- result: { browser: { name: Opera, version: '8.01', type: browser }, engine: { name: Presto }, os: { name: Windows, version: { value: '4.1', alias: '98' } }, device: { type: desktop } }
164
- readable: 'Opera 8.01 on Windows 98'
165
- -
166
- headers: 'User-Agent: Opera/8.52 (Windows NT 5.1; U; xx)'
167
- result: { browser: { name: Opera, version: '8.52', type: browser }, engine: { name: Presto }, os: { name: Windows, version: { value: '5.1', alias: XP } }, device: { type: desktop } }
168
- readable: 'Opera 8.52 on Windows XP'
169
- -
170
- headers: 'User-Agent: Opera/8.54 (Windows 95; U; xx)'
171
- result: { browser: { name: Opera, version: '8.54', type: browser }, engine: { name: Presto }, os: { name: Windows, version: { value: '4.0', alias: '95' } }, device: { type: desktop } }
172
- readable: 'Opera 8.54 on Windows 95'
173
- -
174
- headers: 'User-Agent: Opera/9.00 (Windows 95; U; xx)'
175
- result: { browser: { name: Opera, version: '9.00', type: browser }, engine: { name: Presto }, os: { name: Windows, version: { value: '4.0', alias: '95' } }, device: { type: desktop } }
176
- readable: 'Opera 9.00 on Windows 95'
177
- -
178
- headers: 'User-Agent: Opera/9.00 (Windows NT 4.0; U; xx)'
179
- result: { browser: { name: Opera, version: '9.00', type: browser }, engine: { name: Presto }, os: { name: Windows, version: { value: '4.0', alias: 'NT 4.0' } }, device: { type: desktop } }
180
- readable: 'Opera 9.00 on Windows NT 4.0'
181
- -
182
- headers: 'User-Agent: Opera/9.02 (Windows 98; U; xx)'
183
- result: { browser: { name: Opera, version: '9.02', type: browser }, engine: { name: Presto }, os: { name: Windows, version: { value: '4.1', alias: '98' } }, device: { type: desktop } }
184
- readable: 'Opera 9.02 on Windows 98'
185
- -
186
- headers: 'User-Agent: Opera/9.20 (Windows 98; U; xx)'
187
- result: { browser: { name: Opera, version: '9.20', type: browser }, engine: { name: Presto }, os: { name: Windows, version: { value: '4.1', alias: '98' } }, device: { type: desktop } }
188
- readable: 'Opera 9.20 on Windows 98'
189
- -
190
- headers: 'User-Agent: Opera/9.21 (X11; Linux i686; U; xx)'
191
- result: { browser: { name: Opera, version: '9.21', type: browser }, engine: { name: Presto }, os: { name: Linux }, device: { type: desktop } }
192
- readable: 'Opera 9.21 on Linux'
193
- -
194
- headers: 'User-Agent: Opera/9.25 (X11; Linux i686; U; xx)'
195
- result: { browser: { name: Opera, version: '9.25', type: browser }, engine: { name: Presto }, os: { name: Linux }, device: { type: desktop } }
196
- readable: 'Opera 9.25 on Linux'
197
- -
198
- headers: 'User-Agent: Opera/9.26 (Macintosh; Intel Mac OS X; U; xx)'
199
- result: { browser: { name: Opera, version: '9.26', type: browser }, engine: { name: Presto }, os: { name: 'OS X' }, device: { type: desktop, manufacturer: Apple, model: Macintosh } }
200
- readable: 'Opera 9.26 on OS X'
201
- -
202
- headers: 'User-Agent: Opera/9.26 (Windows 95; U; xx)'
203
- result: { browser: { name: Opera, version: '9.26', type: browser }, engine: { name: Presto }, os: { name: Windows, version: { value: '4.0', alias: '95' } }, device: { type: desktop } }
204
- readable: 'Opera 9.26 on Windows 95'
205
- -
206
- headers: 'User-Agent: Opera/9.27 (X11; Linux i686; U; xx)'
207
- result: { browser: { name: Opera, version: '9.27', type: browser }, engine: { name: Presto }, os: { name: Linux }, device: { type: desktop } }
208
- readable: 'Opera 9.27 on Linux'
209
- -
210
- headers: 'User-Agent: Opera/9.52 (X11; Linux x86_64; U; xx)'
211
- result: { browser: { name: Opera, version: '9.52', type: browser }, engine: { name: Presto }, os: { name: Linux }, device: { type: desktop } }
212
- readable: 'Opera 9.52 on Linux'
213
- -
214
- headers: 'User-Agent: Opera/9.63 (Windows NT 5.0; U; xx) Presto/2.1.1'
215
- result: { browser: { name: Opera, version: '9.63', type: browser }, engine: { name: Presto, version: 2.1.1 }, os: { name: Windows, version: { value: '5.0', alias: '2000' } }, device: { type: desktop } }
216
- readable: 'Opera 9.63 on Windows 2000'
217
- -
218
- headers: 'User-Agent: Opera/9.64 (Macintosh; PPC Mac OS X; U; xx) Presto/2.1.1'
219
- result: { browser: { name: Opera, version: '9.64', type: browser }, engine: { name: Presto, version: 2.1.1 }, os: { name: 'OS X' }, device: { type: desktop, manufacturer: Apple, model: Macintosh } }
220
- readable: 'Opera 9.64 on OS X'
221
- -
222
- headers: 'User-Agent: Opera/9.80 (Linux armv7l; U; xx) Presto/2.9.219 Version/12.00'
223
- result: { browser: { name: Opera, version: '12.00', type: browser }, engine: { name: Presto, version: 2.9.219 }, os: { name: Linux }, device: { type: desktop } }
224
- readable: 'Opera 12.00 on Linux'
225
- -
226
- headers: 'User-Agent: Opera/9.80 (Linux i686) Presto/2.12.407 Version/12.50'
227
- result: { browser: { name: Opera, version: '12.50', type: browser }, engine: { name: Presto, version: 2.12.407 }, os: { name: Linux }, device: { type: desktop } }
228
- readable: 'Opera 12.50 on Linux'
229
- -
230
- headers: 'User-Agent: Opera/9.80 (Linux; U) Version/12.17'
231
- result: { browser: { name: Opera, version: '12.17', type: browser }, engine: { name: Presto }, os: { name: Linux }, device: { type: desktop } }
232
- readable: 'Opera 12.17 on Linux'
233
- -
234
- headers: 'User-Agent: Opera/9.80 (Macintosh; Intel Mac OS X 10.10.5) Presto/2.12.388 Version/12.14'
235
- result: { browser: { name: Opera, version: '12.14', type: browser }, engine: { name: Presto, version: 2.12.388 }, os: { name: 'OS X', version: { value: '10.10', nickname: Yosemite } }, device: { type: desktop, manufacturer: Apple, model: Macintosh } }
236
- readable: 'Opera 12.14 on OS X Yosemite 10.10'
237
- -
238
- headers: 'User-Agent: Opera/9.80 (Macintosh; Intel Mac OS X 10.5.8; U; Edition Next; xx) Presto/2.10.269 Version/12.00'
239
- result: { browser: { name: Opera, version: '12.00', type: browser }, engine: { name: Presto, version: 2.10.269 }, os: { name: 'OS X', alias: 'Mac OS X', version: '10.5' }, device: { type: desktop, manufacturer: Apple, model: Macintosh } }
240
- readable: 'Opera Next 12.00 on Mac OS X 10.5'
241
- -
242
- headers: 'User-Agent: Opera/9.80 (Macintosh; Intel Mac OS X 10.6.8; U; Edition Labs HTML5 Parser; xx) Presto/2.9.181 Version/12.00'
243
- result: { browser: { name: Opera, version: '12.00', type: browser }, engine: { name: Presto, version: 2.9.181 }, os: { name: 'OS X', alias: 'Mac OS X', version: '10.6' }, device: { type: desktop, manufacturer: Apple, model: Macintosh } }
244
- readable: 'Opera Labs 12.00 on Mac OS X 10.6'
245
- -
246
- headers: 'User-Agent: Opera/9.80 (Macintosh; Intel Mac OS X 10.7.3; U; Edition MacAppStore; xx) Presto/2.9.168 Version/11.51'
247
- result: { browser: { name: Opera, version: '11.51', type: browser }, engine: { name: Presto, version: 2.9.168 }, os: { name: 'OS X', version: { value: '10.7', nickname: Lion } }, device: { type: desktop, manufacturer: Apple, model: Macintosh } }
248
- readable: 'Opera 11.51 on OS X Lion 10.7'
249
- -
250
- headers: 'User-Agent: Opera/9.80 (Macintosh; Intel Mac OS X 10.8.2) Presto/2.12.388 Version/12.15'
251
- result: { browser: { name: Opera, version: '12.15', type: browser }, engine: { name: Presto, version: 2.12.388 }, os: { name: 'OS X', version: { value: '10.8', nickname: 'Mountain Lion' } }, device: { type: desktop, manufacturer: Apple, model: Macintosh } }
252
- readable: 'Opera 12.15 on OS X Mountain Lion 10.8'
253
- -
254
- headers: 'User-Agent: Opera/9.80 (Macintosh; Intel Mac OS X 10.8.2; Edition Next) Presto/2.12.388 Version/12.10'
255
- result: { browser: { name: Opera, version: '12.10', type: browser }, engine: { name: Presto, version: 2.12.388 }, os: { name: 'OS X', version: { value: '10.8', nickname: 'Mountain Lion' } }, device: { type: desktop, manufacturer: Apple, model: Macintosh } }
256
- readable: 'Opera Next 12.10 on OS X Mountain Lion 10.8'
257
- -
258
- headers: 'User-Agent: Opera/9.80 (Macintosh; Intel Mac OS X 10.8.2; Mac App Store Edition) Presto/2.12.388 Version/12.11'
259
- result: { browser: { name: Opera, version: '12.11', type: browser }, engine: { name: Presto, version: 2.12.388 }, os: { name: 'OS X', version: { value: '10.8', nickname: 'Mountain Lion' } }, device: { type: desktop, manufacturer: Apple, model: Macintosh } }
260
- readable: 'Opera 12.11 on OS X Mountain Lion 10.8'
261
- -
262
- headers: 'User-Agent: Opera/9.80 (Macintosh; Intel Mac OS X 10.8.4) Presto/2.12.388 Version/12.12'
263
- result: { browser: { name: Opera, version: '12.12', type: browser }, engine: { name: Presto, version: 2.12.388 }, os: { name: 'OS X', version: { value: '10.8', nickname: 'Mountain Lion' } }, device: { type: desktop, manufacturer: Apple, model: Macintosh } }
264
- readable: 'Opera 12.12 on OS X Mountain Lion 10.8'
265
- -
266
- headers: 'User-Agent: Opera/9.80 (Macintosh; Intel Mac OS X 10.9.2; U; Edition Next; xx) Presto/2.11.310 Version/12.50'
267
- result: { browser: { name: Opera, version: '12.50', type: browser }, engine: { name: Presto, version: 2.11.310 }, os: { name: 'OS X', version: { value: '10.9', nickname: Mavericks } }, device: { type: desktop, manufacturer: Apple, model: Macintosh } }
268
- readable: 'Opera Next 12.50 on OS X Mavericks 10.9'
269
- -
270
- headers: 'User-Agent: Opera/9.80 (Macintosh; PPC Mac OS X; U; xx) Presto/2.6.30 Version/10.60'
271
- result: { browser: { name: Opera, version: '10.60', type: browser }, engine: { name: Presto, version: 2.6.30 }, os: { name: 'OS X' }, device: { type: desktop, manufacturer: Apple, model: Macintosh } }
272
- readable: 'Opera 10.60 on OS X'
273
- -
274
- headers: 'User-Agent: Opera/9.80 (Windows 98; U; xx) Presto/2.10.229 Version/11.62'
275
- result: { browser: { name: Opera, version: '11.62', type: browser }, engine: { name: Presto, version: 2.10.229 }, os: { name: Windows, version: { value: '4.1', alias: '98' } }, device: { type: desktop } }
276
- readable: 'Opera 11.62 on Windows 98'
277
- -
278
- headers: 'User-Agent: Opera/9.80 (Windows ME; U; xx) Presto/2.10.229 Version/11.60'
279
- result: { browser: { name: Opera, version: '11.60', type: browser }, engine: { name: Presto, version: 2.10.229 }, os: { name: Windows, version: { value: '4.9', alias: ME } }, device: { type: desktop } }
280
- readable: 'Opera 11.60 on Windows ME'
281
- -
282
- headers: 'User-Agent: Opera/9.80 (Windows NT 5.0; U; xx) Presto/2.2.15 Version/10.10'
283
- result: { browser: { name: Opera, version: '10.10', type: browser }, engine: { name: Presto, version: 2.2.15 }, os: { name: Windows, version: { value: '5.0', alias: '2000' } }, device: { type: desktop } }
284
- readable: 'Opera 10.10 on Windows 2000'
285
- -
286
- headers: 'User-Agent: Opera/9.80 (Windows NT 5.1; Edition IBIS) Presto/2.12.388 Version/12.11'
287
- result: { browser: { name: Opera, version: '12.11', type: browser }, engine: { name: Presto, version: 2.12.388 }, os: { name: Windows, version: { value: '5.1', alias: XP } }, device: { type: desktop } }
288
- readable: 'Opera 12.11 on Windows XP'
289
- -
290
- headers: 'User-Agent: Opera/9.80 (Windows NT 5.1; Edition Labs ) Presto/2.12.388 Version/12.17'
291
- result: { browser: { name: Opera, version: '12.17', type: browser }, engine: { name: Presto, version: 2.12.388 }, os: { name: Windows, version: { value: '5.1', alias: XP } }, device: { type: desktop } }
292
- readable: 'Opera Labs 12.17 on Windows XP'
293
- -
294
- headers: 'User-Agent: Opera/9.80 (Windows NT 5.1; Edition Next) Presto/2.12.370 Version/12.50'
295
- result: { browser: { name: Opera, version: '12.50', type: browser }, engine: { name: Presto, version: 2.12.370 }, os: { name: Windows, version: { value: '5.1', alias: XP } }, device: { type: desktop } }
296
- readable: 'Opera Next 12.50 on Windows XP'
297
- -
298
- headers: 'User-Agent: Opera/9.80 (Windows NT 5.1; U; Edition Next; Edition IBIS; xx) Presto/2.10.238 Version/12.00'
299
- result: { browser: { name: Opera, version: '12.00', type: browser }, engine: { name: Presto, version: 2.10.238 }, os: { name: Windows, version: { value: '5.1', alias: XP } }, device: { type: desktop } }
300
- readable: 'Opera Next 12.00 on Windows XP'
301
- -
302
- headers: 'User-Agent: Opera/9.80 (Windows NT 5.1; U; Edition Next; xx) Presto/2.11.310 Version/12.50'
303
- result: { browser: { name: Opera, version: '12.50', type: browser }, engine: { name: Presto, version: 2.11.310 }, os: { name: Windows, version: { value: '5.1', alias: XP } }, device: { type: desktop } }
304
- readable: 'Opera Next 12.50 on Windows XP'
305
- -
306
- headers: 'User-Agent: Opera/9.80 (Windows NT 5.1; U; xx) Presto/2.7.62 Version/11.01'
307
- result: { browser: { name: Opera, version: '11.01', type: browser }, engine: { name: Presto, version: 2.7.62 }, os: { name: Windows, version: { value: '5.1', alias: XP } }, device: { type: desktop } }
308
- readable: 'Opera 11.01 on Windows XP'
309
- -
310
- headers: 'User-Agent: Opera/9.80 (Windows NT 5.2; U; Edition Labs HTML5 Parser; xx) Presto/2.9.181 Version/12.00'
311
- result: { browser: { name: Opera, version: '12.00', type: browser }, engine: { name: Presto, version: 2.9.181 }, os: { name: Windows, version: { value: '5.2', alias: 'Server 2003' } }, device: { type: desktop } }
312
- readable: 'Opera Labs 12.00 on Windows Server 2003'
313
- -
314
- headers: 'User-Agent: Opera/9.80 (Windows NT 5.2; U; Edition Next; xx) Presto/2.10.289 Version/12.00'
315
- result: { browser: { name: Opera, version: '12.00', type: browser }, engine: { name: Presto, version: 2.10.289 }, os: { name: Windows, version: { value: '5.2', alias: 'Server 2003' } }, device: { type: desktop } }
316
- readable: 'Opera Next 12.00 on Windows Server 2003'
317
- -
318
- headers: 'User-Agent: Opera/9.80 (Windows NT 5.2; WOW64; U; Edition Next; xx) Presto/2.10.282 Version/12.00'
319
- result: { browser: { name: Opera, version: '12.00', type: browser }, engine: { name: Presto, version: 2.10.282 }, os: { name: Windows, version: { value: '5.2', alias: 'Server 2003' } }, device: { type: desktop } }
320
- readable: 'Opera Next 12.00 on Windows Server 2003'
321
- -
322
- headers: 'User-Agent: Opera/9.80 (Windows NT 5.2; WOW64; U; xx) Presto/2.10.289 Version/12.02'
323
- result: { browser: { name: Opera, version: '12.02', type: browser }, engine: { name: Presto, version: 2.10.289 }, os: { name: Windows, version: { value: '5.2', alias: 'Server 2003' } }, device: { type: desktop } }
324
- readable: 'Opera 12.02 on Windows Server 2003'
325
- -
326
- headers: 'User-Agent: Opera/9.80 (Windows NT 5.2; Win64; x64; Edition Next) Presto/2.12.388 Version/12.13'
327
- result: { browser: { name: Opera, version: '12.13', type: browser }, engine: { name: Presto, version: 2.12.388 }, os: { name: Windows, version: { value: '5.2', alias: 'Server 2003' } }, device: { type: desktop } }
328
- readable: 'Opera Next 12.13 on Windows Server 2003'
329
- -
330
- headers: 'User-Agent: Opera/9.80 (Windows NT 5.2; Win64; x64; U; Edition Next; xx) Presto/2.10.289 Version/12.00'
331
- result: { browser: { name: Opera, version: '12.00', type: browser }, engine: { name: Presto, version: 2.10.289 }, os: { name: Windows, version: { value: '5.2', alias: 'Server 2003' } }, device: { type: desktop } }
332
- readable: 'Opera Next 12.00 on Windows Server 2003'
333
- -
334
- headers: 'User-Agent: Opera/9.80 (Windows NT 6.0) Presto/2.12.388 Version/12.15'
335
- result: { browser: { name: Opera, version: '12.15', type: browser }, engine: { name: Presto, version: 2.12.388 }, os: { name: Windows, version: { value: '6.0', alias: Vista } }, device: { type: desktop } }
336
- readable: 'Opera 12.15 on Windows Vista'
337
- -
338
- headers: 'User-Agent: Opera/9.80 (Windows NT 6.0; U; IBM EVV/3.0/EAK01AG9/LE; Edition NCSD0; xx) Presto/2.10.229 Version/11.62'
339
- result: { browser: { name: Opera, version: '11.62', type: browser }, engine: { name: Presto, version: 2.10.229 }, os: { name: Windows, version: { value: '6.0', alias: Vista } }, device: { type: desktop } }
340
- readable: 'Opera 11.62 on Windows Vista'
341
- -
342
- headers: 'User-Agent: Opera/9.80 (Windows NT 6.0; U; xx) Presto/2.5.24 Version/10.53'
343
- result: { browser: { name: Opera, version: '10.53', type: browser }, engine: { name: Presto, version: 2.5.24 }, os: { name: Windows, version: { value: '6.0', alias: Vista } }, device: { type: desktop } }
344
- readable: 'Opera 10.53 on Windows Vista'
345
- -
346
- headers: 'User-Agent: Opera/9.80 (Windows NT 6.0; WOW64; Edition Next) Presto/2.12.388 Version/12.12'
347
- result: { browser: { name: Opera, version: '12.12', type: browser }, engine: { name: Presto, version: 2.12.388 }, os: { name: Windows, version: { value: '6.0', alias: Vista } }, device: { type: desktop } }
348
- readable: 'Opera Next 12.12 on Windows Vista'
349
- -
350
- headers: 'User-Agent: Opera/9.80 (Windows NT 6.0; Win64; x64; U; Edition Next; xx) Presto/2.11.310 Version/12.50'
351
- result: { browser: { name: Opera, version: '12.50', type: browser }, engine: { name: Presto, version: 2.11.310 }, os: { name: Windows, version: { value: '6.0', alias: Vista } }, device: { type: desktop } }
352
- readable: 'Opera Next 12.50 on Windows Vista'
353
- -
354
- headers: 'User-Agent: Opera/9.80 (Windows NT 6.1; U; Edition Labs HTML5 Parser; xx) Presto/2.9.181 Version/12.00'
355
- result: { browser: { name: Opera, version: '12.00', type: browser }, engine: { name: Presto, version: 2.9.181 }, os: { name: Windows, version: { value: '6.1', alias: '7' } }, device: { type: desktop } }
356
- readable: 'Opera Labs 12.00 on Windows 7'
357
- -
358
- headers: 'User-Agent: Opera/9.80 (Windows NT 6.1; U; xx) Presto/2.6.31 Version/10.70'
359
- result: { browser: { name: Opera, version: '10.70', type: browser }, engine: { name: Presto, version: 2.6.31 }, os: { name: Windows, version: { value: '6.1', alias: '7' } }, device: { type: desktop } }
360
- readable: 'Opera 10.70 on Windows 7'
361
- -
362
- headers: 'User-Agent: Opera/9.80 (Windows NT 6.1; U;) Presto/2.10.229 Version/11.61'
363
- result: { browser: { name: Opera, version: '11.61', type: browser }, engine: { name: Presto, version: 2.10.229 }, os: { name: Windows, version: { value: '6.1', alias: '7' } }, device: { type: desktop } }
364
- readable: 'Opera 11.61 on Windows 7'
365
- -
366
- headers: 'User-Agent: Opera/9.80 (Windows NT 6.1; WOW64; Edition Labs ) Presto/2.12.388 Version/12.15'
367
- result: { browser: { name: Opera, version: '12.15', type: browser }, engine: { name: Presto, version: 2.12.388 }, os: { name: Windows, version: { value: '6.1', alias: '7' } }, device: { type: desktop } }
368
- readable: 'Opera Labs 12.15 on Windows 7'
369
- -
370
- headers: 'User-Agent: Opera/9.80 (Windows NT 6.1; Win64; x64; U; xx)'
371
- result: { browser: { name: Opera, version: '9.80', type: browser }, engine: { name: Presto }, os: { name: Windows, version: { value: '6.1', alias: '7' } }, device: { type: desktop } }
372
- readable: 'Opera 9.80 on Windows 7'
373
- -
374
- headers: 'User-Agent: Opera/9.80 (Windows NT 6.2) Presto/2.12.388 Version/12.10'
375
- result: { browser: { name: Opera, version: '12.10', type: browser }, engine: { name: Presto, version: 2.12.388 }, os: { name: Windows, version: { value: '6.2', alias: '8' } }, device: { type: desktop } }
376
- readable: 'Opera 12.10 on Windows 8'
377
- -
378
- headers: 'User-Agent: Opera/9.80 (Windows) Version/12.02'
379
- result: { browser: { name: Opera, version: '12.02', type: browser }, engine: { name: Presto }, os: { name: Windows }, device: { type: desktop } }
380
- readable: 'Opera 12.02 on Windows'
381
- -
382
- headers: 'User-Agent: Opera/9.80 (Windows) Version/12.10'
383
- result: { browser: { name: Opera, version: '12.10', type: browser }, engine: { name: Presto }, os: { name: Windows }, device: { type: desktop } }
384
- readable: 'Opera 12.10 on Windows'
385
- -
386
- headers: 'User-Agent: Opera/9.80 (X11; FreeBSD 8.4-RELEASE-p1 i386) Presto/2.12.388 Version/12.16'
387
- result: { browser: { name: Opera, version: '12.16', type: browser }, engine: { name: Presto, version: 2.12.388 }, os: { name: FreeBSD, family: BSD, version: '8.4' }, device: { type: desktop } }
388
- readable: 'Opera 12.16 on FreeBSD 8.4'
389
- -
390
- headers: 'User-Agent: Opera/9.80 (X11; Linux i686; U; Edition Labs Camera and Pages; xx) Presto/2.9.220 Version/12.00'
391
- result: { browser: { name: Opera, version: '12.00', type: browser }, engine: { name: Presto, version: 2.9.220 }, os: { name: Linux }, device: { type: desktop } }
392
- readable: 'Opera Labs 12.00 on Linux'
393
- -
394
- headers: 'User-Agent: Opera/9.80 (X11; Linux i686; U; xx) Presto/2.6.30 Version/10.60'
395
- result: { browser: { name: Opera, version: '10.60', type: browser }, engine: { name: Presto, version: 2.6.30 }, os: { name: Linux }, device: { type: desktop } }
396
- readable: 'Opera 10.60 on Linux'
397
- -
398
- headers: 'User-Agent: Opera/9.80 (X11; Linux x86_64) Presto/2.12.388 Version/12.16'
399
- result: { browser: { name: Opera, version: '12.16', type: browser }, engine: { name: Presto, version: 2.12.388 }, os: { name: Linux }, device: { type: desktop } }
400
- readable: 'Opera 12.16 on Linux'
401
- -
402
- headers: 'User-Agent: Opera/9.80 (X11; Linux x86_64; U; xx) Presto/2.6.30 Version/10.63'
403
- result: { browser: { name: Opera, version: '10.63', type: browser }, engine: { name: Presto, version: 2.6.30 }, os: { name: Linux }, device: { type: desktop } }
404
- readable: 'Opera 10.63 on Linux'
405
- -
406
- headers: 'User-Agent: Opera/9.80 (X11; SunOS i86pc; U; xx) Presto/2.2.15 Version/10.11'
407
- result: { browser: { name: Opera, version: '10.11', type: browser }, engine: { name: Presto, version: 2.2.15 }, os: { name: Solaris, family: UNIX }, device: { type: desktop } }
408
- readable: 'Opera 10.11 on Solaris'
409
- -
410
- headers: 'User-Agent: Opera/9.0 (Macintosh; U; PPC Mac OS; de)'
411
- result: { browser: { name: Opera, version: '9.0', type: browser }, engine: { name: Presto }, os: { name: 'Mac OS' }, device: { type: desktop, manufacturer: Apple, model: Macintosh } }
412
- readable: 'Opera 9.0 on Mac OS'
413
- -
414
- headers: 'User-Agent: Opera/6.0 (Macintosh; PPC; U) [en]'
415
- result: { browser: { name: Opera, version: '6.0', type: browser }, engine: { name: Electra }, os: { name: 'Mac OS' }, device: { type: desktop, manufacturer: Apple, model: Macintosh } }
416
- readable: 'Opera 6.0 on Mac OS'
417
- -
418
- headers: 'User-Agent: Opera/5.0 (Macintosh;US;PPC) TP [en]'
419
- result: { browser: { name: Opera, version: '5.0', type: browser }, engine: { name: Electra }, os: { name: 'Mac OS' }, device: { type: desktop, manufacturer: Apple, model: Macintosh } }
420
- readable: 'Opera 5.0 on Mac OS'
421
- -
422
- headers: 'User-Agent: Opera/5.0 (Macintosh;US;PPC) [en]'
423
- result: { browser: { name: Opera, version: '5.0', type: browser }, engine: { name: Electra }, os: { name: 'Mac OS' }, device: { type: desktop, manufacturer: Apple, model: Macintosh } }
424
- readable: 'Opera 5.0 on Mac OS'
425
- -
426
- headers: 'User-Agent: Opera/9.80 (Windows NT 6.2; Win64; x64) Presto/2.12.388 Version/12.16'
427
- useragent: 'Opera/9.80 (Windows NT 6.2; Win64; x64) Presto/2.12.388 Version/12.16'
428
- engine: 2
429
- features: 94
430
- result: { browser: { name: Opera, version: '12.16', type: browser }, engine: { name: Presto, version: 2.12.388 }, os: { name: Windows, version: { value: '6.2', alias: '8' } }, device: { type: desktop } }
431
- readable: 'Opera 12.16 on Windows 8'
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
includes/vendor/whichbrowser/parser/tests/data/desktop/browser-other.yaml DELETED
@@ -1,160 +0,0 @@
1
- -
2
- headers: 'User-Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; Avant Browser; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; CPDTDF; Avant Browser)'
3
- result: { browser: { name: 'Avant Browser', type: browser }, engine: { name: Trident, version: '4.0' }, os: { name: Windows, version: { value: '6.1', alias: '7' } }, device: { type: desktop, manufacturer: Compaq } }
4
- readable: 'Avant Browser on Windows 7'
5
- -
6
- headers: 'User-Agent: Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; WOW64; Trident/6.0; Avant Browser)'
7
- result: { browser: { name: 'Avant Browser', type: browser }, engine: { name: Trident, version: '6.0' }, os: { name: Windows, version: { value: '6.2', alias: '8' } }, device: { type: desktop } }
8
- readable: 'Avant Browser on Windows 8'
9
- -
10
- headers: 'User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.2; Trident/5.0; SlimBrowser)'
11
- result: { browser: { name: SlimBrowser, type: browser }, engine: { name: Trident, version: '5.0' }, os: { name: Windows, version: { value: '6.2', alias: '8' } }, device: { type: desktop } }
12
- readable: 'SlimBrowser on Windows 8'
13
- -
14
- headers: 'User-Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; InfoPath.2; SlimBrowser/7.00.061)'
15
- result: { browser: { name: SlimBrowser, version: 7.00.061, type: browser }, engine: { name: Trident, version: '4.0' }, os: { name: Windows, version: { value: '5.1', alias: XP } }, device: { type: desktop } }
16
- readable: 'SlimBrowser 7.00.061 on Windows XP'
17
- -
18
- headers: 'User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; BTRS122335; 126BROWSER; .NET CLR 2.0.50727)'
19
- result: { browser: { name: '126 Browser', type: browser }, os: { name: Windows, version: { value: '5.1', alias: XP } }, device: { type: desktop } }
20
- readable: '126 Browser on Windows XP'
21
- -
22
- headers: 'User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322; TheWorld)'
23
- result: { browser: { name: 'The World', type: browser }, os: { name: Windows, version: { value: '5.1', alias: XP } }, device: { type: desktop } }
24
- readable: 'The World on Windows XP'
25
- -
26
- headers: 'User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322; Shuame; TheWorld 6)'
27
- result: { browser: { name: 'The World', version: '6', type: browser }, os: { name: Windows, version: { value: '5.1', alias: XP } }, device: { type: desktop } }
28
- readable: 'The World 6 on Windows XP'
29
- -
30
- headers: 'User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Trident/4.0; TheWorld)'
31
- result: { browser: { name: 'The World', type: browser }, engine: { name: Trident, version: '4.0' }, os: { name: Windows, version: { value: '5.1', alias: XP } }, device: { type: desktop } }
32
- readable: 'The World on Windows XP'
33
- -
34
- headers: 'User-Agent: Mozilla/5.0 (N; Windows NT 5.1) AppleWebKit/534.34 (KHTML, like Gecko) Raptr Safari/534.34'
35
- result: { browser: { name: Raptr, type: 'app:game' }, engine: { name: Webkit, version: '534.34' }, os: { name: Windows, version: { value: '5.1', alias: XP } }, device: { type: desktop } }
36
- readable: 'Raptr on Windows XP'
37
- -
38
- headers: 'User-Agent: Mozilla/5.0 (N; Windows NT 6.2; WOW64) AppleWebKit/534.34 (KHTML, like Gecko) Raptr Safari/534.34'
39
- result: { browser: { name: Raptr, type: 'app:game' }, engine: { name: Webkit, version: '534.34' }, os: { name: Windows, version: { value: '6.2', alias: '8' } }, device: { type: desktop } }
40
- readable: 'Raptr on Windows 8'
41
- -
42
- headers: 'User-Agent: Mozilla/5.0 (Macintosh; PPC Mac OS X 10.4; rv:10.0.10) Gecko/20121024 Firefox/10.0.10 TenFourFox/7450'
43
- result: { browser: { name: TenFourFox, family: { name: Firefox, version: 10.0.10 }, type: browser }, engine: { name: Gecko, version: 10.0.10 }, os: { name: 'OS X', alias: 'Mac OS X', version: '10.4' }, device: { type: desktop, manufacturer: Apple, model: Macintosh } }
44
- readable: 'TenFourFox on Mac OS X 10.4'
45
- -
46
- headers: 'User-Agent: Mozilla/5.0 (Macintosh; PPC Mac OS X 10.5; rv:5.0) Gecko/20110616 Firefox/5.0 TenFourFox/G5'
47
- result: { browser: { name: TenFourFox, family: { name: Firefox, version: '5.0' }, type: browser }, engine: { name: Gecko, version: '5.0' }, os: { name: 'OS X', alias: 'Mac OS X', version: '10.5' }, device: { type: desktop, manufacturer: Apple, model: Macintosh } }
48
- readable: 'TenFourFox on Mac OS X 10.5'
49
- -
50
- headers: 'User-Agent: Mozilla/5.0 (Macintosh; PPC Mac OS X 10.5; rv:38.0) Gecko/20100101 Firefox/38.0 TenFourFox/7400'
51
- result: { browser: { name: TenFourFox, family: { name: Firefox, version: '38.0' }, type: browser }, engine: { name: Gecko, version: '38.0' }, os: { name: 'OS X', alias: 'Mac OS X', version: '10.5' }, device: { type: desktop, manufacturer: Apple, model: Macintosh } }
52
- readable: 'TenFourFox on Mac OS X 10.5'
53
- -
54
- headers: 'User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 7Star/1.45.0.407 Safari/537.36'
55
- result: { browser: { name: 7Star, family: { name: Chrome, version: 45 }, version: 1.45.0.407, type: browser }, engine: { name: Blink }, os: { name: Windows, version: { value: '6.1', alias: '7' } }, device: { type: desktop } }
56
- readable: '7Star 1.45.0.407 on Windows 7'
57
- -
58
- headers: 'User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_0) AppleWebKit/537.36 (KHTML, like Gecko) Iridium/43.8 Safari/537.36 Chrome/43.0.2357.132'
59
- result: { browser: { name: Iridium, family: { name: Chrome, version: 43 }, version: '43.8', type: browser }, engine: { name: Blink }, os: { name: 'OS X', version: { value: '10.11', nickname: 'El Capitan' } }, device: { type: desktop, manufacturer: Apple, model: Macintosh } }
60
- readable: 'Iridium 43.8 on OS X El Capitan 10.11'
61
- -
62
- headers: 'User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Iridium/41.2 Safari/537.36 Chrome/41.0.2272.118'
63
- result: { browser: { name: Iridium, family: { name: Chrome, version: 41 }, version: '41.2', type: browser }, engine: { name: Blink }, os: { name: Linux }, device: { type: desktop } }
64
- readable: 'Iridium 41.2 on Linux'
65
- -
66
- headers: 'User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.99 Safari/537.36 2345Explorer/6.1.0.8495'
67
- result: { browser: { name: '2345 Explorer', family: { name: Chrome, version: 39 }, version: 6.1.0, type: browser }, engine: { name: Blink }, os: { name: Windows, version: { value: '10.0', alias: '10' } }, device: { type: desktop } }
68
- readable: '2345 Explorer 6.1.0 on Windows 10'
69
- -
70
- headers: 'User-Agent: Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1650.69 Safari/537.36 2345chrome v2.5.0.4435'
71
- result: { browser: { name: '2345 Chrome', family: { name: Chrome, version: 31 }, version: 2.5.0, type: browser }, engine: { name: Blink }, os: { name: Windows, version: { value: '5.1', alias: XP } }, device: { type: desktop } }
72
- readable: '2345 Chrome 2.5.0 on Windows XP'
73
- -
74
- headers: 'User-Agent: Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.99 Safari/537.36 2345Explorer v6.0.0.7505'
75
- result: { browser: { name: '2345 Explorer', family: { name: Chrome, version: 39 }, version: 6.0.0, type: browser }, engine: { name: Blink }, os: { name: Windows, version: { value: '6.1', alias: '7' } }, device: { type: desktop } }
76
- readable: '2345 Explorer 6.0.0 on Windows 7'
77
- -
78
- headers: 'User-Agent: Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.99 Safari/537.36 2345chrome v3.0.0.6668'
79
- result: { browser: { name: '2345 Chrome', family: { name: Chrome, version: 39 }, version: 3.0.0, type: browser }, engine: { name: Blink }, os: { name: Windows, version: { value: '6.1', alias: '7' } }, device: { type: desktop } }
80
- readable: '2345 Chrome 3.0.0 on Windows 7'
81
- -
82
- headers: 'User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.114 Safari/537.36 Swing/2.4.2.0'
83
- result: { browser: { name: 'Swing Browser', family: { name: Chrome, version: 35 }, version: 2.4.2, type: browser }, engine: { name: Blink }, os: { name: Windows, version: { value: '10.0', alias: '10' } }, device: { type: desktop } }
84
- readable: 'Swing Browser 2.4.2 on Windows 10'
85
- -
86
- headers: 'User-Agent: Mozilla/5.0 (Windows NT 10.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.114 Safari/537.36 Swing/2.5.0.3'
87
- result: { browser: { name: 'Swing Browser', family: { name: Chrome, version: 35 }, version: 2.5.0, type: browser }, engine: { name: Blink }, os: { name: Windows, version: { value: '10.0', alias: '10' } }, device: { type: desktop } }
88
- readable: 'Swing Browser 2.5.0 on Windows 10'
89
- -
90
- headers: 'User-Agent: Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.152 Safari/537.22 Swing/1.0.0.40'
91
- result: { browser: { name: 'Swing Browser', family: { name: Chrome, version: 25 }, version: 1.0.0, type: browser }, engine: { name: Webkit, version: '537.22' }, os: { name: Windows, version: { value: '5.1', alias: XP } }, device: { type: desktop } }
92
- readable: 'Swing Browser 1.0.0 on Windows XP'
93
- -
94
- headers: 'User-Agent: Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.152 Safari/537.22 Swing/1.1.2.0'
95
- result: { browser: { name: 'Swing Browser', family: { name: Chrome, version: 25 }, version: 1.1.2, type: browser }, engine: { name: Webkit, version: '537.22' }, os: { name: Windows, version: { value: '5.1', alias: XP } }, device: { type: desktop } }
96
- readable: 'Swing Browser 1.1.2 on Windows XP'
97
- -
98
- headers: 'User-Agent: Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.152 Safari/537.22 Swing/1.3.2.0'
99
- result: { browser: { name: 'Swing Browser', family: { name: Chrome, version: 25 }, version: 1.3.2, type: browser }, engine: { name: Webkit, version: '537.22' }, os: { name: Windows, version: { value: '5.1', alias: XP } }, device: { type: desktop } }
100
- readable: 'Swing Browser 1.3.2 on Windows XP'
101
- -
102
- headers: 'User-Agent: Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.114 Safari/537.36 Swing/2.4.2.0'
103
- result: { browser: { name: 'Swing Browser', family: { name: Chrome, version: 35 }, version: 2.4.2, type: browser }, engine: { name: Blink }, os: { name: Windows, version: { value: '5.1', alias: XP } }, device: { type: desktop } }
104
- readable: 'Swing Browser 2.4.2 on Windows XP'
105
- -
106
- headers: 'User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/534.24 (KHTML, like Gecko) Chrome/11.0.696.34 Safari/534.24 Swing(And)/1.10.5.0'
107
- result: { browser: { name: 'Swing Browser', family: { name: Chrome, version: 11 }, version: 1.10.5, type: browser }, engine: { name: Webkit, version: '534.24' }, os: { name: Linux }, device: { type: desktop } }
108
- readable: 'Swing Browser 1.10.5 on Linux'
109
- -
110
- headers: 'User-Agent: Mozilla/5.0 (X11; Linux i686) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.115 Otter/0.9.08'
111
- result: { browser: { name: Otter, family: { name: Chrome, version: 40 }, version: 0.9.08, type: browser }, engine: { name: Blink }, os: { name: Linux }, device: { type: desktop } }
112
- readable: 'Otter 0.9.08 on Linux'
113
- -
114
- headers: 'User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.115 Otter/0.9.07'
115
- result: { browser: { name: Otter, family: { name: Chrome, version: 40 }, version: 0.9.07, type: browser }, engine: { name: Blink }, os: { name: Linux }, device: { type: desktop } }
116
- readable: 'Otter 0.9.07 on Linux'
117
- -
118
- headers: 'User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.157 Safari/537.36 TungstenBrowser/2.0'
119
- result: { browser: { name: 'Tungsten Browser', family: { name: Chrome, version: 44 }, version: '2.0', type: browser }, engine: { name: Blink }, os: { name: Windows, version: { value: '10.0', alias: '10' } }, device: { type: desktop } }
120
- readable: 'Tungsten Browser 2.0 on Windows 10'
121
- -
122
- headers: 'User-Agent: Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/29.0.1547.66 Beamrise/29.3.0.6900 Safari/537.36'
123
- result: { browser: { name: Beamrise, family: { name: Chrome, version: 29 }, version: 29.3.0.6900, type: browser }, engine: { name: Blink }, os: { name: Windows, version: { value: '6.1', alias: '7' } }, device: { type: desktop } }
124
- readable: 'Beamrise 29.3.0.6900 on Windows 7'
125
- -
126
- headers: 'User-Agent: Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1650.63 Safari/537.36 115Browser/5.1.6'
127
- result: { browser: { name: '115 Browser', family: { name: Chrome, version: 31 }, version: 5.1.6, type: browser }, engine: { name: Blink }, os: { name: Windows, version: { value: '5.1', alias: XP } }, device: { type: desktop } }
128
- readable: '115 Browser 5.1.6 on Windows XP'
129
- -
130
- headers: 'User-Agent: Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1650.63 Safari/537.36 115Browser/5.2.2'
131
- result: { browser: { name: '115 Browser', family: { name: Chrome, version: 31 }, version: 5.2.2, type: browser }, engine: { name: Blink }, os: { name: Windows, version: { value: '5.1', alias: XP } }, device: { type: desktop } }
132
- readable: '115 Browser 5.2.2 on Windows XP'
133
- -
134
- headers: 'User-Agent: Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/21.0.1180.79 Safari/537.1 115Chrome/1.0.3'
135
- result: { browser: { name: '115 Chrome', family: { name: Chrome, version: 21 }, version: 1.0.3, type: browser }, engine: { name: Webkit, version: '537.1' }, os: { name: Windows, version: { value: '6.1', alias: '7' } }, device: { type: desktop } }
136
- readable: '115 Chrome 1.0.3 on Windows 7'
137
- -
138
- headers: 'User-Agent: Mozilla/4.0 (compatible; Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; GTB6; Acoo Browser; .NET CLR 1.1.4322; .NET CLR 2.0.50727); Windows NT 5.1; Trident/4.0; Maxthon; .NET CLR 2.0.50727; .NET CLR 1.1.4322; InfoPath.2)'
139
- readable: 'Acoo Browser on Windows XP'
140
- result: { browser: { name: 'Acoo Browser', type: browser }, engine: { name: Trident, version: '4.0' }, os: { name: Windows, version: { value: '5.1', alias: XP } }, device: { type: desktop } }
141
- -
142
- headers: 'User-Agent: Mozilla/4.5 (compatible; iCab 2.7.1; Macintosh; I; PPC)'
143
- readable: 'iCab 2.7.1 on Mac OS'
144
- result: { browser: { name: iCab, version: 2.7.1, type: browser }, os: { name: 'Mac OS' }, device: { type: desktop, manufacturer: Apple, model: Macintosh } }
145
- -
146
- headers: 'User-Agent: Mozilla/4.5 (compatible; iCab 2.9.8; Macintosh; U; PPC)'
147
- readable: 'iCab 2.9.8 on Mac OS'
148
- result: { browser: { name: iCab, version: 2.9.8, type: browser }, os: { name: 'Mac OS' }, device: { type: desktop, manufacturer: Apple, model: Macintosh } }
149
- -
150
- headers: 'User-Agent: Mozilla/4.5 (compatible; iCab Pre2.3; Macintosh; I; PPC)'
151
- readable: 'iCab 2.3 on Mac OS'
152
- result: { browser: { name: iCab, version: '2.3', type: browser }, os: { name: 'Mac OS' }, device: { type: desktop, manufacturer: Apple, model: Macintosh } }
153
- -
154
- headers: 'User-Agent: Mozilla/4/5 (compatible; iCab 2.9.8; Macintosh; U; 68K)'
155
- readable: 'iCab 2.9.8 on Mac OS'
156
- result: { browser: { name: iCab, version: 2.9.8, type: browser }, os: { name: 'Mac OS' }, device: { type: desktop, manufacturer: Apple, model: Macintosh } }
157
- -
158
- headers: 'User-Agent: Mozilla/5.0 (compatible; iCab 3.0.3; Macintosh; U; PPC Mac OS)'
159
- readable: 'iCab 3.0.3 on Mac OS'
160
- result: { browser: { name: iCab, version: 3.0.3, type: browser }, os: { name: 'Mac OS' }, device: { type: desktop, manufacturer: Apple, model: Macintosh } }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
includes/vendor/whichbrowser/parser/tests/data/desktop/browser-qq.yaml DELETED
@@ -1,68 +0,0 @@
1
- -
2
- headers: 'User-Agent: AppleWebKit/532.7 (KHTML, like Gecko) Chrome/4.0.271.1 Safari/532.7 TencentTraveler/5.0 QQBrowser/5.0.6642.400 (webkit)'
3
- result: { browser: { name: 'QQ Browser', family: { name: Chrome, version: 4 }, version: '5.0', type: browser }, engine: { name: Webkit, version: '532.7' }, os: { name: Windows }, device: { type: desktop } }
4
- readable: 'QQ Browser 5.0 on Windows'
5
- -
6
- headers: 'User-Agent: Mozilla/4.0 (compatible; ; QDesk 2.3.1183.202; Windows NT 6.1; Trident/5.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; Tablet PC 2.0) QQBrowser/6.11.11981.201'
7
- result: { browser: { name: 'QQ Browser', version: '6.11', type: browser }, engine: { name: Trident, version: '5.0' }, os: { name: Windows, version: { value: '6.1', alias: '7' } }, device: { type: desktop } }
8
- readable: 'QQ Browser 6.11 on Windows 7'
9
- -
10
- headers: 'User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; QQDownload 691; SV1) QQBrowser/6.11.12388.201'
11
- result: { browser: { name: 'QQ Browser', version: '6.11', type: browser }, os: { name: Windows, version: { value: '5.1', alias: XP } }, device: { type: desktop } }
12
- readable: 'QQ Browser 6.11 on Windows XP'
13
- -
14
- headers: 'User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET4.0C; .NET4.0E; QQBrowser/7.7.25715.400)'
15
- result: { browser: { name: 'QQ Browser', version: '7.7', type: browser }, os: { name: Windows, version: { value: '5.1', alias: XP } }, device: { type: desktop } }
16
- readable: 'QQ Browser 7.7 on Windows XP'
17
- -
18
- headers: 'User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; QQBrowser/7.6.19177.400)'
19
- result: { browser: { name: 'QQ Browser', version: '7.6', type: browser }, os: { name: Windows, version: { value: '5.1', alias: XP } }, device: { type: desktop } }
20
- readable: 'QQ Browser 7.6 on Windows XP'
21
- -
22
- headers: 'User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; Trident/5.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; Tablet PC 2.0; .NET CLR 1.1.4322; InfoPath.3; BOIE9;ZHCN) QQBrowser/6.13.13461.201'
23
- result: { browser: { name: 'QQ Browser', version: '6.13', type: browser }, engine: { name: Trident, version: '5.0' }, os: { name: Windows, version: { value: '6.1', alias: '7' } }, device: { type: desktop } }
24
- readable: 'QQ Browser 6.13 on Windows 7'
25
- -
26
- headers: 'User-Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0) QQBrowser/6.11.12388.201'
27
- result: { browser: { name: 'QQ Browser', version: '6.11', type: browser }, engine: { name: Trident, version: '4.0' }, os: { name: Windows, version: { value: '5.1', alias: XP } }, device: { type: desktop } }
28
- readable: 'QQ Browser 6.11 on Windows XP'
29
- -
30
- headers: 'User-Agent: Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; WOW64; Trident/6.0; QQBrowser/7.7.28658.400)'
31
- result: { browser: { name: 'QQ Browser', version: '7.7', type: browser }, engine: { name: Trident, version: '6.0' }, os: { name: Windows, version: { value: '6.1', alias: '7' } }, device: { type: desktop } }
32
- readable: 'QQ Browser 7.7 on Windows 7'
33
- -
34
- headers: 'User-Agent: Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; WOW64; Trident/6.0; .NET4.0E; .NET4.0C; QQBrowser/7.4.15649.400)'
35
- result: { browser: { name: 'QQ Browser', version: '7.4', type: browser }, engine: { name: Trident, version: '6.0' }, os: { name: Windows, version: { value: '6.2', alias: '8' } }, device: { type: desktop } }
36
- readable: 'QQ Browser 7.4 on Windows 8'
37
- -
38
- headers: 'User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0; QQBrowser/8.0.1374.400)'
39
- result: { browser: { name: 'QQ Browser', version: '8.0', type: browser }, engine: { name: Trident, version: '5.0' }, os: { name: Windows, version: { value: '6.1', alias: '7' } }, device: { type: desktop } }
40
- readable: 'QQ Browser 8.0 on Windows 7'
41
- -
42
- headers: 'User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.85 Safari/537.36 QQBrowser/3.9.3952.400'
43
- result: { browser: { name: 'QQ Browser', family: { name: Chrome, version: 45 }, version: '3.9', type: browser }, engine: { name: Blink }, os: { name: 'OS X', version: { value: '10.11', nickname: 'El Capitan' } }, device: { type: desktop, manufacturer: Apple, model: Macintosh } }
44
- readable: 'QQ Browser 3.9 on OS X El Capitan 10.11'
45
- -
46
- headers: 'User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_6_8) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.79 QQBrowser/1.4.0.2117 Safari/535.11'
47
- result: { browser: { name: 'QQ Browser', family: { name: Chrome, version: 17 }, version: '1.4', type: browser }, engine: { name: Webkit, version: '535.11' }, os: { name: 'OS X', alias: 'Mac OS X', version: '10.6' }, device: { type: desktop, manufacturer: Apple, model: Macintosh } }
48
- readable: 'QQ Browser 1.4 on Mac OS X 10.6'
49
- -
50
- headers: 'User-Agent: Mozilla/5.0 (Windows NT 10.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.87 Safari/537.36 QQBrowser/9.2.5006.400'
51
- result: { browser: { name: 'QQ Browser', family: { name: Chrome, version: 45 }, version: '9.2', type: browser }, engine: { name: Blink }, os: { name: Windows, version: { value: '10.0', alias: '10' } }, device: { type: desktop } }
52
- readable: 'QQ Browser 9.2 on Windows 10'
53
- -
54
- headers: 'User-Agent: Mozilla/5.0 (Windows NT 4.0) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.15 Safari/535.11 QQBrowser/6.12.12934.201'
55
- result: { browser: { name: 'QQ Browser', family: { name: Chrome, version: 17 }, version: '6.12', type: browser }, engine: { name: Webkit, version: '535.11' }, os: { name: Windows, version: { value: '4.0', alias: 'NT 4.0' } }, device: { type: desktop } }
56
- readable: 'QQ Browser 6.12 on Windows NT 4.0'
57
- -
58
- headers: 'User-Agent: Mozilla/5.0 (Windows NT 4.10) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.15 Safari/535.11 QQBrowser/6.11.12135.201'
59
- result: { browser: { name: 'QQ Browser', family: { name: Chrome, version: 17 }, version: '6.11', type: browser }, engine: { name: Webkit, version: '535.11' }, os: { name: Windows, version: { value: '4.1', alias: 'NT 4.1' } }, device: { type: desktop } }
60
- readable: 'QQ Browser 6.11 on Windows NT 4.1'
61
- -
62
- headers: 'User-Agent: Mozilla/5.0 (Windows NT 5.0) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/13.0.782.41 Safari/535.1 QQBrowser/6.10.11509.201'
63
- result: { browser: { name: 'QQ Browser', family: { name: Chrome, version: 13 }, version: '6.10', type: browser }, engine: { name: Webkit, version: '535.1' }, os: { name: Windows, version: { value: '5.0', alias: '2000' } }, device: { type: desktop } }
64
- readable: 'QQ Browser 6.10 on Windows 2000'
65
- -
66
- headers: 'User-Agent: Mozilla/4.0 (compatible; MSIE 4.0; Windows NT 5.1; Trident/6.0; SLCC2; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; InfoPath.3; .NET4.0C; .NET CLR 1.0.3705; .NET CLR 3.0.04320; .NET4.0E; QQBrowser/7.0.3698.400)'
67
- result: { browser: { name: 'QQ Browser', version: '7.0', type: browser }, engine: { name: Trident, version: '6.0' }, os: { name: Windows, version: { value: '5.1', alias: XP } }, device: { type: desktop } }
68
- readable: 'QQ Browser 7.0 on Windows XP'
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
includes/vendor/whichbrowser/parser/tests/data/desktop/browser-safari.yaml DELETED
@@ -1,220 +0,0 @@
1
- -
2
- headers: 'User-Agent: Apple-PubSub/65.28'
3
- result: { browser: { name: 'Safari RSS', type: 'app:feedreader' }, os: { name: 'OS X' }, device: { type: desktop, manufacturer: Apple, model: Macintosh } }
4
- readable: 'Safari RSS on OS X'
5
- -
6
- headers: 'User-Agent: AppleSyndication/56.1'
7
- result: { browser: { name: 'Safari RSS', type: 'app:feedreader' }, os: { name: 'OS X' }, device: { type: desktop, manufacturer: Apple, model: Macintosh } }
8
- readable: 'Safari RSS on OS X'
9
- -
10
- headers: 'User-Agent: CFNetwork/0.0.0 Darwin/0.0.0 (x86_64)'
11
- result: { os: { name: 'OS X' }, device: { type: desktop, manufacturer: Apple, model: Macintosh } }
12
- readable: 'OS X'
13
- -
14
- headers: 'User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10) AppleWebKit/538.34.43 (KHTML, like Gecko) Version/8.0 Safari/538.35.3'
15
- result: { browser: { name: Safari, version: '8.0', type: browser }, engine: { name: Webkit, version: 538.34.43 }, os: { name: 'OS X', version: { value: '10.10', nickname: Yosemite } }, device: { type: desktop, manufacturer: Apple, model: Macintosh } }
16
- readable: 'Safari 8.0 on OS X Yosemite 10.10'
17
- -
18
- headers: 'User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/601.1.11+ (KHTML, like Gecko) Version/8.0.2 Safari/600.2.5'
19
- result: { browser: { name: 'WebKit Nightly Build', type: browser }, engine: { name: Webkit, version: 601.1.11 }, os: { name: 'OS X', version: { value: '10.10', nickname: Yosemite } }, device: { type: desktop, manufacturer: Apple, model: Macintosh } }
20
- readable: 'WebKit Nightly Build on OS X Yosemite 10.10'
21
- -
22
- headers: 'User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_2) AppleWebKit/600.3.13 (KHTML, like Gecko) Version/8.0.3 Safari/600.3.13'
23
- result: { browser: { name: Safari, version: 8.0.3, type: browser }, engine: { name: Webkit, version: 600.3.13 }, os: { name: 'OS X', version: { value: '10.10', nickname: Yosemite } }, device: { type: desktop, manufacturer: Apple, model: Macintosh } }
24
- readable: 'Safari 8.0.3 on OS X Yosemite 10.10'
25
- -
26
- headers: 'User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_3) AppleWebKit/600.7.9 (KHTML, like Gecko) Version/8.0.7 Safari/600.7.9'
27
- result: { browser: { name: Safari, version: 8.0.7, type: browser }, engine: { name: Webkit, version: 600.7.9 }, os: { name: 'OS X', version: { value: '10.10', nickname: Yosemite } }, device: { type: desktop, manufacturer: Apple, model: Macintosh } }
28
- readable: 'Safari 8.0.7 on OS X Yosemite 10.10'
29
- -
30
- headers: 'User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11) AppleWebKit/601.1.34 (KHTML, like Gecko) Version/9.0 Safari/601.1.34'
31
- result: { browser: { name: Safari, version: '9.0', type: browser }, engine: { name: Webkit, version: 601.1.34 }, os: { name: 'OS X', version: { value: '10.11', nickname: 'El Capitan' } }, device: { type: desktop, manufacturer: Apple, model: Macintosh } }
32
- readable: 'Safari 9.0 on OS X El Capitan 10.11'
33
- -
34
- headers: 'User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_0) AppleWebKit/601.2.7 (KHTML, like Gecko) Version/9.0.1 Safari/601.2.7'
35
- result: { browser: { name: Safari, version: 9.0.1, type: browser }, engine: { name: Webkit, version: 601.2.7 }, os: { name: 'OS X', version: { value: '10.11', nickname: 'El Capitan' } }, device: { type: desktop, manufacturer: Apple, model: Macintosh } }
36
- readable: 'Safari 9.0.1 on OS X El Capitan 10.11'
37
- -
38
- headers: 'User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_2) AppleWebKit/602.1.12+ (KHTML, like Gecko) Version/9.0.2 Safari/601.3.6'
39
- result: { browser: { name: 'WebKit Nightly Build', type: browser }, engine: { name: Webkit, version: 602.1.12 }, os: { name: 'OS X', version: { value: '10.11', nickname: 'El Capitan' } }, device: { type: desktop, manufacturer: Apple, model: Macintosh } }
40
- readable: 'WebKit Nightly Build on OS X El Capitan 10.11'
41
- -
42
- headers: 'User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_5_8) AppleWebKit/524.26.2 (KHTML, like Gecko) Version/5.0.3 Safari/533.19.4'
43
- result: { browser: { name: Safari, version: 5.0.3, type: browser }, engine: { name: Webkit, version: 524.26.2 }, os: { name: 'OS X', alias: 'Mac OS X', version: '10.5' }, device: { type: desktop, manufacturer: Apple, model: Macintosh } }
44
- readable: 'Safari 5.0.3 on Mac OS X 10.5'
45
- -
46
- headers: 'User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_5_8) AppleWebKit/524.50.2 (KHTML, like Gecko) Version/4.0.5 Safari/531.22.7'
47
- result: { browser: { name: Safari, version: 4.0.5, type: browser }, engine: { name: Webkit, version: 524.50.2 }, os: { name: 'OS X', alias: 'Mac OS X', version: '10.5' }, device: { type: desktop, manufacturer: Apple, model: Macintosh } }
48
- readable: 'Safari 4.0.5 on Mac OS X 10.5'
49
- -
50
- headers: 'User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_5_8) AppleWebKit/535.4+ (KHTML, like Gecko) Version/5.0.6 Safari/533.22.3'
51
- result: { browser: { name: 'WebKit Nightly Build', type: browser }, engine: { name: Webkit, version: '535.4' }, os: { name: 'OS X', alias: 'Mac OS X', version: '10.5' }, device: { type: desktop, manufacturer: Apple, model: Macintosh } }
52
- readable: 'WebKit Nightly Build on Mac OS X 10.5'
53
- -
54
- headers: 'User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_6_2; xx) AppleWebKit/533.16 (KHTML, like Gecko) Version/5.0.3 Safari/533.16'
55
- result: { browser: { name: Safari, version: 5.0.3, type: browser }, engine: { name: Webkit, version: '533.16' }, os: { name: 'OS X', alias: 'Mac OS X', version: '10.6' }, device: { type: desktop, manufacturer: Apple, model: Macintosh } }
56
- readable: 'Safari 5.0.3 on Mac OS X 10.6'
57
- -
58
- headers: 'User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_6_4) AppleWebKit/537.73.11 (KHTML, like Gecko) Version/6.1 Safari/537.73.11'
59
- result: { browser: { name: Safari, version: '6.1', type: browser }, engine: { name: Webkit, version: 537.73.11 }, os: { name: 'OS X', alias: 'Mac OS X', version: '10.6' }, device: { type: desktop, manufacturer: Apple, model: Macintosh } }
60
- readable: 'Safari 6.1 on Mac OS X 10.6'
61
- -
62
- headers: 'User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_6_7) AppleWebKit/535.14 (KHTML, like Gecko) Version/5.0.5 Safari/533.21.1'
63
- result: { browser: { name: Safari, version: 5.0.5, type: browser }, engine: { name: Webkit, version: '535.14' }, os: { name: 'OS X', alias: 'Mac OS X', version: '10.6' }, device: { type: desktop, manufacturer: Apple, model: Macintosh } }
64
- readable: 'Safari 5.0.5 on Mac OS X 10.6'
65
- -
66
- headers: 'User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_6_7) AppleWebKit/535.22+ (KHTML, like Gecko) Version/5.0.4 Safari/533.20.27'
67
- result: { browser: { name: 'WebKit Nightly Build', type: browser }, engine: { name: Webkit, version: '535.22' }, os: { name: 'OS X', alias: 'Mac OS X', version: '10.6' }, device: { type: desktop, manufacturer: Apple, model: Macintosh } }
68
- readable: 'WebKit Nightly Build on Mac OS X 10.6'
69
- -
70
- headers: 'User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_6_8) AppleWebKit/534.55.3 (KHTML, like Gecko) Version/5.1.5 Safari/534.55.3'
71
- result: { browser: { name: Safari, version: 5.1.5, type: browser }, engine: { name: Webkit, version: 534.55.3 }, os: { name: 'OS X', alias: 'Mac OS X', version: '10.6' }, device: { type: desktop, manufacturer: Apple, model: Macintosh } }
72
- readable: 'Safari 5.1.5 on Mac OS X 10.6'
73
- -
74
- headers: 'User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_6_8) AppleWebKit/536.3+ (KHTML, like Gecko) Version/5.1.5 Safari/534.55.3'
75
- result: { browser: { name: 'WebKit Nightly Build', type: browser }, engine: { name: Webkit, version: '536.3' }, os: { name: 'OS X', alias: 'Mac OS X', version: '10.6' }, device: { type: desktop, manufacturer: Apple, model: Macintosh } }
76
- readable: 'WebKit Nightly Build on Mac OS X 10.6'
77
- -
78
- headers: 'User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7) AppleWebKit/534.48.3 (KHTML, like Gecko) Version/5.1.7 Safari/534.57.7'
79
- result: { browser: { name: Safari, version: 5.1.7, type: browser }, engine: { name: Webkit, version: 534.48.3 }, os: { name: 'OS X', version: { value: '10.7', nickname: Lion } }, device: { type: desktop, manufacturer: Apple, model: Macintosh } }
80
- readable: 'Safari 5.1.7 on OS X Lion 10.7'
81
- -
82
- headers: 'User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_2) AppleWebKit/534.52.7 (KHTML, like Gecko) Version/5.1.1 Safari/534.51.22'
83
- result: { browser: { name: Safari, version: 5.1.1, type: browser }, engine: { name: Webkit, version: 534.52.7 }, os: { name: 'OS X', version: { value: '10.7', nickname: Lion } }, device: { type: desktop, manufacturer: Apple, model: Macintosh } }
84
- readable: 'Safari 5.1.1 on OS X Lion 10.7'
85
- -
86
- headers: 'User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_3) AppleWebKit/534.53.11 (KHTML, like Gecko) Version/5.1.3 Safari/534.53.10'
87
- result: { browser: { name: Safari, version: 5.1.3, type: browser }, engine: { name: Webkit, version: 534.53.11 }, os: { name: 'OS X', version: { value: '10.7', nickname: Lion } }, device: { type: desktop, manufacturer: Apple, model: Macintosh } }
88
- readable: 'Safari 5.1.3 on OS X Lion 10.7'
89
- -
90
- headers: 'User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_5) AppleWebKit/534.57.7 (KHTML, like Gecko) Version/5.0.3 Safari/533.19.4'
91
- result: { browser: { name: Safari, version: 5.0.3, type: browser }, engine: { name: Webkit, version: 534.57.7 }, os: { name: 'OS X', version: { value: '10.7', nickname: Lion } }, device: { type: desktop, manufacturer: Apple, model: Macintosh } }
92
- readable: 'Safari 5.0.3 on OS X Lion 10.7'
93
- -
94
- headers: 'User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_5) AppleWebKit/538.2+ (KHTML, like Gecko) Version/6.0.5 Safari/536.30.1'
95
- result: { browser: { name: 'WebKit Nightly Build', type: browser }, engine: { name: Webkit, version: '538.2' }, os: { name: 'OS X', version: { value: '10.7', nickname: Lion } }, device: { type: desktop, manufacturer: Apple, model: Macintosh } }
96
- readable: 'WebKit Nightly Build on OS X Lion 10.7'
97
- -
98
- headers: 'User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8) AppleWebKit/537.19+ (KHTML, like Gecko) Version/6.0 Safari/536.25'
99
- result: { browser: { name: 'WebKit Nightly Build', type: browser }, engine: { name: Webkit, version: '537.19' }, os: { name: 'OS X', version: { value: '10.8', nickname: 'Mountain Lion' } }, device: { type: desktop, manufacturer: Apple, model: Macintosh } }
100
- readable: 'WebKit Nightly Build on OS X Mountain Lion 10.8'
101
- -
102
- headers: 'User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8) AppleWebKit/537.19.1 (KHTML, like Gecko) Version/6.1 Safari/537.19.1'
103
- result: { browser: { name: Safari, version: '6.1', type: browser }, engine: { name: Webkit, version: 537.19.1 }, os: { name: 'OS X', version: { value: '10.8', nickname: 'Mountain Lion' } }, device: { type: desktop, manufacturer: Apple, model: Macintosh } }
104
- readable: 'Safari 6.1 on OS X Mountain Lion 10.8'
105
- -
106
- headers: 'User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_2) AppleWebKit/536.26.14 (KHTML, like Gecko) Version/5.1.7 Safari/534.57.2'
107
- result: { browser: { name: Safari, version: 5.1.7, type: browser }, engine: { name: Webkit, version: 536.26.14 }, os: { name: 'OS X', version: { value: '10.8', nickname: 'Mountain Lion' } }, device: { type: desktop, manufacturer: Apple, model: Macintosh } }
108
- readable: 'Safari 5.1.7 on OS X Mountain Lion 10.8'
109
- -
110
- headers: 'User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_2) AppleWebKit/537.47+ (KHTML, like Gecko) Version/6.0.2 Safari/536.26.17'
111
- result: { browser: { name: 'WebKit Nightly Build', type: browser }, engine: { name: Webkit, version: '537.47' }, os: { name: 'OS X', version: { value: '10.8', nickname: 'Mountain Lion' } }, device: { type: desktop, manufacturer: Apple, model: Macintosh } }
112
- readable: 'WebKit Nightly Build on OS X Mountain Lion 10.8'
113
- -
114
- headers: 'User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_3) AppleWebKit/536.28.6 (KHTML, like Gecko) Version/6.0.3 Safari/536.28.6'
115
- result: { browser: { name: Safari, version: 6.0.3, type: browser }, engine: { name: Webkit, version: 536.28.6 }, os: { name: 'OS X', version: { value: '10.8', nickname: 'Mountain Lion' } }, device: { type: desktop, manufacturer: Apple, model: Macintosh } }
116
- readable: 'Safari 6.0.3 on OS X Mountain Lion 10.8'
117
- -
118
- headers: 'User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9) AppleWebKit/537.26.4 (KHTML, like Gecko) Version/6.1 Safari/537.26.4'
119
- result: { browser: { name: Safari, version: '6.1', type: browser }, engine: { name: Webkit, version: 537.26.4 }, os: { name: 'OS X', version: { value: '10.9', nickname: Mavericks } }, device: { type: desktop, manufacturer: Apple, model: Macintosh } }
120
- readable: 'Safari 6.1 on OS X Mavericks 10.9'
121
- -
122
- headers: 'User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9) AppleWebKit/537.46.5 (KHTML, like Gecko) Version/7.0 Safari/537.46.5'
123
- result: { browser: { name: Safari, version: '7.0', type: browser }, engine: { name: Webkit, version: 537.46.5 }, os: { name: 'OS X', version: { value: '10.9', nickname: Mavericks } }, device: { type: desktop, manufacturer: Apple, model: Macintosh } }
124
- readable: 'Safari 7.0 on OS X Mavericks 10.9'
125
- -
126
- headers: 'User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_0) AppleWebKit/600.1.17 (KHTML, like Gecko) Version/7.1 Safari/537.85.10'
127
- result: { browser: { name: Safari, version: '7.1', type: browser }, engine: { name: Webkit, version: 600.1.17 }, os: { name: 'OS X', version: { value: '10.9', nickname: Mavericks } }, device: { type: desktop, manufacturer: Apple, model: Macintosh } }
128
- readable: 'Safari 7.1 on OS X Mavericks 10.9'
129
- -
130
- headers: 'User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_2) AppleWebKit/538.5+ (KHTML, like Gecko) Version/7.0.3 Safari/537.75.14'
131
- result: { browser: { name: 'WebKit Nightly Build', type: browser }, engine: { name: Webkit, version: '538.5' }, os: { name: 'OS X', version: { value: '10.9', nickname: Mavericks } }, device: { type: desktop, manufacturer: Apple, model: Macintosh } }
132
- readable: 'WebKit Nightly Build on OS X Mavericks 10.9'
133
- -
134
- headers: 'User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/600.1.17 (KHTML, like Gecko) Version/7.1 Safari/537.36'
135
- result: { browser: { name: Safari, version: '7.1', type: browser }, engine: { name: Webkit, version: 600.1.17 }, os: { name: 'OS X', version: { value: '10.9', nickname: Mavericks } }, device: { type: desktop, manufacturer: Apple, model: Macintosh } }
136
- readable: 'Safari 7.1 on OS X Mavericks 10.9'
137
- -
138
- headers: 'User-Agent: Mozilla/5.0 (Macintosh; PPC Mac OS X 10_5_8) AppleWebKit/535.1 (KHTML, like Gecko) Version/5.0.6 Safari/533.22.2'
139
- result: { browser: { name: Safari, version: 5.0.6, type: browser }, engine: { name: Webkit, version: '535.1' }, os: { name: 'OS X', alias: 'Mac OS X', version: '10.5' }, device: { type: desktop, manufacturer: Apple, model: Macintosh } }
140
- readable: 'Safari 5.0.6 on Mac OS X 10.5'
141
- -
142
- headers: 'User-Agent: Mozilla/5.0 (Macintosh; PPC Mac OS X 10_7_3) AppleWebKit/534.55.3 (KHTML, like Gecko) Version/5.1.3 Safari/534.53.10'
143
- result: { browser: { name: Safari, version: 5.1.3, type: browser }, engine: { name: Webkit, version: 534.55.3 }, os: { name: 'OS X', version: { value: '10.7', nickname: Lion } }, device: { type: desktop, manufacturer: Apple, model: Macintosh } }
144
- readable: 'Safari 5.1.3 on OS X Lion 10.7'
145
- -
146
- headers: 'User-Agent: Mozilla/5.0 (Macintosh; PPC Mac OS X 10_7_3) AppleWebKit/600.55.3 (KHTML, like Gecko) Version/6.1.3 Safari/600.53.10'
147
- result: { browser: { name: Safari, version: 6.1.3, type: browser }, engine: { name: Webkit, version: 600.55.3 }, os: { name: 'OS X', version: { value: '10.7', nickname: Lion } }, device: { type: desktop, manufacturer: Apple, model: Macintosh } }
148
- readable: 'Safari 6.1.3 on OS X Lion 10.7'
149
- -
150
- headers: 'User-Agent: Mozilla/5.0 (Macintosh; PPC Mac OS X 10_7_5) AppleWebKit/536.29.13 (KHTML, like Gecko) Version/6.0.4 Safari/536.29.13'
151
- result: { browser: { name: Safari, version: 6.0.4, type: browser }, engine: { name: Webkit, version: 536.29.13 }, os: { name: 'OS X', version: { value: '10.7', nickname: Lion } }, device: { type: desktop, manufacturer: Apple, model: Macintosh } }
152
- readable: 'Safari 6.0.4 on OS X Lion 10.7'
153
- -
154
- headers: 'User-Agent: Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_4_11; xx) AppleWebKit/525.13 (KHTML, like Gecko) Version/3.1 Safari/525.13'
155
- result: { browser: { name: Safari, version: '3.1', type: browser }, engine: { name: Webkit, version: '525.13' }, os: { name: 'OS X', alias: 'Mac OS X', version: '10.4' }, device: { type: desktop, manufacturer: Apple, model: Macintosh } }
156
- readable: 'Safari 3.1 on Mac OS X 10.4'
157
- -
158
- headers: 'User-Agent: Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_4_11; xx) AppleWebKit/525.18 (KHTML, like Gecko) Version/3.1.2 Safari/525.22'
159
- result: { browser: { name: Safari, version: 3.1.2, type: browser }, engine: { name: Webkit, version: '525.18' }, os: { name: 'OS X', alias: 'Mac OS X', version: '10.4' }, device: { type: desktop, manufacturer: Apple, model: Macintosh } }
160
- readable: 'Safari 3.1.2 on Mac OS X 10.4'
161
- -
162
- headers: 'User-Agent: Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_4_11; xx) AppleWebKit/530.17 (KHTML, like Gecko) Version/4.0 Safari/530.17'
163
- result: { browser: { name: Safari, version: '4.0', type: browser }, engine: { name: Webkit, version: '530.17' }, os: { name: 'OS X', alias: 'Mac OS X', version: '10.4' }, device: { type: desktop, manufacturer: Apple, model: Macintosh } }
164
- readable: 'Safari 4.0 on Mac OS X 10.4'
165
- -
166
- headers: 'User-Agent: Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_4_11; xx) AppleWebKit/533.16 (KHTML, like Gecko) Version/4.1 Safari/533.16'
167
- result: { browser: { name: Safari, version: '4.1', type: browser }, engine: { name: Webkit, version: '533.16' }, os: { name: 'OS X', alias: 'Mac OS X', version: '10.4' }, device: { type: desktop, manufacturer: Apple, model: Macintosh } }
168
- readable: 'Safari 4.1 on Mac OS X 10.4'
169
- -
170
- headers: 'User-Agent: Mozilla/5.0 (Macintosh; U; PPC Mac OS X 10_4_11; xx) AppleWebKit/525.18 (KHTML, like Gecko) Version/3.1.1 Safari/525.18'
171
- result: { browser: { name: Safari, version: 3.1.1, type: browser }, engine: { name: Webkit, version: '525.18' }, os: { name: 'OS X', alias: 'Mac OS X', version: '10.4' }, device: { type: desktop, manufacturer: Apple, model: Macintosh } }
172
- readable: 'Safari 3.1.1 on Mac OS X 10.4'
173
- -
174
- headers: 'User-Agent: Mozilla/5.0 (Macintosh; U; PPC Mac OS X 10_4_11; xx) AppleWebKit/525.18 (KHTML, like Gecko) Version/3.1.2 Safari/525.22'
175
- result: { browser: { name: Safari, version: 3.1.2, type: browser }, engine: { name: Webkit, version: '525.18' }, os: { name: 'OS X', alias: 'Mac OS X', version: '10.4' }, device: { type: desktop, manufacturer: Apple, model: Macintosh } }
176
- readable: 'Safari 3.1.2 on Mac OS X 10.4'
177
- -
178
- headers: 'User-Agent: Mozilla/5.0 (Macintosh; U; PPC Mac OS X 10_4_11; xx) AppleWebKit/525.27.1 (KHTML, like Gecko) Version/3.2.3 Safari/525.28.3'
179
- result: { browser: { name: Safari, version: 3.2.3, type: browser }, engine: { name: Webkit, version: 525.27.1 }, os: { name: 'OS X', alias: 'Mac OS X', version: '10.4' }, device: { type: desktop, manufacturer: Apple, model: Macintosh } }
180
- readable: 'Safari 3.2.3 on Mac OS X 10.4'
181
- -
182
- headers: 'User-Agent: Mozilla/5.0 (Macintosh; U; PPC Mac OS X 10_4_11; xx) AppleWebKit/533.21.1+ (KHTML, like Gecko) Version/4.1.3 Safari/533.21.1'
183
- result: { browser: { name: 'WebKit Nightly Build', type: browser }, engine: { name: Webkit, version: 533.21.1 }, os: { name: 'OS X', alias: 'Mac OS X', version: '10.4' }, device: { type: desktop, manufacturer: Apple, model: Macintosh } }
184
- readable: 'WebKit Nightly Build on Mac OS X 10.4'
185
- -
186
- headers: 'User-Agent: Mozilla/5.0 (Macintosh; U; PPC Mac OS X 10_5_8; xx) AppleWebKit/532.0+ (KHTML, like Gecko) Version/4.0.3 Safari/531.9'
187
- result: { browser: { name: 'WebKit Nightly Build', type: browser }, engine: { name: Webkit, version: '532.0' }, os: { name: 'OS X', alias: 'Mac OS X', version: '10.5' }, device: { type: desktop, manufacturer: Apple, model: Macintosh } }
188
- readable: 'WebKit Nightly Build on Mac OS X 10.5'
189
- -
190
- headers: 'User-Agent: Mozilla/5.0 (Windows NT 6.1; WKC) AppleWebKit/534.50 (KHTML, like Gecko) Version/5.1 Safari/534.50'
191
- result: { browser: { name: Safari, version: '5.1', type: browser }, engine: { name: Webkit, version: '534.50' }, os: { name: Windows, version: { value: '6.1', alias: '7' } }, device: { type: desktop } }
192
- readable: 'Safari 5.1 on Windows 7'
193
- -
194
- headers: 'User-Agent: Mozilla/5.0 (Windows NT 6.1; WKC) AppleWebKit/534.52.7 (KHTML, like Gecko) Version/5.1.2 Safari/534.52.7'
195
- result: { browser: { name: Safari, version: 5.1.2, type: browser }, engine: { name: Webkit, version: 534.52.7 }, os: { name: Windows, version: { value: '6.1', alias: '7' } }, device: { type: desktop } }
196
- readable: 'Safari 5.1.2 on Windows 7'
197
- -
198
- headers: 'User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/534.50 (KHTML, like Gecko) Version/5.1 Safari/534.50'
199
- result: { browser: { name: Safari, version: '5.1', type: browser }, engine: { name: Webkit, version: '534.50' }, os: { name: Windows, version: { value: '6.1', alias: '7' } }, device: { type: desktop } }
200
- readable: 'Safari 5.1 on Windows 7'
201
- -
202
- headers: 'User-Agent: Safari/10600.2.5 CFNetwork/720.1.1 Darwin/14.0.0 (x86_64)'
203
- result: { browser: { name: Safari, type: browser }, os: { name: 'OS X', version: { value: 10.10.1, nickname: Yosemite } }, device: { type: desktop, manufacturer: Apple, model: Macintosh } }
204
- readable: 'Safari on OS X Yosemite 10.10.1'
205
- -
206
- headers: 'User-Agent: Safari/9537.73.11 CFNetwork/673.0.3 Darwin/13.0.0 (x86_64) (MacBookAir6%2C2)'
207
- result: { browser: { name: Safari, type: browser }, os: { name: 'OS X', version: { value: '10.9', nickname: Mavericks } }, device: { type: desktop, manufacturer: Apple, model: Macintosh } }
208
- readable: 'Safari on OS X Mavericks 10.9'
209
- -
210
- headers: 'User-Agent: com.apple.WebKit.WebContent/10600.1.25 CFNetwork/720.0.9 Darwin/14.0.0 (x86_64)'
211
- result: { os: { name: 'OS X', version: { value: '10.10', nickname: Yosemite } }, device: { type: desktop, manufacturer: Apple, model: Macintosh } }
212
- readable: 'OS X Yosemite 10.10'
213
- -
214
- headers: 'User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12) AppleWebKit/602.1.32 (KHTML, like Gecko) Version/10.0 Safari/602.1.32'
215
- readable: 'Safari 10.0 on macOS Sierra 10.12'
216
- result: { browser: { name: Safari, version: '10.0', type: browser }, engine: { name: Webkit, version: 602.1.32 }, os: { name: 'OS X', alias: macOS, version: { value: '10.12', nickname: Sierra } }, device: { type: desktop, manufacturer: Apple, model: Macintosh } }
217
- -
218
- headers: 'User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13) AppleWebKit/603.1.13 (KHTML, like Gecko) Version/10.1 Safari/603.1.13'
219
- readable: 'Safari 10.1 on macOS High Sierra 10.13'
220
- result: { browser: { name: Safari, version: '10.1', type: browser }, engine: { name: Webkit, version: 603.1.13 }, os: { name: 'OS X', alias: macOS, version: { value: '10.13', nickname: 'High Sierra' } }, device: { type: desktop, manufacturer: Apple, model: Macintosh } }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
includes/vendor/whichbrowser/parser/tests/data/desktop/browser-seamonkey.yaml DELETED
@@ -1,88 +0,0 @@
1
- -
2
- headers: 'User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:18.0) Gecko/20100101 Firefox/18.0 SeaMonkey/2.15.2'
3
- result: { browser: { name: SeaMonkey, family: { name: Firefox, version: '18.0' }, version: 2.15.2, type: browser }, engine: { name: Gecko, version: '18.0' }, os: { name: 'OS X', alias: 'Mac OS X', version: '10.6' }, device: { type: desktop, manufacturer: Apple, model: Macintosh } }
4
- readable: 'SeaMonkey 2.15.2 on Mac OS X 10.6'
5
- -
6
- headers: 'User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:19.0) Gecko/19.0 SeaMonkey/2.16a1'
7
- result: { browser: { name: SeaMonkey, version: 2.16a1, type: browser }, engine: { name: Gecko, version: '19.0' }, os: { name: 'OS X', alias: 'Mac OS X', version: '10.6' }, device: { type: desktop, manufacturer: Apple, model: Macintosh } }
8
- readable: 'SeaMonkey 2.16a1 on Mac OS X 10.6'
9
- -
10
- headers: 'User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:2.0.1) Gecko/20110608 Firefox/4.0.1 SeaMonkey/2.1'
11
- result: { browser: { name: SeaMonkey, family: { name: Firefox, version: 4.0.1 }, version: '2.1', type: browser }, engine: { name: Gecko, version: 2.0.1 }, os: { name: 'OS X', alias: 'Mac OS X', version: '10.6' }, device: { type: desktop, manufacturer: Apple, model: Macintosh } }
12
- readable: 'SeaMonkey 2.1 on Mac OS X 10.6'
13
- -
14
- headers: 'User-Agent: Mozilla/5.0 (Macintosh; PPC Mac OS X 10.5; rv:16.0) Gecko/20121012 SeaMonkey/2.13'
15
- result: { browser: { name: SeaMonkey, version: '2.13', type: browser }, engine: { name: Gecko, version: '16.0' }, os: { name: 'OS X', alias: 'Mac OS X', version: '10.5' }, device: { type: desktop, manufacturer: Apple, model: Macintosh } }
16
- readable: 'SeaMonkey 2.13 on Mac OS X 10.5'
17
- -
18
- headers: 'User-Agent: Mozilla/5.0 (Macintosh; U; Intel Mac OS X; xx; rv:1.8.1.17) Gecko/20080829 SeaMonkey/1.1.12'
19
- result: { browser: { name: SeaMonkey, version: 1.1.12, type: browser }, engine: { name: Gecko, version: 1.8.1 }, os: { name: 'OS X' }, device: { type: desktop, manufacturer: Apple, model: Macintosh } }
20
- readable: 'SeaMonkey 1.1.12 on OS X'
21
- -
22
- headers: 'User-Agent: Mozilla/5.0 (OS/2; U; Warp 4.5; de; rv:1.8.1.11) Gecko/20071129 PmWFx/2.0.0.11'
23
- result: { browser: { name: SeaMonkey, version: 2.0.0.11, type: browser }, engine: { name: Gecko, version: 1.8.1 }, os: { name: OS/2, version: { value: '4.5', nickname: Warp } }, device: { type: desktop } }
24
- readable: 'SeaMonkey 2.0.0.11 on OS/2 Warp 4.5'
25
- -
26
- headers: 'User-Agent: Mozilla/5.0 (OS/2; Warp 4.5; rv:10.0.12) Gecko/20130108 Firefox/10.0.12 SeaMonkey/2.7.2'
27
- result: { browser: { name: SeaMonkey, family: { name: Firefox, version: 10.0.12 }, version: 2.7.2, type: browser }, engine: { name: Gecko, version: 10.0.12 }, os: { name: OS/2, version: { value: '4.5', nickname: Warp } }, device: { type: desktop } }
28
- readable: 'SeaMonkey 2.7.2 on OS/2 Warp 4.5'
29
- -
30
- headers: 'User-Agent: Mozilla/5.0 (OS/2; Warp 4.5; rv:17.0) Gecko/20140621 Firefox/17.0 SeaMonkey/2.14'
31
- result: { browser: { name: SeaMonkey, family: { name: Firefox, version: '17.0' }, version: '2.14', type: browser }, engine: { name: Gecko, version: '17.0' }, os: { name: OS/2, version: { value: '4.5', nickname: Warp } }, device: { type: desktop } }
32
- readable: 'SeaMonkey 2.14 on OS/2 Warp 4.5'
33
- -
34
- headers: 'User-Agent: Mozilla/5.0 (Windows NT 5.1; rv:12.0) Gecko/20120422 SeaMonkey/2.9'
35
- result: { browser: { name: SeaMonkey, version: '2.9', type: browser }, engine: { name: Gecko, version: '12.0' }, os: { name: Windows, version: { value: '5.1', alias: XP } }, device: { type: desktop } }
36
- readable: 'SeaMonkey 2.9 on Windows XP'
37
- -
38
- headers: 'User-Agent: Mozilla/5.0 (Windows NT 5.1; rv:19.0) Gecko/20100101 Firefox/19.0 SeaMonkey/2.16'
39
- result: { browser: { name: SeaMonkey, family: { name: Firefox, version: '19.0' }, version: '2.16', type: browser }, engine: { name: Gecko, version: '19.0' }, os: { name: Windows, version: { value: '5.1', alias: XP } }, device: { type: desktop } }
40
- readable: 'SeaMonkey 2.16 on Windows XP'
41
- -
42
- headers: 'User-Agent: Mozilla/5.0 (Windows NT 5.1; rv:20.0) Gecko/20.0 SeaMonkey/2.17a1'
43
- result: { browser: { name: SeaMonkey, version: 2.17a1, type: browser }, engine: { name: Gecko, version: '20.0' }, os: { name: Windows, version: { value: '5.1', alias: XP } }, device: { type: desktop } }
44
- readable: 'SeaMonkey 2.17a1 on Windows XP'
45
- -
46
- headers: 'User-Agent: Mozilla/5.0 (Windows NT 5.1; rv:28.0) Gecko/20100101 SeaMonkey/2.25'
47
- result: { browser: { name: SeaMonkey, version: '2.25', type: browser }, engine: { name: Gecko, version: '28.0' }, os: { name: Windows, version: { value: '5.1', alias: XP } }, device: { type: desktop } }
48
- readable: 'SeaMonkey 2.25 on Windows XP'
49
- -
50
- headers: 'User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:10.0) Gecko/20120125 SeaMonkey/2.7'
51
- result: { browser: { name: SeaMonkey, version: '2.7', type: browser }, engine: { name: Gecko, version: '10.0' }, os: { name: Windows, version: { value: '6.1', alias: '7' } }, device: { type: desktop } }
52
- readable: 'SeaMonkey 2.7 on Windows 7'
53
- -
54
- headers: 'User-Agent: Mozilla/5.0 (X11; FreeBSD amd64; rv:26.0) Gecko/20100101 Firefox/26.0 SeaMonkey/2.23'
55
- result: { browser: { name: SeaMonkey, family: { name: Firefox, version: '26.0' }, version: '2.23', type: browser }, engine: { name: Gecko, version: '26.0' }, os: { name: FreeBSD, family: BSD }, device: { type: desktop } }
56
- readable: 'SeaMonkey 2.23 on FreeBSD'
57
- -
58
- headers: 'User-Agent: Mozilla/5.0 (X11; Linux i686; rv:17.0) Gecko/20100101 SeaMonkey/2.14.1'
59
- result: { browser: { name: SeaMonkey, version: 2.14.1, type: browser }, engine: { name: Gecko, version: '17.0' }, os: { name: Linux }, device: { type: desktop } }
60
- readable: 'SeaMonkey 2.14.1 on Linux'
61
- -
62
- headers: 'User-Agent: Mozilla/5.0 (X11; Linux i686; rv:19.0) Gecko/19.0 Firefox/19.0 SeaMonkey/2.16a1'
63
- result: { browser: { name: SeaMonkey, family: { name: Firefox, version: '19.0' }, version: 2.16a1, type: browser }, engine: { name: Gecko, version: '19.0' }, os: { name: Linux }, device: { type: desktop } }
64
- readable: 'SeaMonkey 2.16a1 on Linux'
65
- -
66
- headers: 'User-Agent: Mozilla/5.0 (X11; Linux i686; rv:7.0) Gecko/20110922 Firefox/7.0 SeaMonkey/2.4'
67
- result: { browser: { name: SeaMonkey, family: { name: Firefox, version: '7.0' }, version: '2.4', type: browser }, engine: { name: Gecko, version: '7.0' }, os: { name: Linux }, device: { type: desktop } }
68
- readable: 'SeaMonkey 2.4 on Linux'
69
- -
70
- headers: 'User-Agent: Mozilla/5.0 (X11; OpenBSD amd64; rv:33.0) Gecko/20100101 Firefox/33.0 SeaMonkey/2.30'
71
- result: { browser: { name: SeaMonkey, family: { name: Firefox, version: '33.0' }, version: '2.30', type: browser }, engine: { name: Gecko, version: '33.0' }, os: { name: OpenBSD, family: BSD }, device: { type: desktop } }
72
- readable: 'SeaMonkey 2.30 on OpenBSD'
73
- -
74
- headers: 'User-Agent: Mozilla/5.0 (X11; U; IRIX64 IP35; xx; rv:1.8.1.25pre) Gecko/20121113 SeaMonkey/1.1.20pre'
75
- result: { browser: { name: SeaMonkey, version: 1.1.20, type: browser }, engine: { name: Gecko, version: 1.8.1 }, os: { name: IRIX, family: UNIX }, device: { type: desktop } }
76
- readable: 'SeaMonkey 1.1.20 on IRIX'
77
- -
78
- headers: 'User-Agent: Mozilla/5.0 (X11; U; Linux i686; xx; rv:1.8.0.12) Gecko/20070531 CentOS/1.0.9-0.1.el3.centos3 SeaMonkey/1.0.9'
79
- result: { browser: { name: SeaMonkey, version: 1.0.9, type: browser }, engine: { name: Gecko, version: 1.8.0 }, os: { name: CentOS, version: '3' }, device: { type: desktop } }
80
- readable: 'SeaMonkey 1.0.9 on CentOS 3'
81
- -
82
- headers: 'User-Agent: Mozilla/5.0 (X11; U; Linux i686; xx; rv:1.8.1.21) Gecko/20090303 SeaMonkey/1.1.15 (Ubuntu-1.1.15+nobinonly-0ubuntu2)'
83
- result: { browser: { name: SeaMonkey, version: 1.1.15, type: browser }, engine: { name: Gecko, version: 1.8.1 }, os: { name: Ubuntu }, device: { type: desktop } }
84
- readable: 'SeaMonkey 1.1.15 on Ubuntu'
85
- -
86
- headers: 'User-Agent: Mozilla/5.0 (Macintosh; U; PPC; ja-JP; rv:1.8.1.2pre) Gecko/20070111 SeaMonkey/1.1'
87
- result: { browser: { name: SeaMonkey, version: '1.1', type: browser }, engine: { name: Gecko, version: 1.8.1 }, os: { name: 'Mac OS' }, device: { type: desktop, manufacturer: Apple, model: Macintosh } }
88
- readable: 'SeaMonkey 1.1 on Mac OS'
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
includes/vendor/whichbrowser/parser/tests/data/desktop/browser-text.yaml DELETED
@@ -1,48 +0,0 @@
1
- -
2
- headers: 'User-Agent: ELinks (0.11.3; Linux 2.6.23-gentoo-r5 i686; 209x77)'
3
- result: { browser: { name: ELinks, version: 0.11.3, type: 'browser:text' }, os: { name: Linux }, device: { type: desktop } }
4
- readable: 'ELinks 0.11.3 on Linux'
5
- -
6
- headers: 'User-Agent: Elinks (0.3.2; Linux 2.4.21 i686)'
7
- result: { browser: { name: ELinks, version: 0.3.2, type: 'browser:text' }, os: { name: Linux }, device: { type: desktop } }
8
- readable: 'ELinks 0.3.2 on Linux'
9
- -
10
- headers: 'User-Agent: Elinks (0.3; FreeBSD 4.3-RELEASE i386)'
11
- result: { browser: { name: ELinks, version: '0.3', type: 'browser:text' }, os: { name: FreeBSD, family: BSD, version: '4.3' }, device: { type: desktop } }
12
- readable: 'ELinks 0.3 on FreeBSD 4.3'
13
- -
14
- headers: 'User-Agent: ELinks (0.4.3rc2; Linux 2.4.22 i686; 110x40)'
15
- result: { browser: { name: ELinks, version: 0.4.3, type: 'browser:text' }, os: { name: Linux }, device: { type: desktop } }
16
- readable: 'ELinks 0.4.3 on Linux'
17
- -
18
- headers: 'User-Agent: ELinks/0.10.4-7-debian (textmode; Linux 2.6.14 i686; 110x48-2)'
19
- result: { browser: { name: ELinks, version: 0.10.4, type: 'browser:text' }, os: { name: Linux }, device: { type: desktop } }
20
- readable: 'ELinks 0.10.4 on Linux'
21
- -
22
- headers: 'User-Agent: ELinks/0.9.1 (textmode; Linux; 127x48)'
23
- result: { browser: { name: ELinks, version: 0.9.1, type: 'browser:text' }, os: { name: Linux }, device: { type: desktop } }
24
- readable: 'ELinks 0.9.1 on Linux'
25
- -
26
- headers: 'User-Agent: Emacs-w3m/1.3.3 w3m/0.3.1'
27
- result: { browser: { name: w3m, version: 1.3.3, type: 'browser:text' } }
28
- readable: 'w3m 1.3.3'
29
- -
30
- headers: 'User-Agent: Emacs-w3m/1.4.4 w3m/0.5.1'
31
- result: { browser: { name: w3m, version: 1.4.4, type: 'browser:text' } }
32
- readable: 'w3m 1.4.4'
33
- -
34
- headers: 'User-Agent: Emacs-w3m/1.4.77 w3m/0.5'
35
- result: { browser: { name: w3m, version: 1.4.77, type: 'browser:text' } }
36
- readable: 'w3m 1.4.77'
37
- -
38
- headers: 'User-Agent: CERN-LineMode/2.12'
39
- result: { browser: { name: 'CERN LineMode', version: '2.12', type: 'browser:text' } }
40
- readable: 'CERN LineMode 2.12'
41
- -
42
- headers: 'User-Agent: CERN-LineMode/2.14'
43
- result: { browser: { name: 'CERN LineMode', version: '2.14', type: 'browser:text' } }
44
- readable: 'CERN LineMode 2.14'
45
- -
46
- headers: 'User-Agent: CERN-LineMode/3.0'
47
- result: { browser: { name: 'CERN LineMode', version: '3.0', type: 'browser:text' } }
48
- readable: 'CERN LineMode 3.0'
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
includes/vendor/whichbrowser/parser/tests/data/desktop/browser-uc.yaml DELETED
@@ -1,101 +0,0 @@
1
- -
2
- headers: 'User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.157 Safari/537.36'
3
- useragent: 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.157 UBrowser/5.5.9936.1231 Safari/537.36'
4
- result: { browser: { name: 'UC Browser', version: '5.5', type: browser }, engine: { name: Blink }, os: { name: Windows, version: { value: '10.0', alias: '10' } }, device: { type: desktop } }
5
- readable: 'UC Browser 5.5 on Windows 10'
6
- -
7
- headers: 'User-Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; Sicent; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E; UBrowser/3.0.1806.0)'
8
- result: { browser: { name: 'UC Browser', version: '3.0', type: browser }, engine: { name: Trident, version: '4.0' }, os: { name: Windows, version: { value: '5.1', alias: XP } }, device: { type: desktop } }
9
- readable: 'UC Browser 3.0 on Windows XP'
10
- -
11
- headers: 'User-Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET4.0C; .NET4.0E; InfoPath.3 UBrowser/1.0.226.1028)'
12
- result: { browser: { name: 'UC Browser', version: '1.0', type: browser }, engine: { name: Trident, version: '4.0' }, os: { name: Windows, version: { value: '6.1', alias: '7' } }, device: { type: desktop } }
13
- readable: 'UC Browser 1.0 on Windows 7'
14
- -
15
- headers: 'User-Agent: Mozilla/5.0 (Windows NT 6.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.153 UBrowser/2.0.1144.0 Safari/537.36'
16
- result: { browser: { name: 'UC Browser', family: { name: Chrome, version: 35 }, version: '2.0', type: browser }, engine: { name: Blink }, os: { name: Windows, version: { value: '6.0', alias: Vista } }, device: { type: desktop } }
17
- readable: 'UC Browser 2.0 on Windows Vista'
18
- -
19
- headers: 'User-Agent: Mozilla/5.0 (Windows NT 6.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.155 UBrowser/5.4.4237.1032 Safari/537.36'
20
- result: { browser: { name: 'UC Browser', family: { name: Chrome, version: 44 }, version: '5.4', type: browser }, engine: { name: Blink }, os: { name: Windows, version: { value: '6.0', alias: Vista } }, device: { type: desktop } }
21
- readable: 'UC Browser 5.4 on Windows Vista'
22
- -
23
- headers: 'User-Agent: Mozilla/5.0 (Windows NT 6.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.157 UBrowser/5.5.7045.1004 Safari/537.36'
24
- result: { browser: { name: 'UC Browser', family: { name: Chrome, version: 44 }, version: '5.5', type: browser }, engine: { name: Blink }, os: { name: Windows, version: { value: '6.0', alias: Vista } }, device: { type: desktop } }
25
- readable: 'UC Browser 5.5 on Windows Vista'
26
- -
27
- headers: 'User-Agent: Mozilla/5.0 (Windows NT 6.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 UBrowser/4.0.4627.3 Safari/537.36'
28
- result: { browser: { name: 'UC Browser', family: { name: Chrome, version: 38 }, version: '4.0', type: browser }, engine: { name: Blink }, os: { name: Windows, version: { value: '6.0', alias: Vista } }, device: { type: desktop } }
29
- readable: 'UC Browser 4.0 on Windows Vista'
30
- -
31
- headers: 'User-Agent: Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.101 UBrowser/5.0.389.22 Safari/537.36'
32
- result: { browser: { name: 'UC Browser', family: { name: Chrome, version: 41 }, version: '5.0', type: browser }, engine: { name: Blink }, os: { name: Windows, version: { value: '6.1', alias: '7' } }, device: { type: desktop } }
33
- readable: 'UC Browser 5.0 on Windows 7'
34
- -
35
- headers: 'User-Agent: Mozilla/5.0 (Windows NT 6.1; Trident/7.0; rv:11.0 UBrowser/1.0.342.1224) like Gecko'
36
- result: { browser: { name: 'UC Browser', version: '1.0', type: browser }, engine: { name: Trident, version: '7.0' }, os: { name: Windows, version: { value: '6.1', alias: '7' } }, device: { type: desktop } }
37
- readable: 'UC Browser 1.0 on Windows 7'
38
- -
39
- headers: 'User-Agent: Mozilla/5.0 (Windows NT 6.1; Trident/7.0; rv:11.0; UBrowser/2.0.754.0) like Gecko'
40
- result: { browser: { name: 'UC Browser', version: '2.0', type: browser }, engine: { name: Trident, version: '7.0' }, os: { name: Windows, version: { value: '6.1', alias: '7' } }, device: { type: desktop } }
41
- readable: 'UC Browser 2.0 on Windows 7'
42
- -
43
- headers: 'User-Agent: Mozilla/5.0 (Windows NT 6.1; Trident/7.0; rv:11.0; UBrowser/3.0.947.1) like Gecko'
44
- result: { browser: { name: 'UC Browser', version: '3.0', type: browser }, engine: { name: Trident, version: '7.0' }, os: { name: Windows, version: { value: '6.1', alias: '7' } }, device: { type: desktop } }
45
- readable: 'UC Browser 3.0 on Windows 7'
46
- -
47
- headers: 'User-Agent: Mozilla/5.0 (Windows NT 6.1; Trident/7.0; rv:11.0; UBrowser/5.1.2238.18) like Gecko'
48
- result: { browser: { name: 'UC Browser', version: '5.1', type: browser }, engine: { name: Trident, version: '7.0' }, os: { name: Windows, version: { value: '6.1', alias: '7' } }, device: { type: desktop } }
49
- readable: 'UC Browser 5.1 on Windows 7'
50
- -
51
- headers: 'User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1700.107 UBrowser/1.0.898.0 Safari/537.36'
52
- result: { browser: { name: 'UC Browser', family: { name: Chrome, version: 32 }, version: '1.0', type: browser }, engine: { name: Blink }, os: { name: Windows, version: { value: '6.1', alias: '7' } }, device: { type: desktop } }
53
- readable: 'UC Browser 1.0 on Windows 7'
54
- -
55
- headers: 'User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.30 UBrowser/5.2.3129.0 Safari/537.36'
56
- result: { browser: { name: 'UC Browser', family: { name: Chrome, version: 44 }, version: '5.2', type: browser }, engine: { name: Blink }, os: { name: Windows, version: { value: '6.1', alias: '7' } }, device: { type: desktop } }
57
- readable: 'UC Browser 5.2 on Windows 7'
58
- -
59
- headers: 'User-Agent: Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.153 UBrowser/3.1.1644.34 Safari/537.36'
60
- result: { browser: { name: 'UC Browser', family: { name: Chrome, version: 35 }, version: '3.1', type: browser }, engine: { name: Blink }, os: { name: Windows, version: { value: '6.2', alias: '8' } }, device: { type: desktop } }
61
- readable: 'UC Browser 3.1 on Windows 8'
62
- -
63
- headers: 'User-Agent: Mozilla/5.0 (Windows NT 6.3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 UBrowser/4.1.4627.19 Safari/537.36'
64
- result: { browser: { name: 'UC Browser', family: { name: Chrome, version: 38 }, version: '4.1', type: browser }, engine: { name: Blink }, os: { name: Windows, version: { value: '6.3', alias: '8.1' } }, device: { type: desktop } }
65
- readable: 'UC Browser 4.1 on Windows 8.1'
66
- -
67
- headers: 'User-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64; Trident/7.0; rv:11.0; UBrowser/5.0.966.1045) like Gecko'
68
- result: { browser: { name: 'UC Browser', version: '5.0', type: browser }, engine: { name: Trident, version: '7.0' }, os: { name: Windows, version: { value: '6.3', alias: '8.1' } }, device: { type: desktop } }
69
- readable: 'UC Browser 5.0 on Windows 8.1'
70
- -
71
- headers: 'User-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64; Trident/7.0; rv:11.0; UBrowser/5.4.4799.303) like Gecko'
72
- result: { browser: { name: 'UC Browser', version: '5.4', type: browser }, engine: { name: Trident, version: '7.0' }, os: { name: Windows, version: { value: '6.3', alias: '8.1' } }, device: { type: desktop } }
73
- readable: 'UC Browser 5.4 on Windows 8.1'
74
- -
75
- headers: 'User-Agent: Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; WOW64; Trident/6.0; UBrowser/3.2.2937.4)'
76
- result: { browser: { name: 'UC Browser', version: '3.2', type: browser }, engine: { name: Trident, version: '6.0' }, os: { name: Windows, version: { value: '6.2', alias: '8' } }, device: { type: desktop } }
77
- readable: 'UC Browser 3.2 on Windows 8'
78
- -
79
- headers: 'User-Agent: Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.3; WOW64; Trident/8.0; UBrowser/5.0.389.27)'
80
- result: { browser: { name: 'UC Browser', version: '5.0', type: browser }, engine: { name: Trident, version: '8.0' }, os: { name: Windows, version: { value: '6.3', alias: '8.1' } }, device: { type: desktop } }
81
- readable: 'UC Browser 5.0 on Windows 8.1'
82
- -
83
- headers: 'User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0 UBrowser/1.0.370.1388)'
84
- result: { browser: { name: 'UC Browser', version: '1.0', type: browser }, engine: { name: Trident, version: '5.0' }, os: { name: Windows, version: { value: '6.1', alias: '7' } }, device: { type: desktop } }
85
- readable: 'UC Browser 1.0 on Windows 7'
86
- -
87
- headers: 'User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0) UBrowser/1.0.44.100'
88
- result: { browser: { name: 'UC Browser', version: '1.0', type: browser }, engine: { name: Trident, version: '5.0' }, os: { name: Windows, version: { value: '6.1', alias: '7' } }, device: { type: desktop } }
89
- readable: 'UC Browser 1.0 on Windows 7'
90
- -
91
- headers: 'User-Agent: UCWEB/8.8 (iPhone; CPU OS_6; en-US)AppleWebKit/534.1 U3/3.0.0 Mobile'
92
- result: { browser: { name: 'UC Browser', version: '8.8', type: browser }, engine: { name: Webkit, version: '534.1' }, os: { name: iOS, version: '6' }, device: { type: mobile, subtype: smart, manufacturer: Apple, model: iPhone } }
93
- readable: 'UC Browser 8.8 on an Apple iPhone running iOS 6'
94
- -
95
- headers: 'User-Agent: UCWEB/2.0 (Linux; U; Adr 2.2.2; zh-CN; HTC HD7 LTE 4G+ For AT&T) U2/1.0.0 UCBrowser/9.5.1.381 U2/1.0.0 Mobile'
96
- result: { browser: { name: 'UC Browser', version: '9.5', type: browser }, engine: { name: Gecko }, os: { name: Android, version: 2.2.2 }, device: { type: mobile, subtype: smart, manufacturer: HTC, model: HD7 } }
97
- readable: 'UC Browser 9.5 on a HTC HD7 running Android 2.2.2'
98
- -
99
- headers: 'User-Agent: UCWEB/2.0 (Linux; U; Adr 2.1-update1; xx; E15a) U2/1.0.0 UCBrowser/9.3.1.344 U2/1.0.0 Mobile'
100
- result: { browser: { name: 'UC Browser', version: '9.3', type: browser }, engine: { name: Gecko }, os: { name: Android, version: '2.1' }, device: { type: mobile, subtype: smart, manufacturer: 'Sony Ericsson', model: 'Xperia X8' } }
101
- readable: 'UC Browser 9.3 on a Sony Ericsson Xperia X8 running Android 2.1'
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
includes/vendor/whichbrowser/parser/tests/data/desktop/engine-goanna.yaml DELETED
@@ -1,28 +0,0 @@
1
- -
2
- headers: 'User-Agent: Mozilla/5.0 (Windows NT 6.1; rv:38.9) Gecko/20100101 Goanna/2.0 Firefox/38.9 PaleMoon/26.0.0b4'
3
- result: { browser: { name: 'Pale Moon', family: { name: Firefox, version: '38.9' }, version: 26.0.0, type: browser }, engine: { name: Goanna, version: '2.0' }, os: { name: Windows, version: { value: '6.1', alias: '7' } }, device: { type: desktop } }
4
- readable: 'Pale Moon 26.0.0 on Windows 7'
5
- -
6
- headers: 'User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:2.0) Gecko/20100101 Goanna/20151214 PaleMoon/26.0.0b4'
7
- result: { browser: { name: 'Pale Moon', version: 26.0.0, type: browser }, engine: { name: Goanna, version: '2.0' }, os: { name: Windows, version: { value: '6.1', alias: '7' } }, device: { type: desktop } }
8
- readable: 'Pale Moon 26.0.0 on Windows 7'
9
- -
10
- headers: 'User-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64; rv:1.0) Goanna/20150828 Gecko/20100101 PaleMoon/26.0.0b2'
11
- result: { browser: { name: 'Pale Moon', version: 26.0.0, type: browser }, engine: { name: Goanna, version: '1.0' }, os: { name: Windows, version: { value: '6.3', alias: '8.1' } }, device: { type: desktop } }
12
- readable: 'Pale Moon 26.0.0 on Windows 8.1'
13
- -
14
- headers: 'User-Agent: Mozilla/5.0 (X11; Linux i686; rv:1.0) Goanna/20150819 Gecko/20100101 Firefox/31.9 PaleMoon/26.0.0b1'
15
- result: { browser: { name: 'Pale Moon', family: { name: Firefox, version: '31.9' }, version: 26.0.0, type: browser }, engine: { name: Goanna, version: '1.0' }, os: { name: Linux }, device: { type: desktop } }
16
- readable: 'Pale Moon 26.0.0 on Linux'
17
- -
18
- headers: 'User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:1.0) Goanna/20150804 Firefox/31.9 PaleMoon/26.0.0b1'
19
- result: { browser: { name: 'Pale Moon', family: { name: Firefox, version: '31.9' }, version: 26.0.0, type: browser }, engine: { name: Goanna, version: '1.0' }, os: { name: Linux }, device: { type: desktop } }
20
- readable: 'Pale Moon 26.0.0 on Linux'
21
- -
22
- headers: 'User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:38.9) Gecko/20100101 Goanna/2.0 Firefox/38.9 PaleMoon/26.0.0'
23
- result: { browser: { name: 'Pale Moon', family: { name: Firefox, version: '38.9' }, version: 26.0.0, type: browser }, engine: { name: Goanna, version: '2.0' }, os: { name: Windows, version: { value: '6.1', alias: '7' } }, device: { type: desktop } }
24
- readable: 'Pale Moon 26.0.0 on Windows 7'
25
- -
26
- headers: 'User-Agent: Mozilla/5.0 (Windows NT 6.3; Win64; x64; rv:2.0) Goanna/20160105 PaleMoon/26.0.0'
27
- result: { browser: { name: 'Pale Moon', version: 26.0.0, type: browser }, engine: { name: Goanna, version: '2.0' }, os: { name: Windows, version: { value: '6.3', alias: '8.1' } }, device: { type: desktop } }
28
- readable: 'Pale Moon 26.0.0 on Windows 8.1'
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
includes/vendor/whichbrowser/parser/tests/data/desktop/engine-servo.yaml DELETED
@@ -1,12 +0,0 @@
1
- -
2
- headers: 'User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.10; rv:37.0) Servo/1.0 Firefox/37.0'
3
- result: { browser: { name: 'Servo Nightly Build', type: browser }, engine: { name: Servo, version: '1.0' }, os: { name: 'OS X', version: { value: '10.10', nickname: Yosemite } }, device: { type: desktop, manufacturer: Apple, model: Macintosh } }
4
- readable: 'Servo Nightly Build on OS X Yosemite 10.10'
5
- -
6
- headers: 'User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:37.0) Servo/1.0 Firefox/37.0'
7
- readable: 'Servo Nightly Build on Linux'
8
- result: { browser: { name: 'Servo Nightly Build', type: browser }, engine: { name: Servo, version: '1.0' }, os: { name: Linux }, device: { type: desktop } }
9
- -
10
- headers: 'User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.10; rv:55.0) Servo/1.0 Firefox/55.0'
11
- readable: 'Servo Nightly Build on OS X Yosemite 10.10'
12
- result: { browser: { name: 'Servo Nightly Build', type: browser }, engine: { name: Servo, version: '1.0' }, os: { name: 'OS X', version: { value: '10.10', nickname: Yosemite } }, device: { type: desktop, manufacturer: Apple, model: Macintosh } }
 
 
 
 
 
 
 
 
 
 
 
 
includes/vendor/whichbrowser/parser/tests/data/desktop/os-amigaos.yaml DELETED
@@ -1,56 +0,0 @@
1
- -
2
- headers: 'User-Agent: IBrowse/2.4 (AmigaOS 3.9; 68K)'
3
- result: { browser: { name: IBrowse, version: '2.4', type: browser }, os: { name: AmigaOS, version: '3.9' }, device: { type: desktop } }
4
- readable: 'IBrowse 2.4 on AmigaOS 3.9'
5
- -
6
- headers: 'User-Agent: IBrowse/2.4 (AmigaOS V53; PPC; 68K build)'
7
- result: { browser: { name: IBrowse, version: '2.4', type: browser }, os: { name: AmigaOS }, device: { type: desktop } }
8
- readable: 'IBrowse 2.4 on AmigaOS'
9
- -
10
- headers: 'User-Agent: IBrowse/2.4oem (AmigaOS V53; PPC; 68K build)'
11
- result: { browser: { name: IBrowse, version: '2.4', type: browser }, os: { name: AmigaOS }, device: { type: desktop } }
12
- readable: 'IBrowse 2.4 on AmigaOS'
13
- -
14
- headers: 'User-Agent: IBrowse/2.5beta (AmigaOS 4.1; PPC)'
15
- result: { browser: { name: IBrowse, version: '2.5', type: browser }, os: { name: AmigaOS, version: '4.1' }, device: { type: desktop } }
16
- readable: 'IBrowse 2.5 on AmigaOS 4.1'
17
- -
18
- headers: 'User-Agent: Mozilla/5.0 (Amiga; PowerPC AmigaOS 4.1; Odyssey Web Browser; rv:1.23) AppleWebKit/538.1 (KHTML, like Gecko) OWB/1.23 Safari/538.1'
19
- result: { browser: { name: Odyssey, version: '1.23', type: browser }, engine: { name: Webkit, version: '538.1' }, os: { name: AmigaOS, version: '4.1' }, device: { type: desktop } }
20
- readable: 'Odyssey 1.23 on AmigaOS 4.1'
21
- -
22
- headers: 'User-Agent: Mozilla/5.0 (AmigaOS 4; PPC; InternetSurfboard; U; xx) AppleWebKit/533.3 (KHTML, like Gecko) InternetSurfboard/0.002 Safari/533.3'
23
- result: { browser: { name: InternetSurfboard, version: '0.002', type: browser }, engine: { name: Webkit, version: '533.3' }, os: { name: AmigaOS, version: '4' }, device: { type: desktop } }
24
- readable: 'InternetSurfboard 0.002 on AmigaOS 4'
25
- -
26
- headers: 'User-Agent: Mozilla/5.0 (AmigaOS; AmigaOS 53.26 PowerPC; rv:2.0.1) Gecko/20120327 Firefox/4.0.1'
27
- result: { browser: { name: Firefox, version: 4.0.1, type: browser }, engine: { name: Gecko, version: 2.0.1 }, os: { name: AmigaOS, version: '53.26' }, device: { type: desktop } }
28
- readable: 'Firefox 4.0.1 on AmigaOS 53.26'
29
- -
30
- headers: 'User-Agent: Mozilla/5.0 (Macintosh; PowerPC AmigaOS 4.1; Odyssey Web Browser; rv:1.16) AppleWebKit/535.14 (KHTML, like Gecko) OWB/1.16 Safari/535.14'
31
- result: { browser: { name: Odyssey, version: '1.16', type: browser }, engine: { name: Webkit, version: '535.14' }, os: { name: AmigaOS, version: '4.1' }, device: { type: desktop } }
32
- readable: 'Odyssey 1.16 on AmigaOS 4.1'
33
- -
34
- headers: 'User-Agent: Mozilla/5.0 (compatible; Origyn Web Browser; AmigaOS 4; PPC; U) AppleWebKit/532.0+ (KHTML, like Gecko, Safari/532.0+)'
35
- result: { browser: { name: Origyn, type: browser }, engine: { name: Webkit, version: '532.0' }, os: { name: AmigaOS, version: '4' }, device: { type: desktop } }
36
- readable: 'Origyn on AmigaOS 4'
37
- -
38
- headers: 'User-Agent: Mozilla/5.0 (compatible; Origyn Web Browser; U; AmigaOS 4.0; xx) AppleWebKit/534.0 (KHTML, like Gecko, Safari/534.0) OWB/3.32'
39
- result: { browser: { name: Origyn, type: browser }, engine: { name: Webkit, version: '534.0' }, os: { name: AmigaOS, version: '4.0' }, device: { type: desktop } }
40
- readable: 'Origyn on AmigaOS 4.0'
41
- -
42
- headers: 'User-Agent: Mozilla/5.0 (compatible; Origyn Web Browser; U; AmigaOS 4.1; xx) AppleWebKit/534.0 (KHTML, like Gecko, Safari/534.0) OWB/3.32'
43
- result: { browser: { name: Origyn, type: browser }, engine: { name: Webkit, version: '534.0' }, os: { name: AmigaOS, version: '4.1' }, device: { type: desktop } }
44
- readable: 'Origyn on AmigaOS 4.1'
45
- -
46
- headers: 'User-Agent: OWB/3.12 (AmigaOS 4.1; ppc; U)'
47
- result: { browser: { name: Odyssey, version: '3.12', type: browser }, os: { name: AmigaOS, version: '4.1' }, device: { type: desktop } }
48
- readable: 'Odyssey 3.12 on AmigaOS 4.1'
49
- -
50
- headers: 'User-Agent: Mozilla/4.0 (compatible; IBrowse 2.3; AmigaOS4.0)'
51
- result: { browser: { name: IBrowse, version: '2.3', type: browser }, os: { name: AmigaOS, version: '4.0' }, device: { type: desktop } }
52
- readable: 'IBrowse 2.3 on AmigaOS 4.0'
53
- -
54
- headers: 'User-Agent: Mozilla/4.0 (compatible; MSIE 5.5; AmigaOS4.0) IBrowse 2.3'
55
- result: { browser: { name: IBrowse, version: '2.3', type: browser }, os: { name: AmigaOS, version: '4.0' }, device: { type: desktop } }
56
- readable: 'IBrowse 2.3 on AmigaOS 4.0'
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
includes/vendor/whichbrowser/parser/tests/data/desktop/os-aros.yaml DELETED
@@ -1,8 +0,0 @@
1
- -
2
- headers: 'User-Agent: Mozilla/5.0 (compatible; Odyssey Web Browser; AROS; rv:1.16) AppleWebKit/535.14 (KHTML, like Gecko) OWB/1.16 Safari/535.14'
3
- result: { browser: { name: Odyssey, version: '1.16', type: browser }, engine: { name: Webkit, version: '535.14' }, os: { name: AROS }, device: { type: desktop } }
4
- readable: 'Odyssey 1.16 on AROS'
5
- -
6
- headers: 'User-Agent: Mozilla/5.0 (i386; AROS 0.0; Odyssey Web Browser; rv:1.23) AppleWebKit/538.1 (KHTML, like Gecko) OWB/1.23 Safari/538.1'
7
- result: { browser: { name: Odyssey, version: '1.23', type: browser }, engine: { name: Webkit, version: '538.1' }, os: { name: AROS }, device: { type: desktop } }
8
- readable: 'Odyssey 1.23 on AROS'
 
 
 
 
 
 
 
 
includes/vendor/whichbrowser/parser/tests/data/desktop/os-beos.yaml DELETED
@@ -1,12 +0,0 @@
1
- -
2
- headers: 'User-Agent: Mozilla/3.0 (compatible; NetPositive/2.2.1; BeOS)'
3
- result: { browser: { name: NetPositive, version: 2.2.1, type: browser }, os: { name: BeOS }, device: { type: desktop } }
4
- readable: 'NetPositive 2.2.1 on BeOS'
5
- -
6
- headers: 'User-Agent: Mozilla/5.0 (BeOS; U; BeOS BePC; xx; rv:1.8.1) Gecko/20061108 BonEcho/2.0'
7
- result: { browser: { name: Firefox, version: '2.0', type: browser }, engine: { name: Gecko, version: 1.8.1 }, os: { name: BeOS }, device: { type: desktop } }
8
- readable: 'Firefox BonEcho 2.0 on BeOS'
9
- -
10
- headers: 'User-Agent: Mozilla/5.0 (BeOS; U; BeOS BePC; xx; rv:1.8.1.17) Gecko/20080831 BonEcho/2.0.0.17'
11
- result: { browser: { name: Firefox, version: 2.0.0.17, type: browser }, engine: { name: Gecko, version: 1.8.1 }, os: { name: BeOS }, device: { type: desktop } }
12
- readable: 'Firefox BonEcho 2.0.0.17 on BeOS'
 
 
 
 
 
 
 
 
 
 
 
 
includes/vendor/whichbrowser/parser/tests/data/desktop/os-bsd.yaml DELETED
@@ -1,148 +0,0 @@
1
- -
2
- headers: 'User-Agent: Midori/0.5 (X11; FreeBSD/11) WebKit/537.32+ Midori/0.5'
3
- result: { browser: { name: Midori, version: '0.5', type: browser }, engine: { name: Webkit, version: '537.32' }, os: { name: FreeBSD, family: BSD, version: '11' }, device: { type: desktop } }
4
- readable: 'Midori 0.5 on FreeBSD 11'
5
- -
6
- headers: 'User-Agent: Mozilla/5.0 (OpenBSD i386) AppleWebKit/538.1+ (KHTML, like Gecko) WebKitGTK+/2.2.3 luakit/0d5f4'
7
- result: { browser: { using: LuaKit }, engine: { name: Webkit, version: '538.1' }, os: { name: OpenBSD, family: BSD } }
8
- readable: 'LuaKit on OpenBSD'
9
- -
10
- headers: 'User-Agent: Mozilla/5.0 (X11; FreeBSD amd64) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.56 Safari/535.11'
11
- result: { browser: { name: Chrome, version: '17', type: browser }, engine: { name: Webkit, version: '535.11' }, os: { name: FreeBSD, family: BSD }, device: { type: desktop } }
12
- readable: 'Chrome 17 on FreeBSD'
13
- -
14
- headers: 'User-Agent: Mozilla/5.0 (X11; FreeBSD amd64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/33.0.1750.117 Safari/537.36'
15
- result: { browser: { name: Chrome, version: '33', type: browser }, engine: { name: Blink }, os: { name: FreeBSD, family: BSD }, device: { type: desktop } }
16
- readable: 'Chrome 33 on FreeBSD'
17
- -
18
- headers: 'User-Agent: Mozilla/5.0 (X11; FreeBSD amd64; rv:45.0) Gecko/20100101 Firefox/45.0'
19
- result: { browser: { name: Firefox, version: '45.0', type: browser }, engine: { name: Gecko, version: '45.0' }, os: { name: FreeBSD, family: BSD }, device: { type: desktop } }
20
- readable: 'Firefox 45.0 on FreeBSD'
21
- -
22
- headers: 'User-Agent: Mozilla/5.0 (X11; FreeBSD i386) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.66 Safari/535.11'
23
- result: { browser: { name: Chrome, version: '17', type: browser }, engine: { name: Webkit, version: '535.11' }, os: { name: FreeBSD, family: BSD }, device: { type: desktop } }
24
- readable: 'Chrome 17 on FreeBSD'
25
- -
26
- headers: 'User-Agent: Mozilla/5.0 (X11; FreeBSD) AppleWebKit/538.1 (KHTML, like Gecko) QupZilla/1.6.6 Safari/538.1'
27
- result: { browser: { name: QupZilla, version: 1.6.6, type: browser }, engine: { name: Webkit, version: '538.1' }, os: { name: FreeBSD, family: BSD }, device: { type: desktop } }
28
- readable: 'QupZilla 1.6.6 on FreeBSD'
29
- -
30
- headers: 'User-Agent: Mozilla/5.0 (X11; GNU/kFreeBSD x86_64; rv:30.0) Gecko/20100101 Firefox/30.0 Iceweasel/30.0'
31
- result: { browser: { name: Iceweasel, family: { name: Firefox, version: '30.0' }, version: '30.0', type: browser }, engine: { name: Gecko, version: '30.0' }, os: { name: FreeBSD, family: BSD }, device: { type: desktop } }
32
- readable: 'Iceweasel 30.0 on FreeBSD'
33
- -
34
- headers: 'User-Agent: Mozilla/5.0 (X11; NetBSD amd64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/43.0.2357.130 Safari/537.36'
35
- result: { browser: { name: Chrome, version: '43', type: browser }, engine: { name: Blink }, os: { name: NetBSD, family: BSD }, device: { type: desktop } }
36
- readable: 'Chrome 43 on NetBSD'
37
- -
38
- headers: 'User-Agent: Mozilla/5.0 (X11; NetBSD amd64; rv:17.0) Gecko/20121206 Firefox/17.0'
39
- result: { browser: { name: Firefox, version: '17.0', type: browser }, engine: { name: Gecko, version: '17.0' }, os: { name: NetBSD, family: BSD }, device: { type: desktop } }
40
- readable: 'Firefox 17.0 on NetBSD'
41
- -
42
- headers: 'User-Agent: Mozilla/5.0 (X11; NetBSD i386; rv:40.0) Gecko/20100101 Firefox/40.0'
43
- result: { browser: { name: Firefox, version: '40.0', type: browser }, engine: { name: Gecko, version: '40.0' }, os: { name: NetBSD, family: BSD }, device: { type: desktop } }
44
- readable: 'Firefox 40.0 on NetBSD'
45
- -
46
- headers: 'User-Agent: Mozilla/5.0 (X11; NetBSD) AppleWebKit/538.15+ Midori/0.5'
47
- result: { browser: { name: Midori, version: '0.5', type: browser }, engine: { name: Webkit, version: '538.15' }, os: { name: NetBSD, family: BSD }, device: { type: desktop } }
48
- readable: 'Midori 0.5 on NetBSD'
49
- -
50
- headers: 'User-Agent: Mozilla/5.0 (X11; NetBSD; rv:2.0.1) Gecko/20100101 Firefox/4.0.1 Midori/0.4'
51
- result: { browser: { name: Midori, family: { name: Firefox, version: 4.0.1 }, version: '0.4', type: browser }, engine: { name: Webkit }, os: { name: NetBSD, family: BSD }, device: { type: desktop } }
52
- readable: 'Midori 0.4 on NetBSD'
53
- -
54
- headers: 'User-Agent: Mozilla/5.0 (X11; OpenBSD amd64) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.162 Safari/535.19'
55
- result: { browser: { name: Chrome, version: '18', type: browser }, engine: { name: Webkit, version: '535.19' }, os: { name: OpenBSD, family: BSD }, device: { type: desktop } }
56
- readable: 'Chrome 18 on OpenBSD'
57
- -
58
- headers: 'User-Agent: Mozilla/5.0 (X11; OpenBSD amd64; rv:42.0) Gecko/20100101 Firefox/42.0'
59
- result: { browser: { name: Firefox, version: '42.0', type: browser }, engine: { name: Gecko, version: '42.0' }, os: { name: OpenBSD, family: BSD }, device: { type: desktop } }
60
- readable: 'Firefox 42.0 on OpenBSD'
61
- -
62
- headers: 'User-Agent: Mozilla/5.0 (X11; OpenBSD i386) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1985.125 Safari/537.36'
63
- result: { browser: { name: Chrome, version: '36', type: browser }, engine: { name: Blink }, os: { name: OpenBSD, family: BSD }, device: { type: desktop } }
64
- readable: 'Chrome 36 on OpenBSD'
65
- -
66
- headers: 'User-Agent: Mozilla/5.0 (X11; U; OpenBSD i386; xx; rv:1.9.1.16) Gecko/20110216 Firefox/3.5.16'
67
- result: { browser: { name: Firefox, version: 3.5.16, type: browser }, engine: { name: Gecko, version: 1.9.1 }, os: { name: OpenBSD, family: BSD }, device: { type: desktop } }
68
- readable: 'Firefox 3.5.16 on OpenBSD'
69
- -
70
- headers: 'User-Agent: Mozilla/5.0 (compatible; Konqueror/3.5; NetBSD) KHTML/3.5.10 (like Gecko)'
71
- result: { browser: { name: Konqueror, version: '3.5', type: browser }, engine: { name: KHTML, version: 3.5.10 }, os: { name: NetBSD, family: BSD }, device: { type: desktop } }
72
- readable: 'Konqueror 3.5 on NetBSD'
73
- -
74
- headers: 'User-Agent: Mozilla/5.0 (compatible; Konqueror/4.5; FreeBSD) KHTML/4.5.5 (like Gecko)'
75
- result: { browser: { name: Konqueror, version: '4.5', type: browser }, engine: { name: KHTML, version: 4.5.5 }, os: { name: FreeBSD, family: BSD }, device: { type: desktop } }
76
- readable: 'Konqueror 4.5 on FreeBSD'
77
- -
78
- headers: 'User-Agent: Opera/9.80 (X11; FreeBSD 10.0-CURRENT amd64) Presto/2.12.388 Version/12.11'
79
- result: { browser: { name: Opera, version: '12.11', type: browser }, engine: { name: Presto, version: 2.12.388 }, os: { name: FreeBSD, family: BSD, version: '10.0' }, device: { type: desktop } }
80
- readable: 'Opera 12.11 on FreeBSD 10.0'
81
- -
82
- headers: 'User-Agent: Opera/9.80 (X11; FreeBSD 8.2-RELEASE amd64; U; xx) Presto/2.10.229 Version/11.61'
83
- result: { browser: { name: Opera, version: '11.61', type: browser }, engine: { name: Presto, version: 2.10.229 }, os: { name: FreeBSD, family: BSD, version: '8.2' }, device: { type: desktop } }
84
- readable: 'Opera 11.61 on FreeBSD 8.2'
85
- -
86
- headers: 'User-Agent: Opera/9.80 (X11; OpenBSD i386) Presto/2.12.388 Version/12.16'
87
- result: { browser: { name: Opera, version: '12.16', type: browser }, engine: { name: Presto, version: 2.12.388 }, os: { name: OpenBSD, family: BSD }, device: { type: desktop } }
88
- readable: 'Opera 12.16 on OpenBSD'
89
- -
90
- headers: 'User-Agent: Mozilla/1.1N (X11; I; BSD/386 uname failed)'
91
- result: { browser: { name: 'Netscape Navigator', version: '1.1', type: browser }, os: { name: BSD/OS, family: BSD }, device: { type: desktop } }
92
- readable: 'Netscape Navigator 1.1 on BSD/OS'
93
- -
94
- headers: 'User-Agent: Mozilla/1.1N (X11; I; BSD/OS 2.0 i386)'
95
- result: { browser: { name: 'Netscape Navigator', version: '1.1', type: browser }, os: { name: BSD/OS, family: BSD, version: '2.0' }, device: { type: desktop } }
96
- readable: 'Netscape Navigator 1.1 on BSD/OS 2.0'
97
- -
98
- headers: 'User-Agent: Links (2.1pre22; NetBSD 2.0.2 i386; 80x48)'
99
- result: { browser: { name: Links, version: '2.1', type: 'browser:text' }, os: { name: NetBSD, family: BSD, version: 2.0.2 } }
100
- readable: 'Links 2.1 on NetBSD 2.0.2'
101
- -
102
- headers: 'User-Agent: Mozilla/4.04 [ja_euc] (X11; I; NetBSD 1.2.1 i386; Nav)'
103
- result: { browser: { name: 'Netscape Navigator', version: 4.0.4, type: browser }, os: { name: NetBSD, family: BSD, version: 1.2.1 }, device: { type: desktop } }
104
- readable: 'Netscape Navigator 4.0.4 on NetBSD 1.2.1'
105
- -
106
- headers: 'User-Agent: Mozilla/5.0 (compatible; Konqueror/4.5; NetBSD 5.0.2; X11; amd64; en_US) KHTML/4.5.4 (like Gecko)'
107
- result: { browser: { name: Konqueror, version: '4.5', type: browser }, engine: { name: KHTML, version: 4.5.4 }, os: { name: NetBSD, family: BSD, version: 5.0.2 }, device: { type: desktop } }
108
- readable: 'Konqueror 4.5 on NetBSD 5.0.2'
109
- -
110
- headers: 'User-Agent: curl/7.16.0 (i386-unknown-openbsd4.1) libcurl/7.16.0 OpenSSL/0.9.7j zlib/1.2.3'
111
- result: { browser: { name: Curl, version: 7.16.0 }, device: { type: bot } }
112
- readable: 'Curl 7.16.0'
113
- -
114
- headers: 'User-Agent: Links (2.1pre30; OpenBSD 4.3 macppc; x)'
115
- result: { browser: { name: Links, version: '2.1', type: 'browser:text' }, os: { name: OpenBSD, family: BSD, version: '4.3' } }
116
- readable: 'Links 2.1 on OpenBSD 4.3'
117
- -
118
- headers: 'User-Agent: Mozilla/5.0 (compatible; Konqueror/3.3; OpenBSD 3.6; X11; i386; ja) (KHTML, like Gecko)'
119
- result: { browser: { name: Konqueror, version: '3.3', type: browser }, os: { name: OpenBSD, family: BSD, version: '3.6' }, device: { type: desktop } }
120
- readable: 'Konqueror 3.3 on OpenBSD 3.6'
121
- -
122
- headers: 'User-Agent: Opera/6.12 (OpenBSD 3.7; U) [en]'
123
- result: { browser: { name: Opera, version: '6.12', type: browser }, engine: { name: Electra }, os: { name: OpenBSD, family: BSD, version: '3.7' }, device: { type: desktop } }
124
- readable: 'Opera 6.12 on OpenBSD 3.7'
125
- -
126
- headers: 'User-Agent: curl/7.14.1 (i386-portbld-freebsd4.7) libcurl/7.14.1 OpenSSL/0.9.8 zlib/1.1.3'
127
- result: { browser: { name: Curl, version: 7.14.1 }, device: { type: bot } }
128
- readable: 'Curl 7.14.1'
129
- -
130
- headers: 'User-Agent: ELinks/0.11.1 (textmode; FreeBSD 6.1-RELEASE i386; 127x77-2)'
131
- result: { browser: { name: ELinks, version: 0.11.1, type: 'browser:text' }, os: { name: FreeBSD, family: BSD, version: '6.1' }, device: { type: desktop } }
132
- readable: 'ELinks 0.11.1 on FreeBSD 6.1'
133
- -
134
- headers: 'User-Agent: Midori/0.5 (X11; FreeBSD/11) WebKit/537.32+ Midori/0.5'
135
- result: { browser: { name: Midori, version: '0.5', type: browser }, engine: { name: Webkit, version: '537.32' }, os: { name: FreeBSD, family: BSD, version: '11' }, device: { type: desktop } }
136
- readable: 'Midori 0.5 on FreeBSD 11'
137
- -
138
- headers: 'User-Agent: Mozilla/3.04Gold (X11; I; FreeBSD 2.2.1-RELEASE i386)'
139
- result: { browser: { name: 'Netscape Navigator', version: 3.0.4, type: browser }, os: { name: FreeBSD, family: BSD, version: 2.2.1 }, device: { type: desktop } }
140
- readable: 'Netscape Navigator 3.0.4 on FreeBSD 2.2.1'
141
- -
142
- headers: 'User-Agent: Mozilla/5.0 (X11; DragonFly x86_64; rv:36.0) Gecko/20100101 Firefox/36.0 SeaMonkey/2.33.1'
143
- result: { browser: { name: SeaMonkey, family: { name: Firefox, version: '36.0' }, version: 2.33.1, type: browser }, engine: { name: Gecko, version: '36.0' }, os: { name: 'DragonFly BSD', family: BSD }, device: { type: desktop } }
144
- readable: 'SeaMonkey 2.33.1 on DragonFly BSD'
145
- -
146
- headers: 'User-Agent: Mozilla/5.0 (X11; DragonFly x86_64; rv:34.0) Gecko/20100101 Firefox/34.0 SeaMonkey/2.31'
147
- result: { browser: { name: SeaMonkey, family: { name: Firefox, version: '34.0' }, version: '2.31', type: browser }, engine: { name: Gecko, version: '34.0' }, os: { name: 'DragonFly BSD', family: BSD }, device: { type: desktop } }
148
- readable: 'SeaMonkey 2.31 on DragonFly BSD'
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
includes/vendor/whichbrowser/parser/tests/data/desktop/os-chromeos.yaml DELETED
@@ -1,32 +0,0 @@
1
- -
2
- headers: 'User-Agent: Mozilla/5.0 (X11; CrOS armv7l 3428.149.2) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.87 Safari/537.22'
3
- result: { browser: { name: Chrome, version: '25', type: browser }, engine: { name: Webkit, version: '537.22' }, os: { name: 'Chrome OS' }, device: { type: desktop } }
4
- readable: 'Chrome 25 on Chrome OS'
5
- -
6
- headers: 'User-Agent: Mozilla/5.0 (X11; CrOS armv7l 7520.42.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.59 Safari/537.36'
7
- result: { browser: { name: Chrome, version: '47', type: browser }, engine: { name: Blink }, os: { name: 'Chrome OS' }, device: { type: desktop } }
8
- readable: 'Chrome 47 on Chrome OS'
9
- -
10
- headers: 'User-Agent: Mozilla/5.0 (X11; CrOS i686 1193.117.0) AppleWebKit/535.7 (KHTML, like Gecko) Chrome/16.0.912.66 Safari/535.7'
11
- result: { browser: { name: Chrome, version: '16', type: browser }, engine: { name: Webkit, version: '535.7' }, os: { name: 'Chrome OS' }, device: { type: desktop } }
12
- readable: 'Chrome 16 on Chrome OS'
13
- -
14
- headers: 'User-Agent: Mozilla/5.0 (X11; CrOS i686 1828.0.2012) AppleWebKit/535.22 (KHTML, like Gecko) Chrome/19.0.1051.0 Safari/535.22'
15
- result: { browser: { name: Chrome, version: 19.0.1051.0, type: browser }, engine: { name: Webkit, version: '535.22' }, os: { name: 'Chrome OS' }, device: { type: desktop } }
16
- readable: 'Chrome Dev 19.0.1051.0 on Chrome OS'
17
- -
18
- headers: 'User-Agent: Mozilla/5.0 (X11; CrOS i686 3607.0.2013) AppleWebKit/537.27 (KHTML, like Gecko) Chrome/26.0.1393.2 Safari/537.27'
19
- result: { browser: { name: Chrome, version: 26.0.1393.2, type: browser }, engine: { name: Webkit, version: '537.27' }, os: { name: 'Chrome OS' }, device: { type: desktop } }
20
- readable: 'Chrome Dev 26.0.1393.2 on Chrome OS'
21
- -
22
- headers: 'User-Agent: Mozilla/5.0 (X11; CrOS i686 6163.0.2014) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2126.0 Safari/537.36'
23
- result: { browser: { name: Chrome, version: 39.0.2126.0, type: browser }, engine: { name: Blink }, os: { name: 'Chrome OS' }, device: { type: desktop } }
24
- readable: 'Chrome Dev 39.0.2126.0 on Chrome OS'
25
- -
26
- headers: 'User-Agent: Mozilla/5.0 (X11; CrOS x86_64 12.10.0) AppleWebKit/537.30 (KHTML, like Gecko) Chrome/26.0.1400.0 Safari/537.30'
27
- result: { browser: { name: Chrome, version: 26.0.1400.0, type: browser }, engine: { name: Webkit, version: '537.30' }, os: { name: 'Chrome OS' }, device: { type: desktop } }
28
- readable: 'Chrome Dev 26.0.1400.0 on Chrome OS'
29
- -
30
- headers: 'User-Agent: Mozilla/5.0 (X11; CrOS x86_64 2913.193.0) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.91 Safari/537.11'
31
- result: { browser: { name: Chrome, version: '23', type: browser }, engine: { name: Webkit, version: '537.11' }, os: { name: 'Chrome OS' }, device: { type: desktop } }
32
- readable: 'Chrome 23 on Chrome OS'
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
includes/vendor/whichbrowser/parser/tests/data/desktop/os-haiku.yaml DELETED
@@ -1,44 +0,0 @@
1
- -
2
- headers: 'User-Agent: Mozilla/5.0 (BeOS; U; Haiku BePC; xx; rv:1.8.1.10pre) Gecko/20080112'
3
- result: { engine: { name: Gecko, version: 1.8.1 }, os: { name: Haiku }, device: { type: desktop } }
4
- readable: 'an unknown browser based on Gecko 1.8.1 running on Haiku'
5
- -
6
- headers: 'User-Agent: Mozilla/5.0 (BeOS; U; Haiku BePC; xx; rv:1.8.1.18) Gecko/20081114 BonEcho/2.0.0.18'
7
- result: { browser: { name: Firefox, version: 2.0.0.18, type: browser }, engine: { name: Gecko, version: 1.8.1 }, os: { name: Haiku }, device: { type: desktop } }
8
- readable: 'Firefox BonEcho 2.0.0.18 on Haiku'
9
- -
10
- headers: 'User-Agent: Mozilla/5.0 (BeOS; U; Haiku BePC; xx; rv:1.8.1.25pre) Gecko/20120921 BonEcho/2.0.0.22pre'
11
- result: { browser: { name: Firefox, version: 2.0.0.22, type: browser }, engine: { name: Gecko, version: 1.8.1 }, os: { name: Haiku }, device: { type: desktop } }
12
- readable: 'Firefox BonEcho 2.0.0.22 on Haiku'
13
- -
14
- headers: 'User-Agent: Mozilla/5.0 (Macintosh; Intel Haiku R1 x86) AppleWebKit/538.1 (KHTML, like Gecko) QupZilla/1.7.0 Safari/538.1'
15
- result: { browser: { name: QupZilla, version: 1.7.0, type: browser }, engine: { name: Webkit, version: '538.1' }, os: { name: Haiku }, device: { type: desktop } }
16
- readable: 'QupZilla 1.7.0 on Haiku'
17
- -
18
- headers: 'User-Agent: Mozilla/5.0 (Macintosh; Intel Haiku R1 x86) AppleWebKit/538.26 (KHTML, like Gecko) WebPositive/1.2 Safari/538.26'
19
- result: { browser: { name: WebPositive, version: '1.2', type: browser }, engine: { name: Webkit, version: '538.26' }, os: { name: Haiku }, device: { type: desktop } }
20
- readable: 'WebPositive 1.2 on Haiku'
21
- -
22
- headers: 'User-Agent: Mozilla/5.0 (compatible; Haiku R1 x86; xx) AppleWebKit/536.10 (KHTML, like Gecko) WebPositive/1.1 Safari/536.10'
23
- result: { browser: { name: WebPositive, version: '1.1', type: browser }, engine: { name: Webkit, version: '536.10' }, os: { name: Haiku }, device: { type: desktop } }
24
- readable: 'WebPositive 1.1 on Haiku'
25
- -
26
- headers: 'User-Agent: Mozilla/5.0 (compatible; Haiku R1 x86; xx) AppleWebKit/538.18 (KHTML, like Gecko) WebPositive/1.2 Safari/538.18'
27
- result: { browser: { name: WebPositive, version: '1.2', type: browser }, engine: { name: Webkit, version: '538.18' }, os: { name: Haiku }, device: { type: desktop } }
28
- readable: 'WebPositive 1.2 on Haiku'
29
- -
30
- headers: 'User-Agent: Mozilla/5.0 (compatible; U; Haiku x86; xx) AppleWebKit/536.10 (KHTML, like Gecko) Haiku/R1 WebPositive/1.1 Safari/536.10'
31
- result: { browser: { name: WebPositive, version: '1.1', type: browser }, engine: { name: Webkit, version: '536.10' }, os: { name: Haiku }, device: { type: desktop } }
32
- readable: 'WebPositive 1.1 on Haiku'
33
- -
34
- headers: 'User-Agent: Mozilla/5.0 (compatible; U; InfiNet 0.1; Haiku) AppleWebKit/528+ (KHTML, like Gecko) WebPositive/528+ Safari/528+'
35
- result: { browser: { name: WebPositive, type: browser }, engine: { name: Webkit, version: '528' }, os: { name: Haiku }, device: { type: desktop } }
36
- readable: 'WebPositive on Haiku'
37
- -
38
- headers: 'User-Agent: Mozilla/5.0 (compatible; U; WebPositive/533.4; Haiku) AppleWebKit/533.4 (KHTML, like Gecko) Chrome/5.0.375.55 Safari/533.4'
39
- result: { browser: { name: WebPositive, family: { name: Chrome, version: 5 }, type: browser }, engine: { name: Webkit, version: '533.4' }, os: { name: Haiku }, device: { type: desktop } }
40
- readable: 'WebPositive on Haiku'
41
- -
42
- headers: 'User-Agent: Mozilla/5.0 (compatible; x86 Haiku R1; xx) AppleWebKit/537.1 (KHTML, like Gecko) WebPositive/1.2 Safari/537.1'
43
- result: { browser: { name: WebPositive, version: '1.2', type: browser }, engine: { name: Webkit, version: '537.1' }, os: { name: Haiku }, device: { type: desktop } }
44
- readable: 'WebPositive 1.2 on Haiku'
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
includes/vendor/whichbrowser/parser/tests/data/desktop/os-irix.yaml DELETED
@@ -1,20 +0,0 @@
1
- -
2
- headers: 'User-Agent: Mozilla/3.04Gold (X11; U; IRIX 5.3 IP22)'
3
- result: { browser: { name: 'Netscape Navigator', version: 3.0.4, type: browser }, os: { name: IRIX, family: UNIX, version: '5.3' }, device: { type: desktop } }
4
- readable: 'Netscape Navigator 3.0.4 on IRIX 5.3'
5
- -
6
- headers: 'User-Agent: Mozilla/4.08 [en] (X11; U; IRIX 5.3 IP5; Nav)'
7
- result: { browser: { name: 'Netscape Navigator', version: 4.0.8, type: browser }, os: { name: IRIX, family: UNIX, version: '5.3' }, device: { type: desktop } }
8
- readable: 'Netscape Navigator 4.0.8 on IRIX 5.3'
9
- -
10
- headers: 'User-Agent: Mozilla/4.76C-SGI [ru] (X11; I; IRIX64 6.5 IP30)'
11
- result: { browser: { name: 'Netscape Communicator', version: 4.7.6, type: browser }, os: { name: IRIX, family: UNIX, version: '6.5' }, device: { type: desktop } }
12
- readable: 'Netscape Communicator 4.7.6 on IRIX 6.5'
13
- -
14
- headers: 'User-Agent: Mozilla/4.77 [en] (X11; I; IRIX;64 6.5 IP30)'
15
- result: { browser: { name: 'Netscape Communicator', version: 4.7.7, type: browser }, os: { name: IRIX, family: UNIX, version: '6.5' }, device: { type: desktop } }
16
- readable: 'Netscape Communicator 4.7.7 on IRIX 6.5'
17
- -
18
- headers: 'User-Agent: Mozilla/5.0 (X11; U; IRIX IP32; xx; rv:1.9.0.19) Gecko/2013020113 Firefox/3.0.19'
19
- result: { browser: { name: Firefox, version: 3.0.19, type: browser }, engine: { name: Gecko, version: 1.9.0 }, os: { name: IRIX, family: UNIX }, device: { type: desktop } }
20
- readable: 'Firefox 3.0.19 on IRIX'
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
includes/vendor/whichbrowser/parser/tests/data/desktop/os-joli.yaml DELETED
@@ -1,8 +0,0 @@
1
- -
2
- headers: 'User-Agent: Mozilla/5.0 (X11; Jolicloud Linux i686) AppleWebKit/537.6 (KHTML, like Gecko) Joli OS/1.2 Chromium/23.0.1240.0 Chrome/23.0.1240.0 Safari/537.6'
3
- result: { browser: { name: Chromium, family: { name: Chrome, version: 23 }, version: 23.0.1240.0, type: browser }, engine: { name: Webkit, version: '537.6' }, os: { name: 'Joli OS', version: '1.2' }, device: { type: desktop } }
4
- readable: 'Chromium 23.0.1240.0 on Joli OS 1.2'
5
- -
6
- headers: 'User-Agent: Mozilla/5.0 (X11; U; Jolicloud Linux i686; xx) AppleWebKit/534.16 (KHTML, like Gecko) Joli OS/1.2 Chromium/10.0.648.82 Chrome/10.0.648.82 Safari/534.16'
7
- result: { browser: { name: Chromium, family: { name: Chrome, version: 10 }, version: 10.0.648.82, type: browser }, engine: { name: Webkit, version: '534.16' }, os: { name: 'Joli OS', version: '1.2' }, device: { type: desktop } }
8
- readable: 'Chromium 10.0.648.82 on Joli OS 1.2'
 
 
 
 
 
 
 
 
includes/vendor/whichbrowser/parser/tests/data/desktop/os-linux.yaml DELETED
@@ -1,420 +0,0 @@
1
- -
2
- headers: 'User-Agent: Midori/0.4 (CentOS 6.5)'
3
- result: { browser: { name: Midori, version: '0.4', type: browser }, device: { type: desktop } }
4
- readable: 'Midori 0.4'
5
- -
6
- headers: 'User-Agent: Mozilla/5.0 (Fedora; Linux i686) AppleWebKit/601.1 (KHTML, like Gecko) Version/8.0 Safari/601.1 Epiphany/3.16.3'
7
- result: { browser: { name: 'GNOME Web', version: 3.16.3, type: browser }, engine: { name: Webkit, version: '601.1' }, os: { name: Fedora }, device: { type: desktop } }
8
- readable: 'GNOME Web 3.16.3 on Fedora'
9
- -
10
- headers: 'User-Agent: Mozilla/5.0 (Fedora; Linux x86_64) AppleWebKit/601.1 (KHTML, like Gecko) Version/8.0 Safari/601.1 Epiphany/3.16.1'
11
- result: { browser: { name: 'GNOME Web', version: 3.16.1, type: browser }, engine: { name: Webkit, version: '601.1' }, os: { name: Fedora }, device: { type: desktop } }
12
- readable: 'GNOME Web 3.16.1 on Fedora'
13
- -
14
- headers: 'User-Agent: Mozilla/5.0 (Ubuntu; X11; Linux x86_64; rv:10.0a1) Gecko/20111108 Firefox/10.0a1'
15
- result: { browser: { name: Firefox, version: 10.0a1, type: browser }, engine: { name: Gecko, version: 10.0a1 }, os: { name: Ubuntu }, device: { type: desktop } }
16
- readable: 'Firefox Aurora 10.0a1 on Ubuntu'
17
- -
18
- headers: 'User-Agent: Mozilla/5.0 (X11) KHTML/4.11.2 (like Gecko) Konqueror/4.11 SUSE'
19
- result: { browser: { name: Konqueror, version: '4.11', type: browser }, engine: { name: KHTML, version: 4.11.2 }, device: { type: desktop } }
20
- readable: 'Konqueror 4.11'
21
- -
22
- headers: 'User-Agent: Mozilla/5.0 (X11; Fedora; Linux armv7l; rv:38.0) Gecko/20100101 Firefox/38.0'
23
- result: { browser: { name: Firefox, version: '38.0', type: browser }, engine: { name: Gecko, version: '38.0' }, os: { name: Fedora }, device: { type: desktop } }
24
- readable: 'Firefox 38.0 on Fedora'
25
- -
26
- headers: 'User-Agent: Mozilla/5.0 (X11; Fedora; Linux i686) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36'
27
- result: { browser: { name: Chrome, version: '45', type: browser }, engine: { name: Blink }, os: { name: Fedora }, device: { type: desktop } }
28
- readable: 'Chrome 45 on Fedora'
29
- -
30
- headers: 'User-Agent: Mozilla/5.0 (X11; Fedora; Linux i686; rv:39.0) Gecko/20100101 Firefox/39.0'
31
- result: { browser: { name: Firefox, version: '39.0', type: browser }, engine: { name: Gecko, version: '39.0' }, os: { name: Fedora }, device: { type: desktop } }
32
- readable: 'Firefox 39.0 on Fedora'
33
- -
34
- headers: 'User-Agent: Mozilla/5.0 (X11; Fedora; Linux mips64; rv:41.0) Gecko/20100101 Firefox/41.0'
35
- result: { browser: { name: Firefox, version: '41.0', type: browser }, engine: { name: Gecko, version: '41.0' }, os: { name: Fedora }, device: { type: desktop } }
36
- readable: 'Firefox 41.0 on Fedora'
37
- -
38
- headers: 'User-Agent: Mozilla/5.0 (X11; Fedora; Linux ppc64; rv:37.0) Gecko/20100101 Firefox/37.0'
39
- result: { browser: { name: Firefox, version: '37.0', type: browser }, engine: { name: Gecko, version: '37.0' }, os: { name: Fedora }, device: { type: desktop } }
40
- readable: 'Firefox 37.0 on Fedora'
41
- -
42
- headers: 'User-Agent: Mozilla/5.0 (X11; Fedora; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2486.0 Safari/537.36'
43
- result: { browser: { name: Chrome, version: 46.0.2486.0, type: browser }, engine: { name: Blink }, os: { name: Fedora }, device: { type: desktop } }
44
- readable: 'Chrome Dev 46.0.2486.0 on Fedora'
45
- -
46
- headers: 'User-Agent: Mozilla/5.0 (X11; KDE; Debian GNU/Linux Jessie x86_64; rv:39.0) Gecko/39.0 Firefox/39.0'
47
- result: { browser: { name: Firefox, version: '39.0', type: browser }, engine: { name: Gecko, version: '39.0' }, os: { name: Debian }, device: { type: desktop } }
48
- readable: 'Firefox 39.0 on Debian'
49
- -
50
- headers: 'User-Agent: Mozilla/5.0 (X11; Kubuntu; Ubuntu; Linux i686; rv:10.0) Gecko/20100101 Firefox/11.0'
51
- result: { browser: { name: Firefox, version: '11.0', type: browser }, engine: { name: Gecko, version: '10.0' }, os: { name: Ubuntu }, device: { type: desktop } }
52
- readable: 'Firefox 11.0 on Ubuntu'
53
- -
54
- headers: 'User-Agent: Mozilla/5.0 (X11; Linux 2.6.32-358.23.2.el6.centos.plus.i686 i686) KHTML/4.10.2 (like Gecko) Konqueror/4.10 Fedora/4.10.2-1.el6.1'
55
- result: { browser: { name: Konqueror, version: '4.10', type: browser }, engine: { name: KHTML, version: 4.10.2 }, os: { name: Fedora }, device: { type: desktop } }
56
- readable: 'Konqueror 4.10 on Fedora'
57
- -
58
- headers: 'User-Agent: Mozilla/5.0 (X11; Linux 3.12.13-gentoo x86_64) AppleWebKit/534.34 (KHTML, like Gecko) konqueror/4.13.1 Safari/534.34'
59
- result: { browser: { name: Konqueror, version: 4.13.1, type: browser }, engine: { name: Webkit, version: '534.34' }, os: { name: Linux }, device: { type: desktop } }
60
- readable: 'Konqueror 4.13.1 on Linux'
61
- -
62
- headers: 'User-Agent: Mozilla/5.0 (X11; Linux 3.8.13-gentoo x86_64; xx) KHTML/4.10.5 (like Gecko) Konqueror/4.10'
63
- result: { browser: { name: Konqueror, version: '4.10', type: browser }, engine: { name: KHTML, version: 4.10.5 }, os: { name: Linux }, device: { type: desktop } }
64
- readable: 'Konqueror 4.10 on Linux'
65
- -
66
- headers: 'User-Agent: Mozilla/5.0 (X11; Linux aarch64) AppleWebKit/601.1 (KHTML, like Gecko) Version/8.0 Safari/601.1 Ubuntu/15.04 (3.14.2-0ubuntu1) Epiphany/3.14.2'
67
- result: { browser: { name: 'GNOME Web', version: 3.14.2, type: browser }, engine: { name: Webkit, version: '601.1' }, os: { name: Ubuntu, version: '15.04' }, device: { type: desktop } }
68
- readable: 'GNOME Web 3.14.2 on Ubuntu 15.04'
69
- -
70
- headers: 'User-Agent: Mozilla/5.0 (X11; Linux armv6l) AppleWebKit/535.4+ (KHTML, like Gecko) Version/5.0 Safari/535.4+ Debian/sid/experimental (3.2.1-2) Epiphany/3.2.1'
71
- result: { browser: { name: 'GNOME Web', version: 3.2.1, type: browser }, engine: { name: Webkit, version: '535.4' }, os: { name: Debian }, device: { type: desktop } }
72
- readable: 'GNOME Web 3.2.1 on Debian'
73
- -
74
- headers: 'User-Agent: Mozilla/5.0 (X11; Linux armv6l) AppleWebKit/538.1 (KHTML, like Gecko) Chromium/25.0.1349.2 Chrome/25.0.1349.2 Safari/538.1 Debian/7.2 (3.8.2+rpi-2rpi1) Epiphany/3.8.2'
75
- result: { browser: { name: 'GNOME Web', family: { name: Chrome, version: 25 }, version: 3.8.2, type: browser }, engine: { name: Webkit, version: '538.1' }, os: { name: Debian, version: '7.2' }, device: { type: desktop } }
76
- readable: 'GNOME Web 3.8.2 on Debian 7.2'
77
- -
78
- headers: 'User-Agent: Mozilla/5.0 (X11; Linux i686 (x86_64)) AppleWebKit/537.36 (KHTML, like Gecko) Ubuntu Chromium/36.0.1985.125 Chrome/36.0.1985.125 Safari/537.36'
79
- result: { browser: { name: Chromium, family: { name: Chrome, version: 36 }, version: 36.0.1985.125, type: browser }, engine: { name: Blink }, os: { name: Ubuntu }, device: { type: desktop } }
80
- readable: 'Chromium 36.0.1985.125 on Ubuntu'
81
- -
82
- headers: 'User-Agent: Mozilla/5.0 (X11; Linux i686 (x86_64); CentOS Linux release 7.1.1503 (Core)) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/33.0.1750.0 Safari/537.36'
83
- result: { browser: { name: Chrome, version: '33', type: browser }, engine: { name: Blink }, os: { name: CentOS, version: '7.1' }, device: { type: desktop } }
84
- readable: 'Chrome 33 on CentOS 7.1'
85
- -
86
- headers: 'User-Agent: Mozilla/5.0 (X11; Linux i686) AppleWebKit/535.2 (KHTML, like Gecko) Ubuntu/11.10 Chromium/15.0.874.121 Chrome/15.0.874.121 Safari/535.2'
87
- result: { browser: { name: Chromium, family: { name: Chrome, version: 15 }, version: 15.0.874.121, type: browser }, engine: { name: Webkit, version: '535.2' }, os: { name: Ubuntu, version: '11.10' }, device: { type: desktop } }
88
- readable: 'Chromium 15.0.874.121 on Ubuntu 11.10'
89
- -
90
- headers: 'User-Agent: Mozilla/5.0 (X11; Linux i686) AppleWebKit/535.20 (KHTML, like Gecko) Chrome/19.0.1031.0 Safari/535.20 SUSE/19.0.1031.0'
91
- result: { browser: { name: Chrome, version: 19.0.1031.0, type: browser }, engine: { name: Webkit, version: '535.20' }, os: { name: SUSE }, device: { type: desktop } }
92
- readable: 'Chrome Dev 19.0.1031.0 on SUSE'
93
- -
94
- headers: 'User-Agent: Mozilla/5.0 (X11; Linux i686) AppleWebKit/537.32 (KHTML, like Gecko) Chrome/27.0.1425.0 Safari/537.32 SUSE/27.0.1425.0'
95
- result: { browser: { name: Chrome, version: 27.0.1425.0, type: browser }, engine: { name: Blink }, os: { name: SUSE }, device: { type: desktop } }
96
- readable: 'Chrome Dev 27.0.1425.0 on SUSE'
97
- -
98
- headers: 'User-Agent: Mozilla/5.0 (X11; Linux i686) AppleWebKit/602.1 (KHTML, like Gecko) Version/8.0 Safari/602.1 SUSE/20150920 (3.18.0) Epiphany/3.18.0'
99
- result: { browser: { name: 'GNOME Web', version: 3.18.0, type: browser }, engine: { name: Webkit, version: '602.1' }, os: { name: SUSE }, device: { type: desktop } }
100
- readable: 'GNOME Web 3.18.0 on SUSE'
101
- -
102
- headers: 'User-Agent: Mozilla/5.0 (X11; Linux i686) KHTML/4.11.3 (like Gecko) Konqueror/4.11 Fedora/4.11.3-1.fc19'
103
- result: { browser: { name: Konqueror, version: '4.11', type: browser }, engine: { name: KHTML, version: 4.11.3 }, os: { name: Fedora, version: '19' }, device: { type: desktop } }
104
- readable: 'Konqueror 4.11 on Fedora 19'
105
- -
106
- headers: 'User-Agent: Mozilla/5.0 (X11; Linux i686) KHTML/4.11.4 (like Gecko) Mageia Konqueror/4.11'
107
- result: { browser: { name: Konqueror, version: '4.11', type: browser }, engine: { name: KHTML, version: 4.11.4 }, os: { name: Mageia }, device: { type: desktop } }
108
- readable: 'Konqueror 4.11 on Mageia'
109
- -
110
- headers: 'User-Agent: Mozilla/5.0 (X11; Linux i686) KHTML/4.9.3 (like Gecko) Konqueror/4.9 SUSE'
111
- result: { browser: { name: Konqueror, version: '4.9', type: browser }, engine: { name: KHTML, version: 4.9.3 }, os: { name: SUSE }, device: { type: desktop } }
112
- readable: 'Konqueror 4.9 on SUSE'
113
- -
114
- headers: 'User-Agent: Mozilla/5.0 (X11; Linux i686; Fedora release 18 (Spherical Cow)) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/33.0.1750.0 Safari/537.36'
115
- result: { browser: { name: Chrome, version: '33', type: browser }, engine: { name: Blink }, os: { name: Fedora, version: '18' }, device: { type: desktop } }
116
- readable: 'Chrome 33 on Fedora 18'
117
- -
118
- headers: 'User-Agent: Mozilla/5.0 (X11; Linux i686; Fedora release 20 (Heisenbug)) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/33.0.1750.0 Maxthon/1.0.5.1 Safari/537.36'
119
- result: { browser: { name: Maxthon, family: { name: Chrome, version: 33 }, version: 1.0.5, type: browser }, engine: { name: Blink }, os: { name: Fedora, version: '20' }, device: { type: desktop } }
120
- readable: 'Maxthon 1.0.5 on Fedora 20'
121
- -
122
- headers: 'User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/535.11 (KHTML, like Gecko) Ubuntu/10.10 Chromium/17.0.963.26 Chrome/17.0.963.26 Safari/535.11'
123
- result: { browser: { name: Chromium, family: { name: Chrome, version: 17 }, version: 17.0.963.26, type: browser }, engine: { name: Webkit, version: '535.11' }, os: { name: Ubuntu, version: '10.10' }, device: { type: desktop } }
124
- readable: 'Chromium 17.0.963.26 on Ubuntu 10.10'
125
- -
126
- headers: 'User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.32 (KHTML, like Gecko) Chromium/25.0.1349.2 Chrome/25.0.1349.2 Safari/537.32 Debian/unstable (3.8.2-4) Epiphany/3.8.2'
127
- result: { browser: { name: 'GNOME Web', family: { name: Chrome, version: 25 }, version: 3.8.2, type: browser }, engine: { name: Webkit, version: '537.32' }, os: { name: Debian }, device: { type: desktop } }
128
- readable: 'GNOME Web 3.8.2 on Debian'
129
- -
130
- headers: 'User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/30.0.1587.0 Safari/537.36 SUSE/30.0.1587.0'
131
- result: { browser: { name: Chrome, version: 30.0.1587.0, type: browser }, engine: { name: Blink }, os: { name: SUSE }, device: { type: desktop } }
132
- readable: 'Chrome Dev 30.0.1587.0 on SUSE'
133
- -
134
- headers: 'User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) OpenMandriva Chromium/34.0.1847.134 Chrome/34.0.1847.134 Safari/537.36'
135
- result: { browser: { name: Chromium, family: { name: Chrome, version: 34 }, version: 34.0.1847.134, type: browser }, engine: { name: Blink }, os: { name: Mandriva }, device: { type: desktop } }
136
- readable: 'Chromium 34.0.1847.134 on Mandriva'
137
- -
138
- headers: 'User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/601.1 (KHTML, like Gecko) Version/8.0 Safari/601.1 Ubuntu/15.10 (3.16.3-1ubuntu1) Epiphany/3.16.3'
139
- result: { browser: { name: 'GNOME Web', version: 3.16.3, type: browser }, engine: { name: Webkit, version: '601.1' }, os: { name: Ubuntu, version: '15.10' }, device: { type: desktop } }
140
- readable: 'GNOME Web 3.16.3 on Ubuntu 15.10'
141
- -
142
- headers: 'User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/602.1 (KHTML, like Gecko) Version/8.0 Safari/602.1 SUSE/20150920 (3.18.0) Epiphany/3.18.0'
143
- result: { browser: { name: 'GNOME Web', version: 3.18.0, type: browser }, engine: { name: Webkit, version: '602.1' }, os: { name: SUSE }, device: { type: desktop } }
144
- readable: 'GNOME Web 3.18.0 on SUSE'
145
- -
146
- headers: 'User-Agent: Mozilla/5.0 (X11; Linux x86_64) KHTML/4.11.4 (like Gecko) Konqueror/4.11 Fedora/4.11.4-1.fc20'
147
- result: { browser: { name: Konqueror, version: '4.11', type: browser }, engine: { name: KHTML, version: 4.11.4 }, os: { name: Fedora, version: '20' }, device: { type: desktop } }
148
- readable: 'Konqueror 4.11 on Fedora 20'
149
- -
150
- headers: 'User-Agent: Mozilla/5.0 (X11; Linux x86_64; Gentoo Base System release 2.2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/33.0.1750.0 Safari/537.36'
151
- result: { browser: { name: Chrome, version: '33', type: browser }, engine: { name: Blink }, os: { name: Gentoo, version: '2.2' }, device: { type: desktop } }
152
- readable: 'Chrome 33 on Gentoo 2.2'
153
- -
154
- headers: 'User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:11.0) Gecko/2012314 Firefox/17.0.1 Slackware Linux'
155
- result: { browser: { name: Firefox, version: 17.0.1, type: browser }, engine: { name: Gecko, version: '11.0' }, os: { name: Slackware }, device: { type: desktop } }
156
- readable: 'Firefox 17.0.1 on Slackware'
157
- -
158
- headers: 'User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:25.0) Gecko/20100101 Debian Firefox/25.0 Iceweasel/25.0 Gnome'
159
- result: { browser: { name: Iceweasel, family: { name: Firefox, version: '25.0' }, version: '25.0', type: browser }, engine: { name: Gecko, version: '25.0' }, os: { name: Debian }, device: { type: desktop } }
160
- readable: 'Iceweasel 25.0 on Debian'
161
- -
162
- headers: 'User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:31.0) Gecko/20100101 conkeror/1.0pre1 (Debian-1.0~~pre-1+git140812-1)'
163
- result: { browser: { name: Conkeror, version: '1.0', type: browser }, engine: { name: Gecko, version: '31.0' }, os: { name: Debian }, device: { type: desktop } }
164
- readable: 'Conkeror 1.0 on Debian'
165
- -
166
- headers: 'User-Agent: Mozilla/5.0 (X11; Linux) KHTML/4.7.3 (like Gecko) Konqueror/4.7 Fedora/4.7.3-5.fc16'
167
- result: { browser: { name: Konqueror, version: '4.7', type: browser }, engine: { name: KHTML, version: 4.7.3 }, os: { name: Fedora, version: '16' }, device: { type: desktop } }
168
- readable: 'Konqueror 4.7 on Fedora 16'
169
- -
170
- headers: 'User-Agent: Mozilla/5.0 (X11; Mageia; Linux x86_64; rv:10.0.9) Gecko/20100101 Firefox/10.0.9'
171
- result: { browser: { name: Firefox, version: 10.0.9, type: browser }, engine: { name: Gecko, version: 10.0.9 }, os: { name: Mageia }, device: { type: desktop } }
172
- readable: 'Firefox 10.0.9 on Mageia'
173
- -
174
- headers: 'User-Agent: Mozilla/5.0 (X11; Slackware Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.44 Safari/537.36 OPR/25.0.1614.31 (Edition beta)'
175
- result: { browser: { name: Opera, family: { name: Chrome, version: 38 }, version: '25.0', type: browser }, engine: { name: Blink }, os: { name: Slackware }, device: { type: desktop } }
176
- readable: 'Opera Beta 25.0 on Slackware'
177
- -
178
- headers: 'User-Agent: Mozilla/5.0 (X11; Slackware Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2145.4 Safari/537.36 OPR/26.0.1632.0 (Edition developer)'
179
- result: { browser: { name: Opera, family: { name: Chrome, version: 39 }, version: '26.0', type: browser }, engine: { name: Blink }, os: { name: Slackware }, device: { type: desktop } }
180
- readable: 'Opera Developer 26.0 on Slackware'
181
- -
182
- headers: 'User-Agent: Mozilla/5.0 (X11; Slackware Linux x86_64; rv:42.0) Gecko/20100101 Firefox/42.0'
183
- result: { browser: { name: Firefox, version: '42.0', type: browser }, engine: { name: Gecko, version: '42.0' }, os: { name: Slackware }, device: { type: desktop } }
184
- readable: 'Firefox 42.0 on Slackware'
185
- -
186
- headers: 'User-Agent: Mozilla/5.0 (X11; Slackware; Linux x86_64; rv:20.0) Gecko/20100101 Firefox/21.0 SeaMonkey/2.19'
187
- result: { browser: { name: SeaMonkey, family: { name: Firefox, version: '21.0' }, version: '2.19', type: browser }, engine: { name: Gecko, version: '20.0' }, os: { name: Slackware }, device: { type: desktop } }
188
- readable: 'SeaMonkey 2.19 on Slackware'
189
- -
190
- headers: 'User-Agent: Mozilla/5.0 (X11; Slackware; Linux x86_64; rv:25.0.1) Gecko/20100101 Firefox/25.0'
191
- result: { browser: { name: Firefox, version: '25.0', type: browser }, engine: { name: Gecko, version: 25.0.1 }, os: { name: Slackware }, device: { type: desktop } }
192
- readable: 'Firefox 25.0 on Slackware'
193
- -
194
- headers: 'User-Agent: Mozilla/5.0 (X11; U; Linux i686 (x86_64); xx; rv:1.9.2.13) Gecko/20101209 CentOS/3.6-2.el5.centos Firefox/3.6.13'
195
- result: { browser: { name: Firefox, version: 3.6.13, type: browser }, engine: { name: Gecko, version: 1.9.2 }, os: { name: CentOS, version: '5' }, device: { type: desktop } }
196
- readable: 'Firefox 3.6.13 on CentOS 5'
197
- -
198
- headers: 'User-Agent: Mozilla/5.0 (X11; U; Linux i686 (x86_64); xx; rv:1.9.2.23) Gecko/20110927 Red Hat/3.6-2.el5_7 Firefox/3.6.23'
199
- result: { browser: { name: Firefox, version: 3.6.23, type: browser }, engine: { name: Gecko, version: 1.9.2 }, os: { name: 'Red Hat', version: '5.7' }, device: { type: desktop } }
200
- readable: 'Firefox 3.6.23 on Red Hat 5.7'
201
- -
202
- headers: 'User-Agent: Mozilla/5.0 (X11; U; Linux i686; xx) AppleWebKit/531.2+ (KHTML, like Gecko) Version/5.0 Safari/531.2+ Debian/squeeze (2.30.6-1) Epiphany/2.30.6'
203
- result: { browser: { name: 'GNOME Web', version: 2.30.6, type: browser }, engine: { name: Webkit, version: '531.2' }, os: { name: Debian }, device: { type: desktop } }
204
- readable: 'GNOME Web 2.30.6 on Debian'
205
- -
206
- headers: 'User-Agent: Mozilla/5.0 (X11; U; Linux i686; xx) AppleWebKit/531.2+ (KHTML, like Gecko) Version/5.0 Safari/531.2+ gNewSense/parkes (2.30.6-1gnewsense1) Epiphany/2.30.6'
207
- result: { browser: { name: 'GNOME Web', version: 2.30.6, type: browser }, engine: { name: Webkit, version: '531.2' }, os: { name: gNewSense, version: 2.30.6 }, device: { type: desktop } }
208
- readable: 'GNOME Web 2.30.6 on gNewSense 2.30.6'
209
- -
210
- headers: 'User-Agent: Mozilla/5.0 (X11; U; Linux i686; xx; rv:1.7.8) Gecko/20050610 Firefox/1.0.4 (Debian package 1.0.4-3)'
211
- result: { browser: { name: Firefox, version: 1.0.4, type: browser }, engine: { name: Gecko, version: 1.7.8 }, os: { name: Debian }, device: { type: desktop } }
212
- readable: 'Firefox 1.0.4 on Debian'
213
- -
214
- headers: 'User-Agent: Mozilla/5.0 (X11; U; Linux i686; xx; rv:1.8.1.18) Gecko/20080703 Mandriva/2.0.0.18-1.1mdv2008.0 (2008.0) Firefox/2.0.0.18'
215
- result: { browser: { name: Firefox, version: 2.0.0.18, type: browser }, engine: { name: Gecko, version: 1.8.1 }, os: { name: Mandriva, version: '2008' }, device: { type: desktop } }
216
- readable: 'Firefox 2.0.0.18 on Mandriva 2008'
217
- -
218
- headers: 'User-Agent: Mozilla/5.0 (X11; U; Linux i686; xx; rv:1.9.0.1) Gecko/2008072503 CentOS/3.0.1-1.el4.centos Firefox/3.0.1'
219
- result: { browser: { name: Firefox, version: 3.0.1, type: browser }, engine: { name: Gecko, version: 1.9.0 }, os: { name: CentOS, version: '4' }, device: { type: desktop } }
220
- readable: 'Firefox 3.0.1 on CentOS 4'
221
- -
222
- headers: 'User-Agent: Mozilla/5.0 (X11; U; Linux i686; xx; rv:1.9.0.12) Gecko/2009072221 Iceweasel/3.0.6 (Debian-3.0.6-1)'
223
- result: { browser: { name: Iceweasel, version: 3.0.6, type: browser }, engine: { name: Gecko, version: 1.9.0 }, os: { name: Debian }, device: { type: desktop } }
224
- readable: 'Iceweasel 3.0.6 on Debian'
225
- -
226
- headers: 'User-Agent: Mozilla/5.0 (X11; U; Linux i686; xx; rv:1.9.0.18) Gecko/2010020400 SUSE/3.0.18-0.1.1 Firefox/3.0.18'
227
- result: { browser: { name: Firefox, version: 3.0.18, type: browser }, engine: { name: Gecko, version: 1.9.0 }, os: { name: SUSE, version: '3.0' }, device: { type: desktop } }
228
- readable: 'Firefox 3.0.18 on SUSE 3.0'
229
- -
230
- headers: 'User-Agent: Mozilla/5.0 (X11; U; Linux i686; xx; rv:1.9.0.19) Gecko/2010031705 Red Hat/3.0.19-1.el4 Firefox/3.0.19'
231
- result: { browser: { name: Firefox, version: 3.0.19, type: browser }, engine: { name: Gecko, version: 1.9.0 }, os: { name: 'Red Hat', version: '4' }, device: { type: desktop } }
232
- readable: 'Firefox 3.0.19 on Red Hat 4'
233
- -
234
- headers: 'User-Agent: Mozilla/5.0 (X11; U; Linux i686; xx; rv:1.9.0.3) Gecko/2008092903 Mandriva/1.9.0.3-1mdv2009.0 (2009.0) Firefox/3.0.3'
235
- result: { browser: { name: Firefox, version: 3.0.3, type: browser }, engine: { name: Gecko, version: 1.9.0 }, os: { name: Mandriva, version: '2009' }, device: { type: desktop } }
236
- readable: 'Firefox 3.0.3 on Mandriva 2009'
237
- -
238
- headers: 'User-Agent: Mozilla/5.0 (X11; U; Linux i686; xx; rv:1.9.1.11) Gecko/20100728 Turbolinux/3.5.11-1 Firefox/3.5.11'
239
- result: { browser: { name: Firefox, version: 3.5.11, type: browser }, engine: { name: Gecko, version: 1.9.1 }, os: { name: Turbolinux, version: '3.5' }, device: { type: desktop } }
240
- readable: 'Firefox 3.5.11 on Turbolinux 3.5'
241
- -
242
- headers: 'User-Agent: Mozilla/5.0 (X11; U; Linux i686; xx; rv:1.9.2.17) Gecko/20110429 Mandriva Linux/1.9.2.17-0.1mdv2010.0 (2010.0) Firefox/3.6.17'
243
- result: { browser: { name: Firefox, version: 3.6.17, type: browser }, engine: { name: Gecko, version: 1.9.2 }, os: { name: Mandriva, version: '2010' }, device: { type: desktop } }
244
- readable: 'Firefox 3.6.17 on Mandriva 2010'
245
- -
246
- headers: 'User-Agent: Mozilla/5.0 (X11; U; Linux i686; xx; rv:1.9.2.17) Gecko/20120322 Fedora/3.6.17-1.nk.2oem.1 Firefox/3.6.17'
247
- result: { browser: { name: Firefox, version: 3.6.17, type: browser }, engine: { name: Gecko, version: 1.9.2 }, os: { name: Fedora }, device: { type: desktop } }
248
- readable: 'Firefox 3.6.17 on Fedora'
249
- -
250
- headers: 'User-Agent: Mozilla/5.0 (X11; U; Linux i686; xx; rv:1.9.2.26) Gecko/20120215 Red Hat/3.6-1.el5_7 Firefox/3.6.26'
251
- result: { browser: { name: Firefox, version: 3.6.26, type: browser }, engine: { name: Gecko, version: 1.9.2 }, os: { name: 'Red Hat', version: '5.7' }, device: { type: desktop } }
252
- readable: 'Firefox 3.6.26 on Red Hat 5.7'
253
- -
254
- headers: 'User-Agent: Mozilla/5.0 (X11; U; Linux i686; xx; rv:1.9.2.3) Gecko/20100602 Gentoo Firefox/3.6.3'
255
- result: { browser: { name: Firefox, version: 3.6.3, type: browser }, engine: { name: Gecko, version: 1.9.2 }, os: { name: Gentoo }, device: { type: desktop } }
256
- readable: 'Firefox 3.6.3 on Gentoo'
257
- -
258
- headers: 'User-Agent: Mozilla/5.0 (X11; U; Linux x86_64; xx) AppleWebKit/531.2+ (KHTML, like Gecko) Version/5.0 Safari/531.2+ gNewSense/parkes (2.30.6-1gnewsense1) Epiphany/2.30.6'
259
- result: { browser: { name: 'GNOME Web', version: 2.30.6, type: browser }, engine: { name: Webkit, version: '531.2' }, os: { name: gNewSense, version: 2.30.6 }, device: { type: desktop } }
260
- readable: 'GNOME Web 2.30.6 on gNewSense 2.30.6'
261
- -
262
- headers: 'User-Agent: Mozilla/5.0 (X11; U; Linux x86_64; xx; rv:1.9.2.13) Gecko/20101209 Mandriva Linux/1.9.2.13-0.1mdv2010.1 (2010.1) Firefox/3.6.13'
263
- result: { browser: { name: Firefox, version: 3.6.13, type: browser }, engine: { name: Gecko, version: 1.9.2 }, os: { name: Mandriva, version: '2010' }, device: { type: desktop } }
264
- readable: 'Firefox 3.6.13 on Mandriva 2010'
265
- -
266
- headers: 'User-Agent: Mozilla/5.0 (X11; U; Linux x86_64; xx; rv:1.9.2.17) Gecko/20110429 Mandriva Linux/1.9.2.17-0.1mdv2010.0 (2010.0) Firefox/3.6.17'
267
- result: { browser: { name: Firefox, version: 3.6.17, type: browser }, engine: { name: Gecko, version: 1.9.2 }, os: { name: Mandriva, version: '2010' }, device: { type: desktop } }
268
- readable: 'Firefox 3.6.17 on Mandriva 2010'
269
- -
270
- headers: 'User-Agent: Mozilla/5.0 (X11; U; Linux x86_64; xx; rv:1.9.2.22) Gecko/20111121 Gentoo Firefox/3.6.22'
271
- result: { browser: { name: Firefox, version: 3.6.22, type: browser }, engine: { name: Gecko, version: 1.9.2 }, os: { name: Gentoo }, device: { type: desktop } }
272
- readable: 'Firefox 3.6.22 on Gentoo'
273
- -
274
- headers: 'User-Agent: Mozilla/5.0 (X11; U; Linux x86_64; xx; rv:1.9.2.24) Gecko/20111109 Red Hat/3.6-3.el5_7 Firefox/3.6.24'
275
- result: { browser: { name: Firefox, version: 3.6.24, type: browser }, engine: { name: Gecko, version: 1.9.2 }, os: { name: 'Red Hat', version: '5.7' }, device: { type: desktop } }
276
- readable: 'Firefox 3.6.24 on Red Hat 5.7'
277
- -
278
- headers: 'User-Agent: Mozilla/5.0 (compatible; Konqueror/14.0; Linux) KHTML/TDEHTML/14.0.1 (like Gecko) (Debian)'
279
- result: { browser: { name: Konqueror, version: '14.0', type: browser }, engine: { name: KHTML }, os: { name: Debian }, device: { type: desktop } }
280
- readable: 'Konqueror 14.0 on Debian'
281
- -
282
- headers: 'User-Agent: Mozilla/5.0 (compatible; Konqueror/3.5; Linux) KHTML/3.5.9 (like Gecko) (Kubuntu)'
283
- result: { browser: { name: Konqueror, version: '3.5', type: browser }, engine: { name: KHTML, version: 3.5.9 }, os: { name: Kubuntu }, device: { type: desktop } }
284
- readable: 'Konqueror 3.5 on Kubuntu'
285
- -
286
- headers: 'User-Agent: Mozilla/5.0 (compatible; Konqueror/4.1; Linux) KHTML/4.1.3 (like Gecko) SUSE'
287
- result: { browser: { name: Konqueror, version: '4.1', type: browser }, engine: { name: KHTML, version: 4.1.3 }, os: { name: SUSE }, device: { type: desktop } }
288
- readable: 'Konqueror 4.1 on SUSE'
289
- -
290
- headers: 'User-Agent: Mozilla/5.0 (compatible; Konqueror/4.3; Linux) KHTML/4.3.4 (like Gecko) Red Hat Enterprise Linux/4.3.4-19.el6'
291
- result: { browser: { name: Konqueror, version: '4.3', type: browser }, engine: { name: KHTML, version: 4.3.4 }, os: { name: 'Red Hat', version: '6' }, device: { type: desktop } }
292
- readable: 'Konqueror 4.3 on Red Hat 6'
293
- -
294
- headers: 'User-Agent: Mozilla/5.0 (compatible; Konqueror/4.4; Linux 2.6.32-39-generic; X11; i686; en_US) KHTML/4.4.5 (like Gecko) Kubuntu'
295
- result: { browser: { name: Konqueror, version: '4.4', type: browser }, engine: { name: KHTML, version: 4.4.5 }, os: { name: Kubuntu }, device: { type: desktop } }
296
- readable: 'Konqueror 4.4 on Kubuntu'
297
- -
298
- headers: 'User-Agent: Mozilla/5.0 (compatible; Konqueror/4.4; Linux) KHTML/4.4.3 (like Gecko) Fedora/4.4.3-2.fc11'
299
- result: { browser: { name: Konqueror, version: '4.4', type: browser }, engine: { name: KHTML, version: 4.4.3 }, os: { name: Fedora, version: '11' }, device: { type: desktop } }
300
- readable: 'Konqueror 4.4 on Fedora 11'
301
- -
302
- headers: 'User-Agent: Mozilla/5.0 (compatible; Konqueror/4.5; Linux) KHTML/4.5.5 (like Gecko) Kubuntu'
303
- result: { browser: { name: Konqueror, version: '4.5', type: browser }, engine: { name: KHTML, version: 4.5.5 }, os: { name: Kubuntu }, device: { type: desktop } }
304
- readable: 'Konqueror 4.5 on Kubuntu'
305
- -
306
- headers: 'User-Agent: Mozilla/5.0 (compatible; Konqueror/4.6; Linux) KHTML/4.6.5 (like Gecko) Mageia/4.6.5-1.7.mga1'
307
- result: { browser: { name: Konqueror, version: '4.6', type: browser }, engine: { name: KHTML, version: 4.6.5 }, os: { name: Mageia, version: '1' }, device: { type: desktop } }
308
- readable: 'Konqueror 4.6 on Mageia 1'
309
- -
310
- headers: 'User-Agent: Opera/9.80 (X11; Linux i686; U; Gentoo Linux; xx) Presto/2.10.289 Version/12.02'
311
- result: { browser: { name: Opera, version: '12.02', type: browser }, engine: { name: Presto, version: 2.10.289 }, os: { name: Gentoo }, device: { type: desktop } }
312
- readable: 'Opera 12.02 on Gentoo'
313
- -
314
- headers: 'User-Agent: Opera/9.80 (X11; Linux i686; U; OpenSUSE 12.1; xx) Presto/2.10.229 Version/11.62'
315
- result: { browser: { name: Opera, version: '11.62', type: browser }, engine: { name: Presto, version: 2.10.229 }, os: { name: SUSE, version: '12.1' }, device: { type: desktop } }
316
- readable: 'Opera 11.62 on SUSE 12.1'
317
- -
318
- headers: 'User-Agent: Opera/9.80 (X11; Linux x86_64; Debian) Presto/2.12.388 Version/12.12'
319
- result: { browser: { name: Opera, version: '12.12', type: browser }, engine: { name: Presto, version: 2.12.388 }, os: { name: Debian }, device: { type: desktop } }
320
- readable: 'Opera 12.12 on Debian'
321
- -
322
- headers: 'User-Agent: Opera/9.80 (X11; Linux x86_64; Suse) Presto/2.12.388 Version/12.16'
323
- result: { browser: { name: Opera, version: '12.16', type: browser }, engine: { name: Presto, version: 2.12.388 }, os: { name: Linux }, device: { type: desktop } }
324
- readable: 'Opera 12.16 on Linux'
325
- -
326
- headers: 'User-Agent: Opera/9.80 (X11; Linux x86_64; U; Kubuntu 12.04 LTS; xx) Presto/2.10.229 Version/11.62'
327
- result: { browser: { name: Opera, version: '11.62', type: browser }, engine: { name: Presto, version: 2.10.229 }, os: { name: Kubuntu, version: '12.04' }, device: { type: desktop } }
328
- readable: 'Opera 11.62 on Kubuntu 12.04'
329
- -
330
- headers: 'User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.8) Gecko/2009032711 moonOS/2.0 (kachana) Firefox/3.0.8'
331
- result: { browser: { name: Firefox, version: 3.0.8, type: browser }, engine: { name: Gecko, version: 1.9.0 }, os: { name: moonOS, version: '2.0' }, device: { type: desktop } }
332
- readable: 'Firefox 3.0.8 on moonOS 2.0'
333
- -
334
- headers: 'User-Agent: Mozilla/4.0 (compatible; MSIE 6.1; Lindows 3.01; DigExt)'
335
- readable: 'Lindows 3.01'
336
- result: { os: { name: Lindows, version: '3.01' }, device: { type: desktop } }
337
- -
338
- headers: 'User-Agent: Mozilla/5.0 (X11; Linux x86_64; Antergos Linux) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/33.0.1750.0 Maxthon/1.0.5.3 Safari/537.36'
339
- readable: 'Maxthon 1.0.5 on Antergos Linux'
340
- result: { browser: { name: Maxthon, family: { name: Chrome, version: 33 }, version: 1.0.5, type: browser }, engine: { name: Blink }, os: { name: 'Antergos Linux' }, device: { type: desktop } }
341
- -
342
- headers: 'User-Agent: Mozilla/5.0 (X11; Linux x86_64; Arch Linux) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/33.0.1750.0 Maxthon/1.0.5.0 Safari/537.36'
343
- readable: 'Maxthon 1.0.5 on Arch Linux'
344
- result: { browser: { name: Maxthon, family: { name: Chrome, version: 33 }, version: 1.0.5, type: browser }, engine: { name: Blink }, os: { name: 'Arch Linux' }, device: { type: desktop } }
345
- -
346
- headers: 'User-Agent: Mozilla/5.0 (X11; Linux x86_64; ArchLinux) AppleWebKit/537.36 (KHTML, like Gecko) Chromium/33.0.1703.0 Chrome/33.0.1703.0 Safari/537.36'
347
- readable: 'Chromium 33.0.1703.0 on Arch Linux'
348
- result: { browser: { name: Chromium, family: { name: Chrome, version: 33 }, version: 33.0.1703.0, type: browser }, engine: { name: Blink }, os: { name: 'Arch Linux' }, device: { type: desktop } }
349
- -
350
- headers: 'User-Agent: Mozilla/5.0 (X11; Linux x86_64; Black Lab Linux 6.0 SR1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/33.0.1750.0 Maxthon/1.0.5.3 Safari/537.36'
351
- readable: 'Maxthon 1.0.5 on Black Lab Linux 6.0'
352
- result: { browser: { name: Maxthon, family: { name: Chrome, version: 33 }, version: 1.0.5, type: browser }, engine: { name: Blink }, os: { name: 'Black Lab Linux', version: '6.0' }, device: { type: desktop } }
353
- -
354
- headers: 'User-Agent: Mozilla/5.0 (X11; Linux x86_64; CentOS Linux release 7.0.1406 (Core)) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/33.0.1750.0 Maxthon/1.0.5.3 Safari/537.36'
355
- readable: 'Maxthon 1.0.5 on CentOS 7.0'
356
- result: { browser: { name: Maxthon, family: { name: Chrome, version: 33 }, version: 1.0.5, type: browser }, engine: { name: Blink }, os: { name: CentOS, version: '7.0' }, device: { type: desktop } }
357
- -
358
- headers: 'User-Agent: Mozilla/5.0 (X11; Linux x86_64; Debian GNU/Linux 7.5 (wheezy)) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/33.0.1750.0 Safari/537.36'
359
- readable: 'Chrome 33 on Debian 7.5'
360
- result: { browser: { name: Chrome, version: '33', type: browser }, engine: { name: Blink }, os: { name: Debian, version: '7.5' }, device: { type: desktop } }
361
- -
362
- headers: 'User-Agent: Mozilla/5.0 (X11; Linux x86_64; elementary OS Freya) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/33.0.1750.0 Safari/537.36'
363
- readable: 'Chrome 33 on elementary OS Freya'
364
- result: { browser: { name: Chrome, version: '33', type: browser }, engine: { name: Blink }, os: { name: 'elementary OS', version: { alias: Freya } }, device: { type: desktop } }
365
- -
366
- headers: 'User-Agent: Mozilla/5.0 (X11; Linux x86_64; elementary OS Luna) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/33.0.1750.0 Maxthon/1.0.5.3 Safari/537.36'
367
- readable: 'Maxthon 1.0.5 on elementary OS Luna'
368
- result: { browser: { name: Maxthon, family: { name: Chrome, version: 33 }, version: 1.0.5, type: browser }, engine: { name: Blink }, os: { name: 'elementary OS', version: { alias: Luna } }, device: { type: desktop } }
369
- -
370
- headers: 'User-Agent: Mozilla/5.0 (X11; Linux x86_64; Gentoo Base System release 2.2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/33.0.1750.0 Safari/537.36'
371
- readable: 'Chrome 33 on Gentoo 2.2'
372
- result: { browser: { name: Chrome, version: '33', type: browser }, engine: { name: Blink }, os: { name: Gentoo, version: '2.2' }, device: { type: desktop } }
373
- -
374
- headers: 'User-Agent: Mozilla/5.0 (X11; Linux x86_64; Linux Mint 13 Maya) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/34.0.1793.0 Maxthon/0.9.2.0 beta Safari/537.36'
375
- readable: 'Maxthon 0.9.2 on Linux Mint 13'
376
- result: { browser: { name: Maxthon, family: { name: Chrome, version: 34 }, version: 0.9.2, type: browser }, engine: { name: Blink }, os: { name: 'Linux Mint', version: '13' }, device: { type: desktop } }
377
- -
378
- headers: 'User-Agent: Mozilla/5.0 (X11; Linux x86_64; Linux Mint 16 Petra) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/33.0.1750.0 Maxthon/1.0.3.10 Safari/537.36'
379
- readable: 'Maxthon 1.0.3 on Linux Mint 16'
380
- result: { browser: { name: Maxthon, family: { name: Chrome, version: 33 }, version: 1.0.3, type: browser }, engine: { name: Blink }, os: { name: 'Linux Mint', version: '16' }, device: { type: desktop } }
381
- -
382
- headers: 'User-Agent: Mozilla/5.0 (X11; Linux x86_64; Linux Mint 16 Petra) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/33.0.1750.0 Safari/537.36'
383
- readable: 'Chrome 33 on Linux Mint 16'
384
- result: { browser: { name: Chrome, version: '33', type: browser }, engine: { name: Blink }, os: { name: 'Linux Mint', version: '16' }, device: { type: desktop } }
385
- -
386
- headers: 'User-Agent: Mozilla/5.0 (X11; Linux x86_64; Linux Mint 17.2 Rafaela) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/33.0.1750.0 Safari/537.36'
387
- readable: 'Chrome 33 on Linux Mint 17.2'
388
- result: { browser: { name: Chrome, version: '33', type: browser }, engine: { name: Blink }, os: { name: 'Linux Mint', version: '17.2' }, device: { type: desktop } }
389
- -
390
- headers: 'User-Agent: Mozilla/5.0 (X11; Linux x86_64; Mageia 4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/33.0.1750.0 Safari/537.36'
391
- readable: 'Chrome 33 on Mageia 4'
392
- result: