diff --git a/agents/meshcore.js b/agents/meshcore.js index e41632f9..dabc52f9 100644 --- a/agents/meshcore.js +++ b/agents/meshcore.js @@ -14,8 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -process.on('uncaughtException', function (ex) -{ +process.on('uncaughtException', function (ex) { require('MeshAgent').SendCommand({ action: 'msg', type: 'console', value: "uncaughtException1: " + ex }); }); @@ -42,11 +41,9 @@ var MESHRIGHT_CHATNOTIFY = 16384; var MESHRIGHT_UNINSTALL = 32768; var MESHRIGHT_NODESKTOP = 65536; -if (require('MeshAgent').ARCHID == null) -{ +if (require('MeshAgent').ARCHID == null) { var id = null; - switch (process.platform) - { + switch (process.platform) { case 'win32': id = require('_GenericMarshal').PointerSize == 4 ? 3 : 4; break; @@ -54,12 +51,10 @@ if (require('MeshAgent').ARCHID == null) id = require('_GenericMarshal').PointerSize == 4 ? 31 : 30; break; case 'darwin': - try - { + try { id = require('os').arch() == 'x64' ? 16 : 29; } - catch (xx) - { + catch (xx) { id = 16; } break; break; @@ -72,11 +67,9 @@ var agentFileHttpRequests = {}; // Currently active agent HTTPS GET requests fro var agentFileHttpPendingRequests = []; // Pending HTTPS GET requests from the server. var debugConsole = (_MSH().debugConsole == 1); -if (process.platform == 'win32' && require('user-sessions').isRoot()) -{ +if (process.platform == 'win32' && require('user-sessions').isRoot()) { // Check the Agent Uninstall MetaData for correctness, as the installer may have written an incorrect value - try - { + try { var writtenSize = 0, actualSize = Math.floor(require('fs').statSync(process.execPath).size / 1024); try { writtenSize = require('win-registry').QueryKey(require('win-registry').HKEY.LocalMachine, 'Software\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\MeshCentralAgent', 'EstimatedSize'); } catch (e) { } if (writtenSize != actualSize) { try { require('win-registry').WriteKey(require('win-registry').HKEY.LocalMachine, 'Software\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\MeshCentralAgent', 'EstimatedSize', actualSize); } catch (e) { } } @@ -84,24 +77,20 @@ if (process.platform == 'win32' && require('user-sessions').isRoot()) // Check to see if we are the Installed Mesh Agent Service, if we are, make sure we can run in Safe Mode var svcname = process.platform == 'win32' ? 'Mesh Agent' : 'meshagent'; - try - { + try { svcname = require('MeshAgent').serviceName; } - catch (x) - { + catch (x) { } - try - { + try { var meshCheck = false; try { meshCheck = require('service-manager').manager.getService(svcname).isMe(); } catch (e) { } if (meshCheck && require('win-bcd').isSafeModeService && !require('win-bcd').isSafeModeService(svcname)) { require('win-bcd').enableSafeModeService(svcname); } } catch (e) { } } -if (process.platform == 'darwin' && !process.versions) -{ +if (process.platform == 'darwin' && !process.versions) { // This is an older MacOS Agent, so we'll need to check the service definition so that Auto-Update will function correctly var child = require('child_process').execFile('/bin/sh', ['sh']); child.stdout.str = ''; @@ -110,21 +99,18 @@ if (process.platform == 'darwin' && !process.versions) child.stdin.write(" if(c[1]==\"dict\"){ split(a[2], d, \"\"); if(split(d[1], truval, \"\")>1) { split(truval[1], kn1, \"\"); split(kn1[2], kn2, \"\"); print kn2[1]; } }"); child.stdin.write(" else { split(c[1], ka, \"/\"); if(ka[1]==\"true\") {print \"ALWAYS\";} } }'\nexit\n"); child.waitExit(); - if (child.stdout.str.trim() == 'Crashed') - { + if (child.stdout.str.trim() == 'Crashed') { child = require('child_process').execFile('/bin/sh', ['sh']); child.stdout.str = ''; child.stdout.on('data', function (chunk) { this.str += chunk.toString(); }); child.stdin.write("launchctl list | grep 'meshagent' | awk '{ if($3==\"meshagent\"){print $1;}}'\nexit\n"); child.waitExit(); - if (parseInt(child.stdout.str.trim()) == process.pid) - { + if (parseInt(child.stdout.str.trim()) == process.pid) { // The currently running MeshAgent is us, so we can continue with the update var plist = require('fs').readFileSync('/Library/LaunchDaemons/meshagent_osx64_LaunchDaemon.plist').toString(); var tokens = plist.split('KeepAlive'); - if (tokens[1].split('>')[0].split('<')[1] == 'dict') - { + if (tokens[1].split('>')[0].split('<')[1] == 'dict') { var tmp = tokens[1].split(''); tmp.shift(); tokens[1] = '\n ' + tmp.join(''); @@ -180,8 +166,7 @@ if (process.platform == 'darwin' && !process.versions) } // Add an Intel AMT event to the log -function addAmtEvent(msg) -{ +function addAmtEvent(msg) { if (obj.amtevents == null) { obj.amtevents = []; } var d = new Date(); obj.amtevents.push(zeroPad(d.getHours(), 2) + ':' + zeroPad(d.getMinutes(), 2) + ':' + zeroPad(d.getSeconds(), 2) + ', ' + msg); @@ -196,10 +181,8 @@ if (process.platform != 'win32') { try { require('fs').unlinkSync(process.cwd() obj.DAIPC.IPCPATH = process.platform == 'win32' ? ('\\\\.\\pipe\\' + require('_agentNodeId')() + '-DAIPC') : (process.cwd() + '/DAIPC'); try { obj.DAIPC.listen({ path: obj.DAIPC.IPCPATH, writableAll: true, maxConnections: 5 }); } catch (e) { } obj.DAIPC._daipc = []; -obj.DAIPC.on('connection', function (c) -{ - c._send = function (j) - { +obj.DAIPC.on('connection', function (c) { + c._send = function (j) { var data = JSON.stringify(j); var packet = Buffer.alloc(data.length + 4); packet.writeUInt32LE(data.length + 4, 0); @@ -209,8 +192,7 @@ obj.DAIPC.on('connection', function (c) this._daipc.push(c); c.parent = this; c.on('end', function () { removeRegisteredApp(this); }); - c.on('data', function (chunk) - { + c.on('data', function (chunk) { if (chunk.length < 4) { this.unshift(chunk); return; } var len = chunk.readUInt32LE(0); if (len > 8192) { removeRegisteredApp(this); this.end(); return; } @@ -220,10 +202,8 @@ obj.DAIPC.on('connection', function (c) try { data = JSON.parse(data.toString()); } catch (e) { } if ((data == null) || (typeof data.cmd != 'string')) return; - try - { - switch (data.cmd) - { + try { + switch (data.cmd) { case 'requesthelp': if (this._registered == null) return; sendConsoleText('Request Help (' + this._registered + '): ' + data.value); @@ -238,8 +218,7 @@ obj.DAIPC.on('connection', function (c) try { mesh.SendCommand({ action: 'sessions', type: 'help', value: {} }); } catch (e) { } break; case 'register': - if (typeof data.value == 'string') - { + if (typeof data.value == 'string') { this._registered = data.value; var apps = {}; apps[data.value] = 1; @@ -248,15 +227,13 @@ obj.DAIPC.on('connection', function (c) } break; case 'query': - switch (data.value) - { + switch (data.value) { case 'connection': data.result = require('MeshAgent').ConnectedServer; this._send(data); break; case 'descriptors': - require('ChainViewer').getSnapshot().then(function (f) - { + require('ChainViewer').getSnapshot().then(function (f) { this.tag.payload.result = f; this.tag.ipc._send(this.tag.payload); }).parentPromise.tag = { ipc: this, payload: data }; @@ -280,8 +257,7 @@ obj.DAIPC.on('connection', function (c) try { mesh.SendCommand({ action: 'meshToolInfo', name: data.name, hash: data.hash, cookie: data.cookie ? true : false, pipe: true }); } catch (e) { } break; case 'console': - if (debugConsole) - { + if (debugConsole) { var args = splitArgs(data.value); processConsoleCommand(args[0].toLowerCase(), parseArgs(args), 0, 'pipe'); } @@ -293,28 +269,24 @@ obj.DAIPC.on('connection', function (c) }); // Send current sessions to registered apps -function broadcastSessionsToRegisteredApps(x) -{ +function broadcastSessionsToRegisteredApps(x) { broadcastToRegisteredApps({ cmd: 'sessions', sessions: tunnelUserCount }); } // Send this object to all registered local applications -function broadcastToRegisteredApps(x) -{ +function broadcastToRegisteredApps(x) { if ((obj.DAIPC == null) || (obj.DAIPC._daipc == null)) return; for (var i in obj.DAIPC._daipc) { if (obj.DAIPC._daipc[i]._registered != null) { obj.DAIPC._daipc[i]._send(x); } } } // Send this object to a specific registered local applications -function sendToRegisteredApp(appid, x) -{ +function sendToRegisteredApp(appid, x) { if ((obj.DAIPC == null) || (obj.DAIPC._daipc == null)) return; for (var i in obj.DAIPC._daipc) { if (obj.DAIPC._daipc[i]._registered == appid) { obj.DAIPC._daipc[i]._send(x); } } } // Send list of registered apps to the server -function updateRegisteredAppsToServer() -{ +function updateRegisteredAppsToServer() { if ((obj.DAIPC == null) || (obj.DAIPC._daipc == null)) return; var apps = {}; for (var i in obj.DAIPC._daipc) { if (apps[obj.DAIPC._daipc[i]._registered] == null) { apps[obj.DAIPC._daipc[i]._registered] = 1; } else { apps[obj.DAIPC._daipc[i]._registered]++; } } @@ -322,32 +294,26 @@ function updateRegisteredAppsToServer() } // Remove a registered app -function removeRegisteredApp(pipe) -{ +function removeRegisteredApp(pipe) { for (var i = obj.DAIPC._daipc.length - 1; i >= 0; i--) { if (obj.DAIPC._daipc[i] === pipe) { obj.DAIPC._daipc.splice(i, 1); } } if (pipe._registered != null) updateRegisteredAppsToServer(); } -function diagnosticAgent_uninstall() -{ +function diagnosticAgent_uninstall() { require('service-manager').manager.uninstallService('meshagentDiagnostic'); require('task-scheduler').delete('meshagentDiagnostic/periodicStart'); } -function diagnosticAgent_installCheck(install) -{ - try - { +function diagnosticAgent_installCheck(install) { + try { var diag = require('service-manager').manager.getService('meshagentDiagnostic'); return (diag); } - catch (e) - { + catch (e) { } if (!install) { return (null); } var svc = null; - try - { + try { require('service-manager').manager.installService( { name: 'meshagentDiagnostic', @@ -359,8 +325,7 @@ function diagnosticAgent_installCheck(install) }); svc = require('service-manager').manager.getService('meshagentDiagnostic'); } - catch (e) - { + catch (e) { return (null); } var proxyConfig = require('global-tunnel').proxyConfig; @@ -373,12 +338,10 @@ function diagnosticAgent_installCheck(install) ddb.Put('MeshServer', require('MeshAgent').ServerInfo.ServerUri); if (cert.root.pfx) { ddb.Put('SelfNodeCert', cert.root.pfx); } if (cert.tls) { ddb.Put('SelfNodeTlsCert', cert.tls.pfx); } - if (proxyConfig) - { + if (proxyConfig) { ddb.Put('WebProxy', proxyConfig.host + ':' + proxyConfig.port); } - else - { + else { ddb.Put('ignoreProxyFile', '1'); } @@ -395,24 +358,18 @@ function diagnosticAgent_installCheck(install) } // Monitor the file 'batterystate.txt' in the agent's folder and sends battery update when this file is changed. -if ((require('fs').existsSync(process.cwd() + 'batterystate.txt')) && (require('fs').watch != null)) -{ +if ((require('fs').existsSync(process.cwd() + 'batterystate.txt')) && (require('fs').watch != null)) { // Setup manual battery monitoring - require('MeshAgent')._batteryFileWatcher = require('fs').watch(process.cwd(), function () - { + require('MeshAgent')._batteryFileWatcher = require('fs').watch(process.cwd(), function () { if (require('MeshAgent')._batteryFileTimer != null) return; - require('MeshAgent')._batteryFileTimer = setTimeout(function () - { - try - { + require('MeshAgent')._batteryFileTimer = setTimeout(function () { + try { require('MeshAgent')._batteryFileTimer = null; var data = null; try { data = require('fs').readFileSync(process.cwd() + 'batterystate.txt').toString(); } catch (e) { } - if ((data != null) && (data.length < 10)) - { + if ((data != null) && (data.length < 10)) { data = data.split(','); - if ((data.length == 2) && ((data[0] == 'ac') || (data[0] == 'dc'))) - { + if ((data.length == 2) && ((data[0] == 'ac') || (data[0] == 'dc'))) { var level = parseInt(data[1]); if ((level >= 0) && (level <= 100)) { require('MeshAgent').SendCommand({ action: 'battery', state: data[0], level: level }); } } @@ -421,31 +378,24 @@ if ((require('fs').existsSync(process.cwd() + 'batterystate.txt')) && (require(' }, 1000); }); } -else -{ +else { // Setup normal battery monitoring - if (require('identifiers').isBatteryPowered && require('identifiers').isBatteryPowered()) - { - require('MeshAgent')._battLevelChanged = function _battLevelChanged(val) - { + if (require('identifiers').isBatteryPowered && require('identifiers').isBatteryPowered()) { + require('MeshAgent')._battLevelChanged = function _battLevelChanged(val) { _battLevelChanged.self._currentBatteryLevel = val; _battLevelChanged.self.SendCommand({ action: 'battery', state: _battLevelChanged.self._currentPowerState, level: val }); }; require('MeshAgent')._battLevelChanged.self = require('MeshAgent'); - require('MeshAgent')._powerChanged = function _powerChanged(val) - { + require('MeshAgent')._powerChanged = function _powerChanged(val) { _powerChanged.self._currentPowerState = (val == 'AC' ? 'ac' : 'dc'); _powerChanged.self.SendCommand({ action: 'battery', state: (val == 'AC' ? 'ac' : 'dc'), level: _powerChanged.self._currentBatteryLevel }); }; require('MeshAgent')._powerChanged.self = require('MeshAgent'); - require('MeshAgent').on('Connected', function (status) - { - if (status == 0) - { + require('MeshAgent').on('Connected', function (status) { + if (status == 0) { require('power-monitor').removeListener('acdc', this._powerChanged); require('power-monitor').removeListener('batteryLevel', this._battLevelChanged); - } else - { + } else { require('power-monitor').on('acdc', this._powerChanged); require('power-monitor').on('batteryLevel', this._battLevelChanged); } @@ -462,30 +412,23 @@ try { require('os').name().then(function (v) { meshCoreObj.osdesc = v; meshCoreO // Setup logged in user monitoring (THIS IS BROKEN IN WIN7) -try -{ +try { var userSession = require('user-sessions'); - userSession.on('changed', function onUserSessionChanged() - { - userSession.enumerateUsers().then(function (users) - { - if (process.platform == 'linux') - { - if (userSession._startTime == null) - { + userSession.on('changed', function onUserSessionChanged() { + userSession.enumerateUsers().then(function (users) { + if (process.platform == 'linux') { + if (userSession._startTime == null) { userSession._startTime = Date.now(); userSession._count = users.length; } - else if (Date.now() - userSession._startTime < 10000 && users.length == userSession._count) - { + else if (Date.now() - userSession._startTime < 10000 && users.length == userSession._count) { userSession.removeAllListeners('changed'); return; } } var u = [], a = users.Active; - for (var i = 0; i < a.length; i++) - { + for (var i = 0; i < a.length; i++) { var un = a[i].Domain ? (a[i].Domain + '\\' + a[i].Username) : (a[i].Username); if (u.indexOf(un) == -1) { u.push(un); } // Only push users in the list once. } @@ -517,11 +460,9 @@ var apftunnel = null; var tunnelUserCount = { terminal: {}, files: {}, tcp: {}, udp: {}, msg: {} }; // List of userid->count sessions for terminal, files and TCP/UDP routing // Add to the server event log -function MeshServerLog(msg, state) -{ +function MeshServerLog(msg, state) { if (typeof msg == 'string') { msg = { action: 'log', msg: msg }; } else { msg.action = 'log'; } - if (state) - { + if (state) { if (state.userid) { msg.userid = state.userid; } if (state.username) { msg.username = state.username; } if (state.sessionid) { msg.sessionid = state.sessionid; } @@ -531,11 +472,9 @@ function MeshServerLog(msg, state) } // Add to the server event log, use internationalized events -function MeshServerLogEx(id, args, msg, state) -{ +function MeshServerLogEx(id, args, msg, state) { var msg = { action: 'log', msgid: id, msgArgs: args, msg: msg }; - if (state) - { + if (state) { if (state.userid) { msg.userid = state.userid; } if (state.username) { msg.username = state.username; } if (state.sessionid) { msg.sessionid = state.sessionid; } @@ -550,16 +489,12 @@ sha = require('SHA256Stream'); mesh = require('MeshAgent'); childProcess = require('child_process'); -if (mesh.hasKVM == 1) -{ // if the agent is compiled with KVM support +if (mesh.hasKVM == 1) { // if the agent is compiled with KVM support // Check if this computer supports a desktop - try - { - if ((process.platform == 'win32') || (process.platform == 'darwin') || (require('monitor-info').kvm_x11_support)) - { + try { + if ((process.platform == 'win32') || (process.platform == 'darwin') || (require('monitor-info').kvm_x11_support)) { meshCoreObj.caps |= 1; meshCoreObjChanged(); - } else if (process.platform == 'linux' || process.platform == 'freebsd') - { + } else if (process.platform == 'linux' || process.platform == 'freebsd') { require('monitor-info').on('kvmSupportDetected', function (value) { meshCoreObj.caps |= 1; meshCoreObjChanged(); }); } } catch (e) { } @@ -579,23 +514,18 @@ try { // Fetch the SMBios Tables var SMBiosTables = null; var SMBiosTablesRaw = null; -try -{ +try { var SMBiosModule = null; try { SMBiosModule = require('smbios'); } catch (e) { } - if (SMBiosModule != null) - { - SMBiosModule.get(function (data) - { - if (data != null) - { + if (SMBiosModule != null) { + SMBiosModule.get(function (data) { + if (data != null) { SMBiosTablesRaw = data; SMBiosTables = require('smbios').parse(data) if (mesh.isControlChannelConnected) { mesh.SendCommand({ action: 'smbios', value: SMBiosTablesRaw }); } // If SMBios tables say that Intel AMT is present, try to connect MEI - if (SMBiosTables.amtInfo && (SMBiosTables.amtInfo.AMT == true)) - { + if (SMBiosTables.amtInfo && (SMBiosTables.amtInfo.AMT == true)) { var amtmodule = require('amt-manage'); amt = new amtmodule(mesh, db, false); amt.on('portBinding_LMS', function (map) { mesh.SendCommand({ action: 'lmsinfo', value: { ports: map.keys() } }); }); @@ -609,8 +539,7 @@ try } catch (e) { sendConsoleText("ex1: " + e); } // Try to load up the WIFI scanner -try -{ +try { var wifiScannerLib = require('wifi-scanner'); wifiScanner = new wifiScannerLib(); wifiScanner.on('accessPoint', function (data) { sendConsoleText("wifiScanner: " + data); }); @@ -619,28 +548,21 @@ try // Get our location (lat/long) using our public IP address var getIpLocationDataExInProgress = false; var getIpLocationDataExCounts = [0, 0]; -function getIpLocationDataEx(func) -{ +function getIpLocationDataEx(func) { if (getIpLocationDataExInProgress == true) { return false; } - try - { + try { getIpLocationDataExInProgress = true; getIpLocationDataExCounts[0]++; var options = http.parseUri("http://ipinfo.io/json"); options.method = 'GET'; - http.request(options, function (resp) - { - if (resp.statusCode == 200) - { + http.request(options, function (resp) { + if (resp.statusCode == 200) { var geoData = ''; resp.data = function (geoipdata) { geoData += geoipdata; }; - resp.end = function () - { + resp.end = function () { var location = null; - try - { - if (typeof geoData == 'string') - { + try { + if (typeof geoData == 'string') { var result = JSON.parse(geoData); if (result.ip && result.loc) { location = result; } } @@ -657,61 +579,49 @@ function getIpLocationDataEx(func) } // Remove all Gateway MAC addresses for interface list. This is useful because the gateway MAC is not always populated reliably. -function clearGatewayMac(str) -{ +function clearGatewayMac(str) { if (str == null) return null; var x = JSON.parse(str); for (var i in x.netif) { if (x.netif[i].gatewaymac) { delete x.netif[i].gatewaymac } } return JSON.stringify(x); } -function getIpLocationData(func) -{ +function getIpLocationData(func) { // Get the location information for the cache if possible var publicLocationInfo = db.Get('publicLocationInfo'); if (publicLocationInfo != null) { publicLocationInfo = JSON.parse(publicLocationInfo); } - if (publicLocationInfo == null) - { + if (publicLocationInfo == null) { // Nothing in the cache, fetch the data - getIpLocationDataEx(function (locationData) - { - if (locationData != null) - { + getIpLocationDataEx(function (locationData) { + if (locationData != null) { publicLocationInfo = {}; publicLocationInfo.netInfoStr = lastNetworkInfo; publicLocationInfo.locationData = locationData; var x = db.Put('publicLocationInfo', JSON.stringify(publicLocationInfo)); // Save to database if (func) func(locationData); // Report the new location } - else - { + else { if (func) func(null); // Report no location } }); } - else - { + else { // Check the cache - if (clearGatewayMac(publicLocationInfo.netInfoStr) == clearGatewayMac(lastNetworkInfo)) - { + if (clearGatewayMac(publicLocationInfo.netInfoStr) == clearGatewayMac(lastNetworkInfo)) { // Cache match if (func) func(publicLocationInfo.locationData); } - else - { + else { // Cache mismatch - getIpLocationDataEx(function (locationData) - { - if (locationData != null) - { + getIpLocationDataEx(function (locationData) { + if (locationData != null) { publicLocationInfo = {}; publicLocationInfo.netInfoStr = lastNetworkInfo; publicLocationInfo.locationData = locationData; var x = db.Put('publicLocationInfo', JSON.stringify(publicLocationInfo)); // Save to database if (func) func(locationData); // Report the new location } - else - { + else { if (func) func(publicLocationInfo.locationData); // Can't get new location, report the old location } }); @@ -720,10 +630,8 @@ function getIpLocationData(func) } // Polyfill String.endsWith -if (!String.prototype.endsWith) -{ - String.prototype.endsWith = function (searchString, position) - { +if (!String.prototype.endsWith) { + String.prototype.endsWith = function (searchString, position) { var subjectString = this.toString(); if (typeof position !== 'number' || !isFinite(position) || Math.floor(position) !== position || position > subjectString.length) { position = subjectString.length; } position -= searchString.length; @@ -735,17 +643,13 @@ if (!String.prototype.endsWith) // Polyfill path.join obj.path = { - join: function () - { + join: function () { var x = []; - for (var i in arguments) - { + for (var i in arguments) { var w = arguments[i]; - if (w != null) - { + if (w != null) { while (w.endsWith('/') || w.endsWith('\\')) { w = w.substring(0, w.length - 1); } - if (i != 0) - { + if (i != 0) { while (w.startsWith('/') || w.startsWith('\\')) { w = w.substring(1); } } x.push(w); @@ -769,8 +673,7 @@ function rstr2hex(input) { var r = '', i; for (i = 0; i < input.length; i++) { r function buf2rstr(buf) { var r = ''; for (var i = 0; i < buf.length; i++) { r += String.fromCharCode(buf[i]); } return r; } // Convert a hex string to a raw string // TODO: Do this using Buffer(), will be MUCH faster -function hex2rstr(d) -{ +function hex2rstr(d) { if (typeof d != "string" || d.length == 0) return ''; var r = '', m = ('' + d).match(/../g), t; while (t = m.shift()) r += String.fromCharCode('0x' + t); @@ -778,8 +681,7 @@ function hex2rstr(d) } // Convert an object to string with all functions -function objToString(x, p, pad, ret) -{ +function objToString(x, p, pad, ret) { if (ret == undefined) ret = ''; if (p == undefined) p = 0; if (x == null) { return '[null]'; } @@ -797,26 +699,21 @@ function objToString(x, p, pad, ret) function addPad(p, ret) { var r = ''; for (var i = 0; i < p; i++) { r += ret; } return r; } // Split a string taking into account the quoats. Used for command line parsing -function splitArgs(str) -{ +function splitArgs(str) { var myArray = [], myRegexp = /[^\s"]+|"([^"]*)"/gi; do { var match = myRegexp.exec(str); if (match != null) { myArray.push(match[1] ? match[1] : match[0]); } } while (match != null); return myArray; } // Parse arguments string array into an object -function parseArgs(argv) -{ +function parseArgs(argv) { var results = { '_': [] }, current = null; - for (var i = 1, len = argv.length; i < len; i++) - { + for (var i = 1, len = argv.length; i < len; i++) { var x = argv[i]; - if (x.length > 2 && x[0] == '-' && x[1] == '-') - { + if (x.length > 2 && x[0] == '-' && x[1] == '-') { if (current != null) { results[current] = true; } current = x.substring(2); - } else - { + } else { if (current != null) { results[current] = toNumberIfNumber(x); current = null; } else { results['_'].push(toNumberIfNumber(x)); } } } @@ -825,8 +722,7 @@ function parseArgs(argv) } // Get server target url with a custom path -function getServerTargetUrl(path) -{ +function getServerTargetUrl(path) { var x = mesh.ServerUrl; //sendConsoleText("mesh.ServerUrl: " + mesh.ServerUrl); if (x == null) { return null; } @@ -837,35 +733,27 @@ function getServerTargetUrl(path) } // Get server url. If the url starts with "*/..." change it, it not use the url as is. -function getServerTargetUrlEx(url) -{ +function getServerTargetUrlEx(url) { if (url.substring(0, 2) == '*/') { return getServerTargetUrl(url.substring(2)); } return url; } // Send a wake-on-lan packet -function sendWakeOnLan(hexMac) -{ +function sendWakeOnLan(hexMac) { hexMac = hexMac.split(':').join(''); var count = 0; - try - { + try { var interfaces = require('os').networkInterfaces(); var magic = 'FFFFFFFFFFFF'; for (var x = 1; x <= 16; ++x) { magic += hexMac; } var magicbin = Buffer.from(magic, 'hex'); - for (var adapter in interfaces) - { - if (interfaces.hasOwnProperty(adapter)) - { - for (var i = 0; i < interfaces[adapter].length; ++i) - { + for (var adapter in interfaces) { + if (interfaces.hasOwnProperty(adapter)) { + for (var i = 0; i < interfaces[adapter].length; ++i) { var addr = interfaces[adapter][i]; - if ((addr.family == 'IPv4') && (addr.mac != '00:00:00:00:00:00')) - { - try - { + if ((addr.family == 'IPv4') && (addr.mac != '00:00:00:00:00:00')) { + try { var socket = require('dgram').createSocket({ type: 'udp4' }); socket.bind({ address: addr.address }); socket.setBroadcast(true); @@ -885,22 +773,17 @@ function sendWakeOnLan(hexMac) } // Handle a mesh agent command -function handleServerCommand(data) -{ - if (typeof data == 'object') - { +function handleServerCommand(data) { + if (typeof data == 'object') { // If this is a console command, parse it and call the console handler - switch (data.action) - { + switch (data.action) { case 'agentupdate': agentUpdate_Start(data.url, { hash: data.hash, tlshash: data.servertlshash, sessionid: data.sessionid }); break; case 'msg': { - switch (data.type) - { + switch (data.type) { case 'console': { // Process a console command - if (data.value && data.sessionid) - { + if (data.value && data.sessionid) { MeshServerLogEx(17, [data.value], "Processing console command: " + data.value, data); var args = splitArgs(data.value); processConsoleCommand(args[0].toLowerCase(), parseArgs(args), data.rights, data.sessionid); @@ -908,12 +791,10 @@ function handleServerCommand(data) break; } case 'tunnel': { - if (data.value != null) - { // Process a new tunnel connection request + if (data.value != null) { // Process a new tunnel connection request // Create a new tunnel object var xurl = getServerTargetUrlEx(data.value); - if (xurl != null) - { + if (xurl != null) { xurl = xurl.split('$').join('%24').split('@').join('%40'); // Escape the $ and @ characters var woptions = http.parseUri(xurl); woptions.perMessageDeflate = false; @@ -921,8 +802,7 @@ function handleServerCommand(data) // Perform manual server TLS certificate checking based on the certificate hash given by the server. woptions.rejectUnauthorized = 0; - woptions.checkServerIdentity = function checkServerIdentity(certs) - { + woptions.checkServerIdentity = function checkServerIdentity(certs) { // If the tunnel certificate matches the control channel certificate, accept the connection try { if (require('MeshAgent').ServerInfo.ControlChannelCertificate.digest == certs[0].digest) return; } catch (ex) { } try { if (require('MeshAgent').ServerInfo.ControlChannelCertificate.fingerprint == certs[0].fingerprint) return; } catch (ex) { } @@ -965,8 +845,7 @@ function handleServerCommand(data) } case 'messagebox': { // Display a message box - if (data.title && data.msg) - { + if (data.title && data.msg) { MeshServerLogEx(18, [data.title, data.msg], "Displaying message box, title=" + data.title + ", message=" + data.msg, data); data.msg = data.msg.split('\r').join('\\r').split('\n').join('\\n'); try { require('message-box').create(data.title, data.msg, 120); } catch (e) { } @@ -975,10 +854,8 @@ function handleServerCommand(data) } case 'ps': { // Return the list of running processes - if (data.sessionid) - { - processManager.getProcesses(function (plist) - { + if (data.sessionid) { + processManager.getProcesses(function (plist) { mesh.SendCommand({ action: 'msg', type: 'ps', value: JSON.stringify(plist), sessionid: data.sessionid }); }); } @@ -986,8 +863,7 @@ function handleServerCommand(data) } case 'pskill': { // Kill a process - if (data.value) - { + if (data.value) { MeshServerLogEx(19, [data.value], "Killing process " + data.value, data); try { process.kill(data.value); } catch (e) { sendConsoleText("pskill: " + JSON.stringify(e)); } } @@ -1002,8 +878,7 @@ function handleServerCommand(data) } case 'serviceStop': { // Stop a service - try - { + try { var service = require('service-manager').manager.getService(data.serviceName); if (service != null) { service.stop(); } } catch (e) { } @@ -1011,8 +886,7 @@ function handleServerCommand(data) } case 'serviceStart': { // Start a service - try - { + try { var service = require('service-manager').manager.getService(data.serviceName); if (service != null) { service.start(); } } catch (e) { } @@ -1020,8 +894,7 @@ function handleServerCommand(data) } case 'serviceRestart': { // Restart a service - try - { + try { var service = require('service-manager').manager.getService(data.serviceName); if (service != null) { service.restart(); } } catch (e) { } @@ -1030,16 +903,12 @@ function handleServerCommand(data) case 'deskBackground': { // Toggle desktop background - try - { - if (process.platform == 'win32') - { + try { + if (process.platform == 'win32') { var stype = require('user-sessions').getProcessOwnerName(process.pid).tsid == 0 ? 1 : 0; var sid = undefined; - if (stype == 1) - { - if (require('MeshAgent')._tsid != null) - { + if (stype == 1) { + if (require('MeshAgent')._tsid != null) { stype = 5; sid = require('MeshAgent')._tsid; } @@ -1055,15 +924,13 @@ function handleServerCommand(data) child.stdout.str = ''; child.stdout.on('data', function (c) { this.str += c.toString(); }); child.stderr.on('data', function () { }); child.waitExit(); - } else - { + } else { var id = require('user-sessions').consoleUid(); var current = require('linux-gnome-helpers').getDesktopWallpaper(id); if (current != '/dev/null') { require('MeshAgent')._wallpaper = current; } require('linux-gnome-helpers').setDesktopWallpaper(id, current != '/dev/null' ? undefined : require('MeshAgent')._wallpaper); } - } catch (e) - { + } catch (e) { sendConsoleText(e); } break; @@ -1078,22 +945,16 @@ function handleServerCommand(data) case 'getclip': { // Send the load clipboard back to the user //sendConsoleText('getClip: ' + JSON.stringify(data)); - if (require('MeshAgent').isService) - { - require('clipboard').dispatchRead().then(function (str) - { - if (str) - { + if (require('MeshAgent').isService) { + require('clipboard').dispatchRead().then(function (str) { + if (str) { MeshServerLogEx(21, [str.length], "Getting clipboard content, " + str.length + " byte(s)", data); mesh.SendCommand({ action: 'msg', type: 'getclip', sessionid: data.sessionid, data: str, tag: data.tag }); } }); - } else - { - require("clipboard").read().then(function (str) - { - if (str) - { + } else { + require("clipboard").read().then(function (str) { + if (str) { MeshServerLogEx(21, [str.length], "Getting clipboard content, " + str.length + " byte(s)", data); mesh.SendCommand({ action: 'msg', type: 'getclip', sessionid: data.sessionid, data: str, tag: data.tag }); } @@ -1104,8 +965,7 @@ function handleServerCommand(data) case 'setclip': { // Set the load clipboard to a user value sendConsoleText('setClip: ' + JSON.stringify(data)); - if (typeof data.data == 'string') - { + if (typeof data.data == 'string') { MeshServerLogEx(22, [data.data.length], "Setting clipboard content, " + data.data.length + " byte(s)", data); if (require('MeshAgent').isService) { require('clipboard').dispatchWrite(data.data); } else { require("clipboard")(data.data); } // Set the clipboard mesh.SendCommand({ action: 'msg', type: 'setclip', sessionid: data.sessionid, success: true }); @@ -1126,8 +986,7 @@ function handleServerCommand(data) var cpuuse = require('sysinfo').cpuUtilization(); cpuuse.sessionid = data.sessionid; cpuuse.tag = data.tag; - cpuuse.then(function (data) - { + cpuuse.then(function (data) { mesh.SendCommand(JSON.stringify( { action: 'msg', @@ -1152,8 +1011,7 @@ function handleServerCommand(data) break; } case 'acmactivate': { - if (amt != null) - { + if (amt != null) { MeshServerLogEx(23, null, "Attempting Intel AMT ACM mode activation", data); amt.setAcmResponse(data); } @@ -1171,21 +1029,17 @@ function handleServerCommand(data) // data.runAsUser: 0=Agent,1=UserOrAgent,2=UserOnly var options = {}; - if (data.runAsUser > 0) - { + if (data.runAsUser > 0) { try { options.uid = require('user-sessions').consoleUid(); } catch (e) { } options.type = require('child_process').SpawnTypes.TERM; } - if (data.runAsUser == 2) - { + if (data.runAsUser == 2) { if (options.uid == null) break; if (((require('user-sessions').minUid != null) && (options.uid < require('user-sessions').minUid()))) break; // This command can only run as user. } - if (process.platform == 'win32') - { - if (data.type == 1) - { + if (process.platform == 'win32') { + if (data.type == 1) { // Windows command shell mesh.cmdchild = require('child_process').execFile(process.env['windir'] + '\\system32\\cmd.exe', ['cmd'], options); mesh.cmdchild.descriptorMetadata = 'UserCommandsShell'; @@ -1193,8 +1047,7 @@ function handleServerCommand(data) mesh.cmdchild.stderr.on('data', function (c) { sendConsoleText(c.toString()); }); mesh.cmdchild.stdin.write(data.cmds + '\r\nexit\r\n'); mesh.cmdchild.on('exit', function () { sendConsoleText("Run commands completed."); delete mesh.cmdchild; }); - } else if (data.type == 2) - { + } else if (data.type == 2) { // Windows Powershell mesh.cmdchild = require('child_process').execFile(process.env['windir'] + '\\System32\\WindowsPowerShell\\v1.0\\powershell.exe', ['powershell', '-noprofile', '-nologo', '-command', '-'], options); mesh.cmdchild.descriptorMetadata = 'UserCommandsPowerShell'; @@ -1203,8 +1056,7 @@ function handleServerCommand(data) mesh.cmdchild.stdin.write(data.cmds + '\r\nexit\r\n'); mesh.cmdchild.on('exit', function () { sendConsoleText("Run commands completed."); delete mesh.cmdchild; }); } - } else if (data.type == 3) - { + } else if (data.type == 3) { // Linux shell mesh.cmdchild = require('child_process').execFile('/bin/sh', ['sh'], options); mesh.cmdchild.descriptorMetadata = 'UserCommandsShell'; @@ -1218,16 +1070,13 @@ function handleServerCommand(data) case 'uninstallagent': // Uninstall this agent var agentName = process.platform == 'win32' ? 'Mesh Agent' : 'meshagent'; - try - { + try { agentName = require('MeshAgent').serviceName; } - catch (x) - { + catch (x) { } - if (require('service-manager').manager.getService(agentName).isMe()) - { + if (require('service-manager').manager.getService(agentName).isMe()) { try { diagnosticAgent_uninstall(); } catch (e) { } var js = "require('service-manager').manager.getService('" + agentName + "').stop(); require('service-manager').manager.uninstallService('" + agentName + "'); process.exit();"; this.child = require('child_process').execFile(process.execPath, [process.platform == 'win32' ? (process.execPath.split('\\').pop()) : (process.execPath.split('/').pop()), '-b64exec', Buffer.from(js).toString('base64')], { type: 4, detached: true }); @@ -1235,8 +1084,7 @@ function handleServerCommand(data) break; case 'poweraction': { // Server telling us to execute a power action - if ((mesh.ExecPowerState != undefined) && (data.actiontype)) - { + if ((mesh.ExecPowerState != undefined) && (data.actiontype)) { var forced = 0; if (data.forced == 1) { forced = 1; } data.actiontype = parseInt(data.actiontype); @@ -1254,8 +1102,7 @@ function handleServerCommand(data) } case 'toast': { // Display a toast message - if (data.title && data.msg) - { + if (data.title && data.msg) { MeshServerLogEx(26, [data.title, data.msg], "Displaying toast message, title=" + data.title + ", message=" + data.msg, data); data.msg = data.msg.split('\r').join('\\r').split('\n').join('\\n'); try { require('toaster').Toast(data.title, data.msg); } catch (e) { } @@ -1272,8 +1119,7 @@ function handleServerCommand(data) case 'amtconfig': { // Perform Intel AMT activation and/or configuration if ((apftunnel != null) || (amt == null) || (typeof data.user != 'string') || (typeof data.pass != 'string')) break; - amt.getMeiState(15, function (state) - { + amt.getMeiState(15, function (state) { if ((apftunnel != null) || (amt == null)) return; if ((state == null) || (state.ProvisioningState == null)) return; if ((state.UUID == null) || (state.UUID.length != 36)) return; // Bad UUID @@ -1290,12 +1136,10 @@ function handleServerCommand(data) }; addAmtEvent('LMS tunnel start.'); apftunnel = require('amt-apfclient')({ debug: false }, apfarg); - apftunnel.onJsonControl = function (data) - { + apftunnel.onJsonControl = function (data) { if (data.action == 'console') { addAmtEvent(data.msg); } // Add console message to AMT event log if (data.action == 'mestate') { amt.getMeiState(15, function (state) { apftunnel.updateMeiState(state); }); } // Update the MEI state - if (data.action == 'deactivate') - { // Request CCM deactivation + if (data.action == 'deactivate') { // Request CCM deactivation var amtMeiModule, amtMei; try { amtMeiModule = require('amt-mei'); amtMei = new amtMeiModule(); } catch (ex) { if (apftunnel) apftunnel.sendMeiDeactivationState(1); return; } amtMei.on('error', function (e) { if (apftunnel) apftunnel.sendMeiDeactivationState(1); }); @@ -1315,8 +1159,7 @@ function handleServerCommand(data) } case 'sysinfo': { // Fetch system information - getSystemInformation(function (results) - { + getSystemInformation(function (results) { if ((results != null) && (data.hash != results.hash)) { mesh.SendCommand({ action: 'sysinfo', sessionid: this.sessionid, data: results }); } }); break; @@ -1329,18 +1172,14 @@ function handleServerCommand(data) } case 'coredump': // Set the current agent coredump situation. - if (data.value === true) - { - if (process.platform == 'win32') - { + if (data.value === true) { + if (process.platform == 'win32') { // TODO: This replace() below is not ideal, would be better to remove the .exe at the end instead of replace. process.coreDumpLocation = process.execPath.replace('.exe', '.dmp'); - } else - { + } else { process.coreDumpLocation = (process.cwd() != '//') ? (process.cwd() + 'core') : null; } - } else if (data.value === false) - { + } else if (data.value === false) { process.coreDumpLocation = null; } break; @@ -1349,18 +1188,15 @@ function handleServerCommand(data) var r = { action: 'getcoredump', value: (process.coreDumpLocation != null) }; var coreDumpPath = null; if (process.platform == 'win32') { coreDumpPath = process.coreDumpLocation; } else { coreDumpPath = (process.cwd() != '//') ? fs.existsSync(process.cwd() + 'core') : null; } - if ((coreDumpPath != null) && (fs.existsSync(coreDumpPath))) - { - try - { + if ((coreDumpPath != null) && (fs.existsSync(coreDumpPath))) { + try { var coredate = fs.statSync(coreDumpPath).mtime; var coretime = new Date(coredate).getTime(); var agenttime = new Date(fs.statSync(process.execPath).mtime).getTime(); if (coretime > agenttime) { r.exists = (db.Get('CoreDumpTime') != coredate); } } catch (ex) { } } - if (r.exists == true) - { + if (r.exists == true) { r.agenthashhex = getSHA384FileHash(process.execPath).toString('hex'); // Hash of current agent r.corehashhex = getSHA384FileHash(coreDumpPath).toString('hex'); // Hash of core dump file } @@ -1381,8 +1217,7 @@ function handleServerCommand(data) } // Agent just get a file from the server and save it locally. -function serverFetchFile() -{ +function serverFetchFile() { if ((Object.keys(agentFileHttpRequests).length > 4) || (agentFileHttpPendingRequests.length == 0)) return; // No more than 4 active HTTPS requests to the server. var data = agentFileHttpPendingRequests.shift(); if ((data.overwrite !== true) && fs.existsSync(data.path)) return; // Don't overwrite an existing file. @@ -1393,8 +1228,7 @@ function serverFetchFile() // Perform manual server TLS certificate checking based on the certificate hash given by the server. agentFileHttpOptions.rejectUnauthorized = 0; - agentFileHttpOptions.checkServerIdentity = function checkServerIdentity(certs) - { + agentFileHttpOptions.checkServerIdentity = function checkServerIdentity(certs) { // If the tunnel certificate matches the control channel certificate, accept the connection try { if (require('MeshAgent').ServerInfo.ControlChannelCertificate.digest == certs[0].digest) return; } catch (ex) { } try { if (require('MeshAgent').ServerInfo.ControlChannelCertificate.fingerprint == certs[0].fingerprint) return; } catch (ex) { } @@ -1405,11 +1239,9 @@ function serverFetchFile() if (agentFileHttpOptions == null) return; var agentFileHttpRequest = http.request(agentFileHttpOptions, - function (response) - { + function (response) { response.xparent = this; - try - { + try { response.xfile = fs.createWriteStream(this.xpath, { flags: 'wbN' }) response.pipe(response.xfile); response.end = function () { delete agentFileHttpRequests[this.xparent.xurlpath]; delete this.xparent; serverFetchFile(); } @@ -1432,13 +1264,10 @@ function onFileWatcher(a, b) { } */ -function getSystemInformation(func) -{ - try - { +function getSystemInformation(func) { + try { var results = { hardware: require('identifiers').get() }; // Hardware info - if (results.hardware && results.hardware.windows) - { + if (results.hardware && results.hardware.windows) { // Remove extra entries and things that change quickly var x = results.hardware.windows.osinfo; try { delete x.FreePhysicalMemory; } catch (e) { } @@ -1448,24 +1277,19 @@ function getSystemInformation(func) try { delete x.MaxProcessMemorySize; } catch (e) { } try { delete x.TotalVirtualMemorySize; } catch (e) { } try { delete x.TotalVisibleMemorySize; } catch (e) { } - try - { + try { if (results.hardware.windows.memory) { for (var i in results.hardware.windows.memory) { delete results.hardware.windows.memory[i].Node; } } if (results.hardware.windows.osinfo) { delete results.hardware.windows.osinfo.Node; } if (results.hardware.windows.partitions) { for (var i in results.hardware.windows.partitions) { delete results.hardware.windows.partitions[i].Node; } } } catch (e) { } } - if (process.platform == 'win32') - { + if (process.platform == 'win32') { results.pendingReboot = require('win-info').pendingReboot(); // Pending reboot - if (require('identifiers').volumes != null) - { - try - { + if (require('identifiers').volumes != null) { + try { results.volumes = require('identifiers').volumes(); } - catch (e) - { + catch (e) { } } } @@ -1499,46 +1323,35 @@ function getSystemInformation(func) } // Get a formated response for a given directory path -function getDirectoryInfo(reqpath) -{ +function getDirectoryInfo(reqpath) { var response = { path: reqpath, dir: [] }; - if (((reqpath == undefined) || (reqpath == '')) && (process.platform == 'win32')) - { + if (((reqpath == undefined) || (reqpath == '')) && (process.platform == 'win32')) { // List all the drives in the root, or the root itself var results = null; try { results = fs.readDrivesSync(); } catch (e) { } // TODO: Anyway to get drive total size and free space? Could draw a progress bar. - if (results != null) - { - for (var i = 0; i < results.length; ++i) - { + if (results != null) { + for (var i = 0; i < results.length; ++i) { var drive = { n: results[i].name, t: 1 }; if (results[i].type == 'REMOVABLE') { drive.dt = 'removable'; } // TODO: See if this is USB/CDROM or something else, we can draw icons. response.dir.push(drive); } } - } else - { + } else { // List all the files and folders in this path if (reqpath == '') { reqpath = '/'; } var results = null, xpath = obj.path.join(reqpath, '*'); //if (process.platform == "win32") { xpath = xpath.split('/').join('\\'); } try { results = fs.readdirSync(xpath); } catch (e) { } - if (results != null) - { - for (var i = 0; i < results.length; ++i) - { - if ((results[i] != '.') && (results[i] != '..')) - { + if (results != null) { + for (var i = 0; i < results.length; ++i) { + if ((results[i] != '.') && (results[i] != '..')) { var stat = null, p = obj.path.join(reqpath, results[i]); //if (process.platform == "win32") { p = p.split('/').join('\\'); } try { stat = fs.statSync(p); } catch (e) { } // TODO: Get file size/date - if ((stat != null) && (stat != undefined)) - { - if (stat.isDirectory() == true) - { + if ((stat != null) && (stat != undefined)) { + if (stat.isDirectory() == true) { response.dir.push({ n: results[i], t: 2, d: stat.mtime }); - } else - { + } else { response.dir.push({ n: results[i], t: 3, s: stat.size, d: stat.mtime }); } } @@ -1550,19 +1363,16 @@ function getDirectoryInfo(reqpath) } // Tunnel callback operations -function onTunnelUpgrade(response, s, head) -{ +function onTunnelUpgrade(response, s, head) { this.s = s; s.httprequest = this; s.end = onTunnelClosed; s.tunnel = this; s.descriptorMetadata = "MeshAgent_relayTunnel"; - if (require('MeshAgent').idleTimeout != null) - { + if (require('MeshAgent').idleTimeout != null) { s.setTimeout(require('MeshAgent').idleTimeout * 1000); - s.on('timeout', function () - { + s.on('timeout', function () { this.ping(); this.setTimeout(require('MeshAgent').idleTimeout * 1000); }); @@ -1570,8 +1380,7 @@ function onTunnelUpgrade(response, s, head) //sendConsoleText('onTunnelUpgrade - ' + this.tcpport + ' - ' + this.udpport); - if (this.tcpport != null) - { + if (this.tcpport != null) { // This is a TCP relay connection, pause now and try to connect to the target. s.pause(); s.data = onTcpRelayServerTunnelData; @@ -1581,14 +1390,12 @@ function onTunnelUpgrade(response, s, head) s.tcprelay.peerindex = this.index; // Add the TCP session to the count and update the server - if (s.httprequest.userid != null) - { + if (s.httprequest.userid != null) { if (tunnelUserCount.tcp[s.httprequest.userid] == null) { tunnelUserCount.tcp[s.httprequest.userid] = 1; } else { tunnelUserCount.tcp[s.httprequest.userid]++; } try { mesh.SendCommand({ action: 'sessions', type: 'tcp', value: tunnelUserCount.tcp }); } catch (e) { } broadcastSessionsToRegisteredApps(); } - } if (this.udpport != null) - { + } if (this.udpport != null) { // This is a UDP relay connection, get the UDP socket setup. // TODO: *************** s.data = onUdpRelayServerTunnelData; s.udprelay = require('dgram').createSocket({ type: 'udp4' }); @@ -1600,41 +1407,34 @@ function onTunnelUpgrade(response, s, head) s.udprelay.first = true; // Add the UDP session to the count and update the server - if (s.httprequest.userid != null) - { + if (s.httprequest.userid != null) { if (tunnelUserCount.udp[s.httprequest.userid] == null) { tunnelUserCount.udp[s.httprequest.userid] = 1; } else { tunnelUserCount.udp[s.httprequest.userid]++; } try { mesh.SendCommand({ action: 'sessions', type: 'udp', value: tunnelUserCount.tcp }); } catch (e) { } broadcastSessionsToRegisteredApps(); } - } else - { + } else { // This is a normal connect for KVM/Terminal/Files s.data = onTunnelData; } } // Called when UDP relay data is received // TODO**** -function onUdpRelayTargetTunnelConnect(data) -{ +function onUdpRelayTargetTunnelConnect(data) { var peerTunnel = tunnels[this.peerindex]; peerTunnel.s.write(data); } // Called when we get data from the server for a TCP relay (We have to skip the first received 'c' and pipe the rest) -function onUdpRelayServerTunnelData(data) -{ - if (this.udprelay.first === true) - { +function onUdpRelayServerTunnelData(data) { + if (this.udprelay.first === true) { delete this.udprelay.first; // Skip the first 'c' that is received. - } else - { + } else { this.udprelay.send(data, parseInt(this.udprelay.udpport), this.udprelay.udpaddr ? this.udprelay.udpaddr : '127.0.0.1'); } } // Called when the TCP relay target is connected -function onTcpRelayTargetTunnelConnect() -{ +function onTcpRelayTargetTunnelConnect() { var peerTunnel = tunnels[this.peerindex]; this.pipe(peerTunnel.s); // Pipe Target --> Server peerTunnel.s.first = true; @@ -1642,30 +1442,24 @@ function onTcpRelayTargetTunnelConnect() } // Called when we get data from the server for a TCP relay (We have to skip the first received 'c' and pipe the rest) -function onTcpRelayServerTunnelData(data) -{ - if (this.first == true) - { +function onTcpRelayServerTunnelData(data) { + if (this.first == true) { this.first = false; this.pipe(this.tcprelay, { dataTypeSkip: 1 }); // Pipe Server --> Target (don't pipe text type websocket frames) } } -function onTunnelClosed() -{ +function onTunnelClosed() { var tunnel = tunnels[this.httprequest.index]; if (tunnel == null) return; // Stop duplicate calls. // If this is a routing session, clean up and send the new session counts. - if (this.httprequest.userid != null) - { - if (this.httprequest.tcpport != null) - { + if (this.httprequest.userid != null) { + if (this.httprequest.tcpport != null) { if (tunnelUserCount.tcp[this.httprequest.userid] != null) { tunnelUserCount.tcp[this.httprequest.userid]--; if (tunnelUserCount.tcp[this.httprequest.userid] <= 0) { delete tunnelUserCount.tcp[this.httprequest.userid]; } } try { mesh.SendCommand({ action: 'sessions', type: 'tcp', value: tunnelUserCount.tcp }); } catch (e) { } broadcastSessionsToRegisteredApps(); - } else if (this.httprequest.udpport != null) - { + } else if (this.httprequest.udpport != null) { if (tunnelUserCount.udp[this.httprequest.userid] != null) { tunnelUserCount.udp[this.httprequest.userid]--; if (tunnelUserCount.udp[this.httprequest.userid] <= 0) { delete tunnelUserCount.udp[this.httprequest.userid]; } } try { mesh.SendCommand({ action: 'sessions', type: 'udp', value: tunnelUserCount.udp }); } catch (e) { } broadcastSessionsToRegisteredApps(); @@ -1673,8 +1467,7 @@ function onTunnelClosed() } // Sent tunnel statistics to the server, only send this if compression was used. - if ((this.bytesSent_uncompressed) && (this.bytesSent_uncompressed.toString() != this.bytesSent_actual.toString())) - { + if ((this.bytesSent_uncompressed) && (this.bytesSent_uncompressed.toString() != this.bytesSent_actual.toString())) { mesh.SendCommand({ action: 'tunnelCloseStats', url: tunnel.url, @@ -1707,8 +1500,7 @@ function onTunnelClosed() if (this.httprequest.downloadFile) { delete this.httprequest.downloadFile; } // Clean up WebRTC - if (this.webrtc != null) - { + if (this.webrtc != null) { if (this.webrtc.rtcchannel) { try { this.webrtc.rtcchannel.close(); } catch (e) { } this.webrtc.rtcchannel.removeAllListeners('data'); this.webrtc.rtcchannel.removeAllListeners('end'); delete this.webrtc.rtcchannel; } if (this.webrtc.websocket) { delete this.webrtc.websocket; } try { this.webrtc.close(); } catch (e) { } @@ -1722,21 +1514,17 @@ function onTunnelClosed() this.removeAllListeners('data'); } function onTunnelSendOk() { /*sendConsoleText("Tunnel #" + this.index + " SendOK.", this.sessionid);*/ } -function onTunnelData(data) -{ +function onTunnelData(data) { //console.log("OnTunnelData"); //sendConsoleText('OnTunnelData, ' + data.length + ', ' + typeof data + ', ' + data); // If this is upload data, save it to file - if ((this.httprequest.uploadFile) && (typeof data == 'object') && (data[0] != 123)) - { + if ((this.httprequest.uploadFile) && (typeof data == 'object') && (data[0] != 123)) { // Save the data to file being uploaded. - if (data[0] == 0) - { + if (data[0] == 0) { // If data starts with zero, skip the first byte. This is used to escape binary file data from JSON. try { fs.writeSync(this.httprequest.uploadFile, data, 1, data.length - 1); } catch (e) { sendConsoleText('FileUpload Error'); this.write(Buffer.from(JSON.stringify({ action: 'uploaderror' }))); return; } // Write to the file, if there is a problem, error out. - } else - { + } else { // If data does not start with zero, save as-is. try { fs.writeSync(this.httprequest.uploadFile, data); } catch (e) { sendConsoleText('FileUpload Error'); this.write(Buffer.from(JSON.stringify({ action: 'uploaderror' }))); return; } // Write to the file, if there is a problem, error out. } @@ -1744,22 +1532,18 @@ function onTunnelData(data) return; } - if (this.httprequest.state == 0) - { + if (this.httprequest.state == 0) { // Check if this is a relay connection if ((data == 'c') || (data == 'cr')) { this.httprequest.state = 1; /*sendConsoleText("Tunnel #" + this.httprequest.index + " now active", this.httprequest.sessionid);*/ } } - else - { + else { // Handle tunnel data - if (this.httprequest.protocol == 0) - { // 1 = Terminal (admin), 2 = Desktop, 5 = Files, 6 = PowerShell (admin), 7 = Plugin Data Exchange, 8 = Terminal (user), 9 = PowerShell (user), 10 = FileTransfer + if (this.httprequest.protocol == 0) { // 1 = Terminal (admin), 2 = Desktop, 5 = Files, 6 = PowerShell (admin), 7 = Plugin Data Exchange, 8 = Terminal (user), 9 = PowerShell (user), 10 = FileTransfer // Take a look at the protocol if ((data.length > 3) && (data[0] == '{')) { onTunnelControlData(data, this); return; } this.httprequest.protocol = parseInt(data); if (typeof this.httprequest.protocol != 'number') { this.httprequest.protocol = 0; } - if (this.httprequest.protocol == 10) - { + if (this.httprequest.protocol == 10) { // // Basic file transfer // @@ -1767,27 +1551,23 @@ function onTunnelData(data) if ((process.platform != 'win32') && (this.httprequest.xoptions.file.startsWith('/') == false)) { this.httprequest.xoptions.file = '/' + this.httprequest.xoptions.file; } try { stats = require('fs').statSync(this.httprequest.xoptions.file) } catch (e) { } try { if (stats) { this.httprequest.downloadFile = fs.createReadStream(this.httprequest.xoptions.file, { flags: 'rbN' }); } } catch (e) { } - if (this.httprequest.downloadFile) - { + if (this.httprequest.downloadFile) { //sendConsoleText('BasicFileTransfer, ok, ' + this.httprequest.xoptions.file + ', ' + JSON.stringify(stats)); this.write(JSON.stringify({ op: 'ok', size: stats.size })); this.httprequest.downloadFile.pipe(this); this.httprequest.downloadFile.end = function () { } - } else - { + } else { //sendConsoleText('BasicFileTransfer, cancel, ' + this.httprequest.xoptions.file); this.write(JSON.stringify({ op: 'cancel' })); } } - else if ((this.httprequest.protocol == 1) || (this.httprequest.protocol == 6) || (this.httprequest.protocol == 8) || (this.httprequest.protocol == 9)) - { + else if ((this.httprequest.protocol == 1) || (this.httprequest.protocol == 6) || (this.httprequest.protocol == 8) || (this.httprequest.protocol == 9)) { // // Remote Terminal // // Check user access rights for terminal - if (((this.httprequest.rights & MESHRIGHT_REMOTECONTROL) == 0) || ((this.httprequest.rights != 0xFFFFFFFF) && ((this.httprequest.rights & MESHRIGHT_NOTERMINAL) != 0))) - { + if (((this.httprequest.rights & MESHRIGHT_REMOTECONTROL) == 0) || ((this.httprequest.rights != 0xFFFFFFFF) && ((this.httprequest.rights & MESHRIGHT_NOTERMINAL) != 0))) { // Disengage this tunnel, user does not have the rights to do this!! this.httprequest.protocol = 999999; this.httprequest.s.end(); @@ -1797,10 +1577,8 @@ function onTunnelData(data) this.descriptorMetadata = "Remote Terminal"; - if (process.platform == 'win32') - { - if (!require('win-terminal').PowerShellCapable() && (this.httprequest.protocol == 6 || this.httprequest.protocol == 9)) - { + if (process.platform == 'win32') { + if (!require('win-terminal').PowerShellCapable() && (this.httprequest.protocol == 6 || this.httprequest.protocol == 9)) { this.httprequest.write(JSON.stringify({ ctrlChannel: '102938', type: 'console', msg: 'PowerShell is not supported on this version of windows', msgid: 1 })); this.httprequest.s.end(); return; @@ -1812,28 +1590,24 @@ function onTunnelData(data) this.httprequest.tpromise.that = this; this.httprequest.tpromise.httprequest = this.httprequest; - this.end = function () - { + this.end = function () { if (this.httprequest.tpromise._consent) { this.httprequest.tpromise._consent.close(); } if (this.httprequest.connectionPromise) { this.httprequest.connectionPromise._rej('Closed'); } // Remove the terminal session to the count to update the server - if (this.httprequest.userid != null) - { + if (this.httprequest.userid != null) { if (tunnelUserCount.terminal[this.httprequest.userid] != null) { tunnelUserCount.terminal[this.httprequest.userid]--; if (tunnelUserCount.terminal[this.httprequest.userid] <= 0) { delete tunnelUserCount.terminal[this.httprequest.userid]; } } try { mesh.SendCommand({ action: 'sessions', type: 'terminal', value: tunnelUserCount.terminal }); } catch (e) { } broadcastSessionsToRegisteredApps(); } - if (process.platform == 'win32') - { + if (process.platform == 'win32') { // Unpipe the web socket this.unpipe(this.httprequest._term); if (this.httprequest._term) { this.httprequest._term.unpipe(this); } // Unpipe the WebRTC channel if needed (This will also be done when the WebRTC channel ends). - if (this.rtcchannel) - { + if (this.rtcchannel) { this.rtcchannel.unpipe(this.httprequest._term); if (this.httprequest._term) { this.httprequest._term.unpipe(this.rtcchannel); } } @@ -1845,118 +1619,95 @@ function onTunnelData(data) }; // Perform User-Consent if needed. - if (this.httprequest.consent && (this.httprequest.consent & 16)) - { + if (this.httprequest.consent && (this.httprequest.consent & 16)) { this.write(JSON.stringify({ ctrlChannel: '102938', type: 'console', msg: "Waiting for user to grant access...", msgid: 1 })); var consentMessage = this.httprequest.username + " requesting remote terminal access. Grant access?", consentTitle = 'MeshCentral'; - if (this.httprequest.soptions != null) - { + if (this.httprequest.soptions != null) { if (this.httprequest.soptions.consentTitle != null) { consentTitle = this.httprequest.soptions.consentTitle; } if (this.httprequest.soptions.consentMsgTerminal != null) { consentMessage = this.httprequest.soptions.consentMsgTerminal.replace('{0}', this.httprequest.realname).replace('{1}', this.httprequest.username); } } this.httprequest.tpromise._consent = require('message-box').create(consentTitle, consentMessage, 30); this.httprequest.tpromise._consent.retPromise = this.httprequest.tpromise; this.httprequest.tpromise._consent.then( - function () - { + function () { // Success MeshServerLogEx(27, null, "Local user accepted remote terminal request (" + this.retPromise.httprequest.remoteaddr + ")", this.retPromise.that.httprequest); this.retPromise.that.write(JSON.stringify({ ctrlChannel: '102938', type: 'console', msg: null, msgid: 0 })); this.retPromise._consent = null; this.retPromise._res(); }, - function (e) - { + function (e) { // Denied MeshServerLogEx(28, null, "Local user rejected remote terminal request (" + this.retPromise.that.httprequest.remoteaddr + ")", this.retPromise.that.httprequest); this.retPromise.that.write(JSON.stringify({ ctrlChannel: '102938', type: 'console', msg: e.toString(), msgid: 2 })); this.retPromise._rej(e.toString()); }); } - else - { + else { // User-Consent is not required, so just resolve this promise this.httprequest.tpromise._res(); } this.httprequest.tpromise.then( - function () - { + function () { this.httprequest.connectionPromise = new prom(function (res, rej) { this._res = res; this._rej = rej; }); this.httprequest.connectionPromise.ws = this.that; // Start Terminal - if (process.platform == 'win32') - { - try - { + if (process.platform == 'win32') { + try { var cols = 80, rows = 25; - if (this.httprequest.xoptions) - { + if (this.httprequest.xoptions) { if (this.httprequest.xoptions.rows) { rows = this.httprequest.xoptions.rows; } if (this.httprequest.xoptions.cols) { cols = this.httprequest.xoptions.cols; } } - if ((this.httprequest.protocol == 1) || (this.httprequest.protocol == 6)) - { + if ((this.httprequest.protocol == 1) || (this.httprequest.protocol == 6)) { // Admin Terminal - if (require('win-virtual-terminal').supported) - { + if (require('win-virtual-terminal').supported) { // ConPTY PseudoTerminal // this.httprequest._term = require('win-virtual-terminal')[this.httprequest.protocol == 6 ? 'StartPowerShell' : 'Start'](80, 25); // The above line is commented out, because there is a bug with ClosePseudoConsole() API, so this is the workaround this.httprequest._dispatcher = require('win-dispatcher').dispatch({ modules: [{ name: 'win-virtual-terminal', script: getJSModule('win-virtual-terminal') }], launch: { module: 'win-virtual-terminal', method: (this.httprequest.protocol == 6 ? 'StartPowerShell' : 'Start'), args: [cols, rows] } }); this.httprequest._dispatcher.httprequest = this.httprequest; - this.httprequest._dispatcher.on('connection', function (c) - { - if (this.httprequest.connectionPromise.completed) - { + this.httprequest._dispatcher.on('connection', function (c) { + if (this.httprequest.connectionPromise.completed) { c.end(); } - else - { + else { this.httprequest.connectionPromise._res(c); } }); } - else - { + else { // Legacy Terminal this.httprequest.connectionPromise._res(require('win-terminal')[this.httprequest.protocol == 6 ? 'StartPowerShell' : 'Start'](cols, rows)); } } - else - { + else { // Logged in user var userPromise = require('user-sessions').enumerateUsers(); userPromise.that = this; - userPromise.then(function (u) - { + userPromise.then(function (u) { var that = this.that; - if (u.Active.length > 0) - { + if (u.Active.length > 0) { var username = u.Active[0].Username; - if (require('win-virtual-terminal').supported) - { + if (require('win-virtual-terminal').supported) { // ConPTY PseudoTerminal that.httprequest._dispatcher = require('win-dispatcher').dispatch({ user: username, modules: [{ name: 'win-virtual-terminal', script: getJSModule('win-virtual-terminal') }], launch: { module: 'win-virtual-terminal', method: (that.httprequest.protocol == 9 ? 'StartPowerShell' : 'Start'), args: [cols, rows] } }); } - else - { + else { // Legacy Terminal that.httprequest._dispatcher = require('win-dispatcher').dispatch({ user: username, modules: [{ name: 'win-terminal', script: getJSModule('win-terminal') }], launch: { module: 'win-terminal', method: (that.httprequest.protocol == 9 ? 'StartPowerShell' : 'Start'), args: [cols, rows] } }); } that.httprequest._dispatcher.ws = that; - that.httprequest._dispatcher.on('connection', function (c) - { - if (this.ws.httprequest.connectionPromise.completed) - { + that.httprequest._dispatcher.on('connection', function (c) { + if (this.ws.httprequest.connectionPromise.completed) { c.end(); } - else - { + else { this.ws.httprequest.connectionPromise._res(c); } }); @@ -1964,70 +1715,58 @@ function onTunnelData(data) }); } } - catch (e) - { + catch (e) { this.httprequest.connectionPromise._rej('Failed to start remote terminal session, ' + e.toString()); } } - else - { - try - { + else { + try { var bash = fs.existsSync('/bin/bash') ? '/bin/bash' : false; var sh = fs.existsSync('/bin/sh') ? '/bin/sh' : false; var login = process.platform == 'linux' ? '/bin/login' : '/usr/bin/login'; var env = { HISTCONTROL: 'ignoreboth' }; - if (this.httprequest.xoptions) - { + if (this.httprequest.xoptions) { if (this.httprequest.xoptions.rows) { env.LINES = ('' + this.httprequest.xoptions.rows); } if (this.httprequest.xoptions.cols) { env.COLUMNS = ('' + this.httprequest.xoptions.cols); } } var options = { type: childProcess.SpawnTypes.TERM, uid: (this.httprequest.protocol == 8) ? require('user-sessions').consoleUid() : null, env: env }; - if (this.httprequest.xoptions && this.httprequest.xoptions.requireLogin) - { + if (this.httprequest.xoptions && this.httprequest.xoptions.requireLogin) { if (!require('fs').existsSync(login)) { throw ('Unable to spawn login process'); } this.httprequest.connectionPromise._res(childProcess.execFile(login, ['login'], options)); // Start login shell } - else if (bash) - { + else if (bash) { var p = childProcess.execFile(bash, ['bash'], options); // Start bash // Spaces at the beginning of lines are needed to hide commands from the command history if (process.platform == 'linux') { p.stdin.write(' alias ls=\'ls --color=auto\';clear\n'); } this.httprequest.connectionPromise._res(p); } - else if (sh) - { + else if (sh) { var p = childProcess.execFile(sh, ['sh'], options); // Start sh // Spaces at the beginning of lines are needed to hide commands from the command history if (process.platform == 'linux') { p.stdin.write(' alias ls=\'ls --color=auto\';clear\n'); } this.httprequest.connectionPromise._res(p); } - else - { + else { this.httprequest.connectionPromise._rej('Failed to start remote terminal session, no shell found'); } } - catch (e) - { + catch (e) { this.httprequest.connectionPromise._rej('Failed to start remote terminal session, ' + e.toString()); } } this.httprequest.connectionPromise.then( - function (term) - { + function (term) { // SUCCESS var stdoutstream; var stdinstream; - if (process.platform == 'win32') - { + if (process.platform == 'win32') { this.ws.httprequest._term = term; this.ws.httprequest._term.tunnel = this.ws; stdoutstream = stdinstream = term; } - else - { + else { term.descriptorMetadata = 'Remote Terminal'; this.ws.httprequest.process = term; this.ws.httprequest.process.tunnel = this.ws; @@ -2046,49 +1785,42 @@ function onTunnelData(data) this.ws.pipe(stdinstream, { dataTypeSkip: 1, end: false }); // 0 = Binary, 1 = Text. // Add the terminal session to the count to update the server - if (this.ws.httprequest.userid != null) - { + if (this.ws.httprequest.userid != null) { if (tunnelUserCount.terminal[this.ws.httprequest.userid] == null) { tunnelUserCount.terminal[this.ws.httprequest.userid] = 1; } else { tunnelUserCount.terminal[this.ws.httprequest.userid]++; } try { mesh.SendCommand({ action: 'sessions', type: 'terminal', value: tunnelUserCount.terminal }); } catch (e) { } broadcastSessionsToRegisteredApps(); } // Toast Notification, if required - if (this.ws.httprequest.consent && (this.ws.httprequest.consent & 2)) - { + if (this.ws.httprequest.consent && (this.ws.httprequest.consent & 2)) { // User Notifications is required var notifyMessage = this.ws.httprequest.username + " started a remote terminal session.", notifyTitle = "MeshCentral"; - if (this.ws.httprequest.soptions != null) - { + if (this.ws.httprequest.soptions != null) { if (this.ws.httprequest.soptions.notifyTitle != null) { notifyTitle = this.ws.httprequest.soptions.notifyTitle; } if (this.ws.httprequest.soptions.notifyMsgTerminal != null) { notifyMessage = this.ws.httprequest.soptions.notifyMsgTerminal.replace('{0}', this.ws.httprequest.realname).replace('{1}', this.ws.httprequest.username); } } try { require('toaster').Toast(notifyTitle, notifyMessage); } catch (e) { } } }, - function (e) - { + function (e) { // FAILED to connect terminal this.ws.write(JSON.stringify({ ctrlChannel: '102938', type: 'console', msg: e.toString(), msgid: 2 })); this.ws.end(); }); }, - function (e) - { + function (e) { // DO NOT start terminal this.that.write(JSON.stringify({ ctrlChannel: '102938', type: 'console', msg: e.toString(), msgid: 2 })); this.that.end(); }); } - else if (this.httprequest.protocol == 2) - { + else if (this.httprequest.protocol == 2) { // // Remote KVM // // Check user access rights for desktop - if ((((this.httprequest.rights & MESHRIGHT_REMOTECONTROL) == 0) && ((this.httprequest.rights & MESHRIGHT_REMOTEVIEW) == 0)) || ((this.httprequest.rights != 0xFFFFFFFF) && ((this.httprequest.rights & MESHRIGHT_NODESKTOP) != 0))) - { + if ((((this.httprequest.rights & MESHRIGHT_REMOTECONTROL) == 0) && ((this.httprequest.rights & MESHRIGHT_REMOTEVIEW) == 0)) || ((this.httprequest.rights != 0xFFFFFFFF) && ((this.httprequest.rights & MESHRIGHT_NODESKTOP) != 0))) { // Disengage this tunnel, user does not have the rights to do this!! this.httprequest.protocol = 999999; this.httprequest.s.end(); @@ -2114,8 +1846,7 @@ function onTunnelData(data) // Send a metadata update to all desktop sessions var users = {}; - if (this.httprequest.desktop.kvm.tunnels != null) - { + if (this.httprequest.desktop.kvm.tunnels != null) { for (var i in this.httprequest.desktop.kvm.tunnels) { try { var userid = this.httprequest.desktop.kvm.tunnels[i].httprequest.userid; if (users[userid] == null) { users[userid] = 1; } else { users[userid]++; } } catch (e) { } } for (var i in this.httprequest.desktop.kvm.tunnels) { try { this.httprequest.desktop.kvm.tunnels[i].write(JSON.stringify({ ctrlChannel: '102938', type: 'metadata', users: users })); } catch (e) { } } tunnelUserCount.desktop = users; @@ -2123,8 +1854,7 @@ function onTunnelData(data) broadcastSessionsToRegisteredApps(); } - this.end = function () - { + this.end = function () { --this.desktop.kvm.connectionCount; // Remove ourself from the list of remote desktop session @@ -2133,8 +1863,7 @@ function onTunnelData(data) // Send a metadata update to all desktop sessions var users = {}; - if (this.httprequest.desktop.kvm.tunnels != null) - { + if (this.httprequest.desktop.kvm.tunnels != null) { for (var i in this.httprequest.desktop.kvm.tunnels) { try { var userid = this.httprequest.desktop.kvm.tunnels[i].httprequest.userid; if (users[userid] == null) { users[userid] = 1; } else { users[userid]++; } } catch (e) { } } for (var i in this.httprequest.desktop.kvm.tunnels) { try { this.httprequest.desktop.kvm.tunnels[i].write(JSON.stringify({ ctrlChannel: '102938', type: 'metadata', users: users })); } catch (e) { } } tunnelUserCount.desktop = users; @@ -2143,18 +1872,15 @@ function onTunnelData(data) } // Unpipe the web socket - try - { + try { this.unpipe(this.httprequest.desktop.kvm); this.httprequest.desktop.kvm.unpipe(this); } catch (e) { } // Unpipe the WebRTC channel if needed (This will also be done when the WebRTC channel ends). - if (this.rtcchannel) - { - try - { + if (this.rtcchannel) { + try { this.rtcchannel.unpipe(this.httprequest.desktop.kvm); this.httprequest.desktop.kvm.unpipe(this.rtcchannel); } @@ -2164,35 +1890,28 @@ function onTunnelData(data) // Place wallpaper back if needed // TODO - if (this.desktop.kvm.connectionCount == 0) - { + if (this.desktop.kvm.connectionCount == 0) { // Display a toast message. This may not be supported on all platforms. // try { require('toaster').Toast('MeshCentral', 'Remote Desktop Control Ended.'); } catch (e) { } this.httprequest.desktop.kvm.end(); - if (this.httprequest.desktop.kvm.connectionBar) - { + if (this.httprequest.desktop.kvm.connectionBar) { this.httprequest.desktop.kvm.connectionBar.removeAllListeners('close'); this.httprequest.desktop.kvm.connectionBar.close(); this.httprequest.desktop.kvm.connectionBar = null; } - } else - { - for (var i in this.httprequest.desktop.kvm.users) - { - if ((this.httprequest.desktop.kvm.users[i] == this.httprequest.username) && this.httprequest.desktop.kvm.connectionBar) - { + } else { + for (var i in this.httprequest.desktop.kvm.users) { + if ((this.httprequest.desktop.kvm.users[i] == this.httprequest.username) && this.httprequest.desktop.kvm.connectionBar) { for (var j in this.httprequest.desktop.kvm.rusers) { if (this.httprequest.desktop.kvm.rusers[j] == this.httprequest.realname) { this.httprequest.desktop.kvm.rusers.splice(j, 1); break; } } this.httprequest.desktop.kvm.users.splice(i, 1); this.httprequest.desktop.kvm.connectionBar.removeAllListeners('close'); this.httprequest.desktop.kvm.connectionBar.close(); this.httprequest.desktop.kvm.connectionBar = require('notifybar-desktop')(this.httprequest.privacybartext.replace('{0}', this.httprequest.desktop.kvm.users.join(', ')).replace('{1}', this.httprequest.desktop.kvm.rusers.join(', ')), require('MeshAgent')._tsid); this.httprequest.desktop.kvm.connectionBar.httprequest = this.httprequest; - this.httprequest.desktop.kvm.connectionBar.on('close', function () - { + this.httprequest.desktop.kvm.connectionBar.on('close', function () { MeshServerLogEx(29, null, "Remote Desktop Connection forcefully closed by local user (" + this.httprequest.remoteaddr + ")", this.httprequest); - for (var i in this.httprequest.desktop.kvm._pipedStreams) - { + for (var i in this.httprequest.desktop.kvm._pipedStreams) { this.httprequest.desktop.kvm._pipedStreams[i].end(); } this.httprequest.desktop.kvm.end(); @@ -2202,40 +1921,34 @@ function onTunnelData(data) } } }; - if (this.httprequest.desktop.kvm.hasOwnProperty('connectionCount')) - { + if (this.httprequest.desktop.kvm.hasOwnProperty('connectionCount')) { this.httprequest.desktop.kvm.connectionCount++; this.httprequest.desktop.kvm.rusers.push(this.httprequest.realname); this.httprequest.desktop.kvm.users.push(this.httprequest.username); this.httprequest.desktop.kvm.rusers.sort(); this.httprequest.desktop.kvm.users.sort(); - } else - { + } else { this.httprequest.desktop.kvm.connectionCount = 1; this.httprequest.desktop.kvm.rusers = [this.httprequest.realname]; this.httprequest.desktop.kvm.users = [this.httprequest.username]; } - if ((this.httprequest.rights == 0xFFFFFFFF) || (((this.httprequest.rights & MESHRIGHT_REMOTECONTROL) != 0) && ((this.httprequest.rights & MESHRIGHT_REMOTEVIEW) == 0))) - { + if ((this.httprequest.rights == 0xFFFFFFFF) || (((this.httprequest.rights & MESHRIGHT_REMOTECONTROL) != 0) && ((this.httprequest.rights & MESHRIGHT_REMOTEVIEW) == 0))) { // If we have remote control rights, pipe the KVM input this.pipe(this.httprequest.desktop.kvm, { dataTypeSkip: 1, end: false }); // 0 = Binary, 1 = Text. Pipe the Browser --> KVM input. - } else - { + } else { // We need to only pipe non-mouse & non-keyboard inputs. //sendConsoleText('Warning: No Remote Desktop Input Rights.'); // TODO!!! } // Perform notification if needed. Toast messages may not be supported on all platforms. - if (this.httprequest.consent && (this.httprequest.consent & 8)) - { + if (this.httprequest.consent && (this.httprequest.consent & 8)) { // User Consent Prompt is required // Send a console message back using the console channel, "\n" is supported. this.write(JSON.stringify({ ctrlChannel: '102938', type: 'console', msg: "Waiting for user to grant access...", msgid: 1 })); var consentMessage = this.httprequest.realname + " requesting remote desktop access. Grant access?", consentTitle = 'MeshCentral'; - if (this.httprequest.soptions != null) - { + if (this.httprequest.soptions != null) { if (this.httprequest.soptions.consentTitle != null) { consentTitle = this.httprequest.soptions.consentTitle; } if (this.httprequest.soptions.consentMsgDesktop != null) { consentMessage = this.httprequest.soptions.consentMsgDesktop.replace('{0}', this.httprequest.realname).replace('{1}', this.httprequest.username); } } @@ -2245,51 +1958,40 @@ function onTunnelData(data) this._consentpromise = pr; this.prependOnceListener('end', function () { if (this._consentpromise && this._consentpromise.close) { this._consentpromise.close(); } }); pr.then( - function () - { + function () { // Success this.ws._consentpromise = null; MeshServerLogEx(30, null, "Starting remote desktop after local user accepted (" + this.ws.httprequest.remoteaddr + ")", this.ws.httprequest); this.ws.write(JSON.stringify({ ctrlChannel: '102938', type: 'console', msg: null, msgid: 0 })); - if (this.ws.httprequest.consent && (this.ws.httprequest.consent & 1)) - { + if (this.ws.httprequest.consent && (this.ws.httprequest.consent & 1)) { // User Notifications is required var notifyMessage = this.ws.httprequest.realname + " started a remote desktop session.", notifyTitle = "MeshCentral"; - if (this.ws.httprequest.soptions != null) - { + if (this.ws.httprequest.soptions != null) { if (this.ws.httprequest.soptions.notifyTitle != null) { notifyTitle = this.ws.httprequest.soptions.notifyTitle; } if (this.ws.httprequest.soptions.notifyMsgDesktop != null) { notifyMessage = this.ws.httprequest.soptions.notifyMsgDesktop.replace('{0}', this.ws.httprequest.realname).replace('{1}', this.ws.httprequest.username); } } try { require('toaster').Toast(notifyTitle, notifyMessage, tsid); } catch (e) { } } - if (this.ws.httprequest.consent && (this.ws.httprequest.consent & 0x40)) - { + if (this.ws.httprequest.consent && (this.ws.httprequest.consent & 0x40)) { // Connection Bar is required - if (this.ws.httprequest.desktop.kvm.connectionBar) - { + if (this.ws.httprequest.desktop.kvm.connectionBar) { this.ws.httprequest.desktop.kvm.connectionBar.removeAllListeners('close'); this.ws.httprequest.desktop.kvm.connectionBar.close(); } - try - { + try { this.ws.httprequest.desktop.kvm.connectionBar = require('notifybar-desktop')(this.ws.httprequest.privacybartext.replace('{0}', this.ws.httprequest.desktop.kvm.users.join(', ')).replace('{1}', this.ws.httprequest.desktop.kvm.rusers.join(', ')), require('MeshAgent')._tsid); MeshServerLogEx(31, null, "Remote Desktop Connection Bar Activated/Updated (" + this.ws.httprequest.remoteaddr + ")", this.ws.httprequest); } - catch (e) - { - if (process.platform != 'darwin') - { + catch (e) { + if (process.platform != 'darwin') { MeshServerLogEx(32, null, "Remote Desktop Connection Bar Failed or Not Supported (" + this.ws.httprequest.remoteaddr + ")", this.ws.httprequest); } } - if (this.ws.httprequest.desktop.kvm.connectionBar) - { + if (this.ws.httprequest.desktop.kvm.connectionBar) { this.ws.httprequest.desktop.kvm.connectionBar.httprequest = this.ws.httprequest; - this.ws.httprequest.desktop.kvm.connectionBar.on('close', function () - { + this.ws.httprequest.desktop.kvm.connectionBar.on('close', function () { MeshServerLogEx(33, null, "Remote Desktop Connection forcefully closed by local user (" + this.httprequest.remoteaddr + ")", this.httprequest); - for (var i in this.httprequest.desktop.kvm._pipedStreams) - { + for (var i in this.httprequest.desktop.kvm._pipedStreams) { this.httprequest.desktop.kvm._pipedStreams[i].end(); } this.httprequest.desktop.kvm.end(); @@ -2299,56 +2001,44 @@ function onTunnelData(data) this.ws.httprequest.desktop.kvm.pipe(this.ws, { dataTypeSkip: 1 }); this.ws.resume(); }, - function (e) - { + function (e) { // User Consent Denied/Failed this.ws._consentpromise = null; MeshServerLogEx(34, null, "Failed to start remote desktop after local user rejected (" + this.ws.httprequest.remoteaddr + ")", this.ws.httprequest); this.ws.end(JSON.stringify({ ctrlChannel: '102938', type: 'console', msg: e.toString(), msgid: 2 })); }); - } else - { + } else { // User Consent Prompt is not required - if (this.httprequest.consent && (this.httprequest.consent & 1)) - { + if (this.httprequest.consent && (this.httprequest.consent & 1)) { // User Notifications is required MeshServerLogEx(35, null, "Started remote desktop with toast notification (" + this.httprequest.remoteaddr + ")", this.httprequest); var notifyMessage = this.httprequest.realname + " started a remote desktop session.", notifyTitle = "MeshCentral"; - if (this.httprequest.soptions != null) - { + if (this.httprequest.soptions != null) { if (this.httprequest.soptions.notifyTitle != null) { notifyTitle = this.httprequest.soptions.notifyTitle; } if (this.httprequest.soptions.notifyMsgDesktop != null) { notifyMessage = this.httprequest.soptions.notifyMsgDesktop.replace('{0}', this.httprequest.realname).replace('{1}', this.httprequest.username); } } try { require('toaster').Toast(notifyTitle, notifyMessage, tsid); } catch (e) { } - } else - { + } else { MeshServerLogEx(36, null, "Started remote desktop without notification (" + this.httprequest.remoteaddr + ")", this.httprequest); } - if (this.httprequest.consent && (this.httprequest.consent & 0x40)) - { + if (this.httprequest.consent && (this.httprequest.consent & 0x40)) { // Connection Bar is required - if (this.httprequest.desktop.kvm.connectionBar) - { + if (this.httprequest.desktop.kvm.connectionBar) { this.httprequest.desktop.kvm.connectionBar.removeAllListeners('close'); this.httprequest.desktop.kvm.connectionBar.close(); } - try - { + try { this.httprequest.desktop.kvm.connectionBar = require('notifybar-desktop')(this.httprequest.privacybartext.replace('{0}', this.httprequest.desktop.kvm.rusers.join(', ')).replace('{1}', this.httprequest.desktop.kvm.users.join(', ')), require('MeshAgent')._tsid); MeshServerLogEx(37, null, "Remote Desktop Connection Bar Activated/Updated (" + this.httprequest.remoteaddr + ")", this.httprequest); } - catch (e) - { + catch (e) { MeshServerLogEx(38, null, "Remote Desktop Connection Bar Failed or not Supported (" + this.httprequest.remoteaddr + ")", this.httprequest); } - if (this.httprequest.desktop.kvm.connectionBar) - { + if (this.httprequest.desktop.kvm.connectionBar) { this.httprequest.desktop.kvm.connectionBar.httprequest = this.httprequest; - this.httprequest.desktop.kvm.connectionBar.on('close', function () - { + this.httprequest.desktop.kvm.connectionBar.on('close', function () { MeshServerLogEx(39, null, "Remote Desktop Connection forcefully closed by local user (" + this.httprequest.remoteaddr + ")", this.httprequest); - for (var i in this.httprequest.desktop.kvm._pipedStreams) - { + for (var i in this.httprequest.desktop.kvm._pipedStreams) { this.httprequest.desktop.kvm._pipedStreams[i].end(); } this.httprequest.desktop.kvm.end(); @@ -2362,15 +2052,13 @@ function onTunnelData(data) this.on('data', onTunnelControlData); //this.write('MeshCore KVM Hello!1'); - } else if (this.httprequest.protocol == 5) - { + } else if (this.httprequest.protocol == 5) { // // Remote Files // // Check user access rights for files - if (((this.httprequest.rights & MESHRIGHT_REMOTECONTROL) == 0) || ((this.httprequest.rights != 0xFFFFFFFF) && ((this.httprequest.rights & MESHRIGHT_NOFILES) != 0))) - { + if (((this.httprequest.rights & MESHRIGHT_REMOTECONTROL) == 0) || ((this.httprequest.rights != 0xFFFFFFFF) && ((this.httprequest.rights & MESHRIGHT_NOFILES) != 0))) { // Disengage this tunnel, user does not have the rights to do this!! this.httprequest.protocol = 999999; this.httprequest.s.end(); @@ -2381,18 +2069,15 @@ function onTunnelData(data) this.descriptorMetadata = "Remote Files"; // Add the files session to the count to update the server - if (this.httprequest.userid != null) - { + if (this.httprequest.userid != null) { if (tunnelUserCount.files[this.httprequest.userid] == null) { tunnelUserCount.files[this.httprequest.userid] = 1; } else { tunnelUserCount.files[this.httprequest.userid]++; } try { mesh.SendCommand({ action: 'sessions', type: 'files', value: tunnelUserCount.files }); } catch (e) { } broadcastSessionsToRegisteredApps(); } - this.end = function () - { + this.end = function () { // Remove the files session from the count to update the server - if (this.httprequest.userid != null) - { + if (this.httprequest.userid != null) { if (tunnelUserCount.files[this.httprequest.userid] != null) { tunnelUserCount.files[this.httprequest.userid]--; if (tunnelUserCount.files[this.httprequest.userid] <= 0) { delete tunnelUserCount.files[this.httprequest.userid]; } } try { mesh.SendCommand({ action: 'sessions', type: 'files', value: tunnelUserCount.files }); } catch (e) { } broadcastSessionsToRegisteredApps(); @@ -2400,14 +2085,12 @@ function onTunnelData(data) }; // Perform notification if needed. Toast messages may not be supported on all platforms. - if (this.httprequest.consent && (this.httprequest.consent & 32)) - { + if (this.httprequest.consent && (this.httprequest.consent & 32)) { // User Consent Prompt is required // Send a console message back using the console channel, "\n" is supported. this.write(JSON.stringify({ ctrlChannel: '102938', type: 'console', msg: "Waiting for user to grant access...", msgid: 1 })); var consentMessage = this.httprequest.realname + " requesting remote file Access. Grant access?", consentTitle = 'MeshCentral'; - if (this.httprequest.soptions != null) - { + if (this.httprequest.soptions != null) { if (this.httprequest.soptions.consentTitle != null) { consentTitle = this.httprequest.soptions.consentTitle; } if (this.httprequest.soptions.consentMsgFiles != null) { consentMessage = this.httprequest.soptions.consentMsgFiles.replace('{0}', this.httprequest.realname).replace('{1}', this.httprequest.username); } } @@ -2417,18 +2100,15 @@ function onTunnelData(data) this._consentpromise = pr; this.prependOnceListener('end', function () { if (this._consentpromise && this._consentpromise.close) { this._consentpromise.close(); } }); pr.then( - function () - { + function () { // Success this.ws._consentpromise = null; MeshServerLogEx(40, null, "Starting remote files after local user accepted (" + this.ws.httprequest.remoteaddr + ")", this.ws.httprequest); this.ws.write(JSON.stringify({ ctrlChannel: '102938', type: 'console', msg: null })); - if (this.ws.httprequest.consent && (this.ws.httprequest.consent & 4)) - { + if (this.ws.httprequest.consent && (this.ws.httprequest.consent & 4)) { // User Notifications is required var notifyMessage = this.ws.httprequest.realname + " started a remote file session.", notifyTitle = "MeshCentral"; - if (this.ws.httprequest.soptions != null) - { + if (this.ws.httprequest.soptions != null) { if (this.ws.httprequest.soptions.notifyTitle != null) { notifyTitle = this.ws.httprequest.soptions.notifyTitle; } if (this.ws.httprequest.soptions.notifyMsgFiles != null) { notifyMessage = this.ws.httprequest.soptions.notifyMsgFiles.replace('{0}', this.ws.httprequest.realname).replace('{1}', this.ws.httprequest.username); } } @@ -2436,29 +2116,24 @@ function onTunnelData(data) } this.ws.resume(); }, - function (e) - { + function (e) { // User Consent Denied/Failed this.ws._consentpromise = null; MeshServerLogEx(41, null, "Failed to start remote files after local user rejected (" + this.ws.httprequest.remoteaddr + ")", this.ws.httprequest); this.ws.end(JSON.stringify({ ctrlChannel: '102938', type: 'console', msg: e.toString(), msgid: 2 })); }); - } else - { + } else { // User Consent Prompt is not required - if (this.httprequest.consent && (this.httprequest.consent & 4)) - { + if (this.httprequest.consent && (this.httprequest.consent & 4)) { // User Notifications is required MeshServerLogEx(42, null, "Started remote files with toast notification (" + this.httprequest.remoteaddr + ")", this.httprequest); var notifyMessage = this.httprequest.realname + " started a remote file session.", notifyTitle = "MeshCentral"; - if (this.httprequest.soptions != null) - { + if (this.httprequest.soptions != null) { if (this.httprequest.soptions.notifyTitle != null) { notifyTitle = this.httprequest.soptions.notifyTitle; } if (this.httprequest.soptions.notifyMsgFiles != null) { notifyMessage = this.httprequest.soptions.notifyMsgFiles.replace('{0}', this.httprequest.realname).replace('{1}', this.httprequest.username); } } try { require('toaster').Toast(notifyTitle, notifyMessage); } catch (e) { } - } else - { + } else { MeshServerLogEx(43, null, "Started remote files without notification (" + this.httprequest.remoteaddr + ")", this.httprequest); } this.resume(); @@ -2467,23 +2142,18 @@ function onTunnelData(data) // Setup files // NOP } - } else if (this.httprequest.protocol == 1) - { + } else if (this.httprequest.protocol == 1) { // Send data into terminal stdin //this.write(data); // Echo back the keys (Does not seem to be a good idea) - } else if (this.httprequest.protocol == 2) - { + } else if (this.httprequest.protocol == 2) { // Send data into remote desktop - if (this.httprequest.desktop.state == 0) - { + if (this.httprequest.desktop.state == 0) { this.write(Buffer.from(String.fromCharCode(0x11, 0xFE, 0x00, 0x00, 0x4D, 0x45, 0x53, 0x48, 0x00, 0x00, 0x00, 0x00, 0x02))); this.httprequest.desktop.state = 1; - } else - { + } else { this.httprequest.desktop.write(data); } - } else if (this.httprequest.protocol == 5) - { + } else if (this.httprequest.protocol == 5) { // Process files commands var cmd = null; try { cmd = JSON.parse(data); } catch (e) { }; @@ -2494,8 +2164,7 @@ function onTunnelData(data) if ((cmd.path != null) && (process.platform != 'win32') && (cmd.path[0] != '/')) { cmd.path = '/' + cmd.path; } // Add '/' to paths on non-windows //console.log(objToString(cmd, 0, ' ')); - switch (cmd.action) - { + switch (cmd.action) { case 'ls': { /* // Close the watcher if required @@ -2532,20 +2201,15 @@ function onTunnelData(data) } case 'rm': { // Delete, possibly recursive delete - for (var i in cmd.delfiles) - { + for (var i in cmd.delfiles) { var p = obj.path.join(cmd.path, cmd.delfiles[i]), delcount = 0; try { delcount = deleteFolderRecursive(p, cmd.rec); } catch (e) { } - if ((delcount == 1) && !cmd.rec) - { + if ((delcount == 1) && !cmd.rec) { MeshServerLogEx(45, [p], "Delete: \"" + p + "\"", this.httprequest); - } else - { - if (cmd.rec) - { + } else { + if (cmd.rec) { MeshServerLogEx(46, [p, delcount], "Delete recursive: \"" + p + "\", " + delcount + " element(s) removed", this.httprequest); - } else - { + } else { MeshServerLogEx(47, [p, delcount], "Delete: \"" + p + "\", " + delcount + " element(s) removed", this.httprequest); } } @@ -2555,11 +2219,9 @@ function onTunnelData(data) case 'markcoredump': { // If we are asking for the coredump file, set the right path. var coreDumpPath = null; - if (process.platform == 'win32') - { + if (process.platform == 'win32') { if (fs.existsSync(process.coreDumpLocation)) { coreDumpPath = process.coreDumpLocation; } - } else - { + } else { if ((process.cwd() != '//') && fs.existsSync(process.cwd() + 'core')) { coreDumpPath = process.cwd() + 'core'; } } if (coreDumpPath != null) { db.Put('CoreDumpTime', require('fs').statSync(coreDumpPath).mtime); } @@ -2596,15 +2258,11 @@ function onTunnelData(data) { // Download a file var sendNextBlock = 0; - if (cmd.sub == 'start') - { // Setup the download - if ((cmd.path == null) && (cmd.ask == 'coredump')) - { // If we are asking for the coredump file, set the right path. - if (process.platform == 'win32') - { + if (cmd.sub == 'start') { // Setup the download + if ((cmd.path == null) && (cmd.ask == 'coredump')) { // If we are asking for the coredump file, set the right path. + if (process.platform == 'win32') { if (fs.existsSync(process.coreDumpLocation)) { cmd.path = process.coreDumpLocation; } - } else - { + } else { if ((process.cwd() != '//') && fs.existsSync(process.cwd() + 'core')) { cmd.path = process.cwd() + 'core'; } } } @@ -2613,13 +2271,11 @@ function onTunnelData(data) this.filedownload = { id: cmd.id, path: cmd.path, ptr: 0 } try { this.filedownload.f = fs.openSync(this.filedownload.path, 'rbN'); } catch (e) { this.write({ action: 'download', sub: 'cancel', id: this.filedownload.id }); delete this.filedownload; } if (this.filedownload) { this.write({ action: 'download', sub: 'start', id: cmd.id }); } - } else if ((this.filedownload != null) && (cmd.id == this.filedownload.id)) - { // Download commands + } else if ((this.filedownload != null) && (cmd.id == this.filedownload.id)) { // Download commands if (cmd.sub == 'startack') { sendNextBlock = ((typeof cmd.ack == 'number') ? cmd.ack : 8); } else if (cmd.sub == 'stop') { delete this.filedownload; } else if (cmd.sub == 'ack') { sendNextBlock = 1; } } // Send the next download block(s) - while (sendNextBlock > 0) - { + while (sendNextBlock > 0) { sendNextBlock--; var buf = Buffer.alloc(16384); var len = fs.readSync(this.filedownload.f, buf, 4, 16380, null); @@ -2645,8 +2301,7 @@ function onTunnelData(data) case 'uploaddone': { // Indicates that an upload is done - if (this.httprequest.uploadFile) - { + if (this.httprequest.uploadFile) { fs.closeSync(this.httprequest.uploadFile); this.write(Buffer.from(JSON.stringify({ action: 'uploaddone', reqid: this.httprequest.uploadFileid }))); // Indicate that we closed the file. delete this.httprequest.uploadFile; @@ -2658,8 +2313,7 @@ function onTunnelData(data) case 'uploadcancel': { // Indicates that an upload is canceled - if (this.httprequest.uploadFile) - { + if (this.httprequest.uploadFile) { fs.closeSync(this.httprequest.uploadFile); fs.unlinkSync(this.httprequest.uploadFilePath); this.write(Buffer.from(JSON.stringify({ action: 'uploadcancel', reqid: this.httprequest.uploadFileid }))); // Indicate that we closed the file. @@ -2672,8 +2326,7 @@ function onTunnelData(data) case 'copy': { // Copy a bunch of files from scpath to dspath - for (var i in cmd.names) - { + for (var i in cmd.names) { var sc = obj.path.join(cmd.scpath, cmd.names[i]), ds = obj.path.join(cmd.dspath, cmd.names[i]); MeshServerLogEx(51, [sc, ds], 'Copy: \"' + sc + '\" to \"' + ds + '\"', this.httprequest); if (sc != ds) { try { fs.copyFileSync(sc, ds); } catch (e) { } } @@ -2683,8 +2336,7 @@ function onTunnelData(data) case 'move': { // Move a bunch of files from scpath to dspath - for (var i in cmd.names) - { + for (var i in cmd.names) { var sc = obj.path.join(cmd.scpath, cmd.names[i]), ds = obj.path.join(cmd.dspath, cmd.names[i]); MeshServerLogEx(52, [sc, ds], 'Move: \"' + sc + '\" to \"' + ds + '\"', this.httprequest); if (sc != ds) { try { fs.copyFileSync(sc, ds); fs.unlinkSync(sc); } catch (e) { } } @@ -2707,8 +2359,7 @@ function onTunnelData(data) delete this.zipcancel; var out = require('fs').createWriteStream(ofile, { flags: 'wb' }); out.xws = this; - out.on('close', function () - { + out.on('close', function () { this.xws.write(Buffer.from(JSON.stringify({ action: 'dialogmessage', msg: null }))); this.xws.write(Buffer.from(JSON.stringify({ action: 'refresh' }))); if (this.xws.zipcancel === true) { fs.unlinkSync(this.xws.zipfile); } // Delete the complete file. @@ -2730,16 +2381,14 @@ function onTunnelData(data) // Unknown action, ignore it. break; } - } else if (this.httprequest.protocol == 7) - { // Plugin data exchange + } else if (this.httprequest.protocol == 7) { // Plugin data exchange var cmd = null; try { cmd = JSON.parse(data); } catch (e) { }; if (cmd == null) { return; } if ((cmd.ctrlChannel == '102938') || ((cmd.type == 'offer') && (cmd.sdp != null))) { onTunnelControlData(cmd, this); return; } // If this is control data, handle it now. if (cmd.action == undefined) return; - switch (cmd.action) - { + switch (cmd.action) { case 'plugin': { try { require(cmd.plugin).consoleaction(cmd, null, null, this); } catch (e) { throw e; } break; @@ -2755,21 +2404,15 @@ function onTunnelData(data) } // Delete a directory with a files and directories within it -function deleteFolderRecursive(path, rec) -{ +function deleteFolderRecursive(path, rec) { var count = 0; - if (fs.existsSync(path)) - { - if (rec == true) - { - fs.readdirSync(obj.path.join(path, '*')).forEach(function (file, index) - { + if (fs.existsSync(path)) { + if (rec == true) { + fs.readdirSync(obj.path.join(path, '*')).forEach(function (file, index) { var curPath = obj.path.join(path, file); - if (fs.statSync(curPath).isDirectory()) - { // recurse + if (fs.statSync(curPath).isDirectory()) { // recurse count += deleteFolderRecursive(curPath, true); - } else - { // delete file + } else { // delete file fs.unlinkSync(curPath); count++; } @@ -2782,13 +2425,11 @@ function deleteFolderRecursive(path, rec) } // Called when receiving control data on WebRTC -function onTunnelWebRTCControlData(data) -{ +function onTunnelWebRTCControlData(data) { if (typeof data != 'string') return; var obj; try { obj = JSON.parse(data); } catch (e) { sendConsoleText('Invalid control JSON on WebRTC: ' + data); return; } - if (obj.type == 'close') - { + if (obj.type == 'close') { //sendConsoleText('Tunnel #' + this.xrtc.websocket.tunnel.index + ' WebRTC control close'); try { this.close(); } catch (e) { } try { this.xrtc.close(); } catch (e) { } @@ -2796,8 +2437,7 @@ function onTunnelWebRTCControlData(data) } // Called when receiving control data on websocket -function onTunnelControlData(data, ws) -{ +function onTunnelControlData(data, ws) { var obj; if (ws == null) { ws = this; } if (typeof data == 'string') { try { obj = JSON.parse(data); } catch (e) { sendConsoleText('Invalid control JSON: ' + data); return; } } @@ -2805,16 +2445,12 @@ function onTunnelControlData(data, ws) //sendConsoleText('onTunnelControlData(' + ws.httprequest.protocol + '): ' + JSON.stringify(data)); //console.log('onTunnelControlData: ' + JSON.stringify(data)); - if (obj.action) - { - switch (obj.action) - { + if (obj.action) { + switch (obj.action) { case 'lock': { // Lock the current user out of the desktop - try - { - if (process.platform == 'win32') - { + try { + if (process.platform == 'win32') { MeshServerLogEx(53, null, "Locking remote user out of desktop", ws.httprequest); var child = require('child_process'); child.execFile(process.env['windir'] + '\\system32\\cmd.exe', ['/c', 'RunDll32.exe user32.dll,LockWorkStation'], { type: 1 }); @@ -2829,8 +2465,7 @@ function onTunnelControlData(data, ws) return; } - switch (obj.type) - { + switch (obj.type) { case 'options': { // These are additional connection options passed in the control channel. //sendConsoleText('options: ' + JSON.stringify(obj)); @@ -2850,13 +2485,11 @@ function onTunnelControlData(data, ws) } case 'termsize': { // Indicates a change in terminal size - if (process.platform == 'win32') - { + if (process.platform == 'win32') { if (ws.httprequest._dispatcher == null) return; //sendConsoleText('Win32-TermSize: ' + obj.cols + 'x' + obj.rows); if (ws.httprequest._dispatcher.invoke) { ws.httprequest._dispatcher.invoke('resizeTerminal', [obj.cols, obj.rows]); } - } else - { + } else { if (ws.httprequest.process == null || ws.httprequest.process.pty == 0) return; //sendConsoleText('Linux Resize: ' + obj.cols + 'x' + obj.rows); @@ -2865,23 +2498,18 @@ function onTunnelControlData(data, ws) break; } case 'webrtc0': { // Browser indicates we can start WebRTC switch-over. - if (ws.httprequest.protocol == 1) - { // Terminal + if (ws.httprequest.protocol == 1) { // Terminal // This is a terminal data stream, unpipe the terminal now and indicate to the other side that terminal data will no longer be received over WebSocket - if (process.platform == 'win32') - { + if (process.platform == 'win32') { ws.httprequest._term.unpipe(ws); - } else - { + } else { ws.httprequest.process.stdout.unpipe(ws); ws.httprequest.process.stderr.unpipe(ws); } - } else if (ws.httprequest.protocol == 2) - { // Desktop + } else if (ws.httprequest.protocol == 2) { // Desktop // This is a KVM data stream, unpipe the KVM now and indicate to the other side that KVM data will no longer be received over WebSocket ws.httprequest.desktop.kvm.unpipe(ws); - } else - { + } else { // Switch things around so all WebRTC data goes to onTunnelData(). ws.rtcchannel.httprequest = ws.httprequest; ws.rtcchannel.removeAllListeners('data'); @@ -2891,21 +2519,17 @@ function onTunnelControlData(data, ws) break; } case 'webrtc1': { - if ((ws.httprequest.protocol == 1) || (ws.httprequest.protocol == 6)) - { // Terminal + if ((ws.httprequest.protocol == 1) || (ws.httprequest.protocol == 6)) { // Terminal // Switch the user input from websocket to webrtc at this point. - if (process.platform == 'win32') - { + if (process.platform == 'win32') { ws.unpipe(ws.httprequest._term); ws.rtcchannel.pipe(ws.httprequest._term, { dataTypeSkip: 1 }); // 0 = Binary, 1 = Text. - } else - { + } else { ws.unpipe(ws.httprequest.process.stdin); ws.rtcchannel.pipe(ws.httprequest.process.stdin, { dataTypeSkip: 1 }); // 0 = Binary, 1 = Text. } ws.resume(); // Resume the websocket to keep receiving control data - } else if (ws.httprequest.protocol == 2) - { // Desktop + } else if (ws.httprequest.protocol == 2) { // Desktop // Switch the user input from websocket to webrtc at this point. ws.unpipe(ws.httprequest.desktop.kvm); try { ws.webrtc.rtcchannel.pipe(ws.httprequest.desktop.kvm, { dataTypeSkip: 1, end: false }); } catch (e) { sendConsoleText('EX2'); } // 0 = Binary, 1 = Text. @@ -2916,18 +2540,14 @@ function onTunnelControlData(data, ws) } case 'webrtc2': { // Other side received websocket end of data marker, start sending data on WebRTC channel - if ((ws.httprequest.protocol == 1) || (ws.httprequest.protocol == 6)) - { // Terminal - if (process.platform == 'win32') - { + if ((ws.httprequest.protocol == 1) || (ws.httprequest.protocol == 6)) { // Terminal + if (process.platform == 'win32') { ws.httprequest._term.pipe(ws.webrtc.rtcchannel, { dataTypeSkip: 1, end: false }); // 0 = Binary, 1 = Text. - } else - { + } else { ws.httprequest.process.stdout.pipe(ws.webrtc.rtcchannel, { dataTypeSkip: 1, end: false }); // 0 = Binary, 1 = Text. ws.httprequest.process.stderr.pipe(ws.webrtc.rtcchannel, { dataTypeSkip: 1, end: false }); // 0 = Binary, 1 = Text. } - } else if (ws.httprequest.protocol == 2) - { // Desktop + } else if (ws.httprequest.protocol == 2) { // Desktop ws.httprequest.desktop.kvm.pipe(ws.webrtc.rtcchannel, { dataTypeSkip: 1 }); // 0 = Binary, 1 = Text. } break; @@ -2939,8 +2559,7 @@ function onTunnelControlData(data, ws) ws.webrtc.websocket = ws; ws.webrtc.on('connected', function () { /*sendConsoleText('Tunnel #' + this.websocket.tunnel.index + ' WebRTC connected');*/ }); ws.webrtc.on('disconnected', function () { /*sendConsoleText('Tunnel #' + this.websocket.tunnel.index + ' WebRTC disconnected');*/ }); - ws.webrtc.on('dataChannel', function (rtcchannel) - { + ws.webrtc.on('dataChannel', function (rtcchannel) { //sendConsoleText('WebRTC Datachannel open, protocol: ' + this.websocket.httprequest.protocol); rtcchannel.maxFragmentSize = 32768; rtcchannel.xrtc = this; @@ -2948,14 +2567,11 @@ function onTunnelControlData(data, ws) this.rtcchannel = rtcchannel; this.websocket.rtcchannel = rtcchannel; this.websocket.rtcchannel.on('data', onTunnelWebRTCControlData); - this.websocket.rtcchannel.on('end', function () - { + this.websocket.rtcchannel.on('end', function () { // The WebRTC channel closed, unpipe the KVM now. This is also done when the web socket closes. //sendConsoleText('Tunnel #' + this.websocket.tunnel.index + ' WebRTC data channel closed'); - if (this.websocket.desktop && this.websocket.desktop.kvm) - { - try - { + if (this.websocket.desktop && this.websocket.desktop.kvm) { + try { this.unpipe(this.websocket.desktop.kvm); this.websocket.httprequest.desktop.kvm.unpipe(this); } @@ -2988,21 +2604,17 @@ var consoleWebSockets = {}; var consoleHttpRequest = null; // Console HTTP response -function consoleHttpResponse(response) -{ +function consoleHttpResponse(response) { response.data = function (data) { sendConsoleText(rstr2hex(buf2rstr(data)), this.sessionid); consoleHttpRequest = null; } response.close = function () { sendConsoleText('httprequest.response.close', this.sessionid); consoleHttpRequest = null; } } // Open a web browser to a specified URL on current user's desktop -function openUserDesktopUrl(url) -{ +function openUserDesktopUrl(url) { if ((url.toLowerCase().startsWith('http://') == false) && (url.toLowerCase().startsWith('https://') == false)) { return null; } var child = null; - try - { - switch (process.platform) - { + try { + switch (process.platform) { case 'win32': var user = require('user-sessions').getUsername(require('user-sessions').consoleUid()); child = require('child_process').execFile(process.env['windir'] + '\\system32\\cmd.exe', ['cmd']); @@ -3029,13 +2641,10 @@ function openUserDesktopUrl(url) } // Process a mesh agent console command -function processConsoleCommand(cmd, args, rights, sessionid) -{ - try - { +function processConsoleCommand(cmd, args, rights, sessionid) { + try { var response = null; - switch (cmd) - { + switch (cmd) { case 'help': { // Displays available commands var fin = '', f = '', availcommands = 'agentupdate,msh,timerinfo,coreinfo,coredump,service,fdsnapshot,fdcount,startupoptions,alert,agentsize,versions,help,info,osinfo,args,print,type,dbkeys,dbget,dbset,dbcompact,eval,parseuri,httpget,nwslist,plugin,wsconnect,wssend,wsclose,notify,ls,ps,kill,netinfo,location,power,wakeonlan,setdebug,smbios,rawsmbios,toast,lock,users,openurl,getscript,getclip,setclip,log,av,cpuinfo,sysinfo,apf,scanwifi,wallpaper,agentmsg'; if (process.platform == 'win32') { availcommands += ',safemode,wpfhwacceleration,uac'; } @@ -3045,8 +2654,7 @@ function processConsoleCommand(cmd, args, rights, sessionid) try { require('zip-reader'); availcommands += ',zip,unzip'; } catch (e) { } availcommands = availcommands.split(',').sort(); - while (availcommands.length > 0) - { + while (availcommands.length > 0) { if (f.length > 90) { fin += (f + ',\r\n'); f = ''; } f += (((f != '') ? ', ' : ' ') + availcommands.shift()); } @@ -3068,12 +2676,10 @@ function processConsoleCommand(cmd, args, rights, sessionid) response = require('ChainViewer').getTimerInfo(); break; case 'find': - if (args['_'].length <= 1) - { + if (args['_'].length <= 1) { response = "Proper usage:\r\n find root criteria [criteria2] [criteria n...]"; } - else - { + else { var root = args['_'][0]; var p = args['_'].slice(1); var r = require('file-search').find(root, p); @@ -3092,26 +2698,21 @@ function processConsoleCommand(cmd, args, rights, sessionid) break; } case 'agentmsg': { - if (args['_'].length == 0) - { + if (args['_'].length == 0) { response = "Proper usage:\r\n agentmsg add \"[message]\" [iconIndex]\r\n agentmsg remove [index]\r\n agentmsg list"; // Display usage - } else - { - if ((args['_'][0] == 'add') && (args['_'].length > 1)) - { + } else { + if ((args['_'][0] == 'add') && (args['_'].length > 1)) { var msgIndex = 1, iconIndex = 0; while (tunnelUserCount.msg[msgIndex] != null) { msgIndex++; } if (args['_'].length >= 3) { try { iconIndex = parseInt(args['_'][2]); } catch (e) { } } if (typeof iconIndex != 'number') { iconIndex = 0; } tunnelUserCount.msg[msgIndex] = { msg: args['_'][1], icon: iconIndex }; response = 'Agent message ' + msgIndex + ' added.'; - } else if ((args['_'][0] == 'remove') && (args['_'].length > 1)) - { + } else if ((args['_'][0] == 'remove') && (args['_'].length > 1)) { var msgIndex = 0; try { msgIndex = parseInt(args['_'][1]); } catch (x) { } if (tunnelUserCount.msg[msgIndex] == null) { response = "Message not found."; } else { delete tunnelUserCount.msg[msgIndex]; response = "Message removed."; } - } else if (args['_'][0] == 'list') - { + } else if (args['_'][0] == 'list') { response = JSON.stringify(tunnelUserCount.msg, null, 2); } try { mesh.SendCommand({ action: 'sessions', type: 'msg', value: tunnelUserCount.msg }); } catch (x) { } @@ -3126,13 +2727,10 @@ function processConsoleCommand(cmd, args, rights, sessionid) break; } case 'coredump': - if (args['_'].length != 1) - { + if (args['_'].length != 1) { response = "Proper usage: coredump on|off|status|clear"; // Display usage - } else - { - switch (args['_'][0].toLowerCase()) - { + } else { + switch (args['_'][0].toLowerCase()) { case 'on': process.coreDumpLocation = (process.platform == 'win32') ? (process.execPath.replace('.exe', '.dmp')) : (process.execPath + '.dmp'); response = 'coredump is now on'; @@ -3143,20 +2741,15 @@ function processConsoleCommand(cmd, args, rights, sessionid) break; case 'status': response = 'coredump is: ' + ((process.coreDumpLocation == null) ? 'off' : 'on'); - if (process.coreDumpLocation != null) - { - if (process.platform == 'win32') - { - if (fs.existsSync(process.coreDumpLocation)) - { + if (process.coreDumpLocation != null) { + if (process.platform == 'win32') { + if (fs.existsSync(process.coreDumpLocation)) { response += '\r\n CoreDump present at: ' + process.coreDumpLocation; response += '\r\n CoreDump Time: ' + new Date(fs.statSync(process.coreDumpLocation).mtime).getTime(); response += '\r\n Agent Time : ' + new Date(fs.statSync(process.execPath).mtime).getTime(); } - } else - { - if ((process.cwd() != '//') && fs.existsSync(process.cwd() + 'core')) - { + } else { + if ((process.cwd() != '//') && fs.existsSync(process.cwd() + 'core')) { response += '\r\n CoreDump present at: ' + process.cwd() + 'core'; response += '\r\n CoreDump Time: ' + new Date(fs.statSync(process.cwd() + 'core').mtime).getTime(); response += '\r\n Agent Time : ' + new Date(fs.statSync(process.execPath).mtime).getTime(); @@ -3175,33 +2768,26 @@ function processConsoleCommand(cmd, args, rights, sessionid) } break; case 'service': - if (args['_'].length != 1) - { + if (args['_'].length != 1) { response = "Proper usage: service status|restart"; // Display usage } - else - { + else { var svcname = process.platform == 'win32' ? 'Mesh Agent' : 'meshagent'; - try - { + try { svcname = require('MeshAgent').serviceName; } - catch (x) - { + catch (x) { } var s = require('service-manager').manager.getService(svcname); - switch (args['_'][0].toLowerCase()) - { + switch (args['_'][0].toLowerCase()) { case 'status': response = 'Service ' + (s.isRunning() ? (s.isMe() ? '[SELF]' : '[RUNNING]') : ('[NOT RUNNING]')); break; case 'restart': - if (s.isMe()) - { + if (s.isMe()) { s.restart(); } - else - { + else { response = 'Restarting another agent instance is not allowed'; } break; @@ -3213,11 +2799,9 @@ function processConsoleCommand(cmd, args, rights, sessionid) } break; case 'zip': - if (args['_'].length == 0) - { + if (args['_'].length == 0) { response = "Proper usage: zip (output file name), input1 [, input n]"; // Display usage - } else - { + } else { var p = args['_'].join(' ').split(','); var ofile = p.shift(); sendConsoleText('Writing ' + ofile + '...'); @@ -3230,19 +2814,16 @@ function processConsoleCommand(cmd, args, rights, sessionid) } break; case 'unzip': - if (args['_'].length == 0) - { + if (args['_'].length == 0) { response = "Proper usage: unzip input, destination"; // Display usage - } else - { + } else { var p = args['_'].join(' ').split(','); if (p.length != 2) { response = "Proper usage: unzip input, destination"; break; } // Display usage var prom = require('zip-reader').read(p[0]); prom._dest = p[1]; prom.self = this; prom.sessionid = sessionid; - prom.then(function (zipped) - { + prom.then(function (zipped) { sendConsoleText('Extracting to ' + this._dest + '...', this.sessionid); zipped.extractAll(this._dest).then(function () { sendConsoleText('finished unzipping', this.sessionid); }, function (e) { sendConsoleText('Error unzipping: ' + e, this.sessionid); }).parentPromise.sessionid = this.sessionid; }, function (e) { sendConsoleText('Error unzipping: ' + e, this.sessionid); }); @@ -3250,13 +2831,11 @@ function processConsoleCommand(cmd, args, rights, sessionid) break; case 'setbattery': // require('MeshAgent').SendCommand({ action: 'battery', state: 'dc', level: 55 }); - if ((args['_'].length > 0) && ((args['_'][0] == 'ac') || (args['_'][0] == 'dc'))) - { + if ((args['_'].length > 0) && ((args['_'][0] == 'ac') || (args['_'][0] == 'dc'))) { var b = { action: 'battery', state: args['_'][0] }; if (args['_'].length == 2) { b.level = parseInt(args['_'][1]); } require('MeshAgent').SendCommand(b); - } else - { + } else { require('MeshAgent').SendCommand({ action: 'battery' }); } break; @@ -3265,51 +2844,41 @@ function processConsoleCommand(cmd, args, rights, sessionid) break; case 'fdcount': require('DescriptorEvents').getDescriptorCount().then( - function (c) - { + function (c) { sendConsoleText('Descriptor Count: ' + c, this.sessionid); - }, function (e) - { + }, function (e) { sendConsoleText('Error fetching descriptor count: ' + e, this.sessionid); }).parentPromise.sessionid = sessionid; break; case 'uac': - if (process.platform != 'win32') - { + if (process.platform != 'win32') { response = 'Unknown command "uac", type "help" for list of avaialble commands.'; break; } - if (args['_'].length != 1) - { + if (args['_'].length != 1) { response = 'Proper usage: uac [get|interactive|secure]'; } - else - { - switch (args['_'][0].toUpperCase()) - { + else { + switch (args['_'][0].toUpperCase()) { case 'GET': var secd = require('win-registry').QueryKey(require('win-registry').HKEY.LocalMachine, 'Software\\Microsoft\\Windows\\CurrentVersion\\Policies\\System', 'PromptOnSecureDesktop'); response = "UAC mode: " + (secd == 0 ? "Interactive Desktop" : "Secure Desktop"); break; case 'INTERACTIVE': - try - { + try { require('win-registry').WriteKey(require('win-registry').HKEY.LocalMachine, 'Software\\Microsoft\\Windows\\CurrentVersion\\Policies\\System', 'PromptOnSecureDesktop', 0); response = 'UAC mode changed to: Interactive Desktop'; } - catch (e) - { + catch (e) { response = "Unable to change UAC Mode"; } break; case 'SECURE': - try - { + try { require('win-registry').WriteKey(require('win-registry').HKEY.LocalMachine, 'Software\\Microsoft\\Windows\\CurrentVersion\\Policies\\System', 'PromptOnSecureDesktop', 1); response = 'UAC mode changed to: Secure Desktop'; } - catch (e) - { + catch (e) { response = "Unable to change UAC Mode"; } break; @@ -3326,50 +2895,40 @@ function processConsoleCommand(cmd, args, rights, sessionid) response = JSON.stringify(require('MeshAgent').getStartupOptions()); break; case 'kvmmode': - if (require('MeshAgent').maxKvmTileSize == null) - { + if (require('MeshAgent').maxKvmTileSize == null) { response = "Unknown command \"kvmmode\", type \"help\" for list of avaialble commands."; } - else - { - if (require('MeshAgent').maxKvmTileSize == 0) - { + else { + if (require('MeshAgent').maxKvmTileSize == 0) { response = 'KVM Mode: Full JUMBO'; } - else - { + else { response = 'KVM Mode: ' + (require('MeshAgent').maxKvmTileSize <= 65500 ? 'NO JUMBO' : 'Partial JUMBO'); response += (', TileLimit: ' + (require('MeshAgent').maxKvmTileSize < 1024 ? (require('MeshAgent').maxKvmTileSize + ' bytes') : (Math.round(require('MeshAgent').maxKvmTileSize / 1024) + ' Kbytes'))); } } break; case 'alert': - if (args['_'].length == 0) - { + if (args['_'].length == 0) { response = "Proper usage: alert TITLE, CAPTION [, TIMEOUT]"; // Display usage } - else - { + else { var p = args['_'].join(' ').split(','); - if (p.length < 2) - { + if (p.length < 2) { response = "Proper usage: alert TITLE, CAPTION [, TIMEOUT]"; // Display usage } - else - { + else { this._alert = require('message-box').create(p[0], p[1], p.length == 3 ? parseInt(p[2]) : 9999, 1); } } break; case 'agentsize': var actualSize = Math.floor(require('fs').statSync(process.execPath).size / 1024); - if (process.platform == 'win32') - { + if (process.platform == 'win32') { // Check the Agent Uninstall MetaData for correctness, as the installer may have written an incorrect value var writtenSize = 0; try { writtenSize = require('win-registry').QueryKey(require('win-registry').HKEY.LocalMachine, 'Software\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\MeshCentralAgent', 'EstimatedSize'); } catch (e) { response = e; } - if (writtenSize != actualSize) - { + if (writtenSize != actualSize) { response = "Size updated from: " + writtenSize + " to: " + actualSize; try { require('win-registry').WriteKey(require('win-registry').HKEY.LocalMachine, 'Software\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\MeshCentralAgent', 'EstimatedSize', actualSize); } catch (e) { response = e; } } else @@ -3382,31 +2941,26 @@ function processConsoleCommand(cmd, args, rights, sessionid) break; case 'wpfhwacceleration': if (process.platform != 'win32') { throw ("wpfhwacceleration setting is only supported on Windows"); } - if (args['_'].length != 1) - { + if (args['_'].length != 1) { response = "Proper usage: wpfhwacceleration (ON|OFF|STATUS)"; // Display usage } - else - { + else { var reg = require('win-registry'); var uname = require('user-sessions').getUsername(require('user-sessions').consoleUid()); var key = reg.usernameToUserKey(uname); - switch (args['_'][0].toUpperCase()) - { + switch (args['_'][0].toUpperCase()) { default: response = "Proper usage: wpfhwacceleration (ON|OFF|STATUS|DEFAULT)"; // Display usage break; case 'ON': - try - { + try { reg.WriteKey(reg.HKEY.Users, key + '\\SOFTWARE\\Microsoft\\Avalon.Graphics', 'DisableHWAcceleration', 0); response = "OK"; } catch (e) { response = "FAILED"; } break; case 'OFF': - try - { + try { reg.WriteKey(reg.HKEY.Users, key + '\\SOFTWARE\\Microsoft\\Avalon.Graphics', 'DisableHWAcceleration', 1); response = 'OK'; } catch (e) { response = 'FAILED'; } @@ -3424,13 +2978,10 @@ function processConsoleCommand(cmd, args, rights, sessionid) } break; case 'tsid': - if (process.platform == 'win32') - { - if (args['_'].length != 1) - { + if (process.platform == 'win32') { + if (args['_'].length != 1) { response = "TSID: " + (require('MeshAgent')._tsid == null ? "console" : require('MeshAgent')._tsid); - } else - { + } else { var i = parseInt(args['_'][0]); require('MeshAgent')._tsid = (isNaN(i) ? null : i); response = "TSID set to: " + (require('MeshAgent')._tsid == null ? "console" : require('MeshAgent')._tsid); @@ -3439,15 +2990,12 @@ function processConsoleCommand(cmd, args, rights, sessionid) { response = "TSID command only supported on Windows"; } break; case 'activeusers': - if (process.platform == 'win32') - { + if (process.platform == 'win32') { var p = require('user-sessions').enumerateUsers(); p.sessionid = sessionid; - p.then(function (u) - { + p.then(function (u) { var v = []; - for (var i in u) - { + for (var i in u) { if (u[i].State == 'Active') { v.push({ tsid: i, type: u[i].StationName, user: u[i].Username, domain: u[i].Domain }); } } sendConsoleText(JSON.stringify(v, null, 1), this.sessionid); @@ -3456,44 +3004,35 @@ function processConsoleCommand(cmd, args, rights, sessionid) { response = "activeusers command only supported on Windows"; } break; case 'wallpaper': - if (process.platform != 'win32' && !(process.platform == 'linux' && require('linux-gnome-helpers').available)) - { + if (process.platform != 'win32' && !(process.platform == 'linux' && require('linux-gnome-helpers').available)) { response = "wallpaper command not supported on this platform"; } - else - { - if (args['_'].length != 1) - { + else { + if (args['_'].length != 1) { response = 'Proper usage: wallpaper (GET|TOGGLE)'; // Display usage } - else - { - switch (args['_'][0].toUpperCase()) - { + else { + switch (args['_'][0].toUpperCase()) { default: response = 'Proper usage: wallpaper (GET|TOGGLE)'; // Display usage break; case 'GET': case 'TOGGLE': - if (process.platform == 'win32') - { + if (process.platform == 'win32') { var id = require('user-sessions').getProcessOwnerName(process.pid).tsid == 0 ? 1 : 0; var child = require('child_process').execFile(process.execPath, [process.execPath.split('\\').pop(), '-b64exec', 'dmFyIFNQSV9HRVRERVNLV0FMTFBBUEVSID0gMHgwMDczOwp2YXIgU1BJX1NFVERFU0tXQUxMUEFQRVIgPSAweDAwMTQ7CnZhciBHTSA9IHJlcXVpcmUoJ19HZW5lcmljTWFyc2hhbCcpOwp2YXIgdXNlcjMyID0gR00uQ3JlYXRlTmF0aXZlUHJveHkoJ3VzZXIzMi5kbGwnKTsKdXNlcjMyLkNyZWF0ZU1ldGhvZCgnU3lzdGVtUGFyYW1ldGVyc0luZm9BJyk7CgppZiAocHJvY2Vzcy5hcmd2Lmxlbmd0aCA9PSAzKQp7CiAgICB2YXIgdiA9IEdNLkNyZWF0ZVZhcmlhYmxlKDEwMjQpOwogICAgdXNlcjMyLlN5c3RlbVBhcmFtZXRlcnNJbmZvQShTUElfR0VUREVTS1dBTExQQVBFUiwgdi5fc2l6ZSwgdiwgMCk7CiAgICBjb25zb2xlLmxvZyh2LlN0cmluZyk7CiAgICBwcm9jZXNzLmV4aXQoKTsKfQplbHNlCnsKICAgIHZhciBuYiA9IEdNLkNyZWF0ZVZhcmlhYmxlKHByb2Nlc3MuYXJndlszXSk7CiAgICB1c2VyMzIuU3lzdGVtUGFyYW1ldGVyc0luZm9BKFNQSV9TRVRERVNLV0FMTFBBUEVSLCBuYi5fc2l6ZSwgbmIsIDApOwogICAgcHJvY2Vzcy5leGl0KCk7Cn0='], { type: id }); child.stdout.str = ''; child.stdout.on('data', function (c) { this.str += c.toString(); }); child.stderr.on('data', function () { }); child.waitExit(); var current = child.stdout.str.trim(); - if (args['_'][0].toUpperCase() == 'GET') - { + if (args['_'][0].toUpperCase() == 'GET') { response = current; break; } - if (current != '') - { + if (current != '') { require('MeshAgent')._wallpaper = current; response = 'Wallpaper cleared'; - } else - { + } else { response = 'Wallpaper restored'; } child = require('child_process').execFile(process.execPath, [process.execPath.split('\\').pop(), '-b64exec', 'dmFyIFNQSV9HRVRERVNLV0FMTFBBUEVSID0gMHgwMDczOwp2YXIgU1BJX1NFVERFU0tXQUxMUEFQRVIgPSAweDAwMTQ7CnZhciBHTSA9IHJlcXVpcmUoJ19HZW5lcmljTWFyc2hhbCcpOwp2YXIgdXNlcjMyID0gR00uQ3JlYXRlTmF0aXZlUHJveHkoJ3VzZXIzMi5kbGwnKTsKdXNlcjMyLkNyZWF0ZU1ldGhvZCgnU3lzdGVtUGFyYW1ldGVyc0luZm9BJyk7CgppZiAocHJvY2Vzcy5hcmd2Lmxlbmd0aCA9PSAzKQp7CiAgICB2YXIgdiA9IEdNLkNyZWF0ZVZhcmlhYmxlKDEwMjQpOwogICAgdXNlcjMyLlN5c3RlbVBhcmFtZXRlcnNJbmZvQShTUElfR0VUREVTS1dBTExQQVBFUiwgdi5fc2l6ZSwgdiwgMCk7CiAgICBjb25zb2xlLmxvZyh2LlN0cmluZyk7CiAgICBwcm9jZXNzLmV4aXQoKTsKfQplbHNlCnsKICAgIHZhciBuYiA9IEdNLkNyZWF0ZVZhcmlhYmxlKHByb2Nlc3MuYXJndlszXSk7CiAgICB1c2VyMzIuU3lzdGVtUGFyYW1ldGVyc0luZm9BKFNQSV9TRVRERVNLV0FMTFBBUEVSLCBuYi5fc2l6ZSwgbmIsIDApOwogICAgcHJvY2Vzcy5leGl0KCk7Cn0=', current != '' ? '""' : require('MeshAgent')._wallpaper], { type: id }); @@ -3501,21 +3040,17 @@ function processConsoleCommand(cmd, args, rights, sessionid) child.stderr.on('data', function () { }); child.waitExit(); } - else - { + else { var id = require('user-sessions').consoleUid(); var current = require('linux-gnome-helpers').getDesktopWallpaper(id); - if (args['_'][0].toUpperCase() == 'GET') - { + if (args['_'][0].toUpperCase() == 'GET') { response = current; break; } - if (current != '/dev/null') - { + if (current != '/dev/null') { require('MeshAgent')._wallpaper = current; response = 'Wallpaper cleared'; - } else - { + } else { response = 'Wallpaper restored'; } require('linux-gnome-helpers').setDesktopWallpaper(id, current != '/dev/null' ? undefined : require('MeshAgent')._wallpaper); @@ -3526,29 +3061,22 @@ function processConsoleCommand(cmd, args, rights, sessionid) } break; case 'safemode': - if (process.platform != 'win32') - { + if (process.platform != 'win32') { response = 'safemode only supported on Windows Platforms' } - else - { - if (args['_'].length != 1) - { + else { + if (args['_'].length != 1) { response = 'Proper usage: safemode (ON|OFF|STATUS)'; // Display usage } - else - { + else { var svcname = process.platform == 'win32' ? 'Mesh Agent' : 'meshagent'; - try - { + try { svcname = require('MeshAgent').serviceName; } - catch (x) - { + catch (x) { } - switch (args['_'][0].toUpperCase()) - { + switch (args['_'][0].toUpperCase()) { default: response = 'Proper usage: safemode (ON|OFF|STATUS)'; // Display usage break; @@ -3561,10 +3089,8 @@ function processConsoleCommand(cmd, args, rights, sessionid) break; case 'STATUS': var nextboot = require('win-bcd').getKey('safeboot'); - if (nextboot) - { - switch (nextboot) - { + if (nextboot) { + switch (nextboot) { case 'Network': case 'network': nextboot = 'SAFE_MODE_NETWORK'; @@ -3580,32 +3106,30 @@ function processConsoleCommand(cmd, args, rights, sessionid) } } break; - /* - case 'border': - { - if ((args['_'].length == 1) && (args['_'][0] == 'on')) { - if (meshCoreObj.users.length > 0) { - obj.borderManager.Start(meshCoreObj.users[0]); - response = 'Border blinking is on.'; - } else { - response = 'Cannot turn on border blinking, no logged in users.'; - } - } else if ((args['_'].length == 1) && (args['_'][0] == 'off')) { - obj.borderManager.Stop(); - response = 'Border blinking is off.'; - } else { - response = 'Proper usage: border "on|off"'; // Display correct command usage - } - } - break; - */ - case 'av': - if (process.platform == 'win32') + /* + case 'border': { + if ((args['_'].length == 1) && (args['_'][0] == 'on')) { + if (meshCoreObj.users.length > 0) { + obj.borderManager.Start(meshCoreObj.users[0]); + response = 'Border blinking is on.'; + } else { + response = 'Cannot turn on border blinking, no logged in users.'; + } + } else if ((args['_'].length == 1) && (args['_'][0] == 'off')) { + obj.borderManager.Stop(); + response = 'Border blinking is off.'; + } else { + response = 'Proper usage: border "on|off"'; // Display correct command usage + } + } + break; + */ + case 'av': + if (process.platform == 'win32') { // Windows Command: "wmic /Namespace:\\root\SecurityCenter2 Path AntiVirusProduct get /FORMAT:CSV" response = JSON.stringify(require('win-info').av(), null, 1); - } else - { + } else { response = 'Not supported on the platform'; } break; @@ -3613,27 +3137,21 @@ function processConsoleCommand(cmd, args, rights, sessionid) if (args['_'].length != 1) { response = 'Proper usage: log "sample text"'; } else { MeshServerLog(args['_'][0]); response = 'ok'; } break; case 'getclip': - if (require('MeshAgent').isService) - { + if (require('MeshAgent').isService) { require('clipboard').dispatchRead().then(function (str) { sendConsoleText(str, sessionid); }); - } else - { + } else { require("clipboard").read().then(function (str) { sendConsoleText(str, sessionid); }); } break; case 'setclip': { - if (args['_'].length != 1) - { + if (args['_'].length != 1) { response = 'Proper usage: setclip "sample text"'; - } else - { - if (require('MeshAgent').isService) - { + } else { + if (require('MeshAgent').isService) { require('clipboard').dispatchWrite(args['_'][0]); response = 'Setting clipboard to: "' + args['_'][0] + '"'; } - else - { + else { require("clipboard")(args['_'][0]); response = 'Setting clipboard to: "' + args['_'][0] + '"'; } } @@ -3651,12 +3169,10 @@ function processConsoleCommand(cmd, args, rights, sessionid) } case 'toast': { if (args['_'].length < 1) { response = 'Proper usage: toast "message"'; } else { - if (require('MeshAgent')._tsid == null) - { + if (require('MeshAgent')._tsid == null) { require('toaster').Toast('MeshCentral', args['_'][0]).then(sendConsoleText, sendConsoleText); } - else - { + else { require('toaster').Toast('MeshCentral', args['_'][0], require('MeshAgent')._tsid).then(sendConsoleText, sendConsoleText); } } @@ -3668,8 +3184,7 @@ function processConsoleCommand(cmd, args, rights, sessionid) break; } case 'ps': { - processManager.getProcesses(function (plist) - { + processManager.getProcesses(function (plist) { var x = ''; for (var i in plist) { x += i + ((plist[i].user) ? (', ' + plist[i].user) : '') + ', ' + plist[i].cmd + '\r\n'; } sendConsoleText(x, sessionid); @@ -3677,11 +3192,9 @@ function processConsoleCommand(cmd, args, rights, sessionid) break; } case 'kill': { - if ((args['_'].length < 1)) - { + if ((args['_'].length < 1)) { response = 'Proper usage: kill [pid]'; // Display correct command usage - } else - { + } else { process.kill(parseInt(args['_'][0])); response = 'Killed process ' + args['_'][0] + '.'; } @@ -3694,13 +3207,10 @@ function processConsoleCommand(cmd, args, rights, sessionid) case 'rawsmbios': { if (SMBiosTablesRaw == null) { response = 'SMBios tables not available.'; } else { response = ''; - for (var i in SMBiosTablesRaw) - { + for (var i in SMBiosTablesRaw) { var header = false; - for (var j in SMBiosTablesRaw[i]) - { - if (SMBiosTablesRaw[i][j].length > 0) - { + for (var j in SMBiosTablesRaw[i]) { + if (SMBiosTablesRaw[i][j].length > 0) { if (header == false) { response += ('Table type #' + i + ((require('smbios').smTableTypes[i] == null) ? '' : (', ' + require('smbios').smTableTypes[i]))) + '\r\n'; header = true; } response += (' ' + SMBiosTablesRaw[i][j].toString('hex')) + '\r\n'; } @@ -3710,41 +3220,33 @@ function processConsoleCommand(cmd, args, rights, sessionid) break; } case 'eval': { // Eval JavaScript - if (args['_'].length < 1) - { + if (args['_'].length < 1) { response = 'Proper usage: eval "JavaScript code"'; // Display correct command usage - } else - { + } else { response = JSON.stringify(mesh.eval(args['_'][0])); // This can only be run by trusted administrator. } break; } case 'uninstallagent': // Uninstall this agent var agentName = process.platform == 'win32' ? 'Mesh Agent' : 'meshagent'; - try - { + try { agentName = require('MeshAgent').serviceName; } - catch (x) - { + catch (x) { } - if (!require('service-manager').manager.getService(agentName).isMe()) - { + if (!require('service-manager').manager.getService(agentName).isMe()) { response = 'Uininstall failed, this instance is not the service instance'; - } else - { + } else { try { diagnosticAgent_uninstall(); } catch (e) { } var js = "require('service-manager').manager.getService('" + agentName + "').stop(); require('service-manager').manager.uninstallService('" + agentName + "'); process.exit();"; this.child = require('child_process').execFile(process.execPath, [process.platform == 'win32' ? (process.execPath.split('\\').pop()) : (process.execPath.split('/').pop()), '-b64exec', Buffer.from(js).toString('base64')], { type: 4, detached: true }); } break; case 'notify': { // Send a notification message to the mesh - if (args['_'].length != 1) - { + if (args['_'].length != 1) { response = 'Proper usage: notify "message" [--session]'; // Display correct command usage - } else - { + } else { var notification = { action: 'msg', type: 'notify', value: args['_'][0], tag: 'console' }; if (args.session) { notification.sessionid = sessionid; } // If "--session" is specified, notify only this session, if not, the server will notify the mesh mesh.SendCommand(notification); // no sessionid or userid specified, notification will go to the entire mesh @@ -3756,23 +3258,20 @@ function processConsoleCommand(cmd, args, rights, sessionid) // CPU & memory utilization pr = require('sysinfo').cpuUtilization(); pr.sessionid = sessionid; - pr.then(function (data) - { + pr.then(function (data) { sendConsoleText(JSON.stringify( { cpu: data, memory: require('sysinfo').memUtilization(), thermals: require('sysinfo').thermals == null ? [] : require('sysinfo').thermals() }, null, 1), this.sessionid); - }, function (e) - { - sendConsoleText(e); - }); + }, function (e) { + sendConsoleText(e); + }); break; } case 'sysinfo': { // Return system information - getSystemInformation(function (results, err) - { + getSystemInformation(function (results, err) { if (results == null) { sendConsoleText(err, this.sessionid); } else { sendConsoleText(JSON.stringify(results, null, 1), this.sessionid); } @@ -3794,12 +3293,10 @@ function processConsoleCommand(cmd, args, rights, sessionid) case 'osinfo': { // Return the operating system information var i = 1; if (args['_'].length > 0) { i = parseInt(args['_'][0]); if (i > 8) { i = 8; } response = 'Calling ' + i + ' times.'; } - for (var j = 0; j < i; j++) - { + for (var j = 0; j < i; j++) { var pr = require('os').name(); pr.sessionid = sessionid; - pr.then(function (v) - { + pr.then(function (v) { sendConsoleText("OS: " + v + (process.platform == 'win32' ? (require('win-virtual-terminal').supported ? ' [ConPTY: YES]' : ' [ConPTY: NO]') : ''), this.sessionid); }); } @@ -3817,11 +3314,9 @@ function processConsoleCommand(cmd, args, rights, sessionid) break; } case 'type': { // Returns the content of a file - if (args['_'].length == 0) - { + if (args['_'].length == 0) { response = 'Proper usage: type (filepath) [maxlength]'; // Display correct command usage - } else - { + } else { var max = 4096; if ((args['_'].length > 1) && (typeof args['_'][1] == 'number')) { max = args['_'][1]; } if (max > 4096) max = 4096; @@ -3840,22 +3335,18 @@ function processConsoleCommand(cmd, args, rights, sessionid) } case 'dbget': { // Return the data store value for a given key if (db == null) { response = 'Database not accessible.'; break; } - if (args['_'].length != 1) - { + if (args['_'].length != 1) { response = 'Proper usage: dbget (key)'; // Display the value for a given database key - } else - { + } else { response = db.Get(args['_'][0]); } break; } case 'dbset': { // Set a data store key and value pair if (db == null) { response = 'Database not accessible.'; break; } - if (args['_'].length != 2) - { + if (args['_'].length != 2) { response = 'Proper usage: dbset (key) (value)'; // Set a database key - } else - { + } else { var r = db.Put(args['_'][0], args['_'][1]); response = 'Key set: ' + r; } @@ -3868,27 +3359,20 @@ function processConsoleCommand(cmd, args, rights, sessionid) break; } case 'httpget': { - if (consoleHttpRequest != null) - { + if (consoleHttpRequest != null) { response = 'HTTP operation already in progress.'; - } else - { - if (args['_'].length != 1) - { + } else { + if (args['_'].length != 1) { response = 'Proper usage: httpget (url)'; - } else - { + } else { var options = http.parseUri(args['_'][0]); options.method = 'GET'; - if (options == null) - { + if (options == null) { response = 'Invalid url.'; - } else - { + } else { try { consoleHttpRequest = http.request(options, consoleHttpResponse); } catch (e) { response = 'Invalid HTTP GET request'; } consoleHttpRequest.sessionid = sessionid; - if (consoleHttpRequest != null) - { + if (consoleHttpRequest != null) { consoleHttpRequest.end(); response = 'HTTPGET ' + options.protocol + '//' + options.host + ':' + options.port + options.path; } @@ -3899,8 +3383,7 @@ function processConsoleCommand(cmd, args, rights, sessionid) } case 'wslist': { // List all web sockets response = ''; - for (var i in consoleWebSockets) - { + for (var i in consoleWebSockets) { var httprequest = consoleWebSockets[i]; response += 'Websocket #' + i + ', ' + httprequest.url + '\r\n'; } @@ -3908,20 +3391,16 @@ function processConsoleCommand(cmd, args, rights, sessionid) break; } case 'wsconnect': { // Setup a web socket - if (args['_'].length == 0) - { + if (args['_'].length == 0) { response = 'Proper usage: wsconnect (url)\r\nFor example: wsconnect wss://localhost:443/meshrelay.ashx?id=abc'; // Display correct command usage - } else - { + } else { var httprequest = null; - try - { + try { var options = http.parseUri(args['_'][0].split('$').join('%24').split('@').join('%40')); // Escape the $ and @ characters in the URL options.rejectUnauthorized = 0; httprequest = http.request(options); } catch (e) { response = 'Invalid HTTP websocket request'; } - if (httprequest != null) - { + if (httprequest != null) { httprequest.upgrade = onWebSocketUpgrade; httprequest.on('error', function (e) { sendConsoleText("ERROR: Unable to connect to: " + this.url + ", " + JSON.stringify(e)); }); @@ -3937,43 +3416,34 @@ function processConsoleCommand(cmd, args, rights, sessionid) break; } case 'wssend': { // Send data on a web socket - if (args['_'].length == 0) - { + if (args['_'].length == 0) { response = 'Proper usage: wssend (socketnumber)\r\n'; // Display correct command usage - for (var i in consoleWebSockets) - { + for (var i in consoleWebSockets) { var httprequest = consoleWebSockets[i]; response += 'Websocket #' + i + ', ' + httprequest.url + '\r\n'; } - } else - { + } else { var i = parseInt(args['_'][0]); var httprequest = consoleWebSockets[i]; - if (httprequest != undefined) - { + if (httprequest != undefined) { httprequest.s.write(args['_'][1]); response = 'ok'; - } else - { + } else { response = 'Invalid web socket number'; } } break; } case 'wsclose': { // Close a websocket - if (args['_'].length == 0) - { + if (args['_'].length == 0) { response = 'Proper usage: wsclose (socketnumber)'; // Display correct command usage - } else - { + } else { var i = parseInt(args['_'][0]); var httprequest = consoleWebSockets[i]; - if (httprequest != undefined) - { + if (httprequest != undefined) { if (httprequest.s != null) { httprequest.s.end(); } else { httprequest.end(); } response = 'ok'; - } else - { + } else { response = 'Invalid web socket number'; } } @@ -3991,15 +3461,12 @@ function processConsoleCommand(cmd, args, rights, sessionid) if (args['_'].length > 0) { xpath = obj.path.join(args['_'][0], '*'); } response = 'List of ' + xpath + '\r\n'; var results = fs.readdirSync(xpath); - for (var i = 0; i < results.length; ++i) - { + for (var i = 0; i < results.length; ++i) { var stat = null, p = obj.path.join(args['_'][0], results[i]); try { stat = fs.statSync(p); } catch (e) { } - if ((stat == null) || (stat == undefined)) - { + if ((stat == null) || (stat == undefined)) { response += (results[i] + "\r\n"); - } else - { + } else { response += (results[i] + " " + ((stat.isDirectory()) ? "(Folder)" : "(File)") + "\r\n"); } } @@ -4015,16 +3482,13 @@ function processConsoleCommand(cmd, args, rights, sessionid) break; } case 'amt': { // Show Intel AMT status - if (amt != null) - { - amt.getMeiState(9, function (state) - { + if (amt != null) { + amt.getMeiState(9, function (state) { var resp = "Intel AMT not detected."; if (state != null) { resp = objToString(state, 0, ' ', true); } sendConsoleText(resp, sessionid); }); - } else - { + } else { response = "Intel AMT not detected."; } break; @@ -4035,11 +3499,9 @@ function processConsoleCommand(cmd, args, rights, sessionid) break; } case 'wakeonlan': { // Send wake-on-lan - if ((args['_'].length != 1) || (args['_'][0].length != 12)) - { + if ((args['_'].length != 1) || (args['_'][0].length != 12)) { response = 'Proper usage: wakeonlan [mac], for example "wakeonlan 010203040506".'; - } else - { + } else { var count = sendWakeOnLan(args['_'][0]); response = 'Sent wake-on-lan on ' + count + ' interface(s).'; } @@ -4050,16 +3512,12 @@ function processConsoleCommand(cmd, args, rights, sessionid) break; } case 'power': { // Execute a power action on this computer - if (mesh.ExecPowerState == undefined) - { + if (mesh.ExecPowerState == undefined) { response = 'Power command not supported on this agent.'; - } else - { - if ((args['_'].length == 0) || isNaN(Number(args['_'][0]))) - { + } else { + if ((args['_'].length == 0) || isNaN(Number(args['_'][0]))) { response = 'Proper usage: power (actionNumber), where actionNumber is:\r\n LOGOFF = 1\r\n SHUTDOWN = 2\r\n REBOOT = 3\r\n SLEEP = 4\r\n HIBERNATE = 5\r\n DISPLAYON = 6\r\n KEEPAWAKE = 7\r\n BEEP = 8\r\n CTRLALTDEL = 9\r\n VIBRATE = 13\r\n FLASH = 14'; // Display correct command usage - } else - { + } else { var r = mesh.ExecPowerState(Number(args['_'][0]), Number(args['_'][1])); response = 'Power action executed with return code: ' + r + '.'; } @@ -4067,8 +3525,7 @@ function processConsoleCommand(cmd, args, rights, sessionid) break; } case 'location': { - getIpLocationData(function (location) - { + getIpLocationData(function (location) { sendConsoleText(objToString({ action: 'iplocation', type: 'publicip', value: location }, 0, ' ')); }); break; @@ -4078,8 +3535,7 @@ function processConsoleCommand(cmd, args, rights, sessionid) break; } case 'scanwifi': { - if (wifiScanner != null) - { + if (wifiScanner != null) { var wifiPresent = wifiScanner.hasWireless; if (wifiPresent) { response = "Perfoming Wifi scan..."; wifiScanner.Scan(); } else { response = "Wifi absent."; } } else @@ -4096,51 +3552,40 @@ function processConsoleCommand(cmd, args, rights, sessionid) break; } case 'getscript': { - if (args['_'].length != 1) - { + if (args['_'].length != 1) { response = "Proper usage: getscript [scriptNumber]."; - } else - { + } else { mesh.SendCommand({ action: 'getScript', type: args['_'][0] }); } break; } case 'diagnostic': { - if (!mesh.DAIPC.listening) - { + if (!mesh.DAIPC.listening) { response = 'Unable to bind to Diagnostic IPC, most likely because the path (' + process.cwd() + ') is not on a local file system'; break; } var diag = diagnosticAgent_installCheck(); - if (diag) - { - if (args['_'].length == 1 && args['_'][0] == 'uninstall') - { + if (diag) { + if (args['_'].length == 1 && args['_'][0] == 'uninstall') { diagnosticAgent_uninstall(); response = 'Diagnostic Agent uninstalled'; } - else - { + else { response = 'Diagnostic Agent installed at: ' + diag.appLocation(); } } - else - { - if (args['_'].length == 1 && args['_'][0] == 'install') - { + else { + if (args['_'].length == 1 && args['_'][0] == 'install') { diag = diagnosticAgent_installCheck(true); - if (diag) - { + if (diag) { response = 'Diagnostic agent was installed at: ' + diag.appLocation(); } - else - { + else { response = 'Diagnostic agent installation failed'; } } - else - { + else { response = 'Diagnostic Agent Not installed. To install: diagnostic install'; } } @@ -4154,8 +3599,7 @@ function processConsoleCommand(cmd, args, rights, sessionid) case 'amtconfig': { if (amt == null) { response = "Intel AMT not detected."; break; } if (apftunnel != null) { response = "Intel AMT server tunnel already active"; break; } - amt.getMeiState(15, function (state) - { + amt.getMeiState(15, function (state) { var rx = ''; if ((state == null) || (state.ProvisioningState == null)) { rx = "Intel AMT not ready for configuration."; } else { var apfarg = { @@ -4169,19 +3613,15 @@ function processConsoleCommand(cmd, args, rights, sessionid) conntype: 2, // 0 = CIRA, 1 = Relay, 2 = LMS. The correct value is 2 since we are performing an LMS relay, other values for testing. meiState: state // MEI state will be passed to MPS server }; - if ((state.UUID == null) || (state.UUID.length != 36)) - { + if ((state.UUID == null) || (state.UUID.length != 36)) { rx = "Unable to get Intel AMT UUID"; - } else - { + } else { addAmtEvent('User LMS tunnel start.'); apftunnel = require('amt-apfclient')({ debug: false }, apfarg); - apftunnel.onJsonControl = function (data) - { + apftunnel.onJsonControl = function (data) { if (data.action == 'console') { addAmtEvent(data.msg); require('MeshAgent').SendCommand({ action: 'msg', type: 'console', value: data.msg }); } // Display a console message if (data.action == 'mestate') { amt.getMeiState(15, function (state) { apftunnel.updateMeiState(state); }); } // Update the MEI state - if (data.action == 'deactivate') - { // Request CCM deactivation + if (data.action == 'deactivate') { // Request CCM deactivation var amtMeiModule, amtMei; try { amtMeiModule = require('amt-mei'); amtMei = new amtMeiModule(); } catch (ex) { apftunnel.sendMeiDeactivationState(1); return; } amtMei.on('error', function (e) { apftunnel.sendMeiDeactivationState(1); }); @@ -4190,12 +3630,10 @@ function processConsoleCommand(cmd, args, rights, sessionid) if (data.action == 'close') { try { apftunnel.disconnect(); } catch (e) { } apftunnel = null; } // Close the CIRA-LMS connection } apftunnel.onChannelClosed = function () { addAmtEvent('User LMS tunnel closed.'); apftunnel = null; } - try - { + try { apftunnel.connect(); rx = "Started Intel AMT configuration"; - } catch (ex) - { + } catch (ex) { rx = JSON.stringify(ex); } } @@ -4205,17 +3643,14 @@ function processConsoleCommand(cmd, args, rights, sessionid) break; } case 'apf': { - if (meshCoreObj.intelamt !== null) - { - if (args['_'].length == 1) - { + if (meshCoreObj.intelamt !== null) { + if (args['_'].length == 1) { var connType = -1, connTypeStr = args['_'][0].toLowerCase(); if (connTypeStr == 'lms') { connType = 2; } if (connTypeStr == 'relay') { connType = 1; } if (connTypeStr == 'cira') { connType = 0; } if (connTypeStr == 'off') { connType = -2; } - if (connType >= 0) - { // Connect + if (connType >= 0) { // Connect var apfarg = { mpsurl: mesh.ServerUrl.replace('agent.ashx', 'apf.ashx'), mpsuser: Buffer.from(mesh.ServerInfo.MeshID, 'hex').toString('base64').substring(0, 16), @@ -4226,67 +3661,52 @@ function processConsoleCommand(cmd, args, rights, sessionid) clientuuid: meshCoreObj.intelamt.uuid, conntype: connType // 0 = CIRA, 1 = Relay, 2 = LMS. The correct value is 2 since we are performing an LMS relay, other values for testing. }; - if ((apfarg.clientuuid == null) || (apfarg.clientuuid.length != 36)) - { + if ((apfarg.clientuuid == null) || (apfarg.clientuuid.length != 36)) { response = "Unable to get Intel AMT UUID: " + apfarg.clientuuid; - } else - { + } else { apftunnel = require('amt-apfclient')({ debug: false }, apfarg); - apftunnel.onJsonControl = function (data) - { + apftunnel.onJsonControl = function (data) { if (data.action == 'console') { require('MeshAgent').SendCommand({ action: 'msg', type: 'console', value: data.msg }); } if (data.action == 'close') { try { apftunnel.disconnect(); } catch (e) { } apftunnel = null; } } apftunnel.onChannelClosed = function () { apftunnel = null; } - try - { + try { apftunnel.connect(); response = "Started APF tunnel"; - } catch (e) - { + } catch (e) { response = JSON.stringify(e); } } - } else if (connType == -2) - { // Disconnect - try - { + } else if (connType == -2) { // Disconnect + try { apftunnel.disconnect(); response = "Stopped APF tunnel"; - } catch (e) - { + } catch (e) { response = JSON.stringify(e); } apftunnel = null; - } else - { + } else { response = "Invalid command.\r\nUse: apf lms|relay|cira|off"; } - } else - { + } else { response = "APF tunnel is " + (apftunnel == null ? "off" : "on") + "\r\nUse: apf lms|relay|cira|off"; } - } else - { + } else { response = "APF tunnel requires Intel AMT"; } break; } case 'plugin': { - if (typeof args['_'][0] == 'string') - { - try - { + if (typeof args['_'][0] == 'string') { + try { // Pass off the action to the plugin // for plugin creators, you'll want to have a plugindir/modules_meshcore/plugin.js // to control the output / actions here. response = require(args['_'][0]).consoleaction(args, rights, sessionid, mesh); - } catch (e) - { + } catch (e) { response = "There was an error in the plugin (" + e + ")"; } - } else - { + } else { response = "Proper usage: plugin [pluginName] [args]."; } break; @@ -4301,18 +3721,15 @@ function processConsoleCommand(cmd, args, rights, sessionid) } // Send a mesh agent console command -function sendConsoleText(text, sessionid) -{ +function sendConsoleText(text, sessionid) { if (typeof text == 'object') { text = JSON.stringify(text); } if (debugConsole && ((sessionid == null) || (sessionid == 'pipe'))) { broadcastToRegisteredApps({ cmd: 'console', value: text }); } if (sessionid != 'pipe') { require('MeshAgent').SendCommand({ action: 'msg', type: 'console', value: text, sessionid: sessionid }); } } // Send a mesh agent message to server, placing a bubble/badge on the agent device -function sendAgentMessage(msg, icon) -{ - if (sendAgentMessage.messages == null) - { +function sendAgentMessage(msg, icon) { + if (sendAgentMessage.messages == null) { sendAgentMessage.messages = {}; sendAgentMessage.nextid = 1; } @@ -4320,48 +3737,38 @@ function sendAgentMessage(msg, icon) require('MeshAgent').SendCommand({ action: 'sessions', type: 'msg', value: sendAgentMessage.messages }); } -function linux_execv(name, agentfilename, sessionid) -{ +function linux_execv(name, agentfilename, sessionid) { var libs = require('monitor-info').getLibInfo('libc'); var libc = null; - while (libs.length > 0) - { - try - { + while (libs.length > 0) { + try { libc = require('_GenericMarshal').CreateNativeProxy(libs.pop().path); break; } - catch (e) - { + catch (e) { libc = null; continue; } } - if (libc != null) - { - try - { + if (libc != null) { + try { libc.CreateMethod('execv'); } - catch (e) - { + catch (e) { libc = null; } } - if (libc == null) - { + if (libc == null) { // Couldn't find libc.so, fallback to using service manager to restart agent if (sessionid != null) { sendConsoleText('Restarting service via service-manager...', sessionid) } - try - { + try { // restart service var s = require('service-manager').manager.getService(name); s.restart(); } - catch (zz) - { + catch (zz) { sendConsoleText('Self Update encountered an error trying to restart service', sessionid); sendAgentMessage('Self Update encountered an error trying to restart service', 3); } @@ -4375,18 +3782,15 @@ function linux_execv(name, agentfilename, sessionid) var argarr = []; var path = require('_GenericMarshal').CreateVariable(process.execPath); - if (require('MeshAgent').getStartupOptions != null) - { + if (require('MeshAgent').getStartupOptions != null) { var options = require('MeshAgent').getStartupOptions(); - for (i in options) - { + for (i in options) { argarr.push('--' + i + '="' + options[i] + '"'); } } args = require('_GenericMarshal').CreateVariable((1 + argarr.length) * require('_GenericMarshal').PointerSize); - for (i = 0; i < argarr.length; ++i) - { + for (i = 0; i < argarr.length; ++i) { var arg = require('_GenericMarshal').CreateVariable(argarr[i]); arg.pointerBuffer().copy(args.toBuffer(), i * require('_GenericMarshal').PointerSize); } @@ -4396,8 +3800,7 @@ function linux_execv(name, agentfilename, sessionid) sendAgentMessage('Self Update failed because execv() failed', 3); } -function bsd_execv(name, agentfilename, sessionid) -{ +function bsd_execv(name, agentfilename, sessionid) { var child = require('child_process').execFile('/bin/sh', ['sh']); child.stdout.str = ''; child.stdout.on('data', function (c) { this.str += c.toString(); }); child.stderr.str = ''; child.stderr.on('data', function (c) { this.str += c.toString(); }); @@ -4412,21 +3815,18 @@ function bsd_execv(name, agentfilename, sessionid) child.stdin.write(' }'); child.stdin.write("}'\nexit\n"); child.waitExit(); - if (child.stdout.str.trim() == '') - { + if (child.stdout.str.trim() == '') { if (sessionid != null) { sendConsoleText('Self Update failed because cannot find libc.so', sessionid) } sendAgentMessage('Self Update failed because cannot find libc.so', 3); return; } var libc = null; - try - { + try { libc = require('_GenericMarshal').CreateNativeProxy(child.stdout.str.trim()); libc.CreateMethod('execv'); } - catch (e) - { + catch (e) { if (sessionid != null) { sendConsoleText('Self Update failed: ' + e.toString(), sessionid) } sendAgentMessage('Self Update failed: ' + e.toString(), 3); return; @@ -4437,13 +3837,11 @@ function bsd_execv(name, agentfilename, sessionid) var argarr = []; var args; var options = require('MeshAgent').getStartupOptions(); - for (i in options) - { + for (i in options) { argarr.push('--' + i + '="' + options[i] + '"'); } args = require('_GenericMarshal').CreateVariable((1 + argarr.length) * require('_GenericMarshal').PointerSize); - for (i = 0; i < argarr.length; ++i) - { + for (i = 0; i < argarr.length; ++i) { var arg = require('_GenericMarshal').CreateVariable(argarr[i]); arg.pointerBuffer().copy(args.toBuffer(), i * require('_GenericMarshal').PointerSize); } @@ -4454,16 +3852,13 @@ function bsd_execv(name, agentfilename, sessionid) sendAgentMessage('Self Update failed because execv() failed', 3); } -function windows_execve(name, agentfilename, sessionid) -{ +function windows_execve(name, agentfilename, sessionid) { var libc; - try - { + try { libc = require('_GenericMarshal').CreateNativeProxy('msvcrt.dll'); libc.CreateMethod('_wexecve'); } - catch (xx) - { + catch (xx) { sendConsoleText('Self Update failed because msvcrt.dll is missing', sessionid); sendAgentMessage('Self Update failed because msvcrt.dll is missing', 3); return; @@ -4481,42 +3876,34 @@ function windows_execve(name, agentfilename, sessionid) } // Start a JavaScript based Agent Self-Update -function agentUpdate_Start(updateurl, updateoptions) -{ +function agentUpdate_Start(updateurl, updateoptions) { // If this value is null var sessionid = (updateoptions != null) ? updateoptions.sessionid : null; // If this is null, messages will be broadcast. Otherwise they will be unicasted - if (agentUpdate_Start._selfupdate != null) - { + if (agentUpdate_Start._selfupdate != null) { // We were already called, so we will ignore this duplicate request if (sessionid != null) { sendConsoleText('Self update already in progress...', sessionid); } } - else - { + else { if (agentUpdate_Start._retryCount == null) { agentUpdate_Start._retryCount = 0; } - if (require('MeshAgent').ARCHID == null && updateurl == null) - { + if (require('MeshAgent').ARCHID == null && updateurl == null) { // This agent doesn't have the ability to tell us which ARCHID it is, so we don't know which agent to pull sendConsoleText('Unable to initiate update, agent ARCHID is not defined', sessionid); } - else - { + else { var agentfilename = process.execPath.split(process.platform == 'win32' ? '\\' : '/').pop(); // Local File Name, ie: MeshAgent.exe var name = require('MeshAgent').serviceName; if (name == null) { name = process.platform == 'win32' ? 'Mesh Agent' : 'meshagent'; } // This is an older agent that doesn't expose the service name, so use the default - try - { + try { var s = require('service-manager').manager.getService(name); - if (!s.isMe()) - { + if (!s.isMe()) { if (process.platform == 'win32') { s.close(); } sendConsoleText('Self Update cannot continue, this agent is not an instance of (' + name + ')', sessionid); return; } if (process.platform == 'win32') { s.close(); } } - catch (zz) - { + catch (zz) { sendConsoleText('Self Update Failed because this agent is not an instance of (' + name + ')', sessionid); sendAgentMessage('Self Update Failed because this agent is not an instance of (' + name + ')', 3); return; @@ -4527,15 +3914,13 @@ function agentUpdate_Start(updateurl, updateoptions) options.protocol = 'https:'; if (updateurl == null) { options.path = ('/meshagents?id=' + require('MeshAgent').ARCHID); } options.rejectUnauthorized = false; - options.checkServerIdentity = function checkServerIdentity(certs) - { + options.checkServerIdentity = function checkServerIdentity(certs) { // If the tunnel certificate matches the control channel certificate, accept the connection try { if (require('MeshAgent').ServerInfo.ControlChannelCertificate.digest == certs[0].digest) return; } catch (ex) { } try { if (require('MeshAgent').ServerInfo.ControlChannelCertificate.fingerprint == certs[0].fingerprint) return; } catch (ex) { } // Check that the certificate is the one expected by the server, fail if not. - if (checkServerIdentity.servertlshash == null) - { + if (checkServerIdentity.servertlshash == null) { if (require('MeshAgent').ServerInfo == null || require('MeshAgent').ServerInfo.ControlChannelCertificate == null) { return; } sendConsoleText('Self Update failed, because the url cannot be verified', sessionid); @@ -4543,8 +3928,7 @@ function agentUpdate_Start(updateurl, updateoptions) throw new Error('BadCert'); } if (certs[0].digest == null) { return; } - if ((checkServerIdentity.servertlshash != null) && (checkServerIdentity.servertlshash.toLowerCase() != certs[0].digest.split(':').join('').toLowerCase())) - { + if ((checkServerIdentity.servertlshash != null) && (checkServerIdentity.servertlshash.toLowerCase() != certs[0].digest.split(':').join('').toLowerCase())) { sendConsoleText('Self Update failed, because the supplied certificate does not match', sessionid); sendAgentMessage('Self Update failed, because the supplied certificate does not match', 3); throw new Error('BadCert') @@ -4552,46 +3936,37 @@ function agentUpdate_Start(updateurl, updateoptions) } options.checkServerIdentity.servertlshash = (updateoptions != null ? updateoptions.tlshash : null); agentUpdate_Start._selfupdate = require('https').get(options); - agentUpdate_Start._selfupdate.on('error', function (e) - { + agentUpdate_Start._selfupdate.on('error', function (e) { sendConsoleText('Self Update failed, because there was a problem trying to download the update', sessionid); sendAgentMessage('Self Update failed, because there was a problem trying to download the update', 3); }); - agentUpdate_Start._selfupdate.on('response', function (img) - { + agentUpdate_Start._selfupdate.on('response', function (img) { this._file = require('fs').createWriteStream(agentfilename + '.update', { flags: 'wb' }); this._filehash = require('SHA384Stream').create(); - this._filehash.on('hash', function (h) - { - if (updateoptions != null && updateoptions.hash != null) - { - if (updateoptions.hash.toLowerCase() == h.toString('hex').toLowerCase()) - { + this._filehash.on('hash', function (h) { + if (updateoptions != null && updateoptions.hash != null) { + if (updateoptions.hash.toLowerCase() == h.toString('hex').toLowerCase()) { if (sessionid != null) { sendConsoleText('Download complete. HASH verified.', sessionid); } } - else - { + else { agentUpdate_Start._retryCount++; sendConsoleText('Self Update FAILED because the downloaded agent FAILED hash check (' + agentUpdate_Start._retryCount + ')', sessionid); sendAgentMessage('Self Update FAILED because the downloaded agent FAILED hash check (' + agentUpdate_Start._retryCount + ')', 3); agentUpdate_Start._selfupdate = null; - if (agentUpdate_Start._retryCount < 4) - { + if (agentUpdate_Start._retryCount < 4) { // Retry the download again sendConsoleText('Self Update will try again in 60 seconds...', sessionid); agentUpdate_Start._timeout = setTimeout(agentUpdate_Start, 60000, updateurl, updateoptions); } - else - { + else { sendConsoleText('Self Update giving up, too many failures...', sessionid); sendAgentMessage('Self Update giving up, too many failures...', 3); } return; } } - else - { + else { sendConsoleText('Download complete. HASH=' + h.toString('hex'), sessionid); } @@ -4599,13 +3974,11 @@ function agentUpdate_Start(updateurl, updateoptions) try { require('MeshAgent').SendCommand({ action: 'agentupdatedownloaded' }); } catch (e) { } if (sessionid != null) { sendConsoleText('Updating and restarting agent...', sessionid); } - if (process.platform == 'win32') - { + if (process.platform == 'win32') { // Use _wexecve() equivalent to perform the update windows_execve(name, agentfilename, sessionid); } - else - { + else { var m = require('fs').statSync(process.execPath).mode; require('fs').chmodSync(process.cwd() + agentfilename + '.update', m); @@ -4619,8 +3992,7 @@ function agentUpdate_Start(updateurl, updateoptions) // erase update require('fs').unlinkSync(process.cwd() + agentfilename + '.update'); - switch (process.platform) - { + switch (process.platform) { case 'freebsd': bsd_execv(name, agentfilename, sessionid); break; @@ -4628,14 +4000,12 @@ function agentUpdate_Start(updateurl, updateoptions) linux_execv(name, agentfilename, sessionid); break; default: - try - { + try { // restart service var s = require('service-manager').manager.getService(name); s.restart(); } - catch (zz) - { + catch (zz) { sendConsoleText('Self Update encountered an error trying to restart service', sessionid); sendAgentMessage('Self Update encountered an error trying to restart service', 3); } @@ -4657,16 +4027,13 @@ function agentUpdate_Start(updateurl, updateoptions) //process.exit = function (code) { console.log("Exit with code: " + code.toString()); } // Called when the server connection state changes -function handleServerConnection(state) -{ +function handleServerConnection(state) { meshServerConnectionState = state; - if (meshServerConnectionState == 0) - { + if (meshServerConnectionState == 0) { // Server disconnected if (selfInfoUpdateTimer != null) { clearInterval(selfInfoUpdateTimer); selfInfoUpdateTimer = null; } lastSelfInfo = null; - } else - { + } else { // Server connected, send mesh core information var oldNodeId = db.Get('OldNodeId'); if (oldNodeId != null) { mesh.SendCommand({ action: 'mc1migration', oldnodeid: oldNodeId }); } @@ -4677,15 +4044,13 @@ function handleServerConnection(state) // Update the server on with basic info, logged in users and more advanced stuff, like Intel ME and Network Settings meInfoStr = null; sendPeriodicServerUpdate(null, true); - if (selfInfoUpdateTimer == null) - { + if (selfInfoUpdateTimer == null) { selfInfoUpdateTimer = setInterval(sendPeriodicServerUpdate, 1200000); // 20 minutes selfInfoUpdateTimer.metadata = 'meshcore (InfoUpdate Timer)'; } // Send any state messages - if (Object.keys(tunnelUserCount.msg).length > 0) - { + if (Object.keys(tunnelUserCount.msg).length > 0) { try { mesh.SendCommand({ action: 'sessions', type: 'msg', value: tunnelUserCount.msg }); } catch (e) { } broadcastSessionsToRegisteredApps(); } @@ -4701,14 +4066,12 @@ function handleServerConnection(state) // Update the server with the latest network interface information var sendNetworkUpdateNagleTimer = null; function sendNetworkUpdateNagle() { if (sendNetworkUpdateNagleTimer != null) { clearTimeout(sendNetworkUpdateNagleTimer); sendNetworkUpdateNagleTimer = null; } sendNetworkUpdateNagleTimer = setTimeout(sendNetworkUpdate, 5000); } -function sendNetworkUpdate(force) -{ +function sendNetworkUpdate(force) { sendNetworkUpdateNagleTimer = null; // Update the network interfaces information data var netInfo = { netif2: require('os').networkInterfaces() }; - if (netInfo.netif2) - { + if (netInfo.netif2) { netInfo.action = 'netinfo'; var netInfoStr = JSON.stringify(netInfo); if ((force == true) || (clearGatewayMac(netInfoStr) != clearGatewayMac(lastNetworkInfo))) { mesh.SendCommand(netInfo); lastNetworkInfo = netInfoStr; } @@ -4716,17 +4079,14 @@ function sendNetworkUpdate(force) } // Called periodically to check if we need to send updates to the server -function sendPeriodicServerUpdate(flags, force) -{ +function sendPeriodicServerUpdate(flags, force) { if (meshServerConnectionState == 0) return; // Not connected to server, do nothing. if (!flags) { flags = 0xFFFFFFFF; } // If we have a connected MEI, get Intel ME information - if ((flags & 1) && (amt != null) && (amt.state == 2)) - { + if ((flags & 1) && (amt != null) && (amt.state == 2)) { delete meshCoreObj.intelamt; - amt.getMeiState(9, function (meinfo) - { + amt.getMeiState(9, function (meinfo) { meshCoreObj.intelamt = meinfo; meshCoreObj.intelamt.microlms = amt.lmsstate; meshCoreObjChanged(); @@ -4737,40 +4097,30 @@ function sendPeriodicServerUpdate(flags, force) if (flags & 2) { sendNetworkUpdateNagle(false); } // Update anti-virus information - if ((flags & 4) && (process.platform == 'win32')) - { + if ((flags & 4) && (process.platform == 'win32')) { // Windows Command: "wmic /Namespace:\\root\SecurityCenter2 Path AntiVirusProduct get /FORMAT:CSV" try { meshCoreObj.av = require('win-info').av(); meshCoreObjChanged(); } catch (e) { av = null; } // Antivirus //if (process.platform == 'win32') { try { meshCoreObj.pr = require('win-info').pendingReboot(); meshCoreObjChanged(); } catch (e) { meshCoreObj.pr = null; } } // Pending reboot } - if (process.platform == 'win32') - { - if (require('MeshAgent')._securitycenter == null) - { - try - { + if (process.platform == 'win32') { + if (require('MeshAgent')._securitycenter == null) { + try { require('MeshAgent')._securitycenter = require('win-securitycenter').status(); - meshCoreObj['windowsSecurityCenter'] = require('MeshAgent')._securitycenter; - require('win-securitycenter').on('changed', function () - { + meshCoreObj['wsc'] = require('MeshAgent')._securitycenter; // Windows Security Central (WSC) + require('win-securitycenter').on('changed', function () { require('MeshAgent')._securitycenter = require('win-securitycenter').status(); - meshCoreObj['windowsSecurityCenter'] = require('MeshAgent')._securitycenter; - require('MeshAgent').SendCommand({ action: 'coreinfo', windowsSecurityCenter: require('MeshAgent')._securitycenter }); + meshCoreObj['wsc'] = require('MeshAgent')._securitycenter; // Windows Security Central (WSC) + require('MeshAgent').SendCommand({ action: 'coreinfo', wsc: require('MeshAgent')._securitycenter }); }); - } - catch (e) - { - } + } catch (e) { } } } // Send available data right now - if (force) - { + if (force) { meshCoreObj = sortObjRec(meshCoreObj); var x = JSON.stringify(meshCoreObj); - if (x != LastPeriodicServerUpdate) - { + if (x != LastPeriodicServerUpdate) { LastPeriodicServerUpdate = x; mesh.SendCommand(meshCoreObj); } @@ -4780,20 +4130,16 @@ function sendPeriodicServerUpdate(flags, force) // Once we are done collecting all the data, send to server if needed var LastPeriodicServerUpdate = null; var PeriodicServerUpdateNagleTimer = null; -function meshCoreObjChanged() -{ - if (PeriodicServerUpdateNagleTimer == null) - { +function meshCoreObjChanged() { + if (PeriodicServerUpdateNagleTimer == null) { PeriodicServerUpdateNagleTimer = setTimeout(meshCoreObjChangedEx, 500); } } -function meshCoreObjChangedEx() -{ +function meshCoreObjChangedEx() { PeriodicServerUpdateNagleTimer = null; meshCoreObj = sortObjRec(meshCoreObj); var x = JSON.stringify(meshCoreObj); - if (x != LastPeriodicServerUpdate) - { + if (x != LastPeriodicServerUpdate) { try { LastPeriodicServerUpdate = x; mesh.SendCommand(meshCoreObj); } catch (ex) { } } } @@ -4805,8 +4151,7 @@ function onWebSocketClosed() { sendConsoleText("WebSocket #" + this.httprequest. function onWebSocketData(data) { sendConsoleText("Got WebSocket #" + this.httprequest.index + " data: " + data, this.httprequest.sessionid); } function onWebSocketSendOk() { sendConsoleText("WebSocket #" + this.index + " SendOK.", this.sessionid); } -function onWebSocketUpgrade(response, s, head) -{ +function onWebSocketUpgrade(response, s, head) { sendConsoleText("WebSocket #" + this.index + " connected.", this.sessionid); this.s = s; s.httprequest = this; diff --git a/meshagent.js b/meshagent.js index 9e3b3ed8..5bde7e0f 100644 --- a/meshagent.js +++ b/meshagent.js @@ -1576,9 +1576,13 @@ module.exports.CreateMeshAgent = function (parent, db, ws, req, args, domain) { } if ((command.intelamt.UUID != null) && (typeof command.intelamt.UUID == 'string') && (device.intelamt.uuid != command.intelamt.UUID)) { changes.push('AMT uuid'); device.intelamt.uuid = command.intelamt.UUID; change = 1; log = 1; } } - if (command.av) { + if (command.av != null) { // Antivirus if (!device.av) { device.av = []; } - if ((command.av != null) && (JSON.stringify(device.av) != JSON.stringify(command.av))) { /*changes.push('AV status');*/ device.av = command.av; change = 1; log = 1; } + if (JSON.stringify(device.av) != JSON.stringify(command.av)) { /*changes.push('AV status');*/ device.av = command.av; change = 1; log = 1; } + } + if (command.wsc != null) { // Windows Security Center + if (!device.wsc) { device.wsc = {}; } + if (JSON.stringify(device.wsc) != JSON.stringify(command.wsc)) { /*changes.push('Windows Security Center status');*/ device.wsc = command.wsc; change = 1; log = 1; } } if ((command.users != null) && (Array.isArray(command.users)) && (device.users != command.users)) { device.users = command.users; change = 1; } // Don't save this to the db. diff --git a/translate/translate.json b/translate/translate.json index 01be168a..78d232f1 100644 --- a/translate/translate.json +++ b/translate/translate.json @@ -17,8 +17,8 @@ "zh-chs": " + CIRA", "zh-cht": " + CIRA", "xloc": [ - "default.handlebars->31->1430", - "default.handlebars->31->1432" + "default.handlebars->31->1443", + "default.handlebars->31->1445" ] }, { @@ -204,7 +204,7 @@ "zh-chs": " 可以使用密码提示,但不建议使用。", "zh-cht": " 可以使用密碼提示,但不建議使用。", "xloc": [ - "default.handlebars->31->1343" + "default.handlebars->31->1356" ] }, { @@ -224,8 +224,8 @@ "zh-chs": " 用户需要先登录到该服务器一次,然后才能将其添加到设备组。", "zh-cht": " 用戶需要先登入到該伺服器一次,然後才能將其新增到裝置群。", "xloc": [ - "default.handlebars->31->1507", - "default.handlebars->31->1971" + "default.handlebars->31->1520", + "default.handlebars->31->1984" ] }, { @@ -432,7 +432,7 @@ "zh-chs": "* 8个字符,1个大写,1个小写,1个数字,1个非字母数字。", "zh-cht": "* 8個字符,1個大寫,1個小寫,1個數字,1個非字母數字。", "xloc": [ - "default.handlebars->31->1476", + "default.handlebars->31->1489", "default.handlebars->31->323" ] }, @@ -507,8 +507,8 @@ "zh-chs": ",", "zh-cht": ",", "xloc": [ - "default-mobile.handlebars->11->515", - "default.handlebars->31->1577" + "default-mobile.handlebars->11->532", + "default.handlebars->31->1590" ] }, { @@ -549,7 +549,7 @@ "zh-chs": ",MQTT在线", "zh-cht": ",MQTT在線", "xloc": [ - "default.handlebars->31->1084" + "default.handlebars->31->1097" ] }, { @@ -557,7 +557,7 @@ "fr": ", Pas de consentement", "nl": ", Geen toestemming", "xloc": [ - "default.handlebars->31->697" + "default.handlebars->31->710" ] }, { @@ -577,7 +577,7 @@ "zh-chs": ",提示同意", "zh-cht": ",提示同意", "xloc": [ - "default.handlebars->31->698" + "default.handlebars->31->711" ] }, { @@ -597,7 +597,7 @@ "zh-chs": ",软体KVM", "zh-cht": ",軟體KVM", "xloc": [ - "default.handlebars->31->870", + "default.handlebars->31->883", "desktop.handlebars->3->12" ] }, @@ -606,14 +606,14 @@ "fr": ", barre d'outils", "nl": ", Werkbalk", "xloc": [ - "default.handlebars->31->699" + "default.handlebars->31->712" ] }, { "en": ", View only", "nl": ", Alleen kijken", "xloc": [ - "default.handlebars->31->696" + "default.handlebars->31->709" ] }, { @@ -635,9 +635,9 @@ "xloc": [ "default-mobile.handlebars->11->314", "default-mobile.handlebars->11->347", - "default.handlebars->31->877", - "default.handlebars->31->936", - "default.handlebars->31->948", + "default.handlebars->31->890", + "default.handlebars->31->949", + "default.handlebars->31->961", "desktop.handlebars->3->19", "terminal.handlebars->3->9", "xterm.handlebars->9->6" @@ -760,7 +760,7 @@ "zh-chs": ",{0}观看", "zh-cht": ",{0}觀看", "xloc": [ - "default.handlebars->31->871", + "default.handlebars->31->884", "desktop.handlebars->3->13" ] }, @@ -825,9 +825,9 @@ "xloc": [ "default-mobile.handlebars->11->119", "default-mobile.handlebars->11->349", - "default.handlebars->31->1618", - "default.handlebars->31->2130", - "default.handlebars->31->954" + "default.handlebars->31->1631", + "default.handlebars->31->2143", + "default.handlebars->31->967" ] }, { @@ -884,7 +884,7 @@ "zh-chs": "1个活跃时段", "zh-cht": "1個活躍時段", "xloc": [ - "default.handlebars->31->2042" + "default.handlebars->31->2055" ] }, { @@ -905,8 +905,8 @@ "zh-cht": "1個位元組", "xloc": [ "default-mobile.handlebars->11->129", - "default-mobile.handlebars->11->558", - "default.handlebars->31->1642", + "default-mobile.handlebars->11->575", + "default.handlebars->31->1655", "download.handlebars->3->1", "download2.handlebars->5->1" ] @@ -928,7 +928,7 @@ "zh-chs": "1条连接", "zh-cht": "1位聯絡文", "xloc": [ - "default.handlebars->31->873", + "default.handlebars->31->886", "desktop.handlebars->3->15" ] }, @@ -971,7 +971,7 @@ "zh-chs": "1组", "zh-cht": "1群", "xloc": [ - "default.handlebars->31->2005" + "default.handlebars->31->2018" ] }, { @@ -1013,7 +1013,7 @@ "zh-chs": "1分钟", "zh-cht": "1分鐘", "xloc": [ - "default.handlebars->31->753" + "default.handlebars->31->766" ] }, { @@ -1075,7 +1075,7 @@ "zh-chs": "有1个用户没有显示,请使用搜索框查找用户...", "zh-cht": "有1個用戶沒有顯示,請使用搜尋框搜尋用戶...", "xloc": [ - "default.handlebars->31->1795" + "default.handlebars->31->1808" ] }, { @@ -1141,7 +1141,7 @@ "default-mobile.handlebars->11->183", "default-mobile.handlebars->11->186", "default-mobile.handlebars->11->189", - "default.handlebars->31->1799", + "default.handlebars->31->1812", "default.handlebars->31->268", "default.handlebars->31->271", "default.handlebars->31->274", @@ -1273,7 +1273,7 @@ "zh-chs": "10分钟", "zh-cht": "10分鐘", "xloc": [ - "default.handlebars->31->755" + "default.handlebars->31->768" ] }, { @@ -1356,7 +1356,7 @@ "zh-chs": "12小时", "zh-cht": "12小時", "xloc": [ - "default.handlebars->31->763" + "default.handlebars->31->776" ] }, { @@ -1398,7 +1398,7 @@ "zh-chs": "15分钟", "zh-cht": "15分鐘", "xloc": [ - "default.handlebars->31->756" + "default.handlebars->31->769" ] }, { @@ -1418,7 +1418,7 @@ "zh-chs": "16小时", "zh-cht": "16小時", "xloc": [ - "default.handlebars->31->764" + "default.handlebars->31->777" ] }, { @@ -1438,7 +1438,7 @@ "zh-chs": "2天", "zh-cht": "2天", "xloc": [ - "default.handlebars->31->766" + "default.handlebars->31->779" ] }, { @@ -1458,7 +1458,7 @@ "zh-chs": "2小时", "zh-cht": "2小時", "xloc": [ - "default.handlebars->31->760" + "default.handlebars->31->773" ] }, { @@ -1562,7 +1562,7 @@ "zh-chs": "24小时", "zh-cht": "24小時", "xloc": [ - "default.handlebars->31->765" + "default.handlebars->31->778" ] }, { @@ -1624,7 +1624,7 @@ "zh-chs": "2FA备份代码已清除", "zh-cht": "2FA備份代碼已清除", "xloc": [ - "default.handlebars->31->1753" + "default.handlebars->31->1766" ] }, { @@ -1644,8 +1644,8 @@ "zh-chs": "启用第二因素身份验证", "zh-cht": "啟用第二因素身份驗證", "xloc": [ - "default.handlebars->31->1812", - "default.handlebars->31->2027" + "default.handlebars->31->1825", + "default.handlebars->31->2040" ] }, { @@ -1764,7 +1764,7 @@ "zh-chs": "30分钟", "zh-cht": "30分鐘", "xloc": [ - "default.handlebars->31->757" + "default.handlebars->31->770" ] }, { @@ -1827,7 +1827,7 @@ "zh-chs": "4天", "zh-cht": "4天", "xloc": [ - "default.handlebars->31->767" + "default.handlebars->31->780" ] }, { @@ -1847,7 +1847,7 @@ "zh-chs": "4个小时", "zh-cht": "4個小時", "xloc": [ - "default.handlebars->31->761" + "default.handlebars->31->774" ] }, { @@ -1930,7 +1930,7 @@ "zh-chs": "45分钟", "zh-cht": "45分鐘", "xloc": [ - "default.handlebars->31->758" + "default.handlebars->31->771" ] }, { @@ -1970,7 +1970,7 @@ "zh-chs": "5分钟", "zh-cht": "5分鐘", "xloc": [ - "default.handlebars->31->754" + "default.handlebars->31->767" ] }, { @@ -2096,7 +2096,7 @@ "zh-chs": "60分钟", "zh-cht": "60分鐘", "xloc": [ - "default.handlebars->31->759" + "default.handlebars->31->772" ] }, { @@ -2216,7 +2216,7 @@ "zh-chs": "7天电源状态", "zh-cht": "7天電源狀態", "xloc": [ - "default.handlebars->31->798" + "default.handlebars->31->811" ] }, { @@ -2281,7 +2281,7 @@ "xloc": [ "default.handlebars->31->347", "default.handlebars->31->361", - "default.handlebars->31->762" + "default.handlebars->31->775" ] }, { @@ -2513,7 +2513,7 @@ "zh-cht": "ACM", "xloc": [ "default-mobile.handlebars->11->247", - "default.handlebars->31->1446", + "default.handlebars->31->1459", "default.handlebars->31->588" ] }, @@ -2677,6 +2677,15 @@ "default.handlebars->31->39" ] }, + { + "en": "AV", + "xloc": [ + "default-mobile.handlebars->11->385", + "default-mobile.handlebars->11->387", + "default.handlebars->31->607", + "default.handlebars->31->609" + ] + }, { "cs": "Přístup odepřen", "de": "Zugriff verweigert", @@ -2694,7 +2703,7 @@ "zh-chs": "拒绝访问", "zh-cht": "拒絕存取", "xloc": [ - "default.handlebars->31->1085" + "default.handlebars->31->1098" ] }, { @@ -2736,7 +2745,7 @@ "zh-chs": "访问服务器档案", "zh-cht": "存取伺服器檔案", "xloc": [ - "default.handlebars->31->1977" + "default.handlebars->31->1990" ] }, { @@ -2825,9 +2834,9 @@ "default-mobile.handlebars->11->222", "default-mobile.handlebars->11->224", "default-mobile.handlebars->container->page_content->column_l->p3->p3info->1->p3AccountActions->p2AccountSecurity->1->0", - "default.handlebars->31->1352", - "default.handlebars->31->1354", - "default.handlebars->31->2244", + "default.handlebars->31->1365", + "default.handlebars->31->1367", + "default.handlebars->31->2257", "default.handlebars->31->557", "default.handlebars->31->559" ] @@ -2837,8 +2846,8 @@ "nl": "Account instellingen", "fr": "Paramètres du compte", "xloc": [ - "default-mobile.handlebars->11->526", - "default.handlebars->31->2138" + "default-mobile.handlebars->11->543", + "default.handlebars->31->2151" ] }, { @@ -2899,7 +2908,7 @@ "zh-chs": "帐户已更改:{0}", "zh-cht": "帳戶已更改:{0}", "xloc": [ - "default.handlebars->31->1726" + "default.handlebars->31->1739" ] }, { @@ -2919,7 +2928,7 @@ "zh-chs": "创建帐户,电子邮件为{0}", "zh-cht": "創建帳戶,電子郵件為{0}", "xloc": [ - "default.handlebars->31->1725" + "default.handlebars->31->1738" ] }, { @@ -2939,7 +2948,7 @@ "zh-chs": "创建帐户,用户名是{0}", "zh-cht": "帳戶已創建,用戶名是{0}", "xloc": [ - "default.handlebars->31->1724" + "default.handlebars->31->1737" ] }, { @@ -2959,8 +2968,8 @@ "zh-chs": "帐户已被锁定", "zh-cht": "帳戶已被鎖定", "xloc": [ - "default.handlebars->31->1814", - "default.handlebars->31->1974" + "default.handlebars->31->1827", + "default.handlebars->31->1987" ] }, { @@ -2980,8 +2989,8 @@ "zh-chs": "达到帐户限制。", "zh-cht": "達到帳戶限制。", "xloc": [ - "default-mobile.handlebars->11->538", - "default.handlebars->31->2150", + "default-mobile.handlebars->11->555", + "default.handlebars->31->2163", "login-mobile.handlebars->5->6", "login.handlebars->5->6", "login2.handlebars->7->7" @@ -3026,7 +3035,7 @@ "zh-chs": "帐号登录", "zh-cht": "帳號登錄", "xloc": [ - "default.handlebars->31->1661" + "default.handlebars->31->1674" ] }, { @@ -3046,7 +3055,7 @@ "zh-chs": "帐户登出", "zh-cht": "帳戶登出", "xloc": [ - "default.handlebars->31->1662" + "default.handlebars->31->1675" ] }, { @@ -3088,7 +3097,7 @@ "zh-chs": "帐户密码已更改:{0}", "zh-cht": "帳戶密碼已更改:{0}", "xloc": [ - "default.handlebars->31->1734" + "default.handlebars->31->1747" ] }, { @@ -3108,7 +3117,7 @@ "zh-chs": "帐户已删除", "zh-cht": "帳戶已刪除", "xloc": [ - "default.handlebars->31->1723" + "default.handlebars->31->1736" ] }, { @@ -3148,7 +3157,7 @@ "zh-chs": "指令", "zh-cht": "指令", "xloc": [ - "default.handlebars->31->1090", + "default.handlebars->31->1103", "default.handlebars->container->column_l->p42->p42tbl->1->0->8" ] }, @@ -3169,8 +3178,8 @@ "zh-chs": "动作档案", "zh-cht": "動作檔案", "xloc": [ - "default.handlebars->31->844", - "default.handlebars->31->846" + "default.handlebars->31->857", + "default.handlebars->31->859" ] }, { @@ -3193,7 +3202,7 @@ "default-mobile.handlebars->11->270", "default-mobile.handlebars->container->page_content->column_l->p10->p10desktop->deskarea4->1->3", "default-mobile.handlebars->container->page_content->column_l->p10->p10files->p13toolbar->1->0->1->1", - "default.handlebars->31->637", + "default.handlebars->31->650", "default.handlebars->container->column_l->p11->deskarea0->deskarea1->1", "default.handlebars->container->column_l->p12->termTable->1->1->0->1->1", "default.handlebars->container->column_l->p13->p13toolbar->1->0->1->1" @@ -3276,7 +3285,7 @@ "zh-chs": "如果ACM失败,则激活到CCM", "zh-cht": "如果ACM失敗,則激活到CCM", "xloc": [ - "default.handlebars->31->1467" + "default.handlebars->31->1480" ] }, { @@ -3298,8 +3307,8 @@ "xloc": [ "default-mobile.handlebars->11->242", "default-mobile.handlebars->11->244", - "default-mobile.handlebars->11->418", - "default.handlebars->31->1046", + "default-mobile.handlebars->11->435", + "default.handlebars->31->1059", "default.handlebars->31->581", "default.handlebars->31->583" ] @@ -3341,7 +3350,7 @@ "zh-chs": "主动设备共享", "zh-cht": "主動設備共享", "xloc": [ - "default.handlebars->31->690" + "default.handlebars->31->703" ] }, { @@ -3367,7 +3376,7 @@ "nl": "Toevoegen", "xloc": [ "default-mobile.handlebars->11->340", - "default.handlebars->31->907" + "default.handlebars->31->920" ] }, { @@ -3387,7 +3396,7 @@ "zh-chs": "添加代理", "zh-cht": "新增代理", "xloc": [ - "default.handlebars->31->1442", + "default.handlebars->31->1455", "default.handlebars->31->301" ] }, @@ -3425,8 +3434,8 @@ "zh-chs": "添加设备", "zh-cht": "新增裝置", "xloc": [ - "default.handlebars->31->1951", - "default.handlebars->31->2077" + "default.handlebars->31->1964", + "default.handlebars->31->2090" ] }, { @@ -3446,7 +3455,7 @@ "zh-chs": "添加设备日志", "zh-cht": "新增裝置日誌", "xloc": [ - "default.handlebars->31->739" + "default.handlebars->31->752" ] }, { @@ -3466,9 +3475,9 @@ "zh-chs": "添加设备组", "zh-cht": "新增裝置群", "xloc": [ - "default.handlebars->31->1541", - "default.handlebars->31->1945", - "default.handlebars->31->2065", + "default.handlebars->31->1554", + "default.handlebars->31->1958", + "default.handlebars->31->2078", "default.handlebars->31->238" ] }, @@ -3489,7 +3498,7 @@ "zh-chs": "添加设备组权限", "zh-cht": "新增裝置群權限", "xloc": [ - "default.handlebars->31->1538" + "default.handlebars->31->1551" ] }, { @@ -3509,8 +3518,8 @@ "zh-chs": "添加设备权限", "zh-cht": "新增裝置權限", "xloc": [ - "default.handlebars->31->1543", - "default.handlebars->31->1545" + "default.handlebars->31->1556", + "default.handlebars->31->1558" ] }, { @@ -3607,7 +3616,7 @@ "zh-chs": "添加成员身份", "zh-cht": "新增成員身份", "xloc": [ - "default.handlebars->31->2097" + "default.handlebars->31->2110" ] }, { @@ -3647,8 +3656,8 @@ "zh-chs": "添加安全密钥", "zh-cht": "新增安全密鑰", "xloc": [ - "default.handlebars->31->1119", - "default.handlebars->31->1120", + "default.handlebars->31->1132", + "default.handlebars->31->1133", "default.handlebars->31->160", "default.handlebars->31->162", "default.handlebars->31->165", @@ -3672,8 +3681,8 @@ "zh-chs": "添加用户", "zh-cht": "新增用戶", "xloc": [ - "default-mobile.handlebars->11->460", - "default.handlebars->31->682" + "default-mobile.handlebars->11->477", + "default.handlebars->31->695" ] }, { @@ -3693,7 +3702,7 @@ "zh-chs": "添加用户设备权限", "zh-cht": "新增用戶裝置權限", "xloc": [ - "default.handlebars->31->1548" + "default.handlebars->31->1561" ] }, { @@ -3713,10 +3722,10 @@ "zh-chs": "添加用户组", "zh-cht": "新增用戶群", "xloc": [ - "default.handlebars->31->1438", - "default.handlebars->31->1540", - "default.handlebars->31->2071", - "default.handlebars->31->683" + "default.handlebars->31->1451", + "default.handlebars->31->1553", + "default.handlebars->31->2084", + "default.handlebars->31->696" ] }, { @@ -3736,7 +3745,7 @@ "zh-chs": "添加用户组设备权限", "zh-cht": "新增用戶群裝置權限", "xloc": [ - "default.handlebars->31->1550" + "default.handlebars->31->1563" ] }, { @@ -3756,7 +3765,7 @@ "zh-chs": "将用户添加到设备组", "zh-cht": "將用戶新增到裝置群", "xloc": [ - "default-mobile.handlebars->11->491" + "default-mobile.handlebars->11->508" ] }, { @@ -3793,8 +3802,8 @@ "zh-chs": "添加用户", "zh-cht": "新增用戶", "xloc": [ - "default.handlebars->31->1437", - "default.handlebars->31->1940" + "default.handlebars->31->1450", + "default.handlebars->31->1953" ] }, { @@ -3814,7 +3823,7 @@ "zh-chs": "将用户添加到设备组", "zh-cht": "將用戶新增到裝置群", "xloc": [ - "default.handlebars->31->1537" + "default.handlebars->31->1550" ] }, { @@ -3834,7 +3843,7 @@ "zh-chs": "将用户添加到用户组", "zh-cht": "將用戶新增到用戶群", "xloc": [ - "default.handlebars->31->1973" + "default.handlebars->31->1986" ] }, { @@ -3951,7 +3960,7 @@ "zh-chs": "通过安装Mesh Agent将新计算机添加到该设备组。", "zh-cht": "通過安裝Mesh Agent將新電腦新增到該裝置群。", "xloc": [ - "default.handlebars->31->1441", + "default.handlebars->31->1454", "default.handlebars->31->300" ] }, @@ -4012,7 +4021,7 @@ "zh-chs": "添加了身份验证应用程序", "zh-cht": "添加了身份驗證應用程序", "xloc": [ - "default.handlebars->31->1750" + "default.handlebars->31->1763" ] }, { @@ -4032,7 +4041,7 @@ "zh-chs": "已将设备共享{0}从{1}添加到{2}", "zh-cht": "已將設備共享{0}從{1}添加到{2}", "xloc": [ - "default.handlebars->31->1761" + "default.handlebars->31->1774" ] }, { @@ -4052,8 +4061,8 @@ "zh-chs": "已将设备{0}添加到设备组{1}", "zh-cht": "已將設備{0}添加到設備組{1}", "xloc": [ - "default.handlebars->31->1717", - "default.handlebars->31->1744" + "default.handlebars->31->1730", + "default.handlebars->31->1757" ] }, { @@ -4073,7 +4082,7 @@ "zh-chs": "添加了安全密钥", "zh-cht": "添加了安全密鑰", "xloc": [ - "default.handlebars->31->1755" + "default.handlebars->31->1768" ] }, { @@ -4093,7 +4102,7 @@ "zh-chs": "已将用户组{0}添加到设备组{1}", "zh-cht": "已將用戶組{0}添加到設備組{1}", "xloc": [ - "default.handlebars->31->1728" + "default.handlebars->31->1741" ] }, { @@ -4113,8 +4122,8 @@ "zh-chs": "已将用户{0}添加到用户组{1}", "zh-cht": "已將用戶{0}添加到用戶組{1}", "xloc": [ - "default.handlebars->31->1731", - "default.handlebars->31->1740" + "default.handlebars->31->1744", + "default.handlebars->31->1753" ] }, { @@ -4174,8 +4183,8 @@ "zh-chs": "管理员控制模式(ACM)", "zh-cht": "管理員控制模式(ACM)", "xloc": [ - "default-mobile.handlebars->11->420", - "default.handlebars->31->1048" + "default-mobile.handlebars->11->437", + "default.handlebars->31->1061" ] }, { @@ -4195,8 +4204,8 @@ "zh-chs": "管理员凭证", "zh-cht": "管理員憑證", "xloc": [ - "default-mobile.handlebars->11->426", - "default.handlebars->31->1054" + "default-mobile.handlebars->11->443", + "default.handlebars->31->1067" ] }, { @@ -4237,7 +4246,7 @@ "zh-chs": "管理领域", "zh-cht": "管理領域", "xloc": [ - "default.handlebars->31->2009" + "default.handlebars->31->2022" ] }, { @@ -4278,7 +4287,7 @@ "zh-chs": "管理领域", "zh-cht": "管理領域", "xloc": [ - "default.handlebars->31->1877" + "default.handlebars->31->1890" ] }, { @@ -4298,7 +4307,7 @@ "zh-chs": "管理员", "zh-cht": "管理員", "xloc": [ - "default.handlebars->31->1806" + "default.handlebars->31->1819" ] }, { @@ -4318,7 +4327,7 @@ "zh-chs": "南非文", "zh-cht": "南非文", "xloc": [ - "default.handlebars->31->1122" + "default.handlebars->31->1135" ] }, { @@ -4342,8 +4351,8 @@ "default-mobile.handlebars->11->214", "default-mobile.handlebars->11->239", "default-mobile.handlebars->11->261", - "default.handlebars->31->1604", - "default.handlebars->31->1612", + "default.handlebars->31->1617", + "default.handlebars->31->1625", "default.handlebars->31->254", "default.handlebars->31->443", "default.handlebars->container->column_l->p15->consoleTable->1->6->1->1->1->0->p15outputselecttd->p15outputselect->1" @@ -4366,8 +4375,8 @@ "zh-chs": "代理+英特尔AMT", "zh-cht": "代理+Intel® AMT", "xloc": [ - "default.handlebars->31->1606", - "default.handlebars->31->1614" + "default.handlebars->31->1619", + "default.handlebars->31->1627" ] }, { @@ -4407,8 +4416,8 @@ "zh-chs": "代理控制台", "zh-cht": "代理控制台", "xloc": [ - "default-mobile.handlebars->11->497", - "default.handlebars->31->1558" + "default-mobile.handlebars->11->514", + "default.handlebars->31->1571" ] }, { @@ -4428,7 +4437,7 @@ "zh-chs": "代理错误计数器", "zh-cht": "代理錯誤計數器", "xloc": [ - "default.handlebars->31->2175" + "default.handlebars->31->2188" ] }, { @@ -4531,7 +4540,7 @@ "zh-chs": "代理时段", "zh-cht": "代理時段", "xloc": [ - "default.handlebars->31->2191" + "default.handlebars->31->2204" ] }, { @@ -4572,7 +4581,7 @@ "zh-chs": "代理类型", "zh-cht": "代理類型", "xloc": [ - "default.handlebars->31->1610", + "default.handlebars->31->1623", "default.handlebars->container->column_l->p21->3->1->meshOsChartDiv->1" ] }, @@ -4593,7 +4602,7 @@ "zh-chs": "代理关闭了与服务器压缩的{0}%代理会话。已发送:{1},已压缩:{2}", "zh-cht": "代理關閉了與{0}%代理到服務器壓縮的會話。已發送:{1},已壓縮:{2}", "xloc": [ - "default.handlebars->31->1714" + "default.handlebars->31->1727" ] }, { @@ -4614,8 +4623,8 @@ "zh-cht": "代理已連接", "xloc": [ "default.handlebars->31->174", - "default.handlebars->31->673", - "default.handlebars->31->674" + "default.handlebars->31->686", + "default.handlebars->31->687" ] }, { @@ -4655,7 +4664,7 @@ "zh-chs": "代理离线", "zh-cht": "代理離線", "xloc": [ - "default.handlebars->31->1083" + "default.handlebars->31->1096" ] }, { @@ -4675,7 +4684,7 @@ "zh-chs": "代理在线", "zh-cht": "代理在線", "xloc": [ - "default.handlebars->31->1082" + "default.handlebars->31->1095" ] }, { @@ -4696,7 +4705,7 @@ "zh-cht": "代理在特權降低的遠程設備上運行。", "xloc": [ "default.handlebars->31->172", - "default.handlebars->31->671" + "default.handlebars->31->684" ] }, { @@ -4716,7 +4725,7 @@ "zh-chs": "代理", "zh-cht": "代理", "xloc": [ - "default.handlebars->31->2207" + "default.handlebars->31->2220" ] }, { @@ -4736,7 +4745,7 @@ "zh-chs": "阿尔巴尼亚文", "zh-cht": "阿爾巴尼亞文", "xloc": [ - "default.handlebars->31->1123" + "default.handlebars->31->1136" ] }, { @@ -4779,7 +4788,7 @@ "zh-chs": "全部可用", "zh-cht": "全部可用", "xloc": [ - "default.handlebars->31->1769" + "default.handlebars->31->1782" ] }, { @@ -4816,7 +4825,7 @@ "zh-chs": "所有事件", "zh-cht": "所有事件", "xloc": [ - "default.handlebars->31->1767" + "default.handlebars->31->1780" ] }, { @@ -4836,9 +4845,9 @@ "zh-chs": "全部聚焦", "zh-cht": "全部聚焦", "xloc": [ - "default.handlebars->31->878", - "default.handlebars->31->880", - "default.handlebars->31->881" + "default.handlebars->31->891", + "default.handlebars->31->893", + "default.handlebars->31->894" ] }, { @@ -4858,8 +4867,8 @@ "zh-chs": "允许用户管理此设备组和该组中的设备。", "zh-cht": "允許用戶管理此裝置群和該群中的裝置。", "xloc": [ - "default.handlebars->31->1505", - "default.handlebars->31->1970" + "default.handlebars->31->1518", + "default.handlebars->31->1983" ] }, { @@ -4879,7 +4888,7 @@ "zh-chs": "允许用户管理此设备。", "zh-cht": "允許用戶管理此裝置。", "xloc": [ - "default.handlebars->31->1506" + "default.handlebars->31->1519" ] }, { @@ -4896,8 +4905,8 @@ "xloc": [ "default-mobile.handlebars->11->333", "default-mobile.handlebars->11->337", - "default.handlebars->31->900", - "default.handlebars->31->904" + "default.handlebars->31->913", + "default.handlebars->31->917" ] }, { @@ -4959,7 +4968,7 @@ "zh-chs": "备用(F10 = ESC + 0)", "zh-cht": "備用(F10 = ESC + 0)", "xloc": [ - "default.handlebars->31->941", + "default.handlebars->31->954", "terminal.handlebars->3->19" ] }, @@ -5001,10 +5010,10 @@ "zh-chs": "一直通知", "zh-cht": "一直通知", "xloc": [ - "default.handlebars->31->1417", - "default.handlebars->31->1931", - "default.handlebars->31->2018", - "default.handlebars->31->619" + "default.handlebars->31->1430", + "default.handlebars->31->1944", + "default.handlebars->31->2031", + "default.handlebars->31->632" ] }, { @@ -5024,10 +5033,10 @@ "zh-chs": "一直提示", "zh-cht": "一直提示", "xloc": [ - "default.handlebars->31->1418", - "default.handlebars->31->1932", - "default.handlebars->31->2019", - "default.handlebars->31->620" + "default.handlebars->31->1431", + "default.handlebars->31->1945", + "default.handlebars->31->2032", + "default.handlebars->31->633" ] }, { @@ -5167,7 +5176,8 @@ "zh-chs": "杀毒软件", "zh-cht": "防毒軟體", "xloc": [ - "default.handlebars->31->610" + "default-mobile.handlebars->11->401", + "default.handlebars->31->623" ] }, { @@ -5288,7 +5298,7 @@ "zh-chs": "阿拉伯文(阿尔及利亚)", "zh-cht": "阿拉伯文(阿爾及利亞)", "xloc": [ - "default.handlebars->31->1125" + "default.handlebars->31->1138" ] }, { @@ -5308,7 +5318,7 @@ "zh-chs": "阿拉伯文(巴林)", "zh-cht": "阿拉伯文(巴林)", "xloc": [ - "default.handlebars->31->1126" + "default.handlebars->31->1139" ] }, { @@ -5328,7 +5338,7 @@ "zh-chs": "阿拉伯文(埃及)", "zh-cht": "阿拉伯文(埃及)", "xloc": [ - "default.handlebars->31->1127" + "default.handlebars->31->1140" ] }, { @@ -5348,7 +5358,7 @@ "zh-chs": "阿拉伯文(伊拉克)", "zh-cht": "阿拉伯文(伊拉克)", "xloc": [ - "default.handlebars->31->1128" + "default.handlebars->31->1141" ] }, { @@ -5368,7 +5378,7 @@ "zh-chs": "阿拉伯文(约旦)", "zh-cht": "阿拉伯文(約旦)", "xloc": [ - "default.handlebars->31->1129" + "default.handlebars->31->1142" ] }, { @@ -5388,7 +5398,7 @@ "zh-chs": "阿拉伯文(科威特)", "zh-cht": "阿拉伯文(科威特)", "xloc": [ - "default.handlebars->31->1130" + "default.handlebars->31->1143" ] }, { @@ -5408,7 +5418,7 @@ "zh-chs": "阿拉伯文(黎巴嫩)", "zh-cht": "阿拉伯文(黎巴嫩)", "xloc": [ - "default.handlebars->31->1131" + "default.handlebars->31->1144" ] }, { @@ -5428,7 +5438,7 @@ "zh-chs": "阿拉伯文(利比亚)", "zh-cht": "阿拉伯文(利比亞)", "xloc": [ - "default.handlebars->31->1132" + "default.handlebars->31->1145" ] }, { @@ -5448,7 +5458,7 @@ "zh-chs": "阿拉伯文(摩洛哥)", "zh-cht": "阿拉伯文(摩洛哥)", "xloc": [ - "default.handlebars->31->1133" + "default.handlebars->31->1146" ] }, { @@ -5468,7 +5478,7 @@ "zh-chs": "阿拉伯文(阿曼)", "zh-cht": "阿拉伯文(阿曼)", "xloc": [ - "default.handlebars->31->1134" + "default.handlebars->31->1147" ] }, { @@ -5488,7 +5498,7 @@ "zh-chs": "阿拉伯文(卡塔尔)", "zh-cht": "阿拉伯文(卡塔爾)", "xloc": [ - "default.handlebars->31->1135" + "default.handlebars->31->1148" ] }, { @@ -5508,7 +5518,7 @@ "zh-chs": "阿拉伯文(沙特阿拉伯)", "zh-cht": "阿拉伯文(沙特阿拉伯)", "xloc": [ - "default.handlebars->31->1136" + "default.handlebars->31->1149" ] }, { @@ -5528,7 +5538,7 @@ "zh-chs": "阿拉伯文(标准)", "zh-cht": "阿拉伯文(標準)", "xloc": [ - "default.handlebars->31->1124" + "default.handlebars->31->1137" ] }, { @@ -5548,7 +5558,7 @@ "zh-chs": "阿拉伯文(叙利亚)", "zh-cht": "阿拉伯文(敘利亞)", "xloc": [ - "default.handlebars->31->1137" + "default.handlebars->31->1150" ] }, { @@ -5568,7 +5578,7 @@ "zh-chs": "阿拉伯文(突尼斯)", "zh-cht": "阿拉伯文(突尼斯)", "xloc": [ - "default.handlebars->31->1138" + "default.handlebars->31->1151" ] }, { @@ -5588,7 +5598,7 @@ "zh-chs": "阿拉伯文(阿联酋)", "zh-cht": "阿拉伯文(阿聯酋)", "xloc": [ - "default.handlebars->31->1139" + "default.handlebars->31->1152" ] }, { @@ -5608,7 +5618,7 @@ "zh-chs": "阿拉伯文(也门)", "zh-cht": "阿拉伯文(也門)", "xloc": [ - "default.handlebars->31->1140" + "default.handlebars->31->1153" ] }, { @@ -5628,7 +5638,7 @@ "zh-chs": "阿拉贡文", "zh-cht": "阿拉貢文", "xloc": [ - "default.handlebars->31->1141" + "default.handlebars->31->1154" ] }, { @@ -5649,7 +5659,7 @@ "zh-cht": "結構", "xloc": [ "default-mobile.handlebars->11->384", - "default.handlebars->31->1002" + "default.handlebars->31->1015" ] }, { @@ -5689,8 +5699,8 @@ "zh-chs": "你确定要删除组{0}吗?删除设备组还将删除该组中有关设备的所有信息。", "zh-cht": "你確定要刪除群{0}嗎?刪除裝置群還將刪除該群中有關裝置的所有訊息。", "xloc": [ - "default-mobile.handlebars->11->466", - "default.handlebars->31->1481" + "default-mobile.handlebars->11->483", + "default.handlebars->31->1494" ] }, { @@ -5710,7 +5720,7 @@ "zh-chs": "您确定要删除节点{0}吗?", "zh-cht": "你確定要刪除節點{0}嗎?", "xloc": [ - "default.handlebars->31->820" + "default.handlebars->31->833" ] }, { @@ -5730,7 +5740,7 @@ "zh-chs": "您确定要卸载所选代理吗?", "zh-cht": "你確定要卸載所選代理嗎?", "xloc": [ - "default.handlebars->31->809" + "default.handlebars->31->822" ] }, { @@ -5750,7 +5760,7 @@ "zh-chs": "您确定要卸载所选的{0}代理吗?", "zh-cht": "你確定要卸載所選的{0}代理嗎?", "xloc": [ - "default.handlebars->31->808" + "default.handlebars->31->821" ] }, { @@ -5770,7 +5780,7 @@ "zh-chs": "您确定要{0}插件吗:{1}", "zh-cht": "你確定要{0}外掛嗎:{1}", "xloc": [ - "default.handlebars->31->2253" + "default.handlebars->31->2266" ] }, { @@ -5790,7 +5800,7 @@ "zh-chs": "亚美尼亚文", "zh-cht": "亞美尼亞文", "xloc": [ - "default.handlebars->31->1142" + "default.handlebars->31->1155" ] }, { @@ -5850,7 +5860,7 @@ "zh-chs": "阿萨姆文", "zh-cht": "阿薩姆文", "xloc": [ - "default.handlebars->31->1143" + "default.handlebars->31->1156" ] }, { @@ -5870,7 +5880,7 @@ "zh-chs": "阿斯图里亚斯文", "zh-cht": "阿斯圖里亞斯文", "xloc": [ - "default.handlebars->31->1144" + "default.handlebars->31->1157" ] }, { @@ -5890,7 +5900,7 @@ "zh-chs": "尝试激活英特尔(R)AMT ACM模式", "zh-cht": "嘗試激活英特爾(R)AMT ACM模式", "xloc": [ - "default.handlebars->31->1683" + "default.handlebars->31->1696" ] }, { @@ -5910,7 +5920,7 @@ "zh-chs": "认证软件", "zh-cht": "認證軟體", "xloc": [ - "default.handlebars->31->2022" + "default.handlebars->31->2035" ] }, { @@ -5934,8 +5944,8 @@ "default-mobile.handlebars->11->63", "default-mobile.handlebars->11->82", "default-mobile.handlebars->11->84", - "default.handlebars->31->1108", - "default.handlebars->31->1110", + "default.handlebars->31->1121", + "default.handlebars->31->1123", "default.handlebars->31->136", "default.handlebars->31->141" ] @@ -6017,7 +6027,7 @@ "zh-chs": "自动删除", "zh-cht": "自動刪除", "xloc": [ - "default.handlebars->31->1404" + "default.handlebars->31->1417" ] }, { @@ -6061,7 +6071,7 @@ "zh-chs": "自动下载代理程序核心转储文件:“{0}”", "zh-cht": "自動下載代理程序核心轉儲文件:“{0}”", "xloc": [ - "default.handlebars->31->1764" + "default.handlebars->31->1777" ] }, { @@ -6101,7 +6111,7 @@ "zh-chs": "可用內存", "zh-cht": "可用內存", "xloc": [ - "default.handlebars->31->2200" + "default.handlebars->31->2213" ] }, { @@ -6121,7 +6131,18 @@ "zh-chs": "阿塞拜疆文", "zh-cht": "阿塞拜疆文", "xloc": [ - "default.handlebars->31->1145" + "default.handlebars->31->1158" + ] + }, + { + "en": "BAD", + "xloc": [ + "default-mobile.handlebars->11->388", + "default-mobile.handlebars->11->392", + "default-mobile.handlebars->11->396", + "default.handlebars->31->610", + "default.handlebars->31->614", + "default.handlebars->31->618" ] }, { @@ -6141,8 +6162,8 @@ "zh-chs": "的BIOS", "zh-cht": "的BIOS", "xloc": [ - "default-mobile.handlebars->11->432", - "default.handlebars->31->1060" + "default-mobile.handlebars->11->449", + "default.handlebars->31->1073" ] }, { @@ -6226,7 +6247,7 @@ "nl": "BackSpace", "xloc": [ "default-mobile.handlebars->11->317", - "default.handlebars->31->884" + "default.handlebars->31->897" ] }, { @@ -6266,8 +6287,8 @@ "zh-chs": "背景与互动", "zh-cht": "背景與互動", "xloc": [ - "default.handlebars->31->1587", - "default.handlebars->31->1594", + "default.handlebars->31->1600", + "default.handlebars->31->1607", "default.handlebars->31->353", "default.handlebars->31->367" ] @@ -6289,8 +6310,8 @@ "zh-chs": "仅背景", "zh-cht": "僅背景", "xloc": [ - "default.handlebars->31->1588", - "default.handlebars->31->1595", + "default.handlebars->31->1601", + "default.handlebars->31->1608", "default.handlebars->31->354", "default.handlebars->31->368", "default.handlebars->31->383" @@ -6334,7 +6355,7 @@ "zh-chs": "备用码", "zh-cht": "備用碼", "xloc": [ - "default.handlebars->31->2024" + "default.handlebars->31->2037" ] }, { @@ -6354,7 +6375,7 @@ "zh-chs": "错误的签名", "zh-cht": "錯誤的簽名", "xloc": [ - "default.handlebars->31->2182" + "default.handlebars->31->2195" ] }, { @@ -6374,7 +6395,7 @@ "zh-chs": "错误的网络证书", "zh-cht": "錯誤的網絡憑證", "xloc": [ - "default.handlebars->31->2181" + "default.handlebars->31->2194" ] }, { @@ -6394,7 +6415,7 @@ "zh-chs": "巴斯克", "zh-cht": "巴斯克", "xloc": [ - "default.handlebars->31->1146" + "default.handlebars->31->1159" ] }, { @@ -6454,7 +6475,7 @@ "zh-chs": "将{0}个文件批量上传到文件夹{1}", "zh-cht": "將{0}個文件批量上傳到文件夾{1}", "xloc": [ - "default.handlebars->31->1763" + "default.handlebars->31->1776" ] }, { @@ -6474,7 +6495,7 @@ "zh-chs": "白俄罗斯文", "zh-cht": "白俄羅斯文", "xloc": [ - "default.handlebars->31->1148" + "default.handlebars->31->1161" ] }, { @@ -6494,7 +6515,7 @@ "zh-chs": "孟加拉", "zh-cht": "孟加拉", "xloc": [ - "default.handlebars->31->1149" + "default.handlebars->31->1162" ] }, { @@ -6524,8 +6545,8 @@ "en": "Bootloader", "nl": "Bootloader", "xloc": [ - "default-mobile.handlebars->11->396", - "default.handlebars->31->1014" + "default-mobile.handlebars->11->413", + "default.handlebars->31->1027" ] }, { @@ -6545,7 +6566,7 @@ "zh-chs": "波斯尼亚文", "zh-cht": "波斯尼亞文", "xloc": [ - "default.handlebars->31->1150" + "default.handlebars->31->1163" ] }, { @@ -6565,7 +6586,7 @@ "zh-chs": "布列塔尼", "zh-cht": "布列塔尼", "xloc": [ - "default.handlebars->31->1151" + "default.handlebars->31->1164" ] }, { @@ -6585,7 +6606,7 @@ "zh-chs": "广播", "zh-cht": "廣播", "xloc": [ - "default.handlebars->31->1938", + "default.handlebars->31->1951", "default.handlebars->container->column_l->p4->3->1->0->3->1" ] }, @@ -6606,7 +6627,7 @@ "zh-chs": "广播消息", "zh-cht": "廣播消息", "xloc": [ - "default.handlebars->31->1859" + "default.handlebars->31->1872" ] }, { @@ -6626,7 +6647,7 @@ "zh-chs": "向所有连接的用户广播消息。", "zh-cht": "向所有連接的用戶廣播消息。", "xloc": [ - "default.handlebars->31->1854" + "default.handlebars->31->1867" ] }, { @@ -6646,7 +6667,7 @@ "zh-chs": "保加利亚文", "zh-cht": "保加利亞文", "xloc": [ - "default.handlebars->31->1147" + "default.handlebars->31->1160" ] }, { @@ -6666,7 +6687,7 @@ "zh-chs": "缅甸文", "zh-cht": "緬甸文", "xloc": [ - "default.handlebars->31->1152" + "default.handlebars->31->1165" ] }, { @@ -6707,7 +6728,7 @@ "zh-chs": "CCM模式", "zh-cht": "CCM模式", "xloc": [ - "default.handlebars->31->1464" + "default.handlebars->31->1477" ] }, { @@ -6749,7 +6770,7 @@ "zh-chs": "CIRA服务器", "zh-cht": "CIRA伺服器", "xloc": [ - "default.handlebars->31->2239" + "default.handlebars->31->2252" ] }, { @@ -6769,7 +6790,7 @@ "zh-chs": "CIRA服务器命令", "zh-cht": "CIRA伺服器指令", "xloc": [ - "default.handlebars->31->2240" + "default.handlebars->31->2253" ] }, { @@ -6789,7 +6810,7 @@ "zh-chs": "CIRA设置", "zh-cht": "CIRA設置", "xloc": [ - "default.handlebars->31->1472" + "default.handlebars->31->1485" ] }, { @@ -6809,8 +6830,8 @@ "zh-chs": "CPU", "zh-cht": "CPU", "xloc": [ - "default-mobile.handlebars->11->438", - "default.handlebars->31->1066" + "default-mobile.handlebars->11->455", + "default.handlebars->31->1079" ] }, { @@ -6830,7 +6851,7 @@ "zh-chs": "CPU负载", "zh-cht": "CPU負載", "xloc": [ - "default.handlebars->31->2196" + "default.handlebars->31->2209" ] }, { @@ -6850,7 +6871,7 @@ "zh-chs": "最近15分钟的CPU负载", "zh-cht": "最近15分鐘的CPU負載", "xloc": [ - "default.handlebars->31->2199" + "default.handlebars->31->2212" ] }, { @@ -6870,7 +6891,7 @@ "zh-chs": "最近5分钟的CPU负载", "zh-cht": "最近5分鐘的CPU負載", "xloc": [ - "default.handlebars->31->2198" + "default.handlebars->31->2211" ] }, { @@ -6890,7 +6911,7 @@ "zh-chs": "最近一分钟的CPU负载", "zh-cht": "最近一分鐘的CPU負載", "xloc": [ - "default.handlebars->31->2197" + "default.handlebars->31->2210" ] }, { @@ -6910,8 +6931,8 @@ "zh-chs": "CR+LF", "zh-cht": "CR+LF", "xloc": [ - "default.handlebars->31->934", - "default.handlebars->31->943", + "default.handlebars->31->947", + "default.handlebars->31->956", "default.handlebars->container->column_l->p12->termTable->1->1->6->1->1->terminalSettingsButtons", "terminal.handlebars->3->21", "terminal.handlebars->3->7", @@ -6935,7 +6956,7 @@ "zh-chs": "CSV", "zh-cht": "CSV", "xloc": [ - "default.handlebars->31->1777" + "default.handlebars->31->1790" ] }, { @@ -6955,8 +6976,8 @@ "zh-chs": "CSV格式", "zh-cht": "CSV格式", "xloc": [ - "default.handlebars->31->1781", - "default.handlebars->31->1846", + "default.handlebars->31->1794", + "default.handlebars->31->1859", "default.handlebars->31->502" ] }, @@ -6994,7 +7015,7 @@ "zh-chs": "呼叫错误", "zh-cht": "呼叫錯誤", "xloc": [ - "default.handlebars->31->2254" + "default.handlebars->31->2267" ] }, { @@ -7017,7 +7038,7 @@ "agent-translations.json", "default-mobile.handlebars->11->93", "default-mobile.handlebars->dialog->idx_dlgButtonBar", - "default.handlebars->31->1382", + "default.handlebars->31->1395", "default.handlebars->container->dialog->idx_dlgButtonBar", "desktop.handlebars->p11->dialog->idx_dlgButtonBar", "login-mobile.handlebars->dialog->idx_dlgButtonBar", @@ -7045,12 +7066,12 @@ "zh-chs": "容量", "zh-cht": "容量", "xloc": [ - "default-mobile.handlebars->11->443", - "default-mobile.handlebars->11->448", - "default-mobile.handlebars->11->450", - "default.handlebars->31->1071", - "default.handlebars->31->1076", - "default.handlebars->31->1078" + "default-mobile.handlebars->11->460", + "default-mobile.handlebars->11->465", + "default-mobile.handlebars->11->467", + "default.handlebars->31->1084", + "default.handlebars->31->1089", + "default.handlebars->31->1091" ] }, { @@ -7070,8 +7091,8 @@ "zh-chs": "容量/速度", "zh-cht": "容量/速度", "xloc": [ - "default-mobile.handlebars->11->441", - "default.handlebars->31->1069" + "default-mobile.handlebars->11->458", + "default.handlebars->31->1082" ] }, { @@ -7091,7 +7112,7 @@ "zh-chs": "加泰罗尼亚文", "zh-cht": "加泰羅尼亞文", "xloc": [ - "default.handlebars->31->1153" + "default.handlebars->31->1166" ] }, { @@ -7131,7 +7152,7 @@ "zh-chs": "查莫罗", "zh-cht": "查莫羅", "xloc": [ - "default.handlebars->31->1154" + "default.handlebars->31->1167" ] }, { @@ -7173,7 +7194,7 @@ "zh-chs": "更改{0}的电邮", "zh-cht": "更改{0}的電郵", "xloc": [ - "default.handlebars->31->2054" + "default.handlebars->31->2067" ] }, { @@ -7193,9 +7214,9 @@ "zh-chs": "更改组", "zh-cht": "更改群", "xloc": [ - "default.handlebars->31->648", - "default.handlebars->31->817", - "default.handlebars->31->818" + "default.handlebars->31->661", + "default.handlebars->31->830", + "default.handlebars->31->831" ] }, { @@ -7216,8 +7237,8 @@ "zh-cht": "更改密碼", "xloc": [ "default-mobile.handlebars->11->101", - "default.handlebars->31->1349", - "default.handlebars->31->2041" + "default.handlebars->31->1362", + "default.handlebars->31->2054" ] }, { @@ -7237,7 +7258,7 @@ "zh-chs": "更改{0}的密码", "zh-cht": "更改{0}的密碼", "xloc": [ - "default.handlebars->31->2061" + "default.handlebars->31->2074" ] }, { @@ -7257,7 +7278,7 @@ "zh-chs": "更改{0}的真实名称", "zh-cht": "更改{0}的真實名稱", "xloc": [ - "default.handlebars->31->2049" + "default.handlebars->31->2062" ] }, { @@ -7339,7 +7360,7 @@ "zh-chs": "更改该用户的密码", "zh-cht": "更改該用戶的密碼", "xloc": [ - "default.handlebars->31->2040" + "default.handlebars->31->2053" ] }, { @@ -7379,7 +7400,7 @@ "zh-chs": "在此处更改您的帐户电邮地址。", "zh-cht": "在此處更改你的帳戶電郵地址。", "xloc": [ - "default.handlebars->31->1336" + "default.handlebars->31->1349" ] }, { @@ -7399,7 +7420,7 @@ "zh-chs": "在下面的框中两次输入旧密码和新密码,以更改帐户密码。", "zh-cht": "在下面的框中兩次輸入舊密碼和新密碼,以更改帳戶密碼。", "xloc": [ - "default.handlebars->31->1342" + "default.handlebars->31->1355" ] }, { @@ -7419,7 +7440,7 @@ "zh-chs": "更改帐户凭据", "zh-cht": "帳戶憑證已更改", "xloc": [ - "default.handlebars->31->1735" + "default.handlebars->31->1748" ] }, { @@ -7439,7 +7460,7 @@ "zh-chs": "{1}组中的设备{0}已更改:{2}", "zh-cht": "{1}組中的設備{0}已更改:{2}", "xloc": [ - "default.handlebars->31->1719" + "default.handlebars->31->1732" ] }, { @@ -7459,7 +7480,7 @@ "zh-chs": "语言从{1}更改为{2}", "zh-cht": "語言從{1}更改為{2}", "xloc": [ - "default.handlebars->31->1663" + "default.handlebars->31->1676" ] }, { @@ -7479,8 +7500,8 @@ "zh-chs": "已更改{0}的用户设备权限", "zh-cht": "已更改{0}的用戶設備權限", "xloc": [ - "default.handlebars->31->1721", - "default.handlebars->31->1742" + "default.handlebars->31->1734", + "default.handlebars->31->1755" ] }, { @@ -7500,7 +7521,7 @@ "zh-chs": "更改语言将需要刷新页面。", "zh-cht": "更改語言將需要刷新頁面。", "xloc": [ - "default.handlebars->31->1321" + "default.handlebars->31->1334" ] }, { @@ -7520,11 +7541,11 @@ "zh-chs": "聊天", "zh-cht": "聊天", "xloc": [ - "default.handlebars->31->1798", - "default.handlebars->31->2036", - "default.handlebars->31->2037", - "default.handlebars->31->713", - "default.handlebars->31->734" + "default.handlebars->31->1811", + "default.handlebars->31->2049", + "default.handlebars->31->2050", + "default.handlebars->31->726", + "default.handlebars->31->747" ] }, { @@ -7544,10 +7565,10 @@ "zh-chs": "聊天并通知", "zh-cht": "聊天並通知", "xloc": [ - "default-mobile.handlebars->11->487", - "default-mobile.handlebars->11->507", - "default.handlebars->31->1533", - "default.handlebars->31->1569" + "default-mobile.handlebars->11->504", + "default-mobile.handlebars->11->524", + "default.handlebars->31->1546", + "default.handlebars->31->1582" ] }, { @@ -7555,8 +7576,8 @@ "nl": "Chatverzoek, klik hier om te accepteren.", "fr": "Demande de chat, cliquez ici pour accepter.", "xloc": [ - "default-mobile.handlebars->11->539", - "default.handlebars->31->2151" + "default-mobile.handlebars->11->556", + "default.handlebars->31->2164" ] }, { @@ -7596,7 +7617,7 @@ "zh-chs": "车臣", "zh-cht": "車臣", "xloc": [ - "default.handlebars->31->1155" + "default.handlebars->31->1168" ] }, { @@ -7696,8 +7717,8 @@ "zh-chs": "检查...", "zh-cht": "檢查...", "xloc": [ - "default.handlebars->31->1121", - "default.handlebars->31->2248" + "default.handlebars->31->1134", + "default.handlebars->31->2261" ] }, { @@ -7717,7 +7738,7 @@ "zh-chs": "中文", "zh-cht": "中文", "xloc": [ - "default.handlebars->31->1156" + "default.handlebars->31->1169" ] }, { @@ -7737,7 +7758,7 @@ "zh-chs": "中文(香港)", "zh-cht": "中文(香港)", "xloc": [ - "default.handlebars->31->1157" + "default.handlebars->31->1170" ] }, { @@ -7757,7 +7778,7 @@ "zh-chs": "中文(中国)", "zh-cht": "中文(中國)", "xloc": [ - "default.handlebars->31->1158" + "default.handlebars->31->1171" ] }, { @@ -7777,7 +7798,7 @@ "zh-chs": "简体中文", "zh-cht": "簡體中文", "xloc": [ - "default.handlebars->31->1318" + "default.handlebars->31->1331" ] }, { @@ -7797,7 +7818,7 @@ "zh-chs": "中文(新加坡)", "zh-cht": "中文(新加坡)", "xloc": [ - "default.handlebars->31->1159" + "default.handlebars->31->1172" ] }, { @@ -7817,7 +7838,7 @@ "zh-chs": "中文(台湾)", "zh-cht": "中文(台灣)", "xloc": [ - "default.handlebars->31->1160" + "default.handlebars->31->1173" ] }, { @@ -7837,7 +7858,7 @@ "zh-chs": "繁体中文", "zh-cht": "繁體中文", "xloc": [ - "default.handlebars->31->1319" + "default.handlebars->31->1332" ] }, { @@ -7878,7 +7899,7 @@ "zh-chs": "楚瓦什", "zh-cht": "楚瓦什", "xloc": [ - "default.handlebars->31->1161" + "default.handlebars->31->1174" ] }, { @@ -7921,11 +7942,11 @@ "default-mobile.handlebars->11->372", "default-mobile.handlebars->11->374", "default-mobile.handlebars->11->70", - "default.handlebars->31->1657", - "default.handlebars->31->979", - "default.handlebars->31->981", - "default.handlebars->31->983", - "default.handlebars->31->985", + "default.handlebars->31->1670", + "default.handlebars->31->992", + "default.handlebars->31->994", + "default.handlebars->31->996", + "default.handlebars->31->998", "default.handlebars->container->column_l->p15->consoleTable->1->6->1->1->1->0->7", "default.handlebars->container->column_l->p41->3->1", "messenger.handlebars->xbottom->1->1->0->5" @@ -7968,8 +7989,8 @@ "zh-chs": "全部清除", "zh-cht": "全部清除", "xloc": [ - "default-mobile.handlebars->11->522", - "default.handlebars->31->2134" + "default-mobile.handlebars->11->539", + "default.handlebars->31->2147" ] }, { @@ -8010,7 +8031,7 @@ "zh-chs": "清除核心", "zh-cht": "清除核心", "xloc": [ - "default.handlebars->31->1092" + "default.handlebars->31->1105" ] }, { @@ -8050,8 +8071,8 @@ "zh-chs": "清除此通知", "zh-cht": "清除此通知", "xloc": [ - "default-mobile.handlebars->11->521", - "default.handlebars->31->2133" + "default-mobile.handlebars->11->538", + "default.handlebars->31->2146" ] }, { @@ -8111,8 +8132,8 @@ "zh-chs": "单击此处编辑设备组名称", "zh-cht": "單擊此處編輯裝置群名稱", "xloc": [ - "default.handlebars->31->1393", - "default.handlebars->31->1608" + "default.handlebars->31->1406", + "default.handlebars->31->1621" ] }, { @@ -8152,7 +8173,7 @@ "zh-chs": "单击此处编辑用户组名称", "zh-cht": "單擊此處編輯用戶群名稱", "xloc": [ - "default.handlebars->31->1915" + "default.handlebars->31->1928" ] }, { @@ -8223,7 +8244,7 @@ "zh-cht": "單擊確定將驗證電郵發送到:", "xloc": [ "default-mobile.handlebars->11->86", - "default.handlebars->31->1333" + "default.handlebars->31->1346" ] }, { @@ -8284,8 +8305,8 @@ "zh-chs": "客户端控制模式(CCM)", "zh-cht": "客戶端控制模式(CCM)", "xloc": [ - "default-mobile.handlebars->11->419", - "default.handlebars->31->1047" + "default-mobile.handlebars->11->436", + "default.handlebars->31->1060" ] }, { @@ -8305,7 +8326,7 @@ "zh-chs": "客户编号", "zh-cht": "客戶編號", "xloc": [ - "default.handlebars->31->1375" + "default.handlebars->31->1388" ] }, { @@ -8325,7 +8346,7 @@ "zh-chs": "客户端启动的远程访问", "zh-cht": "客戶端啟動的遠程訪問", "xloc": [ - "default.handlebars->31->1471" + "default.handlebars->31->1484" ] }, { @@ -8345,7 +8366,7 @@ "zh-chs": "客户机密", "zh-cht": "客戶機密", "xloc": [ - "default.handlebars->31->1376" + "default.handlebars->31->1389" ] }, { @@ -8389,8 +8410,8 @@ "default-mobile.handlebars->11->68", "default.handlebars->31->148", "default.handlebars->31->156", - "default.handlebars->31->925", - "default.handlebars->31->956" + "default.handlebars->31->938", + "default.handlebars->31->969" ] }, { @@ -8410,7 +8431,7 @@ "zh-chs": "封闭式桌面多路复用会话,{0}秒", "zh-cht": "封閉式桌面多路復用會話,{0}秒", "xloc": [ - "default.handlebars->31->1668" + "default.handlebars->31->1681" ] }, { @@ -8532,10 +8553,10 @@ "zh-chs": "指令", "zh-cht": "指令", "xloc": [ - "default-mobile.handlebars->11->509", - "default.handlebars->31->1571", - "default.handlebars->31->715", - "default.handlebars->31->736" + "default-mobile.handlebars->11->526", + "default.handlebars->31->1584", + "default.handlebars->31->728", + "default.handlebars->31->749" ] }, { @@ -8555,8 +8576,8 @@ "zh-chs": "通用设备组", "zh-cht": "通用裝置群", "xloc": [ - "default.handlebars->31->1946", - "default.handlebars->31->2066" + "default.handlebars->31->1959", + "default.handlebars->31->2079" ] }, { @@ -8576,8 +8597,8 @@ "zh-chs": "通用设备", "zh-cht": "通用裝置", "xloc": [ - "default.handlebars->31->1952", - "default.handlebars->31->2078" + "default.handlebars->31->1965", + "default.handlebars->31->2091" ] }, { @@ -8597,7 +8618,7 @@ "zh-chs": "压缩档案...", "zh-cht": "壓縮檔案...", "xloc": [ - "default.handlebars->31->951" + "default.handlebars->31->964" ] }, { @@ -8618,15 +8639,15 @@ "zh-cht": "確認", "xloc": [ "default-mobile.handlebars->11->301", - "default-mobile.handlebars->11->467", - "default.handlebars->31->1482", - "default.handlebars->31->1826", - "default.handlebars->31->1905", - "default.handlebars->31->1966", - "default.handlebars->31->2064", + "default-mobile.handlebars->11->484", + "default.handlebars->31->1495", + "default.handlebars->31->1839", + "default.handlebars->31->1918", + "default.handlebars->31->1979", + "default.handlebars->31->2077", "default.handlebars->31->472", - "default.handlebars->31->812", - "default.handlebars->31->821" + "default.handlebars->31->825", + "default.handlebars->31->834" ] }, { @@ -8647,7 +8668,7 @@ "zh-cht": "確認將1個副本複製到此位置?", "xloc": [ "default-mobile.handlebars->11->363", - "default.handlebars->31->974" + "default.handlebars->31->987" ] }, { @@ -8667,7 +8688,7 @@ "zh-chs": "确认{0}个条目的复制到此位置?", "zh-cht": "確認{0}個條目的複製到此位置?", "xloc": [ - "default.handlebars->31->973" + "default.handlebars->31->986" ] }, { @@ -8707,7 +8728,7 @@ "zh-chs": "确认删除选定的帐户?", "zh-cht": "確認刪除所選帳戶?", "xloc": [ - "default.handlebars->31->1825" + "default.handlebars->31->1838" ] }, { @@ -8747,7 +8768,7 @@ "zh-chs": "确认删除选定的用户组?", "zh-cht": "確認刪除所選用戶群?", "xloc": [ - "default.handlebars->31->1904" + "default.handlebars->31->1917" ] }, { @@ -8767,7 +8788,7 @@ "zh-chs": "确认删除用户{0}?", "zh-cht": "確認刪除用戶{0}?", "xloc": [ - "default.handlebars->31->2063" + "default.handlebars->31->2076" ] }, { @@ -8787,7 +8808,7 @@ "zh-chs": "确认删除用户“ {0} ”的成员身份?", "zh-cht": "確認刪除用戶“ {0} ”的成員身份?", "xloc": [ - "default.handlebars->31->1969" + "default.handlebars->31->1982" ] }, { @@ -8807,7 +8828,7 @@ "zh-chs": "确认删除用户组“ {0} ”的成员身份?", "zh-cht": "確認刪除用戶群“ {0} ”的成員身份?", "xloc": [ - "default.handlebars->31->2095" + "default.handlebars->31->2108" ] }, { @@ -8828,7 +8849,7 @@ "zh-cht": "確認將1個條目移動到此位置?", "xloc": [ "default-mobile.handlebars->11->365", - "default.handlebars->31->976" + "default.handlebars->31->989" ] }, { @@ -8848,7 +8869,7 @@ "zh-chs": "确认将{0}个条目移到此位置?", "zh-cht": "確認將{0}個條目移到該位置?", "xloc": [ - "default.handlebars->31->975" + "default.handlebars->31->988" ] }, { @@ -8888,7 +8909,7 @@ "zh-chs": "确认覆盖?", "zh-cht": "確認覆蓋?", "xloc": [ - "default.handlebars->31->1651" + "default.handlebars->31->1664" ] }, { @@ -8908,8 +8929,8 @@ "zh-chs": "确认删除设备“ {0} ”的访问权限?", "zh-cht": "確認刪除裝置“ {0} ”的訪問權限?", "xloc": [ - "default.handlebars->31->1959", - "default.handlebars->31->2086" + "default.handlebars->31->1972", + "default.handlebars->31->2099" ] }, { @@ -8929,8 +8950,8 @@ "zh-chs": "确认删除设备组“ {0} ”的访问权限?", "zh-cht": "確認刪除裝置群“ {0} ”的訪問權限?", "xloc": [ - "default.handlebars->31->1961", - "default.handlebars->31->2099" + "default.handlebars->31->1974", + "default.handlebars->31->2112" ] }, { @@ -8950,7 +8971,7 @@ "zh-chs": "确认删除用户“ {0} ”的访问权限?", "zh-cht": "確認刪除用戶“ {0} ”的訪問權限?", "xloc": [ - "default.handlebars->31->2088" + "default.handlebars->31->2101" ] }, { @@ -8970,7 +8991,7 @@ "zh-chs": "确认删除用户组“ {0} ”的访问权限?", "zh-cht": "確認刪除用戶群“ {0} ”的訪問權限?", "xloc": [ - "default.handlebars->31->2091" + "default.handlebars->31->2104" ] }, { @@ -8990,8 +9011,8 @@ "zh-chs": "确认删除访问权限?", "zh-cht": "確認刪除訪問權限?", "xloc": [ - "default.handlebars->31->2089", - "default.handlebars->31->2092" + "default.handlebars->31->2102", + "default.handlebars->31->2105" ] }, { @@ -9012,7 +9033,7 @@ "zh-cht": "確認刪除身份驗證軟體兩步登入?", "xloc": [ "default-mobile.handlebars->11->85", - "default.handlebars->31->1111" + "default.handlebars->31->1124" ] }, { @@ -9049,7 +9070,7 @@ "zh-chs": "确认删除设备共享“{0}”?", "zh-cht": "確認刪除設備共享“{0}”?", "xloc": [ - "default.handlebars->31->2084" + "default.handlebars->31->2097" ] }, { @@ -9103,7 +9124,7 @@ "zh-chs": "确认删除用户“ {0} ”的权限?", "zh-cht": "確認刪除用戶“ {0} ”的權限?", "xloc": [ - "default.handlebars->31->1580" + "default.handlebars->31->1593" ] }, { @@ -9123,7 +9144,7 @@ "zh-chs": "确认删除用户组“ {0} ”的权限?", "zh-cht": "確認刪除用戶群“ {0} ”的權限?", "xloc": [ - "default.handlebars->31->1582" + "default.handlebars->31->1595" ] }, { @@ -9160,7 +9181,7 @@ "zh-chs": "确认删除用户{0}?", "zh-cht": "確認刪除用戶{0}?", "xloc": [ - "default-mobile.handlebars->11->518" + "default-mobile.handlebars->11->535" ] }, { @@ -9181,7 +9202,7 @@ "zh-cht": "將{1}入口{2}中的{0}限製到此位置?", "xloc": [ "default-mobile.handlebars->11->138", - "default.handlebars->31->1652" + "default.handlebars->31->1665" ] }, { @@ -9205,8 +9226,8 @@ "default-mobile.handlebars->11->345", "default-mobile.handlebars->container->page_content->column_l->p10->p10desktop->deskarea1->1->3", "default-mobile.handlebars->container->page_content->column_l->p10->p10files->p13toolbar->1->0->1->3", - "default.handlebars->31->1421", - "default.handlebars->31->946", + "default.handlebars->31->1434", + "default.handlebars->31->959", "default.handlebars->container->column_l->p11->deskarea0->deskarea1->3->connectbutton1span", "default.handlebars->container->column_l->p12->termTable->1->1->0->1->3->connectbutton2span", "default.handlebars->container->column_l->p13->p13toolbar->1->0->1->3", @@ -9254,7 +9275,7 @@ "zh-chs": "连接到服务器", "zh-cht": "連接到伺服器", "xloc": [ - "default.handlebars->31->1475" + "default.handlebars->31->1488" ] }, { @@ -9376,7 +9397,7 @@ "zh-chs": "已连接的英特尔®AMT", "zh-cht": "已連接的Intel® AMT", "xloc": [ - "default.handlebars->31->2187" + "default.handlebars->31->2200" ] }, { @@ -9396,7 +9417,7 @@ "zh-chs": "已连接的用户", "zh-cht": "已连接的用户", "xloc": [ - "default.handlebars->31->2192" + "default.handlebars->31->2205" ] }, { @@ -9416,8 +9437,8 @@ "zh-chs": "现在已连接", "zh-cht": "現在已連接", "xloc": [ - "default-mobile.handlebars->11->388", - "default.handlebars->31->1006" + "default-mobile.handlebars->11->405", + "default.handlebars->31->1019" ] }, { @@ -9460,11 +9481,11 @@ "default-mobile.handlebars->11->2", "default-mobile.handlebars->11->381", "default-mobile.handlebars->11->48", + "default.handlebars->31->1010", "default.handlebars->31->244", "default.handlebars->31->247", "default.handlebars->31->291", "default.handlebars->31->9", - "default.handlebars->31->997", "desktop.handlebars->3->2", "terminal.handlebars->3->2", "xterm.handlebars->9->2" @@ -9487,7 +9508,7 @@ "zh-chs": "连接数量", "zh-cht": "連接數量", "xloc": [ - "default.handlebars->31->2206" + "default.handlebars->31->2219" ] }, { @@ -9507,7 +9528,7 @@ "zh-chs": "连接转发器", "zh-cht": "連接轉發器", "xloc": [ - "default.handlebars->31->2238" + "default.handlebars->31->2251" ] }, { @@ -9568,9 +9589,9 @@ "zh-cht": "連接性", "xloc": [ "default-mobile.handlebars->11->266", - "default.handlebars->31->1615", + "default.handlebars->31->1628", "default.handlebars->31->235", - "default.handlebars->31->633", + "default.handlebars->31->646", "default.handlebars->container->column_l->p21->3->1->meshConnChartDiv->1" ] }, @@ -9591,8 +9612,8 @@ "zh-chs": "控制台", "zh-cht": "控制台", "xloc": [ - "default.handlebars->31->708", - "default.handlebars->31->729", + "default.handlebars->31->721", + "default.handlebars->31->742", "default.handlebars->container->topbar->1->1->MainSubMenuSpan->MainSubMenu->1->0->MainDevConsole", "default.handlebars->container->topbar->1->1->ServerSubMenuSpan->ServerSubMenu->1->0->ServerConsole", "default.handlebars->contextMenu->cxconsole" @@ -9635,8 +9656,8 @@ "zh-chs": "控制", "zh-cht": "控制", "xloc": [ - "default.handlebars->31->707", - "default.handlebars->31->728", + "default.handlebars->31->720", + "default.handlebars->31->741", "messenger.handlebars->13->1" ] }, @@ -9657,7 +9678,7 @@ "zh-chs": "Cookie编码器", "zh-cht": "Cookie編碼器", "xloc": [ - "default.handlebars->31->2222" + "default.handlebars->31->2235" ] }, { @@ -9814,8 +9835,8 @@ "zh-chs": "复制连结到剪贴板", "zh-cht": "複製連結到剪貼板", "xloc": [ - "default.handlebars->31->1620", - "default.handlebars->31->1639", + "default.handlebars->31->1633", + "default.handlebars->31->1652", "default.handlebars->31->211", "default.handlebars->31->370" ] @@ -9918,7 +9939,7 @@ "zh-chs": "复制:“{0}”到“{1}”", "zh-cht": "複製:“{0}”到“{1}”", "xloc": [ - "default.handlebars->31->1711" + "default.handlebars->31->1724" ] }, { @@ -10064,7 +10085,7 @@ "zh-chs": "核心服务器", "zh-cht": "核心伺服器", "xloc": [ - "default.handlebars->31->2221" + "default.handlebars->31->2234" ] }, { @@ -10084,7 +10105,7 @@ "zh-chs": "科西嘉文", "zh-cht": "科西嘉文", "xloc": [ - "default.handlebars->31->1162" + "default.handlebars->31->1175" ] }, { @@ -10104,7 +10125,7 @@ "zh-chs": "创建帐号", "zh-cht": "創建帳號", "xloc": [ - "default.handlebars->31->1873", + "default.handlebars->31->1886", "login-mobile.handlebars->container->page_content->column_l->1->1->0->1->createpanel->1->1->9->1->12->1->1", "login.handlebars->container->column_l->centralTable->1->0->logincell->createpanel->1->9->1->12->1->1", "login2.handlebars->centralTable->1->0->logincell->createpanel->1->9->1->12->1->1" @@ -10147,7 +10168,7 @@ "zh-chs": "创建用户组", "zh-cht": "創建用戶群", "xloc": [ - "default.handlebars->31->1912" + "default.handlebars->31->1925" ] }, { @@ -10167,7 +10188,7 @@ "zh-chs": "创建连结以与访客共享此设备", "zh-cht": "創建鏈結以與訪客共享此裝置", "xloc": [ - "default.handlebars->31->646" + "default.handlebars->31->659" ] }, { @@ -10187,7 +10208,7 @@ "zh-chs": "使用以下选项创建一个新的设备组。", "zh-cht": "使用以下選項創建一個新的裝置群。", "xloc": [ - "default.handlebars->31->1356" + "default.handlebars->31->1369" ] }, { @@ -10247,7 +10268,7 @@ "zh-chs": "创建文件夹:“{0}”", "zh-cht": "創建文件夾:“{0}”", "xloc": [ - "default.handlebars->31->1704" + "default.handlebars->31->1717" ] }, { @@ -10267,7 +10288,7 @@ "zh-chs": "通过导入以下格式的JSON档案一次创建多个帐户:", "zh-cht": "通過導入以下格式的JSON檔案一次創建多個帳戶:", "xloc": [ - "default.handlebars->31->1837" + "default.handlebars->31->1850" ] }, { @@ -10309,7 +10330,7 @@ "zh-chs": "创建的设备组:{0}", "zh-cht": "創建的設備組:{0}", "xloc": [ - "default.handlebars->31->1715" + "default.handlebars->31->1728" ] }, { @@ -10329,7 +10350,7 @@ "zh-chs": "创建一个链接,该链接允许没有帐户的访客在有限的时间内远程控制此设备。", "zh-cht": "創建一個鏈接,該鏈接允許沒有帳戶的訪客在有限的時間內遠程控制此設備。", "xloc": [ - "default.handlebars->31->747" + "default.handlebars->31->760" ] }, { @@ -10383,7 +10404,7 @@ "zh-chs": "创建", "zh-cht": "創建", "xloc": [ - "default.handlebars->31->1998" + "default.handlebars->31->2011" ] }, { @@ -10403,7 +10424,7 @@ "zh-chs": "创建时间", "zh-cht": "創作時間", "xloc": [ - "default.handlebars->31->1403" + "default.handlebars->31->1416" ] }, { @@ -10445,8 +10466,8 @@ "zh-chs": "创建者", "zh-cht": "創作者", "xloc": [ - "default.handlebars->31->1401", - "default.handlebars->31->1402" + "default.handlebars->31->1414", + "default.handlebars->31->1415" ] }, { @@ -10466,7 +10487,7 @@ "zh-chs": "证书", "zh-cht": "證書", "xloc": [ - "default.handlebars->31->1373" + "default.handlebars->31->1386" ] }, { @@ -10486,7 +10507,7 @@ "zh-chs": "克里语", "zh-cht": "克里語", "xloc": [ - "default.handlebars->31->1163" + "default.handlebars->31->1176" ] }, { @@ -10506,7 +10527,7 @@ "zh-chs": "克罗地亚文", "zh-cht": "克羅地亞文", "xloc": [ - "default.handlebars->31->1164" + "default.handlebars->31->1177" ] }, { @@ -10571,8 +10592,8 @@ "default-mobile.handlebars->11->334", "default-mobile.handlebars->11->338", "default.handlebars->31->57", - "default.handlebars->31->901", - "default.handlebars->31->905", + "default.handlebars->31->914", + "default.handlebars->31->918", "terminal.handlebars->3->6" ] }, @@ -10680,8 +10701,8 @@ "nl": "Huidig wachtwoord is niet correct.", "fr": "Le mot de passe actuel n'est pas correct.", "xloc": [ - "default-mobile.handlebars->11->549", - "default.handlebars->31->2161" + "default-mobile.handlebars->11->566", + "default.handlebars->31->2174" ] }, { @@ -10739,7 +10760,7 @@ "zh-chs": "捷克文", "zh-cht": "捷克文", "xloc": [ - "default.handlebars->31->1165" + "default.handlebars->31->1178" ] }, { @@ -10779,7 +10800,7 @@ "zh-chs": "丹麦文", "zh-cht": "丹麥文", "xloc": [ - "default.handlebars->31->1166" + "default.handlebars->31->1179" ] }, { @@ -10799,7 +10820,7 @@ "zh-chs": "数据通道", "zh-cht": "數據通道", "xloc": [ - "default.handlebars->31->869", + "default.handlebars->31->882", "desktop.handlebars->3->11" ] }, @@ -10820,7 +10841,7 @@ "zh-chs": "日期和时间", "zh-cht": "日期和時間", "xloc": [ - "default.handlebars->31->1324" + "default.handlebars->31->1337" ] }, { @@ -10841,7 +10862,7 @@ "zh-cht": "天", "xloc": [ "default-mobile.handlebars->11->291", - "default.handlebars->31->796" + "default.handlebars->31->809" ] }, { @@ -10861,7 +10882,7 @@ "zh-chs": "停用", "zh-cht": "停用", "xloc": [ - "default.handlebars->31->1454" + "default.handlebars->31->1467" ] }, { @@ -10881,7 +10902,7 @@ "zh-chs": "如果设置停用CCM", "zh-cht": "如果設置停用CCM", "xloc": [ - "default.handlebars->31->1466" + "default.handlebars->31->1479" ] }, { @@ -10939,10 +10960,10 @@ "zh-chs": "默认", "zh-cht": "默認", "xloc": [ - "default.handlebars->31->1860", - "default.handlebars->31->1908", - "default.handlebars->31->1919", - "default.handlebars->31->1987" + "default.handlebars->31->1873", + "default.handlebars->31->1921", + "default.handlebars->31->1932", + "default.handlebars->31->2000" ] }, { @@ -10951,7 +10972,7 @@ "nl": "Del", "xloc": [ "default-mobile.handlebars->11->322", - "default.handlebars->31->889" + "default.handlebars->31->902" ] }, { @@ -10975,9 +10996,9 @@ "default-mobile.handlebars->11->355", "default-mobile.handlebars->container->page_content->column_l->p10->p10files->p13toolbar->1->2->1->1", "default-mobile.handlebars->container->page_content->column_l->p5->p5myfiles->p5toolbar->1->0->1->1", - "default.handlebars->31->1646", + "default.handlebars->31->1659", "default.handlebars->31->535", - "default.handlebars->31->965", + "default.handlebars->31->978", "default.handlebars->container->column_l->p13->p13toolbar->1->2->1->3", "default.handlebars->container->column_l->p5->p5toolbar->1->0->p5filehead->3", "default.handlebars->container->dialog->idx_dlgButtonBar->5", @@ -11006,7 +11027,7 @@ "zh-cht": "刪除帳戶", "xloc": [ "default-mobile.handlebars->11->95", - "default.handlebars->31->1341" + "default.handlebars->31->1354" ] }, { @@ -11026,7 +11047,7 @@ "zh-chs": "删除帐户", "zh-cht": "刪除帳戶", "xloc": [ - "default.handlebars->31->1827" + "default.handlebars->31->1840" ] }, { @@ -11047,7 +11068,7 @@ "zh-cht": "刪除裝置", "xloc": [ "default-mobile.handlebars->11->271", - "default.handlebars->31->650" + "default.handlebars->31->663" ] }, { @@ -11067,10 +11088,10 @@ "zh-chs": "删除群组", "zh-cht": "刪除群組", "xloc": [ - "default-mobile.handlebars->11->465", - "default-mobile.handlebars->11->468", - "default.handlebars->31->1450", - "default.handlebars->31->1483" + "default-mobile.handlebars->11->482", + "default-mobile.handlebars->11->485", + "default.handlebars->31->1463", + "default.handlebars->31->1496" ] }, { @@ -11091,7 +11112,7 @@ "zh-cht": "刪除節點", "xloc": [ "default-mobile.handlebars->11->299", - "default.handlebars->31->822" + "default.handlebars->31->835" ] }, { @@ -11131,7 +11152,7 @@ "zh-chs": "删除用户", "zh-cht": "刪除用戶", "xloc": [ - "default.handlebars->31->2039" + "default.handlebars->31->2052" ] }, { @@ -11151,8 +11172,8 @@ "zh-chs": "删除用户群组", "zh-cht": "刪除用戶群組", "xloc": [ - "default.handlebars->31->1957", - "default.handlebars->31->1967" + "default.handlebars->31->1970", + "default.handlebars->31->1980" ] }, { @@ -11172,7 +11193,7 @@ "zh-chs": "删除用户群组", "zh-cht": "刪除用戶群組", "xloc": [ - "default.handlebars->31->1906" + "default.handlebars->31->1919" ] }, { @@ -11192,7 +11213,7 @@ "zh-chs": "删除用户{0}", "zh-cht": "刪除用戶{0}", "xloc": [ - "default.handlebars->31->2062" + "default.handlebars->31->2075" ] }, { @@ -11213,7 +11234,7 @@ "zh-cht": "刪除帳戶", "xloc": [ "default-mobile.handlebars->container->page_content->column_l->p3->p3info->1->p3AccountActions->p2AccountActions->3->9->0", - "default.handlebars->31->1823", + "default.handlebars->31->1836", "default.handlebars->container->column_l->p2->p2info->p2AccountActions->3->p2AccountPassActions->7" ] }, @@ -11254,7 +11275,7 @@ "zh-chs": "删除群组", "zh-cht": "刪除群組", "xloc": [ - "default.handlebars->31->1902" + "default.handlebars->31->1915" ] }, { @@ -11294,7 +11315,7 @@ "zh-chs": "递归删除:“{0}”,{1}个元素已删除", "zh-cht": "遞歸刪除:“{0}”,{1}個元素已刪除", "xloc": [ - "default.handlebars->31->1706" + "default.handlebars->31->1719" ] }, { @@ -11316,8 +11337,8 @@ "xloc": [ "default-mobile.handlebars->11->135", "default-mobile.handlebars->11->357", - "default.handlebars->31->1648", - "default.handlebars->31->967" + "default.handlebars->31->1661", + "default.handlebars->31->980" ] }, { @@ -11337,7 +11358,7 @@ "zh-chs": "删除用户群组{0}?", "zh-cht": "刪除用戶群組{0}?", "xloc": [ - "default.handlebars->31->1965" + "default.handlebars->31->1978" ] }, { @@ -11359,8 +11380,8 @@ "xloc": [ "default-mobile.handlebars->11->134", "default-mobile.handlebars->11->356", - "default.handlebars->31->1647", - "default.handlebars->31->966" + "default.handlebars->31->1660", + "default.handlebars->31->979" ] }, { @@ -11400,7 +11421,7 @@ "zh-chs": "删除:“{0}”", "zh-cht": "刪除:“{0}”", "xloc": [ - "default.handlebars->31->1705" + "default.handlebars->31->1718" ] }, { @@ -11420,7 +11441,7 @@ "zh-chs": "删除:“{0}”,{1}个元素已删除", "zh-cht": "刪除:“{0}”,已刪除{1}個元素", "xloc": [ - "default.handlebars->31->1707" + "default.handlebars->31->1720" ] }, { @@ -11441,7 +11462,7 @@ "zh-cht": "被拒絕", "xloc": [ "default-mobile.handlebars->11->310", - "default.handlebars->31->865", + "default.handlebars->31->878", "desktop.handlebars->3->7", "terminal.handlebars->3->11" ] @@ -11536,21 +11557,21 @@ "default-mobile.handlebars->11->236", "default-mobile.handlebars->11->237", "default-mobile.handlebars->11->305", - "default-mobile.handlebars->11->400", - "default-mobile.handlebars->11->457", - "default-mobile.handlebars->11->470", - "default.handlebars->31->1018", - "default.handlebars->31->1028", - "default.handlebars->31->1361", - "default.handlebars->31->1398", - "default.handlebars->31->1485", - "default.handlebars->31->1911", - "default.handlebars->31->1921", - "default.handlebars->31->1922", - "default.handlebars->31->1963", + "default-mobile.handlebars->11->417", + "default-mobile.handlebars->11->474", + "default-mobile.handlebars->11->487", + "default.handlebars->31->1031", + "default.handlebars->31->1041", + "default.handlebars->31->1374", + "default.handlebars->31->1411", + "default.handlebars->31->1498", + "default.handlebars->31->1924", + "default.handlebars->31->1934", + "default.handlebars->31->1935", + "default.handlebars->31->1976", "default.handlebars->31->576", "default.handlebars->31->577", - "default.handlebars->31->860", + "default.handlebars->31->873", "default.handlebars->31->88", "default.handlebars->container->column_l->p42->p42tbl->1->0->3" ] @@ -11590,12 +11611,12 @@ "zh-cht": "桌面", "xloc": [ "default-mobile.handlebars->11->278", - "default.handlebars->31->1491", - "default.handlebars->31->2111", + "default.handlebars->31->1504", + "default.handlebars->31->2124", "default.handlebars->31->541", - "default.handlebars->31->695", - "default.handlebars->31->750", - "default.handlebars->31->931", + "default.handlebars->31->708", + "default.handlebars->31->763", + "default.handlebars->31->944", "default.handlebars->container->topbar->1->1->MainSubMenuSpan->MainSubMenu->1->0->MainDevDesktop", "default.handlebars->contextMenu->cxdesktop", "desktop.handlebars->3->23" @@ -11638,10 +11659,10 @@ "zh-chs": "桌面通知", "zh-cht": "桌面通知", "xloc": [ - "default.handlebars->31->1412", - "default.handlebars->31->1926", - "default.handlebars->31->2013", - "default.handlebars->31->614" + "default.handlebars->31->1425", + "default.handlebars->31->1939", + "default.handlebars->31->2026", + "default.handlebars->31->627" ] }, { @@ -11661,10 +11682,10 @@ "zh-chs": "桌面提示", "zh-cht": "桌面提示", "xloc": [ - "default.handlebars->31->1411", - "default.handlebars->31->1925", - "default.handlebars->31->2012", - "default.handlebars->31->613" + "default.handlebars->31->1424", + "default.handlebars->31->1938", + "default.handlebars->31->2025", + "default.handlebars->31->626" ] }, { @@ -11684,10 +11705,10 @@ "zh-chs": "桌面提示+工具栏", "zh-cht": "桌面提示+工具欄", "xloc": [ - "default.handlebars->31->1409", - "default.handlebars->31->1923", - "default.handlebars->31->2010", - "default.handlebars->31->611" + "default.handlebars->31->1422", + "default.handlebars->31->1936", + "default.handlebars->31->2023", + "default.handlebars->31->624" ] }, { @@ -11749,17 +11770,17 @@ "zh-chs": "桌面工具栏", "zh-cht": "桌面工具欄", "xloc": [ - "default.handlebars->31->1410", - "default.handlebars->31->1924", - "default.handlebars->31->2011", - "default.handlebars->31->612" + "default.handlebars->31->1423", + "default.handlebars->31->1937", + "default.handlebars->31->2024", + "default.handlebars->31->625" ] }, { "en": "Desktop, View only", "nl": "Desktop, Alleen kijken", "xloc": [ - "default.handlebars->31->751" + "default.handlebars->31->764" ] }, { @@ -11779,7 +11800,7 @@ "zh-chs": "桌面时段", "zh-cht": "桌面時段", "xloc": [ - "default.handlebars->31->930" + "default.handlebars->31->943" ] }, { @@ -11862,11 +11883,11 @@ "zh-chs": "设备", "zh-cht": "裝置", "xloc": [ - "default-mobile.handlebars->11->395", - "default.handlebars->31->1013", - "default.handlebars->31->1514", + "default-mobile.handlebars->11->412", + "default.handlebars->31->1026", + "default.handlebars->31->1527", "default.handlebars->31->197", - "default.handlebars->31->2081", + "default.handlebars->31->2094", "default.handlebars->container->column_l->p1->devListToolbarSpan->1->0->9->devListToolbarSort->sortselect->5" ] }, @@ -11889,7 +11910,7 @@ "xloc": [ "default-mobile.handlebars->11->288", "default-mobile.handlebars->11->289", - "default.handlebars->31->787" + "default.handlebars->31->800" ] }, { @@ -11930,16 +11951,16 @@ "zh-cht": "裝置群", "xloc": [ "agent-translations.json", - "default-mobile.handlebars->11->527", - "default.handlebars->31->1509", - "default.handlebars->31->1512", - "default.handlebars->31->1513", - "default.handlebars->31->1774", - "default.handlebars->31->1949", - "default.handlebars->31->1955", - "default.handlebars->31->2069", - "default.handlebars->31->2120", - "default.handlebars->31->2139" + "default-mobile.handlebars->11->544", + "default.handlebars->31->1522", + "default.handlebars->31->1525", + "default.handlebars->31->1526", + "default.handlebars->31->1787", + "default.handlebars->31->1962", + "default.handlebars->31->1968", + "default.handlebars->31->2082", + "default.handlebars->31->2133", + "default.handlebars->31->2152" ] }, { @@ -11959,8 +11980,8 @@ "zh-chs": "设备组用户", "zh-cht": "裝置群用戶", "xloc": [ - "default-mobile.handlebars->11->516", - "default.handlebars->31->1578" + "default-mobile.handlebars->11->533", + "default.handlebars->31->1591" ] }, { @@ -11981,11 +12002,11 @@ "zh-cht": "裝置群", "xloc": [ "default-mobile.handlebars->container->page_content->column_l->p3->p3info->1->3", - "default.handlebars->31->1790", - "default.handlebars->31->1896", - "default.handlebars->31->1936", - "default.handlebars->31->2007", - "default.handlebars->31->2190", + "default.handlebars->31->1803", + "default.handlebars->31->1909", + "default.handlebars->31->1949", + "default.handlebars->31->2020", + "default.handlebars->31->2203", "default.handlebars->container->column_l->p2->p2info->7" ] }, @@ -12026,7 +12047,7 @@ "zh-chs": "设备位置", "zh-cht": "裝置位置", "xloc": [ - "default.handlebars->31->823" + "default.handlebars->31->836" ] }, { @@ -12046,7 +12067,7 @@ "zh-chs": "设备消息", "zh-cht": "裝置訊息", "xloc": [ - "default.handlebars->31->744" + "default.handlebars->31->757" ] }, { @@ -12067,9 +12088,9 @@ "zh-cht": "裝置名稱", "xloc": [ "default-mobile.handlebars->11->303", - "default.handlebars->31->2119", + "default.handlebars->31->2132", "default.handlebars->31->305", - "default.handlebars->31->858", + "default.handlebars->31->871", "player.handlebars->3->9" ] }, @@ -12091,7 +12112,7 @@ "zh-cht": "裝置通知", "xloc": [ "default.handlebars->31->494", - "default.handlebars->31->746" + "default.handlebars->31->759" ] }, { @@ -12128,7 +12149,7 @@ "zh-chs": "设备共享链接", "zh-cht": "設備共享鏈接", "xloc": [ - "default.handlebars->31->691" + "default.handlebars->31->704" ] }, { @@ -12168,8 +12189,8 @@ "zh-chs": "设备连接。", "zh-cht": "裝置連接。", "xloc": [ - "default.handlebars->31->1329", - "default.handlebars->31->1599" + "default.handlebars->31->1342", + "default.handlebars->31->1612" ] }, { @@ -12189,8 +12210,8 @@ "zh-chs": "设备断开连接。", "zh-cht": "裝置斷開連接。", "xloc": [ - "default.handlebars->31->1330", - "default.handlebars->31->1600" + "default.handlebars->31->1343", + "default.handlebars->31->1613" ] }, { @@ -12210,7 +12231,7 @@ "zh-chs": "创建的设备组:{0}", "zh-cht": "設備組已創建:{0}", "xloc": [ - "default.handlebars->31->1736" + "default.handlebars->31->1749" ] }, { @@ -12230,7 +12251,7 @@ "zh-chs": "设备组已删除:{0}", "zh-cht": "設備組已刪除:{0}", "xloc": [ - "default.handlebars->31->1737" + "default.handlebars->31->1750" ] }, { @@ -12250,7 +12271,7 @@ "zh-chs": "设备组成员身份已更改:{0}", "zh-cht": "設備組成員身份已更改:{0}", "xloc": [ - "default.handlebars->31->1738" + "default.handlebars->31->1751" ] }, { @@ -12270,7 +12291,7 @@ "zh-chs": "其他设备组管理员可以查看和更改设备组注释。", "zh-cht": "其他裝置群管理員可以查看和更改裝置群註釋。", "xloc": [ - "default.handlebars->31->741" + "default.handlebars->31->754" ] }, { @@ -12290,7 +12311,7 @@ "zh-chs": "设备组通知已更改", "zh-cht": "設備組通知已更改", "xloc": [ - "default.handlebars->31->1733" + "default.handlebars->31->1746" ] }, { @@ -12310,7 +12331,7 @@ "zh-chs": "未删除的设备组:{0}", "zh-cht": "未刪除的設備組:{0}", "xloc": [ - "default.handlebars->31->1716" + "default.handlebars->31->1729" ] }, { @@ -12703,7 +12724,7 @@ "zh-chs": "设备请求激活Intel(R)AMT ACM,FQDN:{0}", "zh-cht": "設備請求激活Intel(R)AMT ACM,FQDN:{0}", "xloc": [ - "default.handlebars->31->1718" + "default.handlebars->31->1731" ] }, { @@ -12740,8 +12761,8 @@ "zh-chs": "设备", "zh-cht": "裝置", "xloc": [ - "default.handlebars->31->1897", - "default.handlebars->31->1937" + "default.handlebars->31->1910", + "default.handlebars->31->1950" ] }, { @@ -12761,7 +12782,8 @@ "zh-chs": "已禁用", "zh-cht": "已禁用", "xloc": [ - "default.handlebars->31->607" + "default-mobile.handlebars->11->398", + "default.handlebars->31->620" ] }, { @@ -12781,7 +12803,7 @@ "zh-chs": "禁用的电子邮件两因素身份验证", "zh-cht": "禁用的電子郵件兩因素身份驗證", "xloc": [ - "default.handlebars->31->1749" + "default.handlebars->31->1762" ] }, { @@ -12804,8 +12826,8 @@ "agent-translations.json", "default-mobile.handlebars->11->346", "default-mobile.handlebars->container->page_content->column_l->p10->p10desktop->deskarea1->1->3", - "default.handlebars->31->1422", - "default.handlebars->31->947", + "default.handlebars->31->1435", + "default.handlebars->31->960", "default.handlebars->container->column_l->p11->deskarea0->deskarea1->3->disconnectbutton1span", "default.handlebars->container->column_l->p12->termTable->1->1->0->1->3->disconnectbutton2span", "desktop.handlebars->p11->deskarea0->deskarea1->3->disconnectbutton1span", @@ -12905,7 +12927,7 @@ "zh-chs": "在远程设备上显示一个消息框。", "zh-cht": "在遠程裝置上顯示一個訊息框。", "xloc": [ - "default.handlebars->31->745" + "default.handlebars->31->758" ] }, { @@ -12945,7 +12967,7 @@ "zh-chs": "在远程设备上显示短信", "zh-cht": "在遠程裝置上顯示短信", "xloc": [ - "default.handlebars->31->644" + "default.handlebars->31->657" ] }, { @@ -12965,7 +12987,7 @@ "zh-chs": "显示设备组名称", "zh-cht": "顯示裝置群名稱", "xloc": [ - "default.handlebars->31->1328" + "default.handlebars->31->1341" ] }, { @@ -12985,7 +13007,7 @@ "zh-chs": "显示名称", "zh-cht": "顯示名稱", "xloc": [ - "default.handlebars->31->916" + "default.handlebars->31->929" ] }, { @@ -13005,7 +13027,7 @@ "zh-chs": "显示公共连结", "zh-cht": "顯示公共鏈結", "xloc": [ - "default.handlebars->31->1619" + "default.handlebars->31->1632" ] }, { @@ -13025,7 +13047,7 @@ "zh-chs": "显示消息框,标题= “{0}”,消息= “{1}”", "zh-cht": "顯示消息框,標題= “{0}”,消息= “{1}”", "xloc": [ - "default.handlebars->31->1678" + "default.handlebars->31->1691" ] }, { @@ -13045,7 +13067,7 @@ "zh-chs": "显示吐司消息,标题= “{0}”,消息= “{1}”", "zh-cht": "顯示吐司消息,標題= “{0}”,消息= “{1}”", "xloc": [ - "default.handlebars->31->1686" + "default.handlebars->31->1699" ] }, { @@ -13065,8 +13087,8 @@ "zh-chs": "什么都不做", "zh-cht": "什麼都不做", "xloc": [ - "default.handlebars->31->1469", - "default.handlebars->31->1473" + "default.handlebars->31->1482", + "default.handlebars->31->1486" ] }, { @@ -13086,10 +13108,10 @@ "zh-chs": "域", "zh-cht": "域", "xloc": [ - "default.handlebars->31->1861", - "default.handlebars->31->1909", - "default.handlebars->31->1918", - "default.handlebars->31->1986", + "default.handlebars->31->1874", + "default.handlebars->31->1922", + "default.handlebars->31->1931", + "default.handlebars->31->1999", "mstsc.handlebars->main->1->3->1->2->1->0", "mstsc.handlebars->main->1->3->1->2->3" ] @@ -13111,7 +13133,7 @@ "zh-chs": "请勿更改,如果设置请保留CCM", "zh-cht": "請勿更改,如果設置請保留CCM", "xloc": [ - "default.handlebars->31->1465" + "default.handlebars->31->1478" ] }, { @@ -13148,7 +13170,7 @@ "zh-chs": "不要连接到服务器", "zh-cht": "不要連接到伺服器", "xloc": [ - "default.handlebars->31->1474" + "default.handlebars->31->1487" ] }, { @@ -13213,7 +13235,7 @@ "nl": "Omlaag", "xloc": [ "default-mobile.handlebars->11->330", - "default.handlebars->31->897" + "default.handlebars->31->910" ] }, { @@ -13277,7 +13299,7 @@ "zh-cht": "下載檔案", "xloc": [ "default-mobile.handlebars->11->376", - "default.handlebars->31->986" + "default.handlebars->31->999" ] }, { @@ -13317,7 +13339,7 @@ "zh-chs": "下载MeshCmd", "zh-cht": "下載MeshCmd", "xloc": [ - "default.handlebars->31->848" + "default.handlebars->31->861" ] }, { @@ -13377,7 +13399,7 @@ "zh-chs": "下载报告", "zh-cht": "下載報告", "xloc": [ - "default.handlebars->31->1779", + "default.handlebars->31->1792", "default.handlebars->container->column_l->p3->3->1->0->3" ] }, @@ -13398,7 +13420,7 @@ "zh-chs": "下载带有指令档案的“ meshcmd”,以通过此服务器将网络讯息发送到该设备。紧记编辑meshaction.txt并添加您的帐户密码或进行任何必要的更改。", "zh-cht": "下載帶有指令檔案的“ meshcmd”,以通過此服務器將網絡讯息發送到該裝置。緊記編輯meshaction.txt並新增你的帳戶密碼或進行任何必要的更改。", "xloc": [ - "default.handlebars->31->841" + "default.handlebars->31->854" ] }, { @@ -13478,7 +13500,7 @@ "zh-chs": "下载电源事件", "zh-cht": "下載電源事件", "xloc": [ - "default.handlebars->31->797" + "default.handlebars->31->810" ] }, { @@ -13578,7 +13600,7 @@ "zh-chs": "使用以下一种档案格式下载事件列表。", "zh-cht": "使用以下一種檔案格式下載事件列表。", "xloc": [ - "default.handlebars->31->1780" + "default.handlebars->31->1793" ] }, { @@ -13598,7 +13620,7 @@ "zh-chs": "使用以下一种档案格式下载用户列表。", "zh-cht": "使用以下一種檔案格式下載用戶列表。", "xloc": [ - "default.handlebars->31->1845" + "default.handlebars->31->1858" ] }, { @@ -13679,7 +13701,7 @@ "zh-chs": "下载:“{0}”", "zh-cht": "下載:“{0}”", "xloc": [ - "default.handlebars->31->1709" + "default.handlebars->31->1722" ] }, { @@ -13719,7 +13741,7 @@ "zh-chs": "代理重复", "zh-cht": "代理重複", "xloc": [ - "default.handlebars->31->2186" + "default.handlebars->31->2199" ] }, { @@ -13759,7 +13781,7 @@ "zh-chs": "复制用户组", "zh-cht": "複製用戶群", "xloc": [ - "default.handlebars->31->1913" + "default.handlebars->31->1926" ] }, { @@ -13796,8 +13818,8 @@ "zh-chs": "持续时间", "zh-cht": "持續時間", "xloc": [ - "default.handlebars->31->2105", - "default.handlebars->31->2125", + "default.handlebars->31->2118", + "default.handlebars->31->2138", "player.handlebars->3->2" ] }, @@ -13835,7 +13857,7 @@ "zh-chs": "荷兰文(比利时)", "zh-cht": "荷蘭文(比利時)", "xloc": [ - "default.handlebars->31->1168" + "default.handlebars->31->1181" ] }, { @@ -13855,7 +13877,7 @@ "zh-chs": "荷兰文(标准)", "zh-cht": "荷蘭文(標準)", "xloc": [ - "default.handlebars->31->1167" + "default.handlebars->31->1180" ] }, { @@ -14144,7 +14166,7 @@ "zh-cht": "編輯裝置", "xloc": [ "default-mobile.handlebars->11->308", - "default.handlebars->31->863" + "default.handlebars->31->876" ] }, { @@ -14164,13 +14186,13 @@ "zh-chs": "编辑设备组", "zh-cht": "編輯裝置群", "xloc": [ - "default-mobile.handlebars->11->471", - "default-mobile.handlebars->11->473", - "default-mobile.handlebars->11->493", - "default.handlebars->31->1486", - "default.handlebars->31->1518", - "default.handlebars->31->1542", - "default.handlebars->31->1554" + "default-mobile.handlebars->11->488", + "default-mobile.handlebars->11->490", + "default-mobile.handlebars->11->510", + "default.handlebars->31->1499", + "default.handlebars->31->1531", + "default.handlebars->31->1555", + "default.handlebars->31->1567" ] }, { @@ -14190,7 +14212,7 @@ "zh-chs": "编辑设备组功能", "zh-cht": "編輯裝置群功能", "xloc": [ - "default.handlebars->31->1504" + "default.handlebars->31->1517" ] }, { @@ -14210,8 +14232,8 @@ "zh-chs": "编辑设备组权限", "zh-cht": "編輯裝置群權限", "xloc": [ - "default.handlebars->31->1539", - "default.handlebars->31->1551" + "default.handlebars->31->1552", + "default.handlebars->31->1564" ] }, { @@ -14231,7 +14253,7 @@ "zh-chs": "编辑设备组用户同意", "zh-cht": "編輯裝置群用戶同意", "xloc": [ - "default.handlebars->31->1487" + "default.handlebars->31->1500" ] }, { @@ -14251,8 +14273,8 @@ "zh-chs": "编辑设备笔记", "zh-cht": "編輯裝置筆記", "xloc": [ - "default-mobile.handlebars->11->485", - "default.handlebars->31->1531" + "default-mobile.handlebars->11->502", + "default.handlebars->31->1544" ] }, { @@ -14272,8 +14294,8 @@ "zh-chs": "编辑设备权限", "zh-cht": "編輯裝置權限", "xloc": [ - "default.handlebars->31->1544", - "default.handlebars->31->1546" + "default.handlebars->31->1557", + "default.handlebars->31->1559" ] }, { @@ -14313,7 +14335,7 @@ "zh-chs": "编辑设备用户同意", "zh-cht": "編輯裝置用戶同意", "xloc": [ - "default.handlebars->31->1489" + "default.handlebars->31->1502" ] }, { @@ -14333,7 +14355,7 @@ "zh-chs": "编辑群组", "zh-cht": "編輯群組", "xloc": [ - "default.handlebars->31->719" + "default.handlebars->31->732" ] }, { @@ -14360,7 +14382,7 @@ "default.handlebars->31->591", "default.handlebars->31->594", "default.handlebars->31->597", - "default.handlebars->31->804" + "default.handlebars->31->817" ] }, { @@ -14380,8 +14402,8 @@ "zh-chs": "编辑笔记", "zh-cht": "編輯筆記", "xloc": [ - "default-mobile.handlebars->11->500", - "default.handlebars->31->1561" + "default-mobile.handlebars->11->517", + "default.handlebars->31->1574" ] }, { @@ -14401,7 +14423,7 @@ "zh-chs": "编辑用户同意", "zh-cht": "編輯用戶同意", "xloc": [ - "default.handlebars->31->1488" + "default.handlebars->31->1501" ] }, { @@ -14421,7 +14443,7 @@ "zh-chs": "编辑用户设备组权限", "zh-cht": "編輯用戶裝置群權限", "xloc": [ - "default.handlebars->31->1552" + "default.handlebars->31->1565" ] }, { @@ -14441,7 +14463,7 @@ "zh-chs": "编辑用户设备权限", "zh-cht": "編輯用戶裝置權限", "xloc": [ - "default.handlebars->31->1547" + "default.handlebars->31->1560" ] }, { @@ -14461,7 +14483,7 @@ "zh-chs": "编辑用户组", "zh-cht": "編輯用戶群", "xloc": [ - "default.handlebars->31->1964" + "default.handlebars->31->1977" ] }, { @@ -14481,7 +14503,7 @@ "zh-chs": "编辑用户组设备权限", "zh-cht": "編輯用戶群裝置權限", "xloc": [ - "default.handlebars->31->1549" + "default.handlebars->31->1562" ] }, { @@ -14501,7 +14523,7 @@ "zh-chs": "编辑用户组用户同意", "zh-cht": "編輯用戶組用戶同意", "xloc": [ - "default.handlebars->31->1490" + "default.handlebars->31->1503" ] }, { @@ -14583,11 +14605,11 @@ "zh-cht": "電郵", "xloc": [ "default-mobile.handlebars->11->89", - "default.handlebars->31->1863", - "default.handlebars->31->1990", - "default.handlebars->31->1992", - "default.handlebars->31->2032", - "default.handlebars->31->2050", + "default.handlebars->31->1876", + "default.handlebars->31->2003", + "default.handlebars->31->2005", + "default.handlebars->31->2045", + "default.handlebars->31->2063", "default.handlebars->31->337", "login-mobile.handlebars->5->42", "login-mobile.handlebars->container->page_content->column_l->1->1->0->1->tokenpanel->1->7->1->4->1->3", @@ -14620,7 +14642,7 @@ "zh-cht": "電郵地址變更", "xloc": [ "default-mobile.handlebars->11->90", - "default.handlebars->31->1337" + "default.handlebars->31->1350" ] }, { @@ -14641,7 +14663,7 @@ "zh-cht": "電郵認證", "xloc": [ "default-mobile.handlebars->11->79", - "default.handlebars->31->1105" + "default.handlebars->31->1118" ] }, { @@ -14701,7 +14723,7 @@ "zh-cht": "電郵驗證", "xloc": [ "default-mobile.handlebars->11->88", - "default.handlebars->31->1335" + "default.handlebars->31->1348" ] }, { @@ -14741,7 +14763,7 @@ "zh-chs": "电邮未验证", "zh-cht": "電郵未驗證", "xloc": [ - "default.handlebars->31->1809" + "default.handlebars->31->1822" ] }, { @@ -14761,8 +14783,8 @@ "zh-chs": "电子邮件已验证", "zh-cht": "電子郵件已驗證", "xloc": [ - "default.handlebars->31->1810", - "default.handlebars->31->1984" + "default.handlebars->31->1823", + "default.handlebars->31->1997" ] }, { @@ -14782,7 +14804,7 @@ "zh-chs": "电邮已验证。", "zh-cht": "電郵已驗證。", "xloc": [ - "default.handlebars->31->1869" + "default.handlebars->31->1882" ] }, { @@ -14802,7 +14824,7 @@ "zh-chs": "电邮未验证", "zh-cht": "電郵未驗證", "xloc": [ - "default.handlebars->31->1985" + "default.handlebars->31->1998" ] }, { @@ -14822,8 +14844,8 @@ "zh-chs": "电邮已发送。", "zh-cht": "電郵已發送。", "xloc": [ - "default-mobile.handlebars->11->542", - "default.handlebars->31->2154", + "default-mobile.handlebars->11->559", + "default.handlebars->31->2167", "login-mobile.handlebars->5->2", "login.handlebars->5->2", "login2.handlebars->7->3" @@ -14868,7 +14890,7 @@ "zh-chs": "已通过电邮验证,并且需要重置密码。", "zh-cht": "已通過電郵驗證,並且需要重置密碼。", "xloc": [ - "default.handlebars->31->1870" + "default.handlebars->31->1883" ] }, { @@ -14888,7 +14910,7 @@ "zh-chs": "电邮/短信流量", "zh-cht": "電郵/短信流量", "xloc": [ - "default.handlebars->31->2230" + "default.handlebars->31->2243" ] }, { @@ -14934,7 +14956,7 @@ "zh-chs": "启用邀请代码", "zh-cht": "啟用邀請代碼", "xloc": [ - "default.handlebars->31->1584" + "default.handlebars->31->1597" ] }, { @@ -14975,7 +14997,7 @@ "zh-cht": "啟用電郵二因子鑑別。", "xloc": [ "default-mobile.handlebars->11->81", - "default.handlebars->31->1107" + "default.handlebars->31->1120" ] }, { @@ -15015,7 +15037,7 @@ "zh-chs": "已启用", "zh-cht": "已啟用", "xloc": [ - "default.handlebars->31->2127" + "default.handlebars->31->2140" ] }, { @@ -15035,7 +15057,7 @@ "zh-chs": "启用电子邮件两因素身份验证", "zh-cht": "啟用電子郵件兩因素身份驗證", "xloc": [ - "default.handlebars->31->1748" + "default.handlebars->31->1761" ] }, { @@ -15064,7 +15086,7 @@ "nl": "End", "xloc": [ "default-mobile.handlebars->11->324", - "default.handlebars->31->891" + "default.handlebars->31->904" ] }, { @@ -15084,7 +15106,7 @@ "zh-chs": "时间结束", "zh-cht": "時間結束", "xloc": [ - "default.handlebars->31->2124" + "default.handlebars->31->2137" ] }, { @@ -15104,7 +15126,7 @@ "zh-chs": "从{1}到{2},{3}秒结束了桌面会话“{0}”", "zh-cht": "從{1}到{2},{3}秒結束了桌面會話“{0}”", "xloc": [ - "default.handlebars->31->1671" + "default.handlebars->31->1684" ] }, { @@ -15124,7 +15146,7 @@ "zh-chs": "从{1}到{2},{3}秒结束了文件管理会话“{0}”", "zh-cht": "從{1}到{2},{3}秒結束了文件管理會話“{0}”", "xloc": [ - "default.handlebars->31->1672" + "default.handlebars->31->1685" ] }, { @@ -15144,7 +15166,7 @@ "zh-chs": "从{1}到{2},{3}秒结束了中继会话“{0}”", "zh-cht": "從{1}到{2},{3}秒結束了中繼會話“{0}”", "xloc": [ - "default.handlebars->31->1669" + "default.handlebars->31->1682" ] }, { @@ -15164,7 +15186,7 @@ "zh-chs": "从{1}到{2},{3}秒结束了终端会话“{0}”", "zh-cht": "從{1}到{2},{3}秒結束了終端會話“{0}”", "xloc": [ - "default.handlebars->31->1670" + "default.handlebars->31->1683" ] }, { @@ -15184,7 +15206,7 @@ "zh-chs": "英文", "zh-cht": "英文", "xloc": [ - "default.handlebars->31->1169" + "default.handlebars->31->1182" ] }, { @@ -15204,7 +15226,7 @@ "zh-chs": "英文(澳洲)", "zh-cht": "英文(澳洲)", "xloc": [ - "default.handlebars->31->1170" + "default.handlebars->31->1183" ] }, { @@ -15224,7 +15246,7 @@ "zh-chs": "英文(伯利茲)", "zh-cht": "英文(伯利茲)", "xloc": [ - "default.handlebars->31->1171" + "default.handlebars->31->1184" ] }, { @@ -15244,7 +15266,7 @@ "zh-chs": "英文(加拿大)", "zh-cht": "英文(加拿大)", "xloc": [ - "default.handlebars->31->1172" + "default.handlebars->31->1185" ] }, { @@ -15264,7 +15286,7 @@ "zh-chs": "英文(爱尔兰)", "zh-cht": "英文(愛爾蘭)", "xloc": [ - "default.handlebars->31->1173" + "default.handlebars->31->1186" ] }, { @@ -15284,7 +15306,7 @@ "zh-chs": "英文(牙买加)", "zh-cht": "英文(牙買加)", "xloc": [ - "default.handlebars->31->1174" + "default.handlebars->31->1187" ] }, { @@ -15304,7 +15326,7 @@ "zh-chs": "英文(纽西兰)", "zh-cht": "英文(紐西蘭)", "xloc": [ - "default.handlebars->31->1175" + "default.handlebars->31->1188" ] }, { @@ -15324,7 +15346,7 @@ "zh-chs": "英文(菲律宾)", "zh-cht": "英文(菲律賓)", "xloc": [ - "default.handlebars->31->1176" + "default.handlebars->31->1189" ] }, { @@ -15344,7 +15366,7 @@ "zh-chs": "英语(南非)", "zh-cht": "英語(南非)", "xloc": [ - "default.handlebars->31->1177" + "default.handlebars->31->1190" ] }, { @@ -15364,7 +15386,7 @@ "zh-chs": "英文(特立尼达和多巴哥)", "zh-cht": "英文(特立尼達和多巴哥)", "xloc": [ - "default.handlebars->31->1178" + "default.handlebars->31->1191" ] }, { @@ -15384,7 +15406,7 @@ "zh-chs": "英文(英国)", "zh-cht": "英文(英國)", "xloc": [ - "default.handlebars->31->1179" + "default.handlebars->31->1192" ] }, { @@ -15404,7 +15426,7 @@ "zh-chs": "美国英文", "zh-cht": "美國英語", "xloc": [ - "default.handlebars->31->1180" + "default.handlebars->31->1193" ] }, { @@ -15424,7 +15446,7 @@ "zh-chs": "英文(津巴布韦)", "zh-cht": "英文(津巴布韋)", "xloc": [ - "default.handlebars->31->1181" + "default.handlebars->31->1194" ] }, { @@ -15445,10 +15467,10 @@ "zh-cht": "輸入", "xloc": [ "default-mobile.handlebars->11->319", - "default.handlebars->31->1363", - "default.handlebars->31->1364", - "default.handlebars->31->886", - "default.handlebars->31->959" + "default.handlebars->31->1376", + "default.handlebars->31->1377", + "default.handlebars->31->899", + "default.handlebars->31->972" ] }, { @@ -15468,7 +15490,7 @@ "zh-chs": "输入管理领域名称的逗号分隔列表。", "zh-cht": "輸入管理領域名稱的逗號分隔列表。", "xloc": [ - "default.handlebars->31->1874" + "default.handlebars->31->1887" ] }, { @@ -15528,7 +15550,7 @@ "zh-chs": "输入文本,然后单击确定以远程键入它。在继续操作之前,请确保将远程光标放置在正确的位置。", "zh-cht": "輸入文本,然後單擊確定以遠程鍵入它。在繼續操作之前,請確保將遠程光標放置在正確的位置。", "xloc": [ - "default.handlebars->31->910" + "default.handlebars->31->923" ] }, { @@ -15590,7 +15612,7 @@ "zh-chs": "输入支持SMS的电话号码。验证后,该号码可用于登录验证和其他通知。", "zh-cht": "輸入支持SMS的電話號碼。驗證後,該號碼可用於登入驗證和其他通知。", "xloc": [ - "default.handlebars->31->1102" + "default.handlebars->31->1115" ] }, { @@ -15618,8 +15640,8 @@ "nl": "Fout, uitnodigingscode \\\"{0}\\\" al in gebruik.", "fr": "Erreur, code d'invitation \\\"{0}\\\" déjà utilisé.", "xloc": [ - "default-mobile.handlebars->11->550", - "default.handlebars->31->2162" + "default-mobile.handlebars->11->567", + "default.handlebars->31->2175" ] }, { @@ -15627,8 +15649,8 @@ "nl": "Fout, wachtwoord niet gewijzigd.", "fr": "Erreur, mot de passe non modifié.", "xloc": [ - "default-mobile.handlebars->11->547", - "default.handlebars->31->2159" + "default-mobile.handlebars->11->564", + "default.handlebars->31->2172" ] }, { @@ -15636,8 +15658,8 @@ "nl": "Fout, het is niet mogelijk om naar algemeen gebruikt wachtwoord te veranderen.", "fr": "Erreur, impossible de changer le mot de passe couramment utilisé.", "xloc": [ - "default-mobile.handlebars->11->546", - "default.handlebars->31->2158" + "default-mobile.handlebars->11->563", + "default.handlebars->31->2171" ] }, { @@ -15645,8 +15667,8 @@ "nl": "Fout, kan niet wijzigen naar eerder gebruikt wachtwoord.", "fr": "Erreur, impossible de changer le mot de passe précédemment utilisé.", "xloc": [ - "default-mobile.handlebars->11->545", - "default.handlebars->31->2157" + "default-mobile.handlebars->11->562", + "default.handlebars->31->2170" ] }, { @@ -15675,7 +15697,7 @@ "nl": "Escape", "xloc": [ "default-mobile.handlebars->11->320", - "default.handlebars->31->887" + "default.handlebars->31->900" ] }, { @@ -15695,7 +15717,7 @@ "zh-chs": "世界文", "zh-cht": "世界語", "xloc": [ - "default.handlebars->31->1182" + "default.handlebars->31->1195" ] }, { @@ -15715,7 +15737,7 @@ "zh-chs": "爱沙尼亚文", "zh-cht": "愛沙尼亞語", "xloc": [ - "default.handlebars->31->1183" + "default.handlebars->31->1196" ] }, { @@ -15735,7 +15757,7 @@ "zh-chs": "事件详情", "zh-cht": "事件詳情", "xloc": [ - "default.handlebars->31->999" + "default.handlebars->31->1012" ] }, { @@ -15755,7 +15777,7 @@ "zh-chs": "事件列表输出", "zh-cht": "事件列表輸出", "xloc": [ - "default.handlebars->31->1785" + "default.handlebars->31->1798" ] }, { @@ -15861,7 +15883,7 @@ "zh-cht": "到期時間", "xloc": [ "default.handlebars->31->203", - "default.handlebars->31->771" + "default.handlebars->31->784" ] }, { @@ -15943,7 +15965,7 @@ "zh-chs": "扩充式ASCII", "zh-cht": "擴充式ASCII", "xloc": [ - "default.handlebars->31->938", + "default.handlebars->31->951", "terminal.handlebars->3->16" ] }, @@ -15985,7 +16007,7 @@ "zh-chs": "外部", "zh-cht": "外部", "xloc": [ - "default.handlebars->31->2213" + "default.handlebars->31->2226" ] }, { @@ -16025,7 +16047,7 @@ "zh-chs": "FYRO马其顿语", "zh-cht": "FYRO馬其頓語", "xloc": [ - "default.handlebars->31->1233" + "default.handlebars->31->1246" ] }, { @@ -16045,7 +16067,7 @@ "zh-chs": "法罗语", "zh-cht": "法羅語", "xloc": [ - "default.handlebars->31->1184" + "default.handlebars->31->1197" ] }, { @@ -16073,8 +16095,8 @@ "nl": "E-mailadres kan niet worden gewijzigd, een ander account gebruikt al: {0}.", "fr": "Échec de la modification de l'adresse e-mail, un autre compte utilise déjà: {0}.", "xloc": [ - "default-mobile.handlebars->11->541", - "default.handlebars->31->2153" + "default-mobile.handlebars->11->558", + "default.handlebars->31->2166" ] }, { @@ -16094,7 +16116,7 @@ "zh-chs": "本地用户拒绝后无法启动远程桌面", "zh-cht": "本地用戶拒絕後無法啟動遠程桌面", "xloc": [ - "default.handlebars->31->1694" + "default.handlebars->31->1707" ] }, { @@ -16114,7 +16136,7 @@ "zh-chs": "本地用户拒绝后无法启动远程文件", "zh-cht": "本地用戶拒絕後無法啟動遠程文件", "xloc": [ - "default.handlebars->31->1701" + "default.handlebars->31->1714" ] }, { @@ -16135,7 +16157,7 @@ "zh-cht": "無法啟動遠程終端接合{0}({1})", "xloc": [ "default-mobile.handlebars->11->311", - "default.handlebars->31->866", + "default.handlebars->31->879", "desktop.handlebars->3->8", "terminal.handlebars->3->12" ] @@ -16157,7 +16179,7 @@ "zh-chs": "波斯文(波斯文)", "zh-cht": "波斯語(波斯語)", "xloc": [ - "default.handlebars->31->1185" + "default.handlebars->31->1198" ] }, { @@ -16199,7 +16221,7 @@ "zh-chs": "功能", "zh-cht": "功能", "xloc": [ - "default.handlebars->31->1408" + "default.handlebars->31->1421" ] }, { @@ -16219,7 +16241,7 @@ "zh-chs": "斐济", "zh-cht": "斐濟", "xloc": [ - "default.handlebars->31->1186" + "default.handlebars->31->1199" ] }, { @@ -16261,7 +16283,7 @@ "xloc": [ "default-mobile.handlebars->11->360", "default.handlebars->31->533", - "default.handlebars->31->970" + "default.handlebars->31->983" ] }, { @@ -16297,8 +16319,8 @@ "zh-chs": "档案操作", "zh-cht": "檔案操作", "xloc": [ - "default.handlebars->31->950", - "default.handlebars->31->952" + "default.handlebars->31->963", + "default.handlebars->31->965" ] }, { @@ -16338,7 +16360,7 @@ "zh-chs": "文件系统驱动", "zh-cht": "FileSystemDriver", "xloc": [ - "default.handlebars->31->919" + "default.handlebars->31->932" ] }, { @@ -16360,8 +16382,8 @@ "xloc": [ "default-mobile.handlebars->11->182", "default-mobile.handlebars->11->279", - "default.handlebars->31->1498", - "default.handlebars->31->2112", + "default.handlebars->31->1511", + "default.handlebars->31->2125", "default.handlebars->31->276", "default.handlebars->container->topbar->1->1->MainSubMenuSpan->MainSubMenu->1->0->MainDevFiles", "default.handlebars->contextMenu->cxfiles" @@ -16404,10 +16426,10 @@ "zh-chs": "档案通知", "zh-cht": "檔案通知", "xloc": [ - "default.handlebars->31->1416", - "default.handlebars->31->1930", - "default.handlebars->31->2017", - "default.handlebars->31->618" + "default.handlebars->31->1429", + "default.handlebars->31->1943", + "default.handlebars->31->2030", + "default.handlebars->31->631" ] }, { @@ -16427,10 +16449,10 @@ "zh-chs": "档案提示", "zh-cht": "檔案提示", "xloc": [ - "default.handlebars->31->1415", - "default.handlebars->31->1929", - "default.handlebars->31->2016", - "default.handlebars->31->617" + "default.handlebars->31->1428", + "default.handlebars->31->1942", + "default.handlebars->31->2029", + "default.handlebars->31->630" ] }, { @@ -16451,7 +16473,7 @@ "zh-cht": "過濾", "xloc": [ "default-mobile.handlebars->container->page_content->column_l->p2->xdevicesBar->1", - "default.handlebars->31->955", + "default.handlebars->31->968", "default.handlebars->container->column_l->p1->devListToolbarSpan->1->0->devListToolbar", "default.handlebars->container->column_l->p1->devListToolbarSpan->1->0->kvmListToolbar", "default.handlebars->container->column_l->p4->3->1->0->3->3" @@ -16494,7 +16516,7 @@ "zh-chs": "查找文件", "zh-cht": "查找文件", "xloc": [ - "default.handlebars->31->958" + "default.handlebars->31->971" ] }, { @@ -16514,7 +16536,7 @@ "zh-chs": "录制会话已完成,{0}秒", "zh-cht": "錄製會話已完成,{0}秒", "xloc": [ - "default.handlebars->31->1667" + "default.handlebars->31->1680" ] }, { @@ -16534,7 +16556,16 @@ "zh-chs": "芬兰", "zh-cht": "芬蘭", "xloc": [ - "default.handlebars->31->1187" + "default.handlebars->31->1200" + ] + }, + { + "en": "Firewall", + "xloc": [ + "default-mobile.handlebars->11->393", + "default-mobile.handlebars->11->395", + "default.handlebars->31->615", + "default.handlebars->31->617" ] }, { @@ -16701,8 +16732,8 @@ "zh-chs": "下次登录时强制重置密码。", "zh-cht": "下次登入時強制重置密碼。", "xloc": [ - "default.handlebars->31->1868", - "default.handlebars->31->2059" + "default.handlebars->31->1881", + "default.handlebars->31->2072" ] }, { @@ -16785,7 +16816,7 @@ "zh-chs": "格式化", "zh-cht": "格式化", "xloc": [ - "default.handlebars->31->1776" + "default.handlebars->31->1789" ] }, { @@ -16826,8 +16857,8 @@ "zh-chs": "自由", "zh-cht": "自由", "xloc": [ - "default.handlebars->31->2171", - "default.handlebars->31->2173" + "default.handlebars->31->2184", + "default.handlebars->31->2186" ] }, { @@ -16868,7 +16899,7 @@ "zh-chs": "法文(比利时)", "zh-cht": "法語(比利時)", "xloc": [ - "default.handlebars->31->1189" + "default.handlebars->31->1202" ] }, { @@ -16888,7 +16919,7 @@ "zh-chs": "法文(加拿大)", "zh-cht": "法語(加拿大)", "xloc": [ - "default.handlebars->31->1190" + "default.handlebars->31->1203" ] }, { @@ -16908,7 +16939,7 @@ "zh-chs": "法文(法国)", "zh-cht": "法語(法國)", "xloc": [ - "default.handlebars->31->1191" + "default.handlebars->31->1204" ] }, { @@ -16928,7 +16959,7 @@ "zh-chs": "法文(卢森堡)", "zh-cht": "法語(盧森堡)", "xloc": [ - "default.handlebars->31->1192" + "default.handlebars->31->1205" ] }, { @@ -16948,7 +16979,7 @@ "zh-chs": "法文(摩纳哥)", "zh-cht": "法語(摩納哥)", "xloc": [ - "default.handlebars->31->1193" + "default.handlebars->31->1206" ] }, { @@ -16968,7 +16999,7 @@ "zh-chs": "法文(标准)", "zh-cht": "法語(標準)", "xloc": [ - "default.handlebars->31->1188" + "default.handlebars->31->1201" ] }, { @@ -16988,7 +17019,7 @@ "zh-chs": "法文(瑞士)", "zh-cht": "法語(瑞士)", "xloc": [ - "default.handlebars->31->1194" + "default.handlebars->31->1207" ] }, { @@ -17008,7 +17039,7 @@ "zh-chs": "弗里斯兰文", "zh-cht": "弗里斯蘭語", "xloc": [ - "default.handlebars->31->1195" + "default.handlebars->31->1208" ] }, { @@ -17028,7 +17059,7 @@ "zh-chs": "弗留利", "zh-cht": "弗留利", "xloc": [ - "default.handlebars->31->1196" + "default.handlebars->31->1209" ] }, { @@ -17049,12 +17080,12 @@ "zh-cht": "完整管理員", "xloc": [ "default-mobile.handlebars->11->116", - "default-mobile.handlebars->11->463", - "default-mobile.handlebars->11->472", - "default-mobile.handlebars->11->492", - "default.handlebars->31->1370", - "default.handlebars->31->1517", - "default.handlebars->31->1880" + "default-mobile.handlebars->11->480", + "default-mobile.handlebars->11->489", + "default-mobile.handlebars->11->509", + "default.handlebars->31->1383", + "default.handlebars->31->1530", + "default.handlebars->31->1893" ] }, { @@ -17074,7 +17105,7 @@ "zh-chs": "完整管理员(保留所有权利)", "zh-cht": "完整管理員(保留所有權利)", "xloc": [ - "default.handlebars->31->1553" + "default.handlebars->31->1566" ] }, { @@ -17111,7 +17142,7 @@ "zh-chs": "完整设备权限", "zh-cht": "完整裝置權限", "xloc": [ - "default.handlebars->31->700" + "default.handlebars->31->713" ] }, { @@ -17131,7 +17162,7 @@ "zh-chs": "全部权限", "zh-cht": "全部權限", "xloc": [ - "default.handlebars->31->718" + "default.handlebars->31->731" ] }, { @@ -17193,7 +17224,7 @@ "zh-chs": "完整管理员", "zh-cht": "完整管理員", "xloc": [ - "default.handlebars->31->1978" + "default.handlebars->31->1991" ] }, { @@ -17213,8 +17244,8 @@ "zh-chs": "全自动的", "zh-cht": "全自動的", "xloc": [ - "default.handlebars->31->1433", - "default.handlebars->31->1456" + "default.handlebars->31->1446", + "default.handlebars->31->1469" ] }, { @@ -17234,8 +17265,8 @@ "zh-chs": "GPU", "zh-cht": "GPU", "xloc": [ - "default-mobile.handlebars->11->439", - "default.handlebars->31->1067" + "default-mobile.handlebars->11->456", + "default.handlebars->31->1080" ] }, { @@ -17255,7 +17286,7 @@ "zh-chs": "盖尔文(爱尔兰)", "zh-cht": "蓋爾語(愛爾蘭)", "xloc": [ - "default.handlebars->31->1198" + "default.handlebars->31->1211" ] }, { @@ -17275,7 +17306,7 @@ "zh-chs": "盖尔文(苏格兰文)", "zh-cht": "蓋爾語(蘇格蘭語)", "xloc": [ - "default.handlebars->31->1197" + "default.handlebars->31->1210" ] }, { @@ -17295,7 +17326,7 @@ "zh-chs": "加拉契文", "zh-cht": "加拉契語", "xloc": [ - "default.handlebars->31->1199" + "default.handlebars->31->1212" ] }, { @@ -17421,7 +17452,7 @@ "zh-chs": "格鲁吉亚文", "zh-cht": "格魯吉亞文", "xloc": [ - "default.handlebars->31->1200" + "default.handlebars->31->1213" ] }, { @@ -17441,7 +17472,7 @@ "zh-chs": "德文(奥地利)", "zh-cht": "德語(奧地利)", "xloc": [ - "default.handlebars->31->1202" + "default.handlebars->31->1215" ] }, { @@ -17461,7 +17492,7 @@ "zh-chs": "德文(德国)", "zh-cht": "德文(德國)", "xloc": [ - "default.handlebars->31->1203" + "default.handlebars->31->1216" ] }, { @@ -17481,7 +17512,7 @@ "zh-chs": "德文(列支敦士登)", "zh-cht": "德文(列支敦士登)", "xloc": [ - "default.handlebars->31->1204" + "default.handlebars->31->1217" ] }, { @@ -17501,7 +17532,7 @@ "zh-chs": "德文(卢森堡)", "zh-cht": "德語(盧森堡)", "xloc": [ - "default.handlebars->31->1205" + "default.handlebars->31->1218" ] }, { @@ -17521,7 +17552,7 @@ "zh-chs": "德文(标准)", "zh-cht": "德語(標準)", "xloc": [ - "default.handlebars->31->1201" + "default.handlebars->31->1214" ] }, { @@ -17541,7 +17572,7 @@ "zh-chs": "德文(瑞士)", "zh-cht": "德文(瑞士)", "xloc": [ - "default.handlebars->31->1206" + "default.handlebars->31->1219" ] }, { @@ -17561,7 +17592,7 @@ "zh-chs": "获取此设备的MQTT登录凭证。", "zh-cht": "獲取此裝置的MQTT登入憑證。", "xloc": [ - "default.handlebars->31->669" + "default.handlebars->31->682" ] }, { @@ -17602,7 +17633,7 @@ "zh-chs": "正在获取剪贴板内容,{0}个字节", "zh-cht": "正在獲取剪貼板內容,{0}個字節", "xloc": [ - "default.handlebars->31->1681" + "default.handlebars->31->1694" ] }, { @@ -17664,7 +17695,7 @@ "zh-chs": "好", "zh-cht": "好", "xloc": [ - "default.handlebars->31->1366" + "default.handlebars->31->1379" ] }, { @@ -17709,8 +17740,8 @@ "zh-chs": "Google云端硬盘备份", "zh-cht": "Google雲端硬盤備份", "xloc": [ - "default.handlebars->31->1377", - "default.handlebars->31->1380", + "default.handlebars->31->1390", + "default.handlebars->31->1393", "default.handlebars->31->220" ] }, @@ -17731,7 +17762,7 @@ "zh-chs": "Google云端硬盘控制台", "zh-cht": "Google雲端硬盤控制台", "xloc": [ - "default.handlebars->31->1374" + "default.handlebars->31->1387" ] }, { @@ -17771,7 +17802,7 @@ "zh-chs": "Google云端硬盘备份当前处于活动状态。", "zh-cht": "Google雲端硬盤備份當前處於活動狀態。", "xloc": [ - "default.handlebars->31->1378" + "default.handlebars->31->1391" ] }, { @@ -17791,7 +17822,7 @@ "zh-chs": "希腊文", "zh-cht": "希臘文", "xloc": [ - "default.handlebars->31->1207" + "default.handlebars->31->1220" ] }, { @@ -17833,8 +17864,8 @@ "zh-chs": "集体指令", "zh-cht": "集體指令", "xloc": [ - "default.handlebars->31->1824", - "default.handlebars->31->1903", + "default.handlebars->31->1837", + "default.handlebars->31->1916", "default.handlebars->31->470", "default.handlebars->container->column_l->p1->devListToolbarSpan->1->0->devListToolbar", "default.handlebars->container->column_l->p4->3->1->0->3->3", @@ -17858,7 +17889,7 @@ "zh-chs": "通过...分组", "zh-cht": "通過...分群", "xloc": [ - "default.handlebars->31->1772" + "default.handlebars->31->1785" ] }, { @@ -17878,7 +17909,7 @@ "zh-chs": "组标识符", "zh-cht": "群標識符", "xloc": [ - "default.handlebars->31->1920" + "default.handlebars->31->1933" ] }, { @@ -17898,7 +17929,7 @@ "zh-chs": "群组成员", "zh-cht": "群組成員", "xloc": [ - "default.handlebars->31->1941" + "default.handlebars->31->1954" ] }, { @@ -17918,7 +17949,7 @@ "zh-chs": "用户{0}的群组权限。", "zh-cht": "用戶{0}的群組權限。", "xloc": [ - "default.handlebars->31->1516" + "default.handlebars->31->1529" ] }, { @@ -17938,7 +17969,7 @@ "zh-chs": "{0}的群组权限。", "zh-cht": "{0}的群組權限。", "xloc": [ - "default.handlebars->31->1515" + "default.handlebars->31->1528" ] }, { @@ -18019,7 +18050,7 @@ "zh-cht": "來賓姓名", "xloc": [ "default.handlebars->31->198", - "default.handlebars->31->748" + "default.handlebars->31->761" ] }, { @@ -18039,7 +18070,7 @@ "zh-chs": "古久拉提", "zh-cht": "古久拉提", "xloc": [ - "default.handlebars->31->1208" + "default.handlebars->31->1221" ] }, { @@ -18082,7 +18113,7 @@ "zh-chs": "海地文", "zh-cht": "海地文", "xloc": [ - "default.handlebars->31->1209" + "default.handlebars->31->1222" ] }, { @@ -18122,7 +18153,7 @@ "zh-chs": "强行断开代理", "zh-cht": "強行斷開代理", "xloc": [ - "default.handlebars->31->1097" + "default.handlebars->31->1110" ] }, { @@ -18142,7 +18173,7 @@ "zh-chs": "堆总数", "zh-cht": "堆總數", "xloc": [ - "default.handlebars->31->2215" + "default.handlebars->31->2228" ] }, { @@ -18162,7 +18193,7 @@ "zh-chs": "堆使用", "zh-cht": "堆使用", "xloc": [ - "default.handlebars->31->2214" + "default.handlebars->31->2227" ] }, { @@ -18182,7 +18213,7 @@ "zh-chs": "希伯来文", "zh-cht": "希伯來文", "xloc": [ - "default.handlebars->31->1210" + "default.handlebars->31->1223" ] }, { @@ -18243,7 +18274,7 @@ "zh-chs": "已请求帮助,用户:{0},详细信息:{1}", "zh-cht": "已請求幫助,用戶:{0},詳細信息:{1}", "xloc": [ - "default.handlebars->31->1758" + "default.handlebars->31->1771" ] }, { @@ -18304,7 +18335,7 @@ "zh-chs": "帮助翻译MeshCentral", "zh-cht": "幫助翻譯MeshCentral", "xloc": [ - "default.handlebars->31->1325" + "default.handlebars->31->1338" ] }, { @@ -18408,7 +18439,7 @@ "zh-chs": "印地文", "zh-cht": "印地文", "xloc": [ - "default.handlebars->31->1211" + "default.handlebars->31->1224" ] }, { @@ -18446,7 +18477,7 @@ "zh-cht": "保存1個項目進行複製", "xloc": [ "default-mobile.handlebars->11->369", - "default.handlebars->31->980" + "default.handlebars->31->993" ] }, { @@ -18467,7 +18498,7 @@ "zh-cht": "保存1個項目進行移動", "xloc": [ "default-mobile.handlebars->11->373", - "default.handlebars->31->984" + "default.handlebars->31->997" ] }, { @@ -18488,7 +18519,7 @@ "zh-cht": "保留{0}個項目進行複製", "xloc": [ "default-mobile.handlebars->11->367", - "default.handlebars->31->978" + "default.handlebars->31->991" ] }, { @@ -18509,7 +18540,7 @@ "zh-cht": "保存{0}個項目以進行移動", "xloc": [ "default-mobile.handlebars->11->371", - "default.handlebars->31->982" + "default.handlebars->31->995" ] }, { @@ -18530,7 +18561,7 @@ "zh-cht": "保存{0}項目{1}給{2}", "xloc": [ "default-mobile.handlebars->11->140", - "default.handlebars->31->1654" + "default.handlebars->31->1667" ] }, { @@ -18539,7 +18570,7 @@ "nl": "Home", "xloc": [ "default-mobile.handlebars->11->323", - "default.handlebars->31->890" + "default.handlebars->31->903" ] }, { @@ -18563,11 +18594,11 @@ "default-mobile.handlebars->11->232", "default-mobile.handlebars->11->234", "default-mobile.handlebars->11->304", - "default-mobile.handlebars->11->398", - "default.handlebars->31->1016", + "default-mobile.handlebars->11->415", + "default.handlebars->31->1029", "default.handlebars->31->306", "default.handlebars->31->573", - "default.handlebars->31->859" + "default.handlebars->31->872" ] }, { @@ -18587,7 +18618,7 @@ "zh-chs": "主机名同步", "zh-cht": "主機名同步", "xloc": [ - "default.handlebars->31->1405" + "default.handlebars->31->1418" ] }, { @@ -18607,7 +18638,7 @@ "zh-chs": "匈牙利文", "zh-cht": "匈牙利文", "xloc": [ - "default.handlebars->31->1212" + "default.handlebars->31->1225" ] }, { @@ -18670,11 +18701,9 @@ "zh-chs": "IP:{0}", "zh-cht": "IP:{0}", "xloc": [ - "default-mobile.handlebars->11->408", - "default-mobile.handlebars->11->412", - "default.handlebars->31->1026", - "default.handlebars->31->1036", - "default.handlebars->31->1040" + "default.handlebars->31->1039", + "default.handlebars->31->1049", + "default.handlebars->31->1053" ] }, { @@ -18694,11 +18723,9 @@ "zh-chs": "IP:{0},掩码:{1},网关:{2}", "zh-cht": "IP:{0},遮罩:{1},閘道:{2}", "xloc": [ - "default-mobile.handlebars->11->406", - "default-mobile.handlebars->11->410", - "default.handlebars->31->1024", - "default.handlebars->31->1034", - "default.handlebars->31->1038" + "default.handlebars->31->1037", + "default.handlebars->31->1047", + "default.handlebars->31->1051" ] }, { @@ -18718,12 +18745,12 @@ "zh-chs": "IPv4层", "zh-cht": "IPv4層", "xloc": [ - "default-mobile.handlebars->11->405", - "default-mobile.handlebars->11->407", - "default.handlebars->31->1023", - "default.handlebars->31->1025", - "default.handlebars->31->1033", - "default.handlebars->31->1035" + "default-mobile.handlebars->11->422", + "default-mobile.handlebars->11->424", + "default.handlebars->31->1036", + "default.handlebars->31->1038", + "default.handlebars->31->1046", + "default.handlebars->31->1048" ] }, { @@ -18806,10 +18833,10 @@ "zh-chs": "IPv6层", "zh-cht": "IPv6層", "xloc": [ - "default-mobile.handlebars->11->409", - "default-mobile.handlebars->11->411", - "default.handlebars->31->1037", - "default.handlebars->31->1039" + "default-mobile.handlebars->11->426", + "default-mobile.handlebars->11->428", + "default.handlebars->31->1050", + "default.handlebars->31->1052" ] }, { @@ -18889,7 +18916,7 @@ "zh-chs": "冰岛文", "zh-cht": "冰島文", "xloc": [ - "default.handlebars->31->1213" + "default.handlebars->31->1226" ] }, { @@ -18910,7 +18937,7 @@ "zh-cht": "圖符選擇", "xloc": [ "default-mobile.handlebars->11->302", - "default.handlebars->31->857" + "default.handlebars->31->870" ] }, { @@ -18930,10 +18957,10 @@ "zh-chs": "识别码", "zh-cht": "識別符", "xloc": [ - "default-mobile.handlebars->11->397", - "default-mobile.handlebars->11->437", - "default.handlebars->31->1015", - "default.handlebars->31->1065" + "default-mobile.handlebars->11->414", + "default-mobile.handlebars->11->454", + "default.handlebars->31->1028", + "default.handlebars->31->1078" ] }, { @@ -18953,7 +18980,7 @@ "zh-chs": "如果在CCM中,请重新激活英特尔®AMT", "zh-cht": "如果在CCM中,請重新激活英特爾®AMT", "xloc": [ - "default.handlebars->31->1470" + "default.handlebars->31->1483" ] }, { @@ -19122,7 +19149,7 @@ "zh-chs": "印度尼西亚文", "zh-cht": "印度尼西亞文", "xloc": [ - "default.handlebars->31->1214" + "default.handlebars->31->1227" ] }, { @@ -19193,7 +19220,7 @@ "nl": "Insert", "xloc": [ "default-mobile.handlebars->11->321", - "default.handlebars->31->888" + "default.handlebars->31->901" ] }, { @@ -19307,8 +19334,8 @@ "zh-chs": "安装类型", "zh-cht": "安裝方式", "xloc": [ - "default.handlebars->31->1586", - "default.handlebars->31->1593", + "default.handlebars->31->1599", + "default.handlebars->31->1606", "default.handlebars->31->352", "default.handlebars->31->366", "default.handlebars->31->381" @@ -19331,7 +19358,7 @@ "zh-chs": "英特尔(F10 = ESC + [OM)", "zh-cht": "Intel(F10 = ESC + [OM)", "xloc": [ - "default.handlebars->31->940", + "default.handlebars->31->953", "default.handlebars->container->column_l->p12->termTable->1->1->6->1->1->terminalSettingsButtons", "terminal.handlebars->3->18", "terminal.handlebars->p12->9->1->terminalSettingsButtons" @@ -19354,7 +19381,7 @@ "zh-chs": "英特尔AMT", "zh-cht": "英特爾AMT", "xloc": [ - "default.handlebars->31->2211" + "default.handlebars->31->2224" ] }, { @@ -19362,7 +19389,7 @@ "fr": "Gestionnaire Intel AMT", "nl": "Intel AMT beheerder", "xloc": [ - "default.handlebars->31->2237" + "default.handlebars->31->2250" ] }, { @@ -19382,7 +19409,7 @@ "zh-chs": "英特尔ASCII", "zh-cht": "Intel ASCII", "xloc": [ - "default.handlebars->31->939", + "default.handlebars->31->952", "terminal.handlebars->3->17" ] }, @@ -19406,14 +19433,14 @@ "default-mobile.handlebars->11->216", "default-mobile.handlebars->11->258", "default-mobile.handlebars->11->263", - "default.handlebars->31->1423", - "default.handlebars->31->1434", - "default.handlebars->31->1605", - "default.handlebars->31->1613", - "default.handlebars->31->2236", + "default.handlebars->31->1436", + "default.handlebars->31->1447", + "default.handlebars->31->1618", + "default.handlebars->31->1626", + "default.handlebars->31->2249", "default.handlebars->31->543", "default.handlebars->31->601", - "default.handlebars->31->628" + "default.handlebars->31->641" ] }, { @@ -19454,7 +19481,7 @@ "zh-cht": "Intel® AMT CIRA", "xloc": [ "default-mobile.handlebars->11->262", - "default.handlebars->31->626" + "default.handlebars->31->639" ] }, { @@ -19516,7 +19543,7 @@ "xloc": [ "default.handlebars->31->255", "default.handlebars->31->444", - "default.handlebars->31->625" + "default.handlebars->31->638" ] }, { @@ -19580,7 +19607,7 @@ "zh-chs": "英特尔®AMT政策", "zh-cht": "Intel® AMT政策", "xloc": [ - "default.handlebars->31->1457" + "default.handlebars->31->1470" ] }, { @@ -19600,7 +19627,7 @@ "zh-chs": "英特尔®AMT重定向", "zh-cht": "Intel® AMT重定向", "xloc": [ - "default.handlebars->31->2114", + "default.handlebars->31->2127", "player.handlebars->3->14" ] }, @@ -19641,7 +19668,7 @@ "zh-chs": "英特尔®AMT WSMAN", "zh-cht": "Intle® AMT WSMAN", "xloc": [ - "default.handlebars->31->2113", + "default.handlebars->31->2126", "player.handlebars->3->13" ] }, @@ -19680,8 +19707,8 @@ "zh-cht": "Intel ®AMT已連接", "xloc": [ "default-mobile.handlebars->11->273", - "default.handlebars->31->675", - "default.handlebars->31->676" + "default.handlebars->31->688", + "default.handlebars->31->689" ] }, { @@ -19701,8 +19728,8 @@ "zh-chs": "英特尔®AMT桌面和串行事件。", "zh-cht": "Intel® AMT桌面和串行事件。", "xloc": [ - "default.handlebars->31->1331", - "default.handlebars->31->1601" + "default.handlebars->31->1344", + "default.handlebars->31->1614" ] }, { @@ -19724,8 +19751,8 @@ "xloc": [ "default-mobile.handlebars->11->274", "default.handlebars->31->175", - "default.handlebars->31->677", - "default.handlebars->31->678" + "default.handlebars->31->690", + "default.handlebars->31->691" ] }, { @@ -19785,7 +19812,7 @@ "zh-chs": "英特尔®AMT可路由并可以使用。", "zh-cht": "Intel® AMT可路由並可以使用。", "xloc": [ - "default.handlebars->31->627" + "default.handlebars->31->640" ] }, { @@ -19887,9 +19914,9 @@ "zh-chs": "仅限英特尔®AMT,无代理", "zh-cht": "僅限Intel® AMT,無代理", "xloc": [ - "default-mobile.handlebars->11->454", - "default.handlebars->31->1360", - "default.handlebars->31->1395" + "default-mobile.handlebars->11->471", + "default.handlebars->31->1373", + "default.handlebars->31->1408" ] }, { @@ -19966,8 +19993,8 @@ "zh-chs": "英特尔®主动管理技术(英特尔®AMT)", "zh-cht": "Intel ® Active Management Technology(Intel® AMT)", "xloc": [ - "default-mobile.handlebars->11->429", - "default.handlebars->31->1057" + "default-mobile.handlebars->11->446", + "default.handlebars->31->1070" ] }, { @@ -20173,7 +20200,7 @@ "zh-chs": "互动", "zh-cht": "互動", "xloc": [ - "default.handlebars->31->920" + "default.handlebars->31->933" ] }, { @@ -20193,8 +20220,8 @@ "zh-chs": "仅限互动", "zh-cht": "僅限互動", "xloc": [ - "default.handlebars->31->1589", - "default.handlebars->31->1596", + "default.handlebars->31->1602", + "default.handlebars->31->1609", "default.handlebars->31->355", "default.handlebars->31->369", "default.handlebars->31->384" @@ -20217,7 +20244,7 @@ "zh-chs": "介面", "zh-cht": "介面", "xloc": [ - "default.handlebars->31->652" + "default.handlebars->31->665" ] }, { @@ -20237,7 +20264,7 @@ "zh-chs": "因纽特文", "zh-cht": "因紐特文", "xloc": [ - "default.handlebars->31->1215" + "default.handlebars->31->1228" ] }, { @@ -20280,7 +20307,7 @@ "zh-chs": "无效的设备组类型", "zh-cht": "無效的裝置群類型", "xloc": [ - "default.handlebars->31->2185" + "default.handlebars->31->2198" ] }, { @@ -20300,7 +20327,7 @@ "zh-chs": "无效的JSON", "zh-cht": "無效的JSON", "xloc": [ - "default.handlebars->31->2179" + "default.handlebars->31->2192" ] }, { @@ -20320,8 +20347,8 @@ "zh-chs": "无效的JSON档案格式。", "zh-cht": "無效的JSON檔案格式。", "xloc": [ - "default.handlebars->31->1842", - "default.handlebars->31->1844" + "default.handlebars->31->1855", + "default.handlebars->31->1857" ] }, { @@ -20341,7 +20368,7 @@ "zh-chs": "无效的JSON档案:{0}。", "zh-cht": "無效的JSON檔案:{0}。", "xloc": [ - "default.handlebars->31->1840" + "default.handlebars->31->1853" ] }, { @@ -20361,7 +20388,7 @@ "zh-chs": "无效的PKCS签名", "zh-cht": "無效的PKCS簽名", "xloc": [ - "default.handlebars->31->2177" + "default.handlebars->31->2190" ] }, { @@ -20381,7 +20408,7 @@ "zh-chs": "無效的RSA密碼", "zh-cht": "無效的RSA密碼", "xloc": [ - "default.handlebars->31->2178" + "default.handlebars->31->2191" ] }, { @@ -20389,8 +20416,8 @@ "nl": "Ongeldig SMS bericht", "fr": "Message SMS non valide", "xloc": [ - "default-mobile.handlebars->11->553", - "default.handlebars->31->2165" + "default-mobile.handlebars->11->570", + "default.handlebars->31->2178" ] }, { @@ -20420,8 +20447,8 @@ "nl": "Ongeldig domein", "fr": "Domaine non valide", "xloc": [ - "default-mobile.handlebars->11->533", - "default.handlebars->31->2145" + "default-mobile.handlebars->11->550", + "default.handlebars->31->2158" ] }, { @@ -20429,8 +20456,8 @@ "nl": "Ongeldig email", "fr": "Email invalide", "xloc": [ - "default-mobile.handlebars->11->532", - "default.handlebars->31->2144" + "default-mobile.handlebars->11->549", + "default.handlebars->31->2157" ] }, { @@ -20501,8 +20528,8 @@ "nl": "Ongeldig wachtwoord", "fr": "Mot de passe incorrect", "xloc": [ - "default-mobile.handlebars->11->531", - "default.handlebars->31->2143" + "default-mobile.handlebars->11->548", + "default.handlebars->31->2156" ] }, { @@ -20510,8 +20537,8 @@ "nl": "Ongeldige sitemachtigingen", "fr": "Autorisations de site non valides", "xloc": [ - "default-mobile.handlebars->11->534", - "default.handlebars->31->2146" + "default-mobile.handlebars->11->551", + "default.handlebars->31->2159" ] }, { @@ -20541,8 +20568,8 @@ "nl": "Ongeldige gebruikersnaam", "fr": "Nom d'utilisateur invalide", "xloc": [ - "default-mobile.handlebars->11->530", - "default.handlebars->31->2142" + "default-mobile.handlebars->11->547", + "default.handlebars->31->2155" ] }, { @@ -20562,7 +20589,7 @@ "zh-chs": "使电邮无效", "zh-cht": "使電郵無效", "xloc": [ - "default.handlebars->31->1818" + "default.handlebars->31->1831" ] }, { @@ -20639,7 +20666,7 @@ "zh-chs": "任何人都可以使用邀请代码通过以下公共连接将设备加入该设备组:", "zh-cht": "任何人都可以使用邀請代碼通過以下公共鏈結將裝置加入該裝置群:", "xloc": [ - "default.handlebars->31->1591" + "default.handlebars->31->1604" ] }, { @@ -20679,7 +20706,7 @@ "zh-chs": "邀请", "zh-cht": "邀請", "xloc": [ - "default.handlebars->31->1444", + "default.handlebars->31->1457", "default.handlebars->31->303", "default.handlebars->31->371" ] @@ -20701,13 +20728,13 @@ "zh-chs": "邀请码", "zh-cht": "邀請碼", "xloc": [ - "default-mobile.handlebars->11->528", - "default.handlebars->31->1427", - "default.handlebars->31->1585", - "default.handlebars->31->1590", - "default.handlebars->31->1592", - "default.handlebars->31->1597", - "default.handlebars->31->2140" + "default-mobile.handlebars->11->545", + "default.handlebars->31->1440", + "default.handlebars->31->1598", + "default.handlebars->31->1603", + "default.handlebars->31->1605", + "default.handlebars->31->1610", + "default.handlebars->31->2153" ] }, { @@ -20747,7 +20774,7 @@ "zh-chs": "邀请某人在该设备组上安装网格代理。", "zh-cht": "邀請某人在該裝置群上安裝mesh agent。", "xloc": [ - "default.handlebars->31->1443", + "default.handlebars->31->1456", "default.handlebars->31->302" ] }, @@ -20788,7 +20815,7 @@ "zh-chs": "爱尔兰文", "zh-cht": "愛爾蘭文", "xloc": [ - "default.handlebars->31->1216" + "default.handlebars->31->1229" ] }, { @@ -20808,7 +20835,7 @@ "zh-chs": "意大利文(标准)", "zh-cht": "意大利文(標準)", "xloc": [ - "default.handlebars->31->1217" + "default.handlebars->31->1230" ] }, { @@ -20828,7 +20855,7 @@ "zh-chs": "意大利文(瑞士)", "zh-cht": "義大利文(瑞士)", "xloc": [ - "default.handlebars->31->1218" + "default.handlebars->31->1231" ] }, { @@ -20848,7 +20875,7 @@ "zh-chs": "JSON", "zh-cht": "JSON", "xloc": [ - "default.handlebars->31->1778" + "default.handlebars->31->1791" ] }, { @@ -20868,8 +20895,8 @@ "zh-chs": "JSON格式", "zh-cht": "JSON格式", "xloc": [ - "default.handlebars->31->1783", - "default.handlebars->31->1848", + "default.handlebars->31->1796", + "default.handlebars->31->1861", "default.handlebars->31->504" ] }, @@ -20890,7 +20917,7 @@ "zh-chs": "日文", "zh-cht": "日文", "xloc": [ - "default.handlebars->31->1219" + "default.handlebars->31->1232" ] }, { @@ -20910,7 +20937,7 @@ "zh-chs": "已加入桌面Multiplex会话", "zh-cht": "已加入桌面Multiplex會話", "xloc": [ - "default.handlebars->31->1664" + "default.handlebars->31->1677" ] }, { @@ -20930,7 +20957,7 @@ "zh-chs": "卡纳达文", "zh-cht": "卡納達文", "xloc": [ - "default.handlebars->31->1220" + "default.handlebars->31->1233" ] }, { @@ -20950,7 +20977,7 @@ "zh-chs": "克什米尔文", "zh-cht": "克什米爾文", "xloc": [ - "default.handlebars->31->1221" + "default.handlebars->31->1234" ] }, { @@ -20970,7 +20997,7 @@ "zh-chs": "哈萨克文", "zh-cht": "哈薩克文", "xloc": [ - "default.handlebars->31->1222" + "default.handlebars->31->1235" ] }, { @@ -20990,7 +21017,7 @@ "zh-chs": "保留现有密码", "zh-cht": "保留現有密碼", "xloc": [ - "default.handlebars->31->1458" + "default.handlebars->31->1471" ] }, { @@ -21010,7 +21037,7 @@ "zh-chs": "内核驱动器", "zh-cht": "內核驅動器", "xloc": [ - "default.handlebars->31->921" + "default.handlebars->31->934" ] }, { @@ -21030,8 +21057,8 @@ "zh-chs": "键名", "zh-cht": "鍵名", "xloc": [ - "default.handlebars->31->1113", - "default.handlebars->31->1116" + "default.handlebars->31->1126", + "default.handlebars->31->1129" ] }, { @@ -21057,7 +21084,7 @@ "nl": "Toetsenbord sneltoetsen aanpassen", "xloc": [ "default-mobile.handlebars->container->page_content->column_l->p10->p10dialog->1->1", - "default.handlebars->31->908" + "default.handlebars->31->921" ] }, { @@ -21094,7 +21121,7 @@ "zh-chs": "高棉文", "zh-cht": "高棉文", "xloc": [ - "default.handlebars->31->1223" + "default.handlebars->31->1236" ] }, { @@ -21114,7 +21141,7 @@ "zh-chs": "杀死进程{0}", "zh-cht": "殺死進程{0}", "xloc": [ - "default.handlebars->31->1679" + "default.handlebars->31->1692" ] }, { @@ -21134,7 +21161,7 @@ "zh-chs": "吉尔吉斯", "zh-cht": "吉爾吉斯", "xloc": [ - "default.handlebars->31->1224" + "default.handlebars->31->1237" ] }, { @@ -21154,7 +21181,7 @@ "zh-chs": "克林贡", "zh-cht": "克林貢", "xloc": [ - "default.handlebars->31->1225" + "default.handlebars->31->1238" ] }, { @@ -21174,8 +21201,8 @@ "zh-chs": "已知的", "zh-cht": "已知的", "xloc": [ - "default-mobile.handlebars->11->428", - "default.handlebars->31->1056" + "default-mobile.handlebars->11->445", + "default.handlebars->31->1069" ] }, { @@ -21195,7 +21222,7 @@ "zh-chs": "韩文", "zh-cht": "韓文", "xloc": [ - "default.handlebars->31->1226" + "default.handlebars->31->1239" ] }, { @@ -21215,7 +21242,7 @@ "zh-chs": "韩文(朝鲜)", "zh-cht": "韓文(朝鮮)", "xloc": [ - "default.handlebars->31->1227" + "default.handlebars->31->1240" ] }, { @@ -21235,7 +21262,7 @@ "zh-chs": "韩文(韩国)", "zh-cht": "韓文(韓國)", "xloc": [ - "default.handlebars->31->1228" + "default.handlebars->31->1241" ] }, { @@ -21255,8 +21282,8 @@ "zh-chs": "如果", "zh-cht": "如果", "xloc": [ - "default.handlebars->31->935", - "default.handlebars->31->944", + "default.handlebars->31->948", + "default.handlebars->31->957", "terminal.handlebars->3->22", "terminal.handlebars->3->8" ] @@ -21278,7 +21305,7 @@ "zh-chs": "语言", "zh-cht": "語言", "xloc": [ - "default.handlebars->31->1323" + "default.handlebars->31->1336" ] }, { @@ -21318,7 +21345,7 @@ "zh-chs": "大焦点", "zh-cht": "大焦點", "xloc": [ - "default.handlebars->31->883" + "default.handlebars->31->896" ] }, { @@ -21531,7 +21558,7 @@ "zh-chs": "最后访问", "zh-cht": "最後訪問", "xloc": [ - "default.handlebars->31->1791" + "default.handlebars->31->1804" ] }, { @@ -21551,7 +21578,7 @@ "zh-chs": "上次登录", "zh-cht": "上次登入", "xloc": [ - "default.handlebars->31->1999" + "default.handlebars->31->2012" ] }, { @@ -21571,12 +21598,12 @@ "zh-chs": "上次代理地址", "zh-cht": "上次代理地址", "xloc": [ - "default-mobile.handlebars->11->390", - "default-mobile.handlebars->11->391", - "default-mobile.handlebars->11->392", - "default.handlebars->31->1008", - "default.handlebars->31->1009", - "default.handlebars->31->1010", + "default-mobile.handlebars->11->407", + "default-mobile.handlebars->11->408", + "default-mobile.handlebars->11->409", + "default.handlebars->31->1021", + "default.handlebars->31->1022", + "default.handlebars->31->1023", "default.handlebars->31->80", "default.handlebars->31->82", "default.handlebars->31->84" @@ -21599,10 +21626,10 @@ "zh-chs": "上次代理连接", "zh-cht": "上次代理連接", "xloc": [ - "default-mobile.handlebars->11->387", - "default-mobile.handlebars->11->389", - "default.handlebars->31->1005", - "default.handlebars->31->1007", + "default-mobile.handlebars->11->404", + "default-mobile.handlebars->11->406", + "default.handlebars->31->1018", + "default.handlebars->31->1020", "default.handlebars->31->79" ] }, @@ -21623,7 +21650,7 @@ "zh-chs": "上次更改:{0}", "zh-cht": "上次更改:{0}", "xloc": [ - "default.handlebars->31->2003" + "default.handlebars->31->2016" ] }, { @@ -21683,7 +21710,7 @@ "zh-chs": "上次登录:{0}", "zh-cht": "上次登入:{0}", "xloc": [ - "default.handlebars->31->1801" + "default.handlebars->31->1814" ] }, { @@ -21703,7 +21730,7 @@ "zh-chs": "最后一次发现:", "zh-cht": "最後一次發現:", "xloc": [ - "default.handlebars->31->681", + "default.handlebars->31->694", "default.handlebars->31->76" ] }, @@ -21784,7 +21811,7 @@ "zh-chs": "拉丁文", "zh-cht": "拉丁文", "xloc": [ - "default.handlebars->31->1229" + "default.handlebars->31->1242" ] }, { @@ -21804,7 +21831,7 @@ "zh-chs": "拉脱维亚文", "zh-cht": "拉脫維亞文", "xloc": [ - "default.handlebars->31->1230" + "default.handlebars->31->1243" ] }, { @@ -21824,7 +21851,7 @@ "zh-chs": "启动MeshCentral路由器", "zh-cht": "啟動MeshCentral路由器", "xloc": [ - "default.handlebars->31->830" + "default.handlebars->31->843" ] }, { @@ -21844,7 +21871,7 @@ "zh-chs": "启动noVNC连接到此设备", "zh-cht": "啟動noVNC連接到此裝置", "xloc": [ - "default.handlebars->31->665" + "default.handlebars->31->678" ] }, { @@ -21864,7 +21891,7 @@ "zh-chs": "启动基于Web的RDP连接到此设备", "zh-cht": "啟動基於Web的RDP連接到此裝置", "xloc": [ - "default.handlebars->31->667" + "default.handlebars->31->680" ] }, { @@ -21884,7 +21911,7 @@ "zh-chs": "如没有请留空。", "zh-cht": "如沒有請留空。", "xloc": [ - "default.handlebars->31->2045" + "default.handlebars->31->2058" ] }, { @@ -21893,7 +21920,7 @@ "nl": "Links", "xloc": [ "default-mobile.handlebars->11->327", - "default.handlebars->31->894" + "default.handlebars->31->907" ] }, { @@ -21938,7 +21965,7 @@ "zh-chs": "离开桌面多路复用会话", "zh-cht": "離開桌面多路復用會話", "xloc": [ - "default.handlebars->31->1665" + "default.handlebars->31->1678" ] }, { @@ -21958,7 +21985,7 @@ "zh-chs": "减", "zh-cht": "減", "xloc": [ - "default.handlebars->31->2256" + "default.handlebars->31->2269" ] }, { @@ -21978,8 +22005,8 @@ "zh-chs": "限制事件", "zh-cht": "限制事件", "xloc": [ - "default.handlebars->31->712", - "default.handlebars->31->733" + "default.handlebars->31->725", + "default.handlebars->31->746" ] }, { @@ -22020,10 +22047,10 @@ "zh-chs": "有限输入", "zh-cht": "有限輸入", "xloc": [ - "default-mobile.handlebars->11->505", - "default.handlebars->31->1567", - "default.handlebars->31->705", - "default.handlebars->31->726" + "default-mobile.handlebars->11->522", + "default.handlebars->31->1580", + "default.handlebars->31->718", + "default.handlebars->31->739" ] }, { @@ -22043,8 +22070,8 @@ "zh-chs": "仅有限输入", "zh-cht": "僅有限輸入", "xloc": [ - "default-mobile.handlebars->11->478", - "default.handlebars->31->1523" + "default-mobile.handlebars->11->495", + "default.handlebars->31->1536" ] }, { @@ -22291,7 +22318,7 @@ "zh-chs": "Linux ARM,Raspberry Pi(32位)", "zh-cht": "Linux ARM,Raspberry Pi(32位)", "xloc": [ - "default.handlebars->31->838" + "default.handlebars->31->851" ] }, { @@ -22311,7 +22338,7 @@ "zh-chs": "Linux ARM, Raspberry Pi (64位)", "zh-cht": "Linux ARM, Raspberry Pi (64位)", "xloc": [ - "default.handlebars->31->839" + "default.handlebars->31->852" ] }, { @@ -22455,7 +22482,7 @@ "zh-chs": "Linux x86(32位)", "zh-cht": "Linux x86(32位)", "xloc": [ - "default.handlebars->31->835" + "default.handlebars->31->848" ] }, { @@ -22475,7 +22502,7 @@ "zh-chs": "Linux x86(64位)", "zh-cht": "Linux x86(64位)", "xloc": [ - "default.handlebars->31->834" + "default.handlebars->31->847" ] }, { @@ -22496,7 +22523,7 @@ "zh-cht": "Linux / BSD / macOS命令外殼", "xloc": [ "default.handlebars->31->477", - "default.handlebars->31->791" + "default.handlebars->31->804" ] }, { @@ -22554,7 +22581,7 @@ "zh-chs": "立陶宛文", "zh-cht": "立陶宛文", "xloc": [ - "default.handlebars->31->1231" + "default.handlebars->31->1244" ] }, { @@ -22595,11 +22622,11 @@ "zh-cht": "載入中...", "xloc": [ "default-mobile.handlebars->11->83", - "default.handlebars->31->1109", - "default.handlebars->31->1386", - "default.handlebars->31->1390", - "default.handlebars->31->2101", - "default.handlebars->31->825" + "default.handlebars->31->1122", + "default.handlebars->31->1399", + "default.handlebars->31->1403", + "default.handlebars->31->2114", + "default.handlebars->31->838" ] }, { @@ -22681,7 +22708,7 @@ "zh-chs": "本地用户接受的远程终端请求", "zh-cht": "本地用戶接受的遠程終端請求", "xloc": [ - "default.handlebars->31->1687" + "default.handlebars->31->1700" ] }, { @@ -22701,7 +22728,7 @@ "zh-chs": "本地用户拒绝了远程终端请求", "zh-cht": "本地用戶拒絕了遠程終端請求", "xloc": [ - "default.handlebars->31->1688" + "default.handlebars->31->1701" ] }, { @@ -22721,7 +22748,7 @@ "zh-chs": "本地化设置", "zh-cht": "本地化設置", "xloc": [ - "default.handlebars->31->1326", + "default.handlebars->31->1339", "default.handlebars->container->column_l->p2->p2info->p2AccountActions->3->7" ] }, @@ -22742,7 +22769,7 @@ "zh-chs": "位置", "zh-cht": "位置", "xloc": [ - "default.handlebars->31->654" + "default.handlebars->31->667" ] }, { @@ -22782,7 +22809,7 @@ "zh-chs": "锁定账户", "zh-cht": "鎖定賬戶", "xloc": [ - "default.handlebars->31->1888" + "default.handlebars->31->1901" ] }, { @@ -22802,7 +22829,7 @@ "zh-chs": "锁定帐户设置", "zh-cht": "鎖定帳戶設置", "xloc": [ - "default.handlebars->31->1891" + "default.handlebars->31->1904" ] }, { @@ -22822,7 +22849,7 @@ "zh-chs": "锁定账户", "zh-cht": "鎖定賬戶", "xloc": [ - "default.handlebars->31->1821" + "default.handlebars->31->1834" ] }, { @@ -22848,7 +22875,7 @@ "zh-chs": "已锁定", "zh-cht": "已鎖定", "xloc": [ - "default.handlebars->31->1802" + "default.handlebars->31->1815" ] }, { @@ -22868,7 +22895,7 @@ "zh-chs": "被锁定账户", "zh-cht": "被鎖定賬戶", "xloc": [ - "default.handlebars->31->1975" + "default.handlebars->31->1988" ] }, { @@ -22888,7 +22915,7 @@ "zh-chs": "将远程用户锁定在桌面之外", "zh-cht": "將遠程用戶鎖定在桌面之外", "xloc": [ - "default.handlebars->31->1713" + "default.handlebars->31->1726" ] }, { @@ -22908,7 +22935,7 @@ "zh-chs": "记录事件", "zh-cht": "記錄事件", "xloc": [ - "default.handlebars->31->641" + "default.handlebars->31->654" ] }, { @@ -23128,7 +23155,7 @@ "zh-chs": "卢森堡文", "zh-cht": "盧森堡文", "xloc": [ - "default.handlebars->31->1232" + "default.handlebars->31->1245" ] }, { @@ -23148,12 +23175,12 @@ "zh-chs": "MAC层", "zh-cht": "MAC層", "xloc": [ - "default-mobile.handlebars->11->401", - "default-mobile.handlebars->11->403", - "default.handlebars->31->1019", - "default.handlebars->31->1021", - "default.handlebars->31->1029", - "default.handlebars->31->1031" + "default-mobile.handlebars->11->418", + "default-mobile.handlebars->11->420", + "default.handlebars->31->1032", + "default.handlebars->31->1034", + "default.handlebars->31->1042", + "default.handlebars->31->1044" ] }, { @@ -23194,9 +23221,9 @@ "zh-chs": "MAC:{0}", "zh-cht": "MAC:{0}", "xloc": [ - "default-mobile.handlebars->11->404", - "default.handlebars->31->1022", - "default.handlebars->31->1032" + "default-mobile.handlebars->11->421", + "default.handlebars->31->1035", + "default.handlebars->31->1045" ] }, { @@ -23216,9 +23243,9 @@ "zh-chs": "MAC:{0},网关:{1}", "zh-cht": "MAC:{0},網關:{1}", "xloc": [ - "default-mobile.handlebars->11->402", - "default.handlebars->31->1020", - "default.handlebars->31->1030" + "default-mobile.handlebars->11->419", + "default.handlebars->31->1033", + "default.handlebars->31->1043" ] }, { @@ -23308,11 +23335,11 @@ "xloc": [ "default-mobile.handlebars->11->218", "default-mobile.handlebars->11->265", - "default.handlebars->31->1086", - "default.handlebars->31->1087", + "default.handlebars->31->1099", + "default.handlebars->31->1100", "default.handlebars->31->262", "default.handlebars->31->451", - "default.handlebars->31->632", + "default.handlebars->31->645", "default.handlebars->container->column_l->p15->consoleTable->1->6->1->1->1->0->p15outputselecttd->p15outputselect->3" ] }, @@ -23353,7 +23380,7 @@ "zh-chs": "MQTT登录", "zh-cht": "MQTT登入", "xloc": [ - "default.handlebars->31->670" + "default.handlebars->31->683" ] }, { @@ -23374,7 +23401,7 @@ "zh-cht": "MQTT通道已連接", "xloc": [ "default-mobile.handlebars->11->275", - "default.handlebars->31->680" + "default.handlebars->31->693" ] }, { @@ -23395,7 +23422,7 @@ "zh-cht": "MQTT已連接", "xloc": [ "default.handlebars->31->177", - "default.handlebars->31->679" + "default.handlebars->31->692" ] }, { @@ -23417,7 +23444,7 @@ "xloc": [ "default.handlebars->31->261", "default.handlebars->31->450", - "default.handlebars->31->631" + "default.handlebars->31->644" ] }, { @@ -23499,7 +23526,7 @@ "nl": "MacOS installatieprogramma", "fr": "Installateur MacOS", "xloc": [ - "default.handlebars->31->828" + "default.handlebars->31->841" ] }, { @@ -23519,7 +23546,7 @@ "zh-chs": "主服务器信息", "zh-cht": "主伺服器訊息", "xloc": [ - "default.handlebars->31->2224" + "default.handlebars->31->2237" ] }, { @@ -23539,7 +23566,7 @@ "zh-chs": "马来文", "zh-cht": "馬來文", "xloc": [ - "default.handlebars->31->1234" + "default.handlebars->31->1247" ] }, { @@ -23559,7 +23586,7 @@ "zh-chs": "玛拉雅拉姆文", "zh-cht": "馬拉雅拉姆文", "xloc": [ - "default.handlebars->31->1235" + "default.handlebars->31->1248" ] }, { @@ -23579,7 +23606,7 @@ "zh-chs": "马耳他文", "zh-cht": "馬耳他文", "xloc": [ - "default.handlebars->31->1236" + "default.handlebars->31->1249" ] }, { @@ -23620,10 +23647,10 @@ "zh-chs": "管理设备组计算机", "zh-cht": "管理裝置群電腦", "xloc": [ - "default-mobile.handlebars->11->475", - "default-mobile.handlebars->11->495", - "default.handlebars->31->1520", - "default.handlebars->31->1556" + "default-mobile.handlebars->11->492", + "default-mobile.handlebars->11->512", + "default.handlebars->31->1533", + "default.handlebars->31->1569" ] }, { @@ -23643,10 +23670,10 @@ "zh-chs": "管理设备组用户", "zh-cht": "管理裝置群用戶", "xloc": [ - "default-mobile.handlebars->11->474", - "default-mobile.handlebars->11->494", - "default.handlebars->31->1519", - "default.handlebars->31->1555" + "default-mobile.handlebars->11->491", + "default-mobile.handlebars->11->511", + "default.handlebars->31->1532", + "default.handlebars->31->1568" ] }, { @@ -23666,7 +23693,7 @@ "zh-chs": "管理设备", "zh-cht": "管理裝置", "xloc": [ - "default.handlebars->31->721" + "default.handlebars->31->734" ] }, { @@ -23686,7 +23713,7 @@ "zh-chs": "管理录音", "zh-cht": "管理錄音", "xloc": [ - "default.handlebars->31->1886" + "default.handlebars->31->1899" ] }, { @@ -23726,7 +23753,7 @@ "zh-chs": "管理用户组", "zh-cht": "管理用戶群", "xloc": [ - "default.handlebars->31->1885" + "default.handlebars->31->1898" ] }, { @@ -23746,8 +23773,8 @@ "zh-chs": "管理用户", "zh-cht": "管理用戶", "xloc": [ - "default.handlebars->31->1884", - "default.handlebars->31->720" + "default.handlebars->31->1897", + "default.handlebars->31->733" ] }, { @@ -23873,7 +23900,7 @@ "zh-chs": "使用软件代理进行管理", "zh-cht": "使用軟體代理進行管理", "xloc": [ - "default.handlebars->31->1359" + "default.handlebars->31->1372" ] }, { @@ -23893,8 +23920,8 @@ "zh-chs": "使用软件代理进行管理", "zh-cht": "使用軟體代理進行管理", "xloc": [ - "default-mobile.handlebars->11->455", - "default.handlebars->31->1396" + "default-mobile.handlebars->11->472", + "default.handlebars->31->1409" ] }, { @@ -23914,7 +23941,7 @@ "zh-chs": "经理", "zh-cht": "經理", "xloc": [ - "default.handlebars->31->1807" + "default.handlebars->31->1820" ] }, { @@ -23968,7 +23995,7 @@ "zh-chs": "毛利文", "zh-cht": "毛利文", "xloc": [ - "default.handlebars->31->1237" + "default.handlebars->31->1250" ] }, { @@ -24009,7 +24036,7 @@ "zh-chs": "马拉地文", "zh-cht": "馬拉地文", "xloc": [ - "default.handlebars->31->1238" + "default.handlebars->31->1251" ] }, { @@ -24029,7 +24056,7 @@ "zh-chs": "达到连接数量上限", "zh-cht": "達到連接數量上限", "xloc": [ - "default.handlebars->31->2183" + "default.handlebars->31->2196" ] }, { @@ -24094,7 +24121,7 @@ "zh-chs": "Megabyte", "zh-cht": "Megabyte", "xloc": [ - "default.handlebars->31->2212" + "default.handlebars->31->2225" ] }, { @@ -24114,9 +24141,9 @@ "zh-chs": "记忆体", "zh-cht": "記憶體", "xloc": [ - "default-mobile.handlebars->11->446", - "default.handlebars->31->1074", - "default.handlebars->31->2203", + "default-mobile.handlebars->11->463", + "default.handlebars->31->1087", + "default.handlebars->31->2216", "default.handlebars->container->column_l->p40->3->1->p40type->3" ] }, @@ -24138,10 +24165,10 @@ "zh-cht": "Mesh Agent", "xloc": [ "default-mobile.handlebars->11->272", - "default-mobile.handlebars->11->386", - "default-mobile.handlebars->11->393", - "default.handlebars->31->1004", - "default.handlebars->31->1011", + "default-mobile.handlebars->11->403", + "default-mobile.handlebars->11->410", + "default.handlebars->31->1017", + "default.handlebars->31->1024", "default.handlebars->31->386", "default.handlebars->31->390", "default.handlebars->31->399", @@ -24149,7 +24176,7 @@ "default.handlebars->31->408", "default.handlebars->31->413", "default.handlebars->31->578", - "default.handlebars->31->624" + "default.handlebars->31->637" ] }, { @@ -24169,8 +24196,8 @@ "zh-chs": "网格代理控制台", "zh-cht": "網格代理控制台", "xloc": [ - "default-mobile.handlebars->11->482", - "default.handlebars->31->1528" + "default-mobile.handlebars->11->499", + "default.handlebars->31->1541" ] }, { @@ -24230,7 +24257,7 @@ "zh-chs": "网格中继", "zh-cht": "Mesh Relay", "xloc": [ - "default.handlebars->31->630" + "default.handlebars->31->643" ] }, { @@ -24252,7 +24279,7 @@ "xloc": [ "default.handlebars->31->253", "default.handlebars->31->442", - "default.handlebars->31->623" + "default.handlebars->31->636" ] }, { @@ -24274,7 +24301,7 @@ "xloc": [ "default.handlebars->31->259", "default.handlebars->31->448", - "default.handlebars->31->629" + "default.handlebars->31->642" ] }, { @@ -24294,8 +24321,8 @@ "zh-chs": "MeshAction(.txt)", "zh-cht": "MeshAction(.txt)", "xloc": [ - "default.handlebars->31->845", - "default.handlebars->31->847" + "default.handlebars->31->858", + "default.handlebars->31->860" ] }, { @@ -24315,7 +24342,7 @@ "zh-chs": "MeshAgent流量", "zh-cht": "MeshAgent流量", "xloc": [ - "default.handlebars->31->2226" + "default.handlebars->31->2239" ] }, { @@ -24335,7 +24362,7 @@ "zh-chs": "MeshAgent更新", "zh-cht": "MeshAgent更新", "xloc": [ - "default.handlebars->31->2227" + "default.handlebars->31->2240" ] }, { @@ -24375,7 +24402,7 @@ "zh-chs": "MeshCentral错误", "zh-cht": "MeshCentral錯誤", "xloc": [ - "default.handlebars->31->1389" + "default.handlebars->31->1402" ] }, { @@ -24395,7 +24422,7 @@ "zh-chs": "MeshCentral路由器", "zh-cht": "MeshCentral Router", "xloc": [ - "default.handlebars->31->831" + "default.handlebars->31->844" ] }, { @@ -24415,7 +24442,7 @@ "zh-chs": "MeshCentral 路由器是Windows工具,用于TCP端口映射。例如,您可以通过该服务器将RDP放入远程设备。", "zh-cht": "MeshCentral Router是Windows工具,用於TCP介面映射。例如,你可以通過該伺服器將RDP放入遠程裝置。", "xloc": [ - "default.handlebars->31->826" + "default.handlebars->31->839" ] }, { @@ -24456,7 +24483,7 @@ "zh-chs": "MeshCentral服务器同级化", "zh-cht": "MeshCentral伺服器同級化", "xloc": [ - "default.handlebars->31->2225" + "default.handlebars->31->2238" ] }, { @@ -24498,7 +24525,7 @@ "xloc": [ "default.handlebars->31->126", "default.handlebars->31->128", - "default.handlebars->31->1385" + "default.handlebars->31->1398" ] }, { @@ -24519,8 +24546,8 @@ "zh-cht": "MeshCmd", "xloc": [ "default.handlebars->31->240", - "default.handlebars->31->656", - "default.handlebars->31->843" + "default.handlebars->31->669", + "default.handlebars->31->856" ] }, { @@ -24540,7 +24567,7 @@ "zh-chs": "MeshCmd(Linux ARM,32位)", "zh-cht": "MeshCmd(Linux ARM,32位)", "xloc": [ - "default.handlebars->31->855" + "default.handlebars->31->868" ] }, { @@ -24560,7 +24587,7 @@ "zh-chs": "MeshCmd(Linux ARM,64位)", "zh-cht": "MeshCmd(Linux ARM,64位)", "xloc": [ - "default.handlebars->31->856" + "default.handlebars->31->869" ] }, { @@ -24580,7 +24607,7 @@ "zh-chs": "MeshCmd(Linux x86,32bit)", "zh-cht": "MeshCmd(Linux x86,32bit)", "xloc": [ - "default.handlebars->31->851" + "default.handlebars->31->864" ] }, { @@ -24600,7 +24627,7 @@ "zh-chs": "MeshCmd(Linux x86,64位)", "zh-cht": "MeshCmd(Linux x86,64位)", "xloc": [ - "default.handlebars->31->852" + "default.handlebars->31->865" ] }, { @@ -24620,7 +24647,7 @@ "zh-chs": "MeshCmd(Win32可执行档案)", "zh-cht": "MeshCmd(Win32可執行檔案)", "xloc": [ - "default.handlebars->31->849" + "default.handlebars->31->862" ] }, { @@ -24640,7 +24667,7 @@ "zh-chs": "MeshCmd(Win64可执行档案)", "zh-cht": "MeshCmd(Win64可執行檔案)", "xloc": [ - "default.handlebars->31->850" + "default.handlebars->31->863" ] }, { @@ -24677,7 +24704,7 @@ "zh-chs": "MeshCmd(macOS,ARM-64位)", "zh-cht": "MeshCmd(macOS,ARM-64位)", "xloc": [ - "default.handlebars->31->854" + "default.handlebars->31->867" ] }, { @@ -24697,7 +24724,7 @@ "zh-chs": "MeshCmd(macOS,x86-ARM-64位)", "zh-cht": "MeshCmd(macOS,x86-ARM-64位)", "xloc": [ - "default.handlebars->31->853" + "default.handlebars->31->866" ] }, { @@ -24717,7 +24744,7 @@ "zh-chs": "MeshCmd是一个可以执行许多不同操作的命令行工具。可以选择下载和编辑操作档案以提供服务器信息和凭据。", "zh-cht": "MeshCmd是一個可以執行許多不同操作的命令行工具。可以選擇下載和編輯操作檔案以提供伺服器訊息和憑據。", "xloc": [ - "default.handlebars->31->840" + "default.handlebars->31->853" ] }, { @@ -24794,8 +24821,8 @@ "zh-cht": "訊息", "xloc": [ "default.handlebars->31->356", - "default.handlebars->31->643", - "default.handlebars->31->806" + "default.handlebars->31->656", + "default.handlebars->31->819" ] }, { @@ -24835,7 +24862,7 @@ "zh-chs": "消息调度器", "zh-cht": "電郵調度器", "xloc": [ - "default.handlebars->31->2223" + "default.handlebars->31->2236" ] }, { @@ -24944,8 +24971,8 @@ "en": "Mobile Device", "nl": "Mobiel apparaat", "xloc": [ - "default-mobile.handlebars->11->399", - "default.handlebars->31->1017" + "default-mobile.handlebars->11->416", + "default.handlebars->31->1030" ] }, { @@ -24972,10 +24999,10 @@ "zh-chs": "模型", "zh-cht": "模型", "xloc": [ - "default-mobile.handlebars->11->394", - "default-mobile.handlebars->11->447", - "default.handlebars->31->1012", - "default.handlebars->31->1075" + "default-mobile.handlebars->11->411", + "default-mobile.handlebars->11->464", + "default.handlebars->31->1025", + "default.handlebars->31->1088" ] }, { @@ -25015,7 +25042,7 @@ "zh-chs": "摩尔达维亚文", "zh-cht": "摩爾達維亞文", "xloc": [ - "default.handlebars->31->1239" + "default.handlebars->31->1252" ] }, { @@ -25035,7 +25062,7 @@ "zh-chs": "更多", "zh-cht": "更多", "xloc": [ - "default.handlebars->31->2255" + "default.handlebars->31->2268" ] }, { @@ -25055,8 +25082,8 @@ "zh-chs": "母板", "zh-cht": "母板", "xloc": [ - "default-mobile.handlebars->11->440", - "default.handlebars->31->1068" + "default-mobile.handlebars->11->457", + "default.handlebars->31->1081" ] }, { @@ -25076,7 +25103,7 @@ "zh-chs": "将此设备移到其他设备组", "zh-cht": "將此裝置移至其他裝置群", "xloc": [ - "default.handlebars->31->647" + "default.handlebars->31->660" ] }, { @@ -25116,7 +25143,7 @@ "zh-chs": "移动:“{0}”到“{1}”", "zh-cht": "移動:“{0}”到“{1}”", "xloc": [ - "default.handlebars->31->1712" + "default.handlebars->31->1725" ] }, { @@ -25136,7 +25163,7 @@ "zh-chs": "将设备{0}移动到组{1}", "zh-cht": "將設備{0}移動到組{1}", "xloc": [ - "default.handlebars->31->1745" + "default.handlebars->31->1758" ] }, { @@ -25176,7 +25203,7 @@ "zh-chs": "多路复用器", "zh-cht": "多工器", "xloc": [ - "default.handlebars->31->2126" + "default.handlebars->31->2139" ] }, { @@ -25197,7 +25224,7 @@ "zh-cht": "必須以用戶身份運行", "xloc": [ "default.handlebars->31->480", - "default.handlebars->31->794" + "default.handlebars->31->807" ] }, { @@ -25330,7 +25357,7 @@ "zh-chs": "我的服务器控制台", "zh-cht": "我的伺服器控制台", "xloc": [ - "default.handlebars->31->1081" + "default.handlebars->31->1094" ] }, { @@ -25492,8 +25519,8 @@ "zh-chs": "我的密钥", "zh-cht": "我的密鍵", "xloc": [ - "default.handlebars->31->1114", - "default.handlebars->31->1117" + "default.handlebars->31->1127", + "default.handlebars->31->1130" ] }, { @@ -25576,24 +25603,24 @@ "default-mobile.handlebars->11->108", "default-mobile.handlebars->11->230", "default-mobile.handlebars->11->382", - "default-mobile.handlebars->11->434", - "default-mobile.handlebars->11->456", - "default-mobile.handlebars->11->469", - "default.handlebars->31->1000", + "default-mobile.handlebars->11->451", + "default-mobile.handlebars->11->473", + "default-mobile.handlebars->11->486", "default.handlebars->31->101", - "default.handlebars->31->1062", - "default.handlebars->31->1357", - "default.handlebars->31->1397", - "default.handlebars->31->1484", - "default.handlebars->31->1789", - "default.handlebars->31->1894", - "default.handlebars->31->1910", - "default.handlebars->31->1917", - "default.handlebars->31->1962", - "default.handlebars->31->1981", + "default.handlebars->31->1013", + "default.handlebars->31->1075", + "default.handlebars->31->1370", + "default.handlebars->31->1410", + "default.handlebars->31->1497", + "default.handlebars->31->1802", + "default.handlebars->31->1907", + "default.handlebars->31->1923", + "default.handlebars->31->1930", + "default.handlebars->31->1975", + "default.handlebars->31->1994", "default.handlebars->31->566", "default.handlebars->31->87", - "default.handlebars->31->915", + "default.handlebars->31->928", "default.handlebars->container->column_l->p11->deskarea0->deskarea3x->DeskTools->deskToolsArea->DeskToolsProcessTab->deskToolsHeader->3", "default.handlebars->container->column_l->p11->deskarea0->deskarea3x->DeskTools->deskToolsArea->DeskToolsServiceTab->deskToolsServiceHeader->3", "default.handlebars->container->column_l->p42->p42tbl->1->0->2" @@ -25636,7 +25663,7 @@ "zh-chs": "名称1,名称2,名称3", "zh-cht": "名稱1,名稱2,名稱3", "xloc": [ - "default.handlebars->31->1876" + "default.handlebars->31->1889" ] }, { @@ -25656,7 +25683,7 @@ "zh-chs": "纳瓦霍文", "zh-cht": "納瓦霍文", "xloc": [ - "default.handlebars->31->1240" + "default.handlebars->31->1253" ] }, { @@ -25676,7 +25703,7 @@ "zh-chs": "恩东加", "zh-cht": "恩東加", "xloc": [ - "default.handlebars->31->1241" + "default.handlebars->31->1254" ] }, { @@ -25696,7 +25723,7 @@ "zh-chs": "尼泊尔文", "zh-cht": "尼泊爾文", "xloc": [ - "default.handlebars->31->1242" + "default.handlebars->31->1255" ] }, { @@ -25716,7 +25743,7 @@ "zh-chs": "网络接口", "zh-cht": "網絡介面", "xloc": [ - "default.handlebars->31->824" + "default.handlebars->31->837" ] }, { @@ -25753,9 +25780,9 @@ "zh-chs": "网络", "zh-cht": "網路", "xloc": [ - "default-mobile.handlebars->11->413", - "default.handlebars->31->1027", - "default.handlebars->31->1041" + "default-mobile.handlebars->11->430", + "default.handlebars->31->1040", + "default.handlebars->31->1054" ] }, { @@ -25796,7 +25823,7 @@ "zh-chs": "生成新的2FA备份代码", "zh-cht": "生成新的2FA備份代碼", "xloc": [ - "default.handlebars->31->1752" + "default.handlebars->31->1765" ] }, { @@ -25804,8 +25831,8 @@ "nl": "Nieuw account", "fr": "Nouveau compte", "xloc": [ - "default-mobile.handlebars->11->523", - "default.handlebars->31->2135" + "default-mobile.handlebars->11->540", + "default.handlebars->31->2148" ] }, { @@ -25866,9 +25893,9 @@ "zh-cht": "新裝置群", "xloc": [ "default-mobile.handlebars->11->102", - "default.handlebars->31->1350", - "default.handlebars->31->1362", - "default.handlebars->31->816" + "default.handlebars->31->1363", + "default.handlebars->31->1375", + "default.handlebars->31->829" ] }, { @@ -25890,8 +25917,8 @@ "xloc": [ "default-mobile.handlebars->11->131", "default-mobile.handlebars->11->353", - "default.handlebars->31->1644", - "default.handlebars->31->963", + "default.handlebars->31->1657", + "default.handlebars->31->976", "default.handlebars->container->column_l->p13->p13toolbar->1->2->1->3", "default.handlebars->container->column_l->p5->p5toolbar->1->0->p5filehead->3" ] @@ -25974,8 +26001,8 @@ "zh-chs": "新密码*", "zh-cht": "新密碼*", "xloc": [ - "default.handlebars->31->1462", - "default.handlebars->31->1463" + "default.handlebars->31->1475", + "default.handlebars->31->1476" ] }, { @@ -25997,8 +26024,8 @@ "xloc": [ "default-mobile.handlebars->11->97", "default-mobile.handlebars->11->98", - "default.handlebars->31->1345", - "default.handlebars->31->1346" + "default.handlebars->31->1358", + "default.handlebars->31->1359" ] }, { @@ -26018,8 +26045,8 @@ "zh-chs": "没有AMT", "zh-cht": "沒有AMT", "xloc": [ - "default.handlebars->31->704", - "default.handlebars->31->725" + "default.handlebars->31->717", + "default.handlebars->31->738" ] }, { @@ -26100,9 +26127,9 @@ "zh-chs": "没有桌面", "zh-cht": "沒有桌面", "xloc": [ - "default.handlebars->31->1563", - "default.handlebars->31->706", - "default.handlebars->31->727" + "default.handlebars->31->1576", + "default.handlebars->31->719", + "default.handlebars->31->740" ] }, { @@ -26122,7 +26149,7 @@ "zh-chs": "不能访问桌面", "zh-cht": "不能訪問桌面", "xloc": [ - "default.handlebars->31->1524" + "default.handlebars->31->1537" ] }, { @@ -26142,9 +26169,9 @@ "zh-chs": "找不到事件", "zh-cht": "找不到事件", "xloc": [ - "default.handlebars->31->1765", - "default.handlebars->31->2100", - "default.handlebars->31->998" + "default.handlebars->31->1011", + "default.handlebars->31->1778", + "default.handlebars->31->2113" ] }, { @@ -26164,8 +26191,8 @@ "zh-chs": "不能存取档案", "zh-cht": "不能存取檔案", "xloc": [ - "default-mobile.handlebars->11->480", - "default.handlebars->31->1526" + "default-mobile.handlebars->11->497", + "default.handlebars->31->1539" ] }, { @@ -26185,10 +26212,10 @@ "zh-chs": "没有档案", "zh-cht": "沒有檔案", "xloc": [ - "default-mobile.handlebars->11->503", - "default.handlebars->31->1565", - "default.handlebars->31->703", - "default.handlebars->31->724" + "default-mobile.handlebars->11->520", + "default.handlebars->31->1578", + "default.handlebars->31->716", + "default.handlebars->31->737" ] }, { @@ -26208,8 +26235,8 @@ "zh-chs": "无输入", "zh-cht": "無輸入", "xloc": [ - "default.handlebars->31->701", - "default.handlebars->31->722" + "default.handlebars->31->714", + "default.handlebars->31->735" ] }, { @@ -26229,10 +26256,10 @@ "zh-chs": "没有英特尔®AMT", "zh-cht": "沒有Intel® AMT", "xloc": [ - "default-mobile.handlebars->11->481", - "default-mobile.handlebars->11->504", - "default.handlebars->31->1527", - "default.handlebars->31->1566" + "default-mobile.handlebars->11->498", + "default-mobile.handlebars->11->521", + "default.handlebars->31->1540", + "default.handlebars->31->1579" ] }, { @@ -26312,7 +26339,7 @@ "zh-chs": "没有成员", "zh-cht": "沒有成員", "xloc": [ - "default.handlebars->31->1944" + "default.handlebars->31->1957" ] }, { @@ -26332,7 +26359,7 @@ "zh-chs": "没有新的设备组", "zh-cht": "沒有新的裝置群", "xloc": [ - "default.handlebars->31->1889" + "default.handlebars->31->1902" ] }, { @@ -26352,8 +26379,8 @@ "zh-chs": "没有政策", "zh-cht": "沒有政策", "xloc": [ - "default.handlebars->31->1428", - "default.handlebars->31->1453" + "default.handlebars->31->1441", + "default.handlebars->31->1466" ] }, { @@ -26374,12 +26401,12 @@ "zh-cht": "沒有權利", "xloc": [ "default-mobile.handlebars->11->117", - "default-mobile.handlebars->11->464", - "default-mobile.handlebars->11->511", - "default.handlebars->31->1371", - "default.handlebars->31->1573", - "default.handlebars->31->717", - "default.handlebars->31->738" + "default-mobile.handlebars->11->481", + "default-mobile.handlebars->11->528", + "default.handlebars->31->1384", + "default.handlebars->31->1586", + "default.handlebars->31->730", + "default.handlebars->31->751" ] }, { @@ -26401,7 +26428,7 @@ "xloc": [ "default-mobile.handlebars->11->296", "default.handlebars->31->312", - "default.handlebars->31->802" + "default.handlebars->31->815" ] }, { @@ -26421,10 +26448,10 @@ "zh-chs": "没有终端", "zh-cht": "沒有終端", "xloc": [ - "default-mobile.handlebars->11->502", - "default.handlebars->31->1564", - "default.handlebars->31->702", - "default.handlebars->31->723" + "default-mobile.handlebars->11->519", + "default.handlebars->31->1577", + "default.handlebars->31->715", + "default.handlebars->31->736" ] }, { @@ -26444,8 +26471,8 @@ "zh-chs": "不能访问终端", "zh-cht": "不能訪問終端", "xloc": [ - "default-mobile.handlebars->11->479", - "default.handlebars->31->1525" + "default-mobile.handlebars->11->496", + "default.handlebars->31->1538" ] }, { @@ -26465,7 +26492,7 @@ "zh-chs": "没有工具(MeshCmd /路由器)", "zh-cht": "沒有工具(MeshCmd /路由器)", "xloc": [ - "default.handlebars->31->1890" + "default.handlebars->31->1903" ] }, { @@ -26486,7 +26513,7 @@ "zh-cht": "該設備當前無可用操作。", "xloc": [ "default-mobile.handlebars->11->287", - "default.handlebars->31->786" + "default.handlebars->31->799" ] }, { @@ -26506,8 +26533,8 @@ "zh-chs": "没有共同的设备组", "zh-cht": "沒有共同的裝置群", "xloc": [ - "default.handlebars->31->1950", - "default.handlebars->31->2070" + "default.handlebars->31->1963", + "default.handlebars->31->2083" ] }, { @@ -26627,8 +26654,8 @@ "zh-chs": "没有共同的设备", "zh-cht": "沒有共同的裝置", "xloc": [ - "default.handlebars->31->1956", - "default.handlebars->31->2082" + "default.handlebars->31->1969", + "default.handlebars->31->2095" ] }, { @@ -26648,7 +26675,7 @@ "zh-chs": "该设备组中没有设备。", "zh-cht": "該裝置群中沒有裝置。", "xloc": [ - "default.handlebars->31->1616" + "default.handlebars->31->1629" ] }, { @@ -26731,7 +26758,7 @@ "zh-chs": "找不到文件", "zh-cht": "找不到文件", "xloc": [ - "default.handlebars->31->949" + "default.handlebars->31->962" ] }, { @@ -26751,7 +26778,7 @@ "zh-chs": "找不到群组。", "zh-cht": "找不到群組。", "xloc": [ - "default.handlebars->31->1893" + "default.handlebars->31->1906" ] }, { @@ -26771,8 +26798,8 @@ "zh-chs": "没有此设备的讯息。", "zh-cht": "沒有此裝置的訊息。", "xloc": [ - "default-mobile.handlebars->11->452", - "default.handlebars->31->1080" + "default-mobile.handlebars->11->469", + "default.handlebars->31->1093" ] }, { @@ -26781,7 +26808,7 @@ "nl": "Geen toetsenbord snelkoppelingen gedefinieerd", "xloc": [ "default-mobile.handlebars->11->341", - "default.handlebars->31->909" + "default.handlebars->31->922" ] }, { @@ -26841,7 +26868,7 @@ "zh-chs": "没有其他相同类型的设备组。", "zh-cht": "沒有其他相同類型的裝置群。", "xloc": [ - "default.handlebars->31->819" + "default.handlebars->31->832" ] }, { @@ -26849,8 +26876,8 @@ "nl": "Geen telefoonnummer voor deze gebruiker", "fr": "Aucun numéro de téléphone pour cet utilisateur", "xloc": [ - "default-mobile.handlebars->11->554", - "default.handlebars->31->2166" + "default-mobile.handlebars->11->571", + "default.handlebars->31->2179" ] }, { @@ -26890,7 +26917,7 @@ "zh-chs": "没有录音。", "zh-cht": "沒有錄音。", "xloc": [ - "default.handlebars->31->2102" + "default.handlebars->31->2115" ] }, { @@ -26910,7 +26937,7 @@ "zh-chs": "没有服务器权限", "zh-cht": "沒有伺服器權限", "xloc": [ - "default.handlebars->31->1976" + "default.handlebars->31->1989" ] }, { @@ -26930,7 +26957,7 @@ "zh-chs": "没有用户组成员身份", "zh-cht": "沒有用戶群成員身份", "xloc": [ - "default.handlebars->31->2076" + "default.handlebars->31->2089" ] }, { @@ -26938,8 +26965,8 @@ "nl": "Geen gebruikersbeheerrechten", "fr": "Aucun droit de gestion des utilisateurs", "xloc": [ - "default-mobile.handlebars->11->552", - "default.handlebars->31->2164" + "default-mobile.handlebars->11->569", + "default.handlebars->31->2177" ] }, { @@ -26959,7 +26986,7 @@ "zh-chs": "未找到相应的用户。", "zh-cht": "未找到相應的用戶。", "xloc": [ - "default.handlebars->31->1797" + "default.handlebars->31->1810" ] }, { @@ -26979,7 +27006,7 @@ "zh-chs": "没有拥有特殊设备权限的用户", "zh-cht": "沒有擁有特殊裝置權限的用戶", "xloc": [ - "default.handlebars->31->689" + "default.handlebars->31->702" ] }, { @@ -27049,35 +27076,35 @@ "default-mobile.handlebars->11->267", "default-mobile.handlebars->11->331", "default-mobile.handlebars->11->351", - "default-mobile.handlebars->11->458", - "default.handlebars->31->1392", - "default.handlebars->31->1399", - "default.handlebars->31->1407", - "default.handlebars->31->1419", - "default.handlebars->31->1424", - "default.handlebars->31->1426", - "default.handlebars->31->1607", - "default.handlebars->31->1626", - "default.handlebars->31->1631", - "default.handlebars->31->1773", + "default-mobile.handlebars->11->475", + "default.handlebars->31->1405", + "default.handlebars->31->1412", + "default.handlebars->31->1420", + "default.handlebars->31->1432", + "default.handlebars->31->1437", + "default.handlebars->31->1439", + "default.handlebars->31->1620", + "default.handlebars->31->1639", + "default.handlebars->31->1644", + "default.handlebars->31->1786", "default.handlebars->31->188", - "default.handlebars->31->1914", - "default.handlebars->31->1916", - "default.handlebars->31->1933", - "default.handlebars->31->1995", - "default.handlebars->31->2004", + "default.handlebars->31->1927", + "default.handlebars->31->1929", + "default.handlebars->31->1946", "default.handlebars->31->2008", - "default.handlebars->31->2020", + "default.handlebars->31->2017", + "default.handlebars->31->2021", + "default.handlebars->31->2033", "default.handlebars->31->207", "default.handlebars->31->249", "default.handlebars->31->250", "default.handlebars->31->563", "default.handlebars->31->574", "default.handlebars->31->575", - "default.handlebars->31->621", "default.handlebars->31->634", + "default.handlebars->31->647", "default.handlebars->31->74", - "default.handlebars->31->898", + "default.handlebars->31->911", "default.handlebars->container->column_l->p41->3->3->p41traceStatus" ] }, @@ -27118,7 +27145,7 @@ "zh-chs": "挪威文", "zh-cht": "挪威文", "xloc": [ - "default.handlebars->31->1243" + "default.handlebars->31->1256" ] }, { @@ -27138,7 +27165,7 @@ "zh-chs": "挪威文(Bokmal)", "zh-cht": "挪威文(Bokmal)", "xloc": [ - "default.handlebars->31->1244" + "default.handlebars->31->1257" ] }, { @@ -27158,7 +27185,7 @@ "zh-chs": "挪威文(尼诺斯克)", "zh-cht": "挪威文(尼諾斯克)", "xloc": [ - "default.handlebars->31->1245" + "default.handlebars->31->1258" ] }, { @@ -27178,7 +27205,7 @@ "zh-chs": "未激活", "zh-cht": "未激活", "xloc": [ - "default.handlebars->31->1044" + "default.handlebars->31->1057" ] }, { @@ -27199,7 +27226,7 @@ "zh-cht": "未啟動(輸入)", "xloc": [ "default-mobile.handlebars->11->241", - "default-mobile.handlebars->11->417", + "default-mobile.handlebars->11->434", "default.handlebars->31->580" ] }, @@ -27221,7 +27248,7 @@ "zh-cht": "未啟動(預)", "xloc": [ "default-mobile.handlebars->11->240", - "default-mobile.handlebars->11->416", + "default-mobile.handlebars->11->433", "default.handlebars->31->579" ] }, @@ -27242,8 +27269,8 @@ "zh-chs": "未连接", "zh-cht": "未連接", "xloc": [ - "default.handlebars->31->1603", - "default.handlebars->31->1611" + "default.handlebars->31->1616", + "default.handlebars->31->1624" ] }, { @@ -27263,8 +27290,8 @@ "zh-chs": "未知", "zh-cht": "未知", "xloc": [ - "default-mobile.handlebars->11->427", - "default.handlebars->31->1055" + "default-mobile.handlebars->11->444", + "default.handlebars->31->1068" ] }, { @@ -27291,7 +27318,7 @@ "zh-chs": "不在服务器上", "zh-cht": "不在伺服器上", "xloc": [ - "default.handlebars->31->2118" + "default.handlebars->31->2131" ] }, { @@ -27311,8 +27338,8 @@ "zh-chs": "没有设置", "zh-cht": "沒有設置", "xloc": [ - "default.handlebars->31->1982", - "default.handlebars->31->1983" + "default.handlebars->31->1995", + "default.handlebars->31->1996" ] }, { @@ -27332,7 +27359,7 @@ "zh-chs": "未经审核的", "zh-cht": "未經審核的", "xloc": [ - "default.handlebars->31->2052" + "default.handlebars->31->2065" ] }, { @@ -27352,12 +27379,12 @@ "zh-chs": "笔记", "zh-cht": "筆記", "xloc": [ - "default.handlebars->31->1435", - "default.handlebars->31->2028", - "default.handlebars->31->639", - "default.handlebars->31->711", - "default.handlebars->31->732", - "default.handlebars->31->742" + "default.handlebars->31->1448", + "default.handlebars->31->2041", + "default.handlebars->31->652", + "default.handlebars->31->724", + "default.handlebars->31->745", + "default.handlebars->31->755" ] }, { @@ -27397,8 +27424,8 @@ "zh-chs": "通知设置", "zh-cht": "通知設定", "xloc": [ - "default.handlebars->31->1332", - "default.handlebars->31->1602", + "default.handlebars->31->1345", + "default.handlebars->31->1615", "default.handlebars->container->column_l->p2->p2info->p2AccountActions->3->10" ] }, @@ -27419,7 +27446,7 @@ "zh-chs": "通知设置还必须在帐户设置中启用。", "zh-cht": "通知設定還必須在帳戶設定中啟用。", "xloc": [ - "default.handlebars->31->1598" + "default.handlebars->31->1611" ] }, { @@ -27439,7 +27466,7 @@ "zh-chs": "通知音效。", "zh-cht": "通知音效。", "xloc": [ - "default.handlebars->31->1327" + "default.handlebars->31->1340" ] }, { @@ -27459,7 +27486,7 @@ "zh-chs": "通知", "zh-cht": "通知", "xloc": [ - "default.handlebars->31->1425" + "default.handlebars->31->1438" ] }, { @@ -27479,8 +27506,8 @@ "zh-chs": "通知", "zh-cht": "通知", "xloc": [ - "default.handlebars->31->2034", - "default.handlebars->31->204" + "default.handlebars->31->204", + "default.handlebars->31->2047" ] }, { @@ -27500,7 +27527,7 @@ "zh-chs": "仅通知", "zh-cht": "只通知", "xloc": [ - "default.handlebars->31->775" + "default.handlebars->31->788" ] }, { @@ -27520,9 +27547,9 @@ "zh-chs": "通知使用者", "zh-cht": "通知使用者", "xloc": [ - "default.handlebars->31->1492", - "default.handlebars->31->1496", - "default.handlebars->31->1499" + "default.handlebars->31->1505", + "default.handlebars->31->1509", + "default.handlebars->31->1512" ] }, { @@ -27542,7 +27569,7 @@ "zh-chs": "通知{0}", "zh-cht": "通知{0}", "xloc": [ - "default.handlebars->31->1836" + "default.handlebars->31->1849" ] }, { @@ -27550,7 +27577,7 @@ "fr": "Null", "nl": "Null", "xloc": [ - "default.handlebars->31->2217" + "default.handlebars->31->2230" ] }, { @@ -27570,11 +27597,18 @@ "zh-chs": "OK", "zh-cht": "OK", "xloc": [ + "default-mobile.handlebars->11->386", + "default-mobile.handlebars->11->390", + "default-mobile.handlebars->11->394", + "default-mobile.handlebars->11->400", "default-mobile.handlebars->11->94", "default-mobile.handlebars->container->page_content->column_l->p10->p10dialog->5", "default-mobile.handlebars->dialog->idx_dlgButtonBar", - "default.handlebars->31->1383", - "default.handlebars->31->609", + "default.handlebars->31->1396", + "default.handlebars->31->608", + "default.handlebars->31->612", + "default.handlebars->31->616", + "default.handlebars->31->622", "default.handlebars->container->dialog->idx_dlgButtonBar", "desktop.handlebars->p11->dialog->idx_dlgButtonBar", "login-mobile.handlebars->dialog->idx_dlgButtonBar", @@ -27624,7 +27658,7 @@ "zh-chs": "欧舒丹", "zh-cht": "歐舒丹", "xloc": [ - "default.handlebars->31->1246" + "default.handlebars->31->1259" ] }, { @@ -27644,8 +27678,8 @@ "zh-chs": "发生在{0}", "zh-cht": "發生在{0}", "xloc": [ - "default-mobile.handlebars->11->520", - "default.handlebars->31->2132" + "default-mobile.handlebars->11->537", + "default.handlebars->31->2145" ] }, { @@ -27685,7 +27719,7 @@ "zh-chs": "离线用户", "zh-cht": "離線用戶", "xloc": [ - "default.handlebars->31->1794" + "default.handlebars->31->1807" ] }, { @@ -27726,7 +27760,7 @@ "zh-cht": "舊密碼:", "xloc": [ "default-mobile.handlebars->11->96", - "default.handlebars->31->1344" + "default.handlebars->31->1357" ] }, { @@ -27746,7 +27780,7 @@ "zh-chs": "一天", "zh-cht": "一天", "xloc": [ - "default.handlebars->31->1770" + "default.handlebars->31->1783" ] }, { @@ -27809,7 +27843,7 @@ "zh-chs": "在线用户", "zh-cht": "在線用戶", "xloc": [ - "default.handlebars->31->1793" + "default.handlebars->31->1806" ] }, { @@ -27831,7 +27865,7 @@ "xloc": [ "default-mobile.handlebars->11->361", "default.handlebars->31->534", - "default.handlebars->31->971" + "default.handlebars->31->984" ] }, { @@ -27892,7 +27926,7 @@ "zh-chs": "在设备上打开页面", "zh-cht": "在裝置上打開頁面", "xloc": [ - "default.handlebars->31->743" + "default.handlebars->31->756" ] }, { @@ -27933,7 +27967,7 @@ "zh-chs": "打开XTerm终端", "zh-cht": "打開XTerm終端", "xloc": [ - "default.handlebars->31->657" + "default.handlebars->31->670" ] }, { @@ -27993,7 +28027,7 @@ "zh-chs": "开头:{0}", "zh-cht": "開場:{0}", "xloc": [ - "default.handlebars->31->1680" + "default.handlebars->31->1693" ] }, { @@ -28013,12 +28047,12 @@ "zh-chs": "操作系统", "zh-cht": "操作系統", "xloc": [ - "default-mobile.handlebars->11->385", - "default.handlebars->31->1003", + "default-mobile.handlebars->11->402", + "default.handlebars->31->1016", "default.handlebars->31->339", "default.handlebars->31->379", "default.handlebars->31->606", - "default.handlebars->31->842" + "default.handlebars->31->855" ] }, { @@ -28039,11 +28073,11 @@ "zh-cht": "操作", "xloc": [ "default-mobile.handlebars->11->286", - "default.handlebars->31->1820", - "default.handlebars->31->1901", + "default.handlebars->31->1833", + "default.handlebars->31->1914", "default.handlebars->31->468", "default.handlebars->31->483", - "default.handlebars->31->785" + "default.handlebars->31->798" ] }, { @@ -28080,7 +28114,7 @@ "zh-chs": "奥里亚", "zh-cht": "奧里亞", "xloc": [ - "default.handlebars->31->1247" + "default.handlebars->31->1260" ] }, { @@ -28100,7 +28134,7 @@ "zh-chs": "奥罗莫", "zh-cht": "奧羅莫", "xloc": [ - "default.handlebars->31->1248" + "default.handlebars->31->1261" ] }, { @@ -28159,7 +28193,8 @@ "zh-chs": "过时的", "zh-cht": "過時的", "xloc": [ - "default.handlebars->31->608" + "default-mobile.handlebars->11->399", + "default.handlebars->31->621" ] }, { @@ -28199,7 +28234,7 @@ "zh-chs": "自己的过程", "zh-cht": "自己的過程", "xloc": [ - "default.handlebars->31->922" + "default.handlebars->31->935" ] }, { @@ -28219,7 +28254,7 @@ "zh-chs": "PID", "zh-cht": "PID", "xloc": [ - "default.handlebars->31->918", + "default.handlebars->31->931", "default.handlebars->container->column_l->p11->deskarea0->deskarea3x->DeskTools->deskToolsArea->DeskToolsProcessTab->deskToolsHeader->1" ] }, @@ -28229,7 +28264,7 @@ "nl": "Page Down", "xloc": [ "default-mobile.handlebars->11->326", - "default.handlebars->31->893" + "default.handlebars->31->906" ] }, { @@ -28238,7 +28273,7 @@ "nl": "Page Up", "xloc": [ "default-mobile.handlebars->11->325", - "default.handlebars->31->892" + "default.handlebars->31->905" ] }, { @@ -28258,8 +28293,8 @@ "zh-chs": "零件号", "zh-cht": "零件號", "xloc": [ - "default-mobile.handlebars->11->445", - "default.handlebars->31->1073" + "default-mobile.handlebars->11->462", + "default.handlebars->31->1086" ] }, { @@ -28279,7 +28314,7 @@ "zh-chs": "部分的", "zh-cht": "部分的", "xloc": [ - "default.handlebars->31->1808" + "default.handlebars->31->1821" ] }, { @@ -28334,8 +28369,8 @@ "zh-cht": "部分權限", "xloc": [ "default-mobile.handlebars->11->115", - "default-mobile.handlebars->11->462", - "default.handlebars->31->1369" + "default-mobile.handlebars->11->479", + "default.handlebars->31->1382" ] }, { @@ -28355,7 +28390,7 @@ "zh-chs": "部分权限", "zh-cht": "部分權限", "xloc": [ - "default.handlebars->31->1979" + "default.handlebars->31->1992" ] }, { @@ -28396,15 +28431,15 @@ "zh-cht": "密碼", "xloc": [ "default-mobile.handlebars->11->294", - "default.handlebars->31->1459", - "default.handlebars->31->1864", - "default.handlebars->31->1865", - "default.handlebars->31->2000", - "default.handlebars->31->2002", - "default.handlebars->31->2055", - "default.handlebars->31->2056", + "default.handlebars->31->1472", + "default.handlebars->31->1877", + "default.handlebars->31->1878", + "default.handlebars->31->2013", + "default.handlebars->31->2015", + "default.handlebars->31->2068", + "default.handlebars->31->2069", "default.handlebars->31->310", - "default.handlebars->31->800", + "default.handlebars->31->813", "login2.handlebars->centralTable->1->0->logincell->loginpanel->1->loginuserpassdiv->1->1->2->1", "login2.handlebars->centralTable->1->0->logincell->loginpanel->1->loginuserpassdiv->1->1->2->1", "mstsc.handlebars->main->1->3->1->6->1->0", @@ -28512,8 +28547,8 @@ "nl": "Wachtwoord gewijzigd.", "fr": "Mot de passe changé.", "xloc": [ - "default-mobile.handlebars->11->548", - "default.handlebars->31->2160" + "default-mobile.handlebars->11->565", + "default.handlebars->31->2173" ] }, { @@ -28554,7 +28589,7 @@ "zh-chs": "密码提示", "zh-cht": "密碼提示", "xloc": [ - "default.handlebars->31->2057" + "default.handlebars->31->2070" ] }, { @@ -28575,7 +28610,7 @@ "zh-cht": "密碼提示:", "xloc": [ "default-mobile.handlebars->11->99", - "default.handlebars->31->1347" + "default.handlebars->31->1360" ] }, { @@ -28654,8 +28689,8 @@ "account-invite.html->2->5", "default-mobile.handlebars->11->91", "default-mobile.handlebars->11->92", - "default.handlebars->31->1339", - "default.handlebars->31->1340", + "default.handlebars->31->1352", + "default.handlebars->31->1353", "login-mobile.handlebars->container->page_content->column_l->1->1->0->1->createpanel->1->1->9->1->4->1", "login-mobile.handlebars->container->page_content->column_l->1->1->0->1->createpanel->1->1->9->1->6->1", "login-mobile.handlebars->container->page_content->column_l->1->1->0->1->loginpanel->1->7->1->2->1", @@ -28693,9 +28728,9 @@ "default-mobile.handlebars->11->366", "default-mobile.handlebars->container->page_content->column_l->p10->p10files->p13toolbar->1->2->1->3", "default-mobile.handlebars->container->page_content->column_l->p5->p5myfiles->p5toolbar->1->0->1->3", - "default.handlebars->31->1653", - "default.handlebars->31->945", - "default.handlebars->31->977", + "default.handlebars->31->1666", + "default.handlebars->31->958", + "default.handlebars->31->990", "default.handlebars->container->column_l->p12->termTable->1->1->6->1->3", "default.handlebars->container->column_l->p13->p13toolbar->1->2->1->3", "default.handlebars->container->column_l->p5->p5toolbar->1->0->p5filehead->3", @@ -28761,7 +28796,7 @@ "zh-chs": "执行代理指令", "zh-cht": "執行代理指令", "xloc": [ - "default.handlebars->31->1089" + "default.handlebars->31->1102" ] }, { @@ -28815,7 +28850,7 @@ "zh-chs": "执行英特尔®AMT激活和配置。", "zh-cht": "執行英特爾®AMT激活和配置。", "xloc": [ - "default.handlebars->31->1439", + "default.handlebars->31->1452", "default.handlebars->31->298" ] }, @@ -28944,7 +28979,7 @@ "zh-chs": "在设备上执行电源操作", "zh-cht": "在裝置上執行電源操作", "xloc": [ - "default.handlebars->31->638", + "default.handlebars->31->651", "default.handlebars->container->column_l->p11->deskarea0->deskarea1->1", "default.handlebars->container->column_l->p12->termTable->1->1->0->1->1", "default.handlebars->container->column_l->p13->p13toolbar->1->0->1->1" @@ -28967,7 +29002,7 @@ "zh-chs": "执行电源操作= {0},强制执行= {1}", "zh-cht": "執行電源操作= {0},強制執行= {1}", "xloc": [ - "default.handlebars->31->1685" + "default.handlebars->31->1698" ] }, { @@ -28975,8 +29010,8 @@ "nl": "Toestemming geweigerd", "fr": "Permission refusée", "xloc": [ - "default-mobile.handlebars->11->529", - "default.handlebars->31->2141" + "default-mobile.handlebars->11->546", + "default.handlebars->31->2154" ] }, { @@ -28996,9 +29031,9 @@ "zh-chs": "权限", "zh-cht": "權限", "xloc": [ - "default-mobile.handlebars->11->514", - "default.handlebars->31->1576", - "default.handlebars->31->1792" + "default-mobile.handlebars->11->531", + "default.handlebars->31->1589", + "default.handlebars->31->1805" ] }, { @@ -29018,7 +29053,7 @@ "zh-chs": "波斯/伊朗", "zh-cht": "波斯/伊朗", "xloc": [ - "default.handlebars->31->1249" + "default.handlebars->31->1262" ] }, { @@ -29041,10 +29076,10 @@ "default-mobile.handlebars->11->73", "default-mobile.handlebars->11->76", "default-mobile.handlebars->11->78", - "default.handlebars->31->1101", - "default.handlebars->31->1104", + "default.handlebars->31->1114", + "default.handlebars->31->1117", "default.handlebars->31->170", - "default.handlebars->31->2047" + "default.handlebars->31->2060" ] }, { @@ -29064,7 +29099,7 @@ "zh-chs": "电话号码", "zh-cht": "電話號碼", "xloc": [ - "default.handlebars->31->1994" + "default.handlebars->31->2007" ] }, { @@ -29085,8 +29120,8 @@ "zh-cht": "電話號碼:", "xloc": [ "default-mobile.handlebars->11->77", - "default.handlebars->31->1103", - "default.handlebars->31->2046" + "default.handlebars->31->1116", + "default.handlebars->31->2059" ] }, { @@ -29245,7 +29280,7 @@ "zh-cht": "請等待幾分鐘以接收驗證。", "xloc": [ "default-mobile.handlebars->11->87", - "default.handlebars->31->1334" + "default.handlebars->31->1347" ] }, { @@ -29266,7 +29301,7 @@ "zh-cht": "外掛指令", "xloc": [ "default.handlebars->31->215", - "default.handlebars->31->2252" + "default.handlebars->31->2265" ] }, { @@ -29410,7 +29445,7 @@ "zh-cht": "政策", "xloc": [ "default-mobile.handlebars->11->114", - "default.handlebars->31->1368" + "default.handlebars->31->1381" ] }, { @@ -29430,7 +29465,7 @@ "zh-chs": "波兰文", "zh-cht": "波蘭文", "xloc": [ - "default.handlebars->31->1250" + "default.handlebars->31->1263" ] }, { @@ -29450,7 +29485,7 @@ "zh-chs": "葡萄牙文", "zh-cht": "葡萄牙文", "xloc": [ - "default.handlebars->31->1251" + "default.handlebars->31->1264" ] }, { @@ -29470,7 +29505,7 @@ "zh-chs": "葡萄牙文(巴西)", "zh-cht": "葡萄牙文(巴西)", "xloc": [ - "default.handlebars->31->1252" + "default.handlebars->31->1265" ] }, { @@ -29551,7 +29586,7 @@ "zh-chs": "电源状态", "zh-cht": "電源狀態", "xloc": [ - "default.handlebars->31->1609", + "default.handlebars->31->1622", "default.handlebars->container->column_l->p21->3->1->meshPowerChartDiv->1" ] }, @@ -29575,7 +29610,7 @@ "default-mobile.handlebars->11->198", "default-mobile.handlebars->11->285", "default.handlebars->31->6", - "default.handlebars->31->782" + "default.handlebars->31->795" ] }, { @@ -29638,7 +29673,7 @@ "zh-chs": "预激活", "zh-cht": "預激活", "xloc": [ - "default.handlebars->31->1045" + "default.handlebars->31->1058" ] }, { @@ -29681,7 +29716,7 @@ "zh-chs": "存在于服务器上", "zh-cht": "存在於伺服器上", "xloc": [ - "default.handlebars->31->2117" + "default.handlebars->31->2130" ] }, { @@ -29824,7 +29859,7 @@ "zh-chs": "进程控制", "zh-cht": "進程控制", "xloc": [ - "default.handlebars->31->932", + "default.handlebars->31->945", "desktop.handlebars->3->24" ] }, @@ -29865,7 +29900,7 @@ "zh-chs": "处理控制台命令:“{0}”", "zh-cht": "處理控制台命令:“{0}”", "xloc": [ - "default.handlebars->31->1677" + "default.handlebars->31->1690" ] }, { @@ -29905,7 +29940,7 @@ "zh-chs": "用户同意提示", "zh-cht": "用戶同意提示", "xloc": [ - "default.handlebars->31->774" + "default.handlebars->31->787" ] }, { @@ -29925,9 +29960,9 @@ "zh-chs": "用户同意提示", "zh-cht": "用戶同意提示", "xloc": [ - "default.handlebars->31->1493", - "default.handlebars->31->1497", - "default.handlebars->31->1500" + "default.handlebars->31->1506", + "default.handlebars->31->1510", + "default.handlebars->31->1513" ] }, { @@ -29947,7 +29982,7 @@ "zh-chs": "协议", "zh-cht": "協議", "xloc": [ - "default.handlebars->31->2115", + "default.handlebars->31->2128", "player.handlebars->3->16" ] }, @@ -29985,8 +30020,8 @@ "zh-chs": "配置状态", "zh-cht": "配置狀態", "xloc": [ - "default-mobile.handlebars->11->421", - "default.handlebars->31->1049" + "default-mobile.handlebars->11->438", + "default.handlebars->31->1062" ] }, { @@ -30007,7 +30042,7 @@ "zh-cht": "公開鏈結", "xloc": [ "default-mobile.handlebars->11->126", - "default.handlebars->31->1638" + "default.handlebars->31->1651" ] }, { @@ -30027,7 +30062,7 @@ "zh-chs": "旁遮普文", "zh-cht": "旁遮普文", "xloc": [ - "default.handlebars->31->1253" + "default.handlebars->31->1266" ] }, { @@ -30047,7 +30082,7 @@ "zh-chs": "旁遮普(印度)", "zh-cht": "旁遮普(印度)", "xloc": [ - "default.handlebars->31->1254" + "default.handlebars->31->1267" ] }, { @@ -30067,7 +30102,7 @@ "zh-chs": "旁遮普(巴基斯坦)", "zh-cht": "旁遮普(巴基斯坦)", "xloc": [ - "default.handlebars->31->1255" + "default.handlebars->31->1268" ] }, { @@ -30126,7 +30161,7 @@ "zh-chs": "盖丘亚族", "zh-cht": "蓋丘亞族", "xloc": [ - "default.handlebars->31->1256" + "default.handlebars->31->1269" ] }, { @@ -30190,7 +30225,7 @@ "zh-chs": "RDP", "zh-cht": "RDP", "xloc": [ - "default.handlebars->31->660" + "default.handlebars->31->673" ] }, { @@ -30311,7 +30346,7 @@ "zh-chs": "RSS", "zh-cht": "RSS", "xloc": [ - "default.handlebars->31->2216" + "default.handlebars->31->2229" ] }, { @@ -30351,7 +30386,7 @@ "zh-chs": "随机密码", "zh-cht": "隨機密碼", "xloc": [ - "default.handlebars->31->1460" + "default.handlebars->31->1473" ] }, { @@ -30371,7 +30406,7 @@ "zh-chs": "随机密码。", "zh-cht": "隨機密碼。", "xloc": [ - "default.handlebars->31->1866" + "default.handlebars->31->1879" ] }, { @@ -30428,9 +30463,9 @@ "zh-chs": "真正的名字", "zh-cht": "真正的名字", "xloc": [ - "default.handlebars->31->1991", - "default.handlebars->31->1993", - "default.handlebars->31->2048" + "default.handlebars->31->2004", + "default.handlebars->31->2006", + "default.handlebars->31->2061" ] }, { @@ -30450,7 +30485,7 @@ "zh-chs": "境界", "zh-cht": "境界", "xloc": [ - "default.handlebars->31->1875" + "default.handlebars->31->1888" ] }, { @@ -30471,7 +30506,7 @@ "zh-cht": "收到無效的網絡數據", "xloc": [ "default-mobile.handlebars->11->313", - "default.handlebars->31->868", + "default.handlebars->31->881", "desktop.handlebars->3->10", "terminal.handlebars->3->14" ] @@ -30493,7 +30528,7 @@ "zh-chs": "记录会议", "zh-cht": "記錄會議", "xloc": [ - "default.handlebars->31->1406" + "default.handlebars->31->1419" ] }, { @@ -30533,7 +30568,7 @@ "zh-chs": "记录会议", "zh-cht": "記錄會議", "xloc": [ - "default.handlebars->31->1503" + "default.handlebars->31->1516" ] }, { @@ -30553,7 +30588,7 @@ "zh-chs": "记录细节", "zh-cht": "記錄細節", "xloc": [ - "default.handlebars->31->2129" + "default.handlebars->31->2142" ] }, { @@ -30595,8 +30630,8 @@ "xloc": [ "default-mobile.handlebars->11->132", "default-mobile.handlebars->11->354", - "default.handlebars->31->1645", - "default.handlebars->31->964" + "default.handlebars->31->1658", + "default.handlebars->31->977" ] }, { @@ -30727,7 +30762,7 @@ "zh-chs": "中继数量", "zh-cht": "中繼數量", "xloc": [ - "default.handlebars->31->2195" + "default.handlebars->31->2208" ] }, { @@ -30747,7 +30782,7 @@ "zh-chs": "中继错误", "zh-cht": "中繼錯誤", "xloc": [ - "default.handlebars->31->2188" + "default.handlebars->31->2201" ] }, { @@ -30767,8 +30802,8 @@ "zh-chs": "中继连接", "zh-cht": "中繼連接", "xloc": [ - "default.handlebars->31->2194", - "default.handlebars->31->2210" + "default.handlebars->31->2207", + "default.handlebars->31->2223" ] }, { @@ -30905,7 +30940,7 @@ "zh-chs": "远程剪贴板", "zh-cht": "遠程剪貼板", "xloc": [ - "default.handlebars->31->913" + "default.handlebars->31->926" ] }, { @@ -30925,8 +30960,8 @@ "zh-chs": "远程命令", "zh-cht": "遠程命令", "xloc": [ - "default-mobile.handlebars->11->489", - "default.handlebars->31->1535" + "default-mobile.handlebars->11->506", + "default.handlebars->31->1548" ] }, { @@ -30946,10 +30981,10 @@ "zh-chs": "遥控", "zh-cht": "遙控", "xloc": [ - "default-mobile.handlebars->11->476", - "default-mobile.handlebars->11->496", - "default.handlebars->31->1521", - "default.handlebars->31->1557" + "default-mobile.handlebars->11->493", + "default-mobile.handlebars->11->513", + "default.handlebars->31->1534", + "default.handlebars->31->1570" ] }, { @@ -30992,8 +31027,8 @@ "zh-chs": "远程桌面连接栏已激活/更新", "zh-cht": "遠程桌面連接欄已激活/更新", "xloc": [ - "default.handlebars->31->1691", - "default.handlebars->31->1697" + "default.handlebars->31->1704", + "default.handlebars->31->1710" ] }, { @@ -31013,7 +31048,7 @@ "zh-chs": "远程桌面连接栏失败或不受支持", "zh-cht": "遠程桌面連接欄失敗或不受支持", "xloc": [ - "default.handlebars->31->1692" + "default.handlebars->31->1705" ] }, { @@ -31033,7 +31068,7 @@ "zh-chs": "远程桌面连接栏失败或不受支持", "zh-cht": "遠程桌面連接欄失敗或不受支持", "xloc": [ - "default.handlebars->31->1698" + "default.handlebars->31->1711" ] }, { @@ -31053,9 +31088,9 @@ "zh-chs": "本地用户强行关闭了远程桌面连接", "zh-cht": "本地用戶強行關閉了遠程桌面連接", "xloc": [ - "default.handlebars->31->1689", - "default.handlebars->31->1693", - "default.handlebars->31->1699" + "default.handlebars->31->1702", + "default.handlebars->31->1706", + "default.handlebars->31->1712" ] }, { @@ -31097,7 +31132,7 @@ "xloc": [ "default-mobile.handlebars->11->315", "default.handlebars->31->293", - "default.handlebars->31->879", + "default.handlebars->31->892", "desktop.handlebars->3->20" ] }, @@ -31118,7 +31153,7 @@ "zh-chs": "远程键盘输入", "zh-cht": "遠程鍵盤輸入", "xloc": [ - "default.handlebars->31->911", + "default.handlebars->31->924", "desktop.handlebars->3->22" ] }, @@ -31139,7 +31174,7 @@ "zh-chs": "远程网格用户", "zh-cht": "遠程網格用戶", "xloc": [ - "default-mobile.handlebars->11->517" + "default-mobile.handlebars->11->534" ] }, { @@ -31196,10 +31231,10 @@ "zh-chs": "仅远程查看", "zh-cht": "僅遠程查看", "xloc": [ - "default-mobile.handlebars->11->477", - "default-mobile.handlebars->11->501", - "default.handlebars->31->1522", - "default.handlebars->31->1562" + "default-mobile.handlebars->11->494", + "default-mobile.handlebars->11->518", + "default.handlebars->31->1535", + "default.handlebars->31->1575" ] }, { @@ -31219,7 +31254,7 @@ "zh-chs": "远程剪贴板的有效期为60秒。", "zh-cht": "遠程剪貼板的有效期為60秒。", "xloc": [ - "default.handlebars->31->912" + "default.handlebars->31->925" ] }, { @@ -31281,7 +31316,7 @@ "zh-chs": "删除配置", "zh-cht": "刪除配置", "xloc": [ - "default.handlebars->31->1379" + "default.handlebars->31->1392" ] }, { @@ -31335,8 +31370,8 @@ "zh-chs": "删除设备组权限", "zh-cht": "刪除裝置群權限", "xloc": [ - "default.handlebars->31->1960", - "default.handlebars->31->2098" + "default.handlebars->31->1973", + "default.handlebars->31->2111" ] }, { @@ -31356,8 +31391,8 @@ "zh-chs": "删除设备权限", "zh-cht": "刪除裝置權限", "xloc": [ - "default.handlebars->31->1958", - "default.handlebars->31->2085" + "default.handlebars->31->1971", + "default.handlebars->31->2098" ] }, { @@ -31377,7 +31412,7 @@ "zh-chs": "删除设备共享", "zh-cht": "刪除設備共享", "xloc": [ - "default.handlebars->31->2083" + "default.handlebars->31->2096" ] }, { @@ -31414,7 +31449,7 @@ "zh-chs": "删除用户组成员身份", "zh-cht": "刪除用戶群成員身份", "xloc": [ - "default.handlebars->31->2094" + "default.handlebars->31->2107" ] }, { @@ -31434,8 +31469,8 @@ "zh-chs": "删除用户组权限", "zh-cht": "刪除用戶群權限", "xloc": [ - "default.handlebars->31->1581", - "default.handlebars->31->2090" + "default.handlebars->31->1594", + "default.handlebars->31->2103" ] }, { @@ -31455,7 +31490,7 @@ "zh-chs": "删除用户成员资格", "zh-cht": "刪除用戶成員資格", "xloc": [ - "default.handlebars->31->1968" + "default.handlebars->31->1981" ] }, { @@ -31475,8 +31510,8 @@ "zh-chs": "删除用户权限", "zh-cht": "刪除用戶權限", "xloc": [ - "default.handlebars->31->1579", - "default.handlebars->31->2087" + "default.handlebars->31->1592", + "default.handlebars->31->2100" ] }, { @@ -31496,7 +31531,7 @@ "zh-chs": "删除所有两因素认证。", "zh-cht": "刪除所有二因子鑑別。", "xloc": [ - "default.handlebars->31->2060" + "default.handlebars->31->2073" ] }, { @@ -31516,7 +31551,7 @@ "zh-chs": "删除此用户标识的所有先前事件。", "zh-cht": "刪除此用戶標識的所有先前事件。", "xloc": [ - "default.handlebars->31->1867" + "default.handlebars->31->1880" ] }, { @@ -31536,7 +31571,7 @@ "zh-chs": "断开连接后移除设备", "zh-cht": "斷開連接後删除裝置", "xloc": [ - "default.handlebars->31->1501" + "default.handlebars->31->1514" ] }, { @@ -31556,7 +31591,7 @@ "zh-chs": "删除设备共享", "zh-cht": "刪除設備共享", "xloc": [ - "default.handlebars->31->692" + "default.handlebars->31->705" ] }, { @@ -31597,7 +31632,7 @@ "zh-cht": "刪除電話號碼", "xloc": [ "default-mobile.handlebars->11->75", - "default.handlebars->31->1100" + "default.handlebars->31->1113" ] }, { @@ -31637,7 +31672,7 @@ "zh-chs": "删除此设备", "zh-cht": "刪除此裝置", "xloc": [ - "default.handlebars->31->649" + "default.handlebars->31->662" ] }, { @@ -31657,7 +31692,7 @@ "zh-chs": "删除此用户", "zh-cht": "刪除此用戶", "xloc": [ - "default.handlebars->31->2038" + "default.handlebars->31->2051" ] }, { @@ -31677,7 +31712,7 @@ "zh-chs": "删除用户组成员身份", "zh-cht": "刪除用戶群成員身份", "xloc": [ - "default.handlebars->31->2074" + "default.handlebars->31->2087" ] }, { @@ -31697,7 +31732,7 @@ "zh-chs": "删除此设备的用户组权限", "zh-cht": "刪除此裝置的用戶群權限", "xloc": [ - "default.handlebars->31->1954" + "default.handlebars->31->1967" ] }, { @@ -31717,8 +31752,8 @@ "zh-chs": "删除此设备组的用户组权限", "zh-cht": "刪除此裝置群的用戶群權限", "xloc": [ - "default.handlebars->31->1948", - "default.handlebars->31->685" + "default.handlebars->31->1961", + "default.handlebars->31->698" ] }, { @@ -31738,11 +31773,11 @@ "zh-chs": "删除此设备组的用户权限", "zh-cht": "刪除此裝置群的用戶權限", "xloc": [ - "default.handlebars->31->1448", - "default.handlebars->31->1942", - "default.handlebars->31->2068", - "default.handlebars->31->2080", - "default.handlebars->31->686" + "default.handlebars->31->1461", + "default.handlebars->31->1955", + "default.handlebars->31->2081", + "default.handlebars->31->2093", + "default.handlebars->31->699" ] }, { @@ -31762,7 +31797,7 @@ "zh-chs": "删除身份验证应用程序", "zh-cht": "刪除身份驗證應用程序", "xloc": [ - "default.handlebars->31->1751" + "default.handlebars->31->1764" ] }, { @@ -31782,7 +31817,7 @@ "zh-chs": "删除的设备共享{0}", "zh-cht": "刪除的設備共享{0}", "xloc": [ - "default.handlebars->31->1762" + "default.handlebars->31->1775" ] }, { @@ -31802,7 +31837,7 @@ "zh-chs": "从设备组{1}中删除了设备{0}", "zh-cht": "從設備組{1}中刪除了設備{0}", "xloc": [ - "default.handlebars->31->1747" + "default.handlebars->31->1760" ] }, { @@ -31822,7 +31857,7 @@ "zh-chs": "已删除用户{0}的电话号码", "zh-cht": "已刪除用戶{0}的電話號碼", "xloc": [ - "default.handlebars->31->1757" + "default.handlebars->31->1770" ] }, { @@ -31842,7 +31877,7 @@ "zh-chs": "移除安全密钥", "zh-cht": "移除安全密鑰", "xloc": [ - "default.handlebars->31->1754" + "default.handlebars->31->1767" ] }, { @@ -31862,9 +31897,9 @@ "zh-chs": "删除了{0}的用户设备权限", "zh-cht": "刪除了{0}的用戶設備權限", "xloc": [ - "default.handlebars->31->1720", - "default.handlebars->31->1741", - "default.handlebars->31->1746" + "default.handlebars->31->1733", + "default.handlebars->31->1754", + "default.handlebars->31->1759" ] }, { @@ -31884,7 +31919,7 @@ "zh-chs": "从设备组{1}中删除了用户组{0}", "zh-cht": "從設備組{1}中刪除了用戶組{0}", "xloc": [ - "default.handlebars->31->1730" + "default.handlebars->31->1743" ] }, { @@ -31904,7 +31939,7 @@ "zh-chs": "从设备组{1}中删除了用户{0}", "zh-cht": "已從設備組{1}中刪除用戶{0}", "xloc": [ - "default.handlebars->31->1743" + "default.handlebars->31->1756" ] }, { @@ -31924,8 +31959,8 @@ "zh-chs": "从用户组{1}中删除了用户{0}", "zh-cht": "從用戶組{1}中刪除了用戶{0}", "xloc": [ - "default.handlebars->31->1722", - "default.handlebars->31->1732" + "default.handlebars->31->1735", + "default.handlebars->31->1745" ] }, { @@ -31949,9 +31984,9 @@ "default-mobile.handlebars->11->358", "default-mobile.handlebars->container->page_content->column_l->p10->p10files->p13toolbar->1->2->1->1", "default-mobile.handlebars->container->page_content->column_l->p5->p5myfiles->p5toolbar->1->0->1->1", - "default.handlebars->31->1649", + "default.handlebars->31->1662", "default.handlebars->31->532", - "default.handlebars->31->968", + "default.handlebars->31->981", "default.handlebars->container->column_l->p13->p13toolbar->1->2->1->3", "default.handlebars->container->column_l->p5->p5toolbar->1->0->p5filehead->3", "default.handlebars->filesContextMenu->1" @@ -31974,7 +32009,7 @@ "zh-chs": "重命名:“{0}”为“{1}”", "zh-cht": "重命名:“{0}”為“{1}”", "xloc": [ - "default.handlebars->31->1708" + "default.handlebars->31->1721" ] }, { @@ -31994,7 +32029,7 @@ "zh-chs": "报告日", "zh-cht": "報告日", "xloc": [ - "default.handlebars->31->1771" + "default.handlebars->31->1784" ] }, { @@ -32014,7 +32049,7 @@ "zh-chs": "报告类型", "zh-cht": "報告類型", "xloc": [ - "default.handlebars->31->1766" + "default.handlebars->31->1779" ] }, { @@ -32034,7 +32069,7 @@ "zh-chs": "要求:", "zh-cht": "要求:", "xloc": [ - "default.handlebars->31->1348" + "default.handlebars->31->1361" ] }, { @@ -32055,8 +32090,8 @@ "zh-cht": "要求:{0}。", "xloc": [ "default-mobile.handlebars->11->100", - "default.handlebars->31->1872", - "default.handlebars->31->2058" + "default.handlebars->31->1885", + "default.handlebars->31->2071" ] }, { @@ -32076,7 +32111,7 @@ "zh-chs": "需要安装MeshCentral路由器", "zh-cht": "需要安裝MeshCentral路由器", "xloc": [ - "default.handlebars->31->659" + "default.handlebars->31->672" ] }, { @@ -32096,8 +32131,8 @@ "zh-chs": "需要安装MeshCentral Router。", "zh-cht": "需要安裝MeshCentral Router。", "xloc": [ - "default.handlebars->31->661", - "default.handlebars->31->663" + "default.handlebars->31->674", + "default.handlebars->31->676" ] }, { @@ -32140,7 +32175,7 @@ "zh-cht": "重設", "xloc": [ "default-mobile.handlebars->11->284", - "default.handlebars->31->781", + "default.handlebars->31->794", "default.handlebars->container->column_l->p1->devListToolbarSpan->1->0->devMapToolbar" ] }, @@ -32161,8 +32196,8 @@ "zh-chs": "重置/关闭电源", "zh-cht": "重置/關閉電源", "xloc": [ - "default-mobile.handlebars->11->490", - "default.handlebars->31->1536" + "default-mobile.handlebars->11->507", + "default.handlebars->31->1549" ] }, { @@ -32288,10 +32323,10 @@ "zh-chs": "重置/关闭", "zh-cht": "重置/關閉", "xloc": [ - "default-mobile.handlebars->11->510", - "default.handlebars->31->1572", - "default.handlebars->31->716", - "default.handlebars->31->737" + "default-mobile.handlebars->11->527", + "default.handlebars->31->1585", + "default.handlebars->31->729", + "default.handlebars->31->750" ] }, { @@ -32311,7 +32346,7 @@ "zh-chs": "重新启动", "zh-cht": "重新啟動", "xloc": [ - "default.handlebars->31->928", + "default.handlebars->31->941", "player.handlebars->p11->deskarea0->deskarea4->3" ] }, @@ -32332,7 +32367,7 @@ "zh-chs": "还原服务器", "zh-cht": "還原伺服器", "xloc": [ - "default.handlebars->31->1384" + "default.handlebars->31->1397" ] }, { @@ -32372,7 +32407,7 @@ "zh-chs": "使用备份还原服务器,这将删除现有服务器数据。仅当您知道自己在做什么时才这样做。", "zh-cht": "使用備份還原伺服器,這將刪除現有伺服器數據。僅當你知道自己在做什麼時才這樣做。", "xloc": [ - "default.handlebars->31->1381" + "default.handlebars->31->1394" ] }, { @@ -32394,7 +32429,7 @@ "xloc": [ "default-mobile.handlebars->11->238", "default.handlebars->31->173", - "default.handlebars->31->672" + "default.handlebars->31->685" ] }, { @@ -32414,7 +32449,7 @@ "zh-chs": "限制条件", "zh-cht": "限制條件", "xloc": [ - "default.handlebars->31->1980" + "default.handlebars->31->1993" ] }, { @@ -32434,7 +32469,7 @@ "zh-chs": "雷托-罗曼语", "zh-cht": "雷托-羅曼語", "xloc": [ - "default.handlebars->31->1257" + "default.handlebars->31->1270" ] }, { @@ -32443,7 +32478,7 @@ "nl": "Rechts", "xloc": [ "default-mobile.handlebars->11->329", - "default.handlebars->31->896" + "default.handlebars->31->909" ] }, { @@ -32463,7 +32498,7 @@ "zh-chs": "罗马尼亚文", "zh-cht": "羅馬尼亞文", "xloc": [ - "default.handlebars->31->1258" + "default.handlebars->31->1271" ] }, { @@ -32483,7 +32518,7 @@ "zh-chs": "罗马尼亚文(摩尔达维亚)", "zh-cht": "羅馬尼亞文(摩爾達維亞)", "xloc": [ - "default.handlebars->31->1259" + "default.handlebars->31->1272" ] }, { @@ -32505,8 +32540,8 @@ "xloc": [ "default-mobile.handlebars->11->118", "default-mobile.handlebars->11->348", - "default.handlebars->31->1617", - "default.handlebars->31->953" + "default.handlebars->31->1630", + "default.handlebars->31->966" ] }, { @@ -32644,8 +32679,8 @@ "zh-cht": "運行命令", "xloc": [ "default.handlebars->31->481", - "default.handlebars->31->779", - "default.handlebars->31->795" + "default.handlebars->31->792", + "default.handlebars->31->808" ] }, { @@ -32665,7 +32700,7 @@ "zh-chs": "运行MeshCentral Router,然后单击“安装”以使其可从浏览器启动。", "zh-cht": "運行MeshCentral Router,然後單擊“安裝”以使其可從瀏覽器啟動。", "xloc": [ - "default.handlebars->31->829" + "default.handlebars->31->842" ] }, { @@ -32686,7 +32721,7 @@ "zh-cht": "以代理身份運行", "xloc": [ "default.handlebars->31->478", - "default.handlebars->31->792" + "default.handlebars->31->805" ] }, { @@ -32707,7 +32742,7 @@ "zh-cht": "以用戶身份運行,如果沒有用戶,則運行代理", "xloc": [ "default.handlebars->31->479", - "default.handlebars->31->793" + "default.handlebars->31->806" ] }, { @@ -32748,7 +32783,7 @@ "zh-cht": "在所選裝置上運行命令。", "xloc": [ "default.handlebars->31->474", - "default.handlebars->31->788" + "default.handlebars->31->801" ] }, { @@ -32785,7 +32820,7 @@ "zh-chs": "运行命令", "zh-cht": "運行命令", "xloc": [ - "default.handlebars->31->1684" + "default.handlebars->31->1697" ] }, { @@ -32805,7 +32840,7 @@ "zh-chs": "以用户身份运行命令", "zh-cht": "以用戶身份運行命令", "xloc": [ - "default.handlebars->31->1759" + "default.handlebars->31->1772" ] }, { @@ -32825,7 +32860,7 @@ "zh-chs": "如果可能,以用户身份运行命令", "zh-cht": "如果可能,以用戶身份運行命令", "xloc": [ - "default.handlebars->31->1760" + "default.handlebars->31->1773" ] }, { @@ -32845,7 +32880,7 @@ "zh-chs": "俄文", "zh-cht": "俄文", "xloc": [ - "default.handlebars->31->1260" + "default.handlebars->31->1273" ] }, { @@ -32865,7 +32900,7 @@ "zh-chs": "俄文(摩尔达维亚)", "zh-cht": "俄文(摩爾達維亞)", "xloc": [ - "default.handlebars->31->1261" + "default.handlebars->31->1274" ] }, { @@ -32883,7 +32918,7 @@ "es": "SCP", "fr": "SCP", "xloc": [ - "default.handlebars->31->664" + "default.handlebars->31->677" ] }, { @@ -32903,8 +32938,8 @@ "zh-chs": "短信", "zh-cht": "短信", "xloc": [ - "default.handlebars->31->2025", - "default.handlebars->31->2030", + "default.handlebars->31->2038", + "default.handlebars->31->2043", "login-mobile.handlebars->container->page_content->column_l->1->1->0->1->tokenpanel->1->7->1->4->1->3", "login.handlebars->container->column_l->centralTable->1->0->logincell->resettokenpanel->1->5->1->2->1->3", "login.handlebars->container->column_l->centralTable->1->0->logincell->tokenpanel->1->7->1->4->1->3", @@ -32929,7 +32964,7 @@ "zh-chs": "此用户的短信功能电话号码。", "zh-cht": "此用戶的短信功能電話號碼。", "xloc": [ - "default.handlebars->31->2044" + "default.handlebars->31->2057" ] }, { @@ -32937,8 +32972,8 @@ "nl": "SMS fout", "fr": "Erreur SMS", "xloc": [ - "default-mobile.handlebars->11->556", - "default.handlebars->31->2168" + "default-mobile.handlebars->11->573", + "default.handlebars->31->2181" ] }, { @@ -32946,8 +32981,8 @@ "nl": "SMS fout: {0}", "fr": "Erreur SMS: {0}", "xloc": [ - "default-mobile.handlebars->11->557", - "default.handlebars->31->2169" + "default-mobile.handlebars->11->574", + "default.handlebars->31->2182" ] }, { @@ -32955,8 +32990,8 @@ "nl": "SMS gateway niet ingeschakeld", "fr": "Passerelle SMS non activée", "xloc": [ - "default-mobile.handlebars->11->551", - "default.handlebars->31->2163" + "default-mobile.handlebars->11->568", + "default.handlebars->31->2176" ] }, { @@ -32986,8 +33021,8 @@ "nl": "SMS succesvol verzonden.", "fr": "SMS envoyé avec succès.", "xloc": [ - "default-mobile.handlebars->11->555", - "default.handlebars->31->2167" + "default-mobile.handlebars->11->572", + "default.handlebars->31->2180" ] }, { @@ -33005,7 +33040,7 @@ "tr": "SSH", "fr": "SSH", "xloc": [ - "default.handlebars->31->662" + "default.handlebars->31->675" ] }, { @@ -33045,7 +33080,7 @@ "zh-chs": "萨米(拉普兰)", "zh-cht": "薩米(拉普蘭)", "xloc": [ - "default.handlebars->31->1262" + "default.handlebars->31->1275" ] }, { @@ -33103,7 +33138,7 @@ "zh-chs": "三乡", "zh-cht": "三鄉", "xloc": [ - "default.handlebars->31->1263" + "default.handlebars->31->1276" ] }, { @@ -33123,7 +33158,7 @@ "zh-chs": "梵文", "zh-cht": "梵文", "xloc": [ - "default.handlebars->31->1264" + "default.handlebars->31->1277" ] }, { @@ -33143,7 +33178,7 @@ "zh-chs": "撒丁岛", "zh-cht": "撒丁島", "xloc": [ - "default.handlebars->31->1265" + "default.handlebars->31->1278" ] }, { @@ -33425,7 +33460,7 @@ "zh-cht": "搜尋", "xloc": [ "default.handlebars->31->552", - "default.handlebars->31->957", + "default.handlebars->31->970", "default.handlebars->container->column_l->p1->devListToolbarSpan->1->0->devMapToolbar" ] }, @@ -33511,8 +33546,8 @@ "zh-chs": "已使用TLS保安", "zh-cht": "已使用TLS保安", "xloc": [ - "default-mobile.handlebars->11->424", - "default.handlebars->31->1052" + "default-mobile.handlebars->11->441", + "default.handlebars->31->1065" ] }, { @@ -33533,11 +33568,11 @@ "zh-cht": "安全", "xloc": [ "default-mobile.handlebars->11->295", - "default-mobile.handlebars->11->423", - "default.handlebars->31->1051", - "default.handlebars->31->2026", + "default-mobile.handlebars->11->440", + "default.handlebars->31->1064", + "default.handlebars->31->2039", "default.handlebars->31->311", - "default.handlebars->31->801" + "default.handlebars->31->814" ] }, { @@ -33557,7 +33592,7 @@ "zh-chs": "安全密钥", "zh-cht": "安全密鑰", "xloc": [ - "default.handlebars->31->2023" + "default.handlebars->31->2036" ] }, { @@ -33565,8 +33600,8 @@ "nl": "Beveiligingswaarschuwing", "fr": "Avertissement de sécurité", "xloc": [ - "default-mobile.handlebars->11->525", - "default.handlebars->31->2137" + "default-mobile.handlebars->11->542", + "default.handlebars->31->2150" ] }, { @@ -33606,12 +33641,12 @@ "zh-chs": "全选", "zh-cht": "全選", "xloc": [ - "default.handlebars->31->1641", - "default.handlebars->31->1816", - "default.handlebars->31->1899", + "default.handlebars->31->1654", + "default.handlebars->31->1829", + "default.handlebars->31->1912", "default.handlebars->31->454", - "default.handlebars->31->960", - "default.handlebars->31->962", + "default.handlebars->31->973", + "default.handlebars->31->975", "default.handlebars->container->column_l->p1->devListToolbarSpan->1->0->devListToolbar", "default.handlebars->container->column_l->p13->p13toolbar->1->2->1->3", "default.handlebars->container->column_l->p4->3->1->0->3->3", @@ -33637,11 +33672,11 @@ "zh-chs": "选择无", "zh-cht": "選擇無", "xloc": [ - "default.handlebars->31->1640", - "default.handlebars->31->1815", - "default.handlebars->31->1898", + "default.handlebars->31->1653", + "default.handlebars->31->1828", + "default.handlebars->31->1911", "default.handlebars->31->453", - "default.handlebars->31->961", + "default.handlebars->31->974", "default.handlebars->meshContextMenu->cxselectnone" ] }, @@ -33662,7 +33697,7 @@ "zh-chs": "为所选设备选择一个新组", "zh-cht": "為所選裝置選擇一個新群", "xloc": [ - "default.handlebars->31->815" + "default.handlebars->31->828" ] }, { @@ -33682,7 +33717,7 @@ "zh-chs": "选择此设备的新组", "zh-cht": "選擇此裝置的新群", "xloc": [ - "default.handlebars->31->814" + "default.handlebars->31->827" ] }, { @@ -33742,8 +33777,8 @@ "zh-chs": "选择要对所有选定用户执行的操作。", "zh-cht": "選擇要對所有選定用戶執行的操作。", "xloc": [ - "default.handlebars->31->1819", - "default.handlebars->31->1900" + "default.handlebars->31->1832", + "default.handlebars->31->1913" ] }, { @@ -33764,7 +33799,7 @@ "zh-cht": "選擇要在此裝置上執行的操作。", "xloc": [ "default-mobile.handlebars->11->281", - "default.handlebars->31->777" + "default.handlebars->31->790" ] }, { @@ -33784,7 +33819,7 @@ "zh-chs": "选择新密码", "zh-cht": "選擇新密碼", "xloc": [ - "default.handlebars->31->1461" + "default.handlebars->31->1474" ] }, { @@ -33825,8 +33860,8 @@ "zh-chs": "仅自我事件", "zh-cht": "僅自我事件", "xloc": [ - "default-mobile.handlebars->11->506", - "default.handlebars->31->1568" + "default-mobile.handlebars->11->523", + "default.handlebars->31->1581" ] }, { @@ -33870,7 +33905,7 @@ "zh-chs": "发电邮", "zh-cht": "發電郵", "xloc": [ - "default.handlebars->31->1830" + "default.handlebars->31->1843" ] }, { @@ -33891,7 +33926,7 @@ "zh-cht": "發送MQTT消息", "xloc": [ "default.handlebars->31->455", - "default.handlebars->31->783" + "default.handlebars->31->796" ] }, { @@ -33911,7 +33946,7 @@ "zh-chs": "发送MQTT消息", "zh-cht": "發送MQTT消息", "xloc": [ - "default.handlebars->31->807" + "default.handlebars->31->820" ] }, { @@ -33931,7 +33966,7 @@ "zh-chs": "发送短信", "zh-cht": "發送簡訊", "xloc": [ - "default.handlebars->31->1828" + "default.handlebars->31->1841" ] }, { @@ -33951,7 +33986,7 @@ "zh-chs": "发送短信给该用户", "zh-cht": "發送短信給該用戶", "xloc": [ - "default.handlebars->31->2031" + "default.handlebars->31->2044" ] }, { @@ -33971,7 +34006,7 @@ "zh-chs": "发送电邮给该用户", "zh-cht": "發送電郵給該用戶", "xloc": [ - "default.handlebars->31->2033" + "default.handlebars->31->2046" ] }, { @@ -33991,7 +34026,7 @@ "zh-chs": "向该组中的所有用户发送通知。", "zh-cht": "向該群中的所有用戶發送通知。", "xloc": [ - "default.handlebars->31->1939" + "default.handlebars->31->1952" ] }, { @@ -34011,7 +34046,7 @@ "zh-chs": "向该用户发送文本通知。", "zh-cht": "向該用戶發送文本通知。", "xloc": [ - "default.handlebars->31->1831" + "default.handlebars->31->1844" ] }, { @@ -34031,7 +34066,7 @@ "zh-chs": "发送电邮给用户", "zh-cht": "發送電郵給用戶", "xloc": [ - "default.handlebars->31->1811" + "default.handlebars->31->1824" ] }, { @@ -34071,7 +34106,7 @@ "zh-chs": "发送邀请电邮。", "zh-cht": "發送邀請電郵。", "xloc": [ - "default.handlebars->31->1871" + "default.handlebars->31->1884" ] }, { @@ -34194,7 +34229,7 @@ "zh-chs": "发送用户通知", "zh-cht": "發送用戶通知", "xloc": [ - "default.handlebars->31->2035" + "default.handlebars->31->2048" ] }, { @@ -34214,7 +34249,7 @@ "zh-chs": "塞尔维亚", "zh-cht": "塞爾維亞", "xloc": [ - "default.handlebars->31->1268" + "default.handlebars->31->1281" ] }, { @@ -34234,8 +34269,8 @@ "zh-chs": "序列号", "zh-cht": "序列號", "xloc": [ - "default-mobile.handlebars->11->435", - "default.handlebars->31->1063" + "default-mobile.handlebars->11->452", + "default.handlebars->31->1076" ] }, { @@ -34255,7 +34290,7 @@ "zh-chs": "服务器备份", "zh-cht": "伺服器備份", "xloc": [ - "default.handlebars->31->1881" + "default.handlebars->31->1894" ] }, { @@ -34275,7 +34310,7 @@ "zh-chs": "服务器证书", "zh-cht": "伺服器憑證", "xloc": [ - "default.handlebars->31->2228" + "default.handlebars->31->2241" ] }, { @@ -34295,7 +34330,7 @@ "zh-chs": "服务器数据库", "zh-cht": "伺服器數據庫", "xloc": [ - "default.handlebars->31->2229" + "default.handlebars->31->2242" ] }, { @@ -34315,13 +34350,13 @@ "zh-chs": "服务器档案", "zh-cht": "伺服器檔案", "xloc": [ - "default-mobile.handlebars->11->483", - "default-mobile.handlebars->11->498", - "default.handlebars->31->1529", - "default.handlebars->31->1559", - "default.handlebars->31->1878", - "default.handlebars->31->709", - "default.handlebars->31->730" + "default-mobile.handlebars->11->500", + "default-mobile.handlebars->11->515", + "default.handlebars->31->1542", + "default.handlebars->31->1572", + "default.handlebars->31->1891", + "default.handlebars->31->722", + "default.handlebars->31->743" ] }, { @@ -34349,8 +34384,8 @@ "nl": "Server limiet", "fr": "Limite du serveur", "xloc": [ - "default-mobile.handlebars->11->524", - "default.handlebars->31->2136" + "default-mobile.handlebars->11->541", + "default.handlebars->31->2149" ] }, { @@ -34370,8 +34405,8 @@ "zh-chs": "服务器权限", "zh-cht": "伺服器權限", "xloc": [ - "default.handlebars->31->1803", - "default.handlebars->31->1892" + "default.handlebars->31->1816", + "default.handlebars->31->1905" ] }, { @@ -34391,7 +34426,7 @@ "zh-chs": "服务器配额", "zh-cht": "伺服器配額", "xloc": [ - "default.handlebars->31->1997" + "default.handlebars->31->2010" ] }, { @@ -34411,7 +34446,7 @@ "zh-chs": "服务器还原", "zh-cht": "伺服器還原", "xloc": [ - "default.handlebars->31->1882" + "default.handlebars->31->1895" ] }, { @@ -34431,7 +34466,7 @@ "zh-chs": "服务器权限", "zh-cht": "伺服器權限", "xloc": [ - "default.handlebars->31->1996" + "default.handlebars->31->2009" ] }, { @@ -34451,7 +34486,7 @@ "zh-chs": "服务器状态", "zh-cht": "伺服器狀態", "xloc": [ - "default.handlebars->31->2174" + "default.handlebars->31->2187" ] }, { @@ -34491,14 +34526,14 @@ "zh-chs": "服务器跟踪", "zh-cht": "伺服器追蹤", "xloc": [ - "default.handlebars->31->2241" + "default.handlebars->31->2254" ] }, { "en": "Server Tracing Event", "nl": "Server Tracing Event", "xloc": [ - "default.handlebars->31->2220" + "default.handlebars->31->2233" ] }, { @@ -34559,7 +34594,7 @@ "zh-chs": "服务器更新", "zh-cht": "伺服器更新", "xloc": [ - "default.handlebars->31->1883" + "default.handlebars->31->1896" ] }, { @@ -34724,7 +34759,7 @@ "zh-chs": "ServerStats.csv", "zh-cht": "ServerStats.csv", "xloc": [ - "default.handlebars->31->2219" + "default.handlebars->31->2232" ] }, { @@ -34744,7 +34779,7 @@ "zh-chs": "服务详情", "zh-cht": "服務詳情", "xloc": [ - "default.handlebars->31->929" + "default.handlebars->31->942" ] }, { @@ -34784,7 +34819,7 @@ "zh-chs": "会话", "zh-cht": "節", "xloc": [ - "default.handlebars->31->2103" + "default.handlebars->31->2116" ] }, { @@ -34804,7 +34839,7 @@ "zh-chs": "会话信息", "zh-cht": "會議訊息", "xloc": [ - "default.handlebars->31->876", + "default.handlebars->31->889", "desktop.handlebars->3->18" ] }, @@ -34910,7 +34945,7 @@ "zh-chs": "设置剪贴板内容,{0}个字节", "zh-cht": "設置剪貼板內容,{0}個字節", "xloc": [ - "default.handlebars->31->1682" + "default.handlebars->31->1695" ] }, { @@ -34993,7 +35028,7 @@ "zh-cht": "設定", "xloc": [ "agent-translations.json", - "default.handlebars->31->1440", + "default.handlebars->31->1453", "default.handlebars->31->299" ] }, @@ -35048,7 +35083,7 @@ "zh-chs": "将此服务器设置为自动将备份上传到Google云端硬盘。首先为您的帐户创建并输入Google Drive ClientID和ClientSecret。", "zh-cht": "將此服務器設置為自動將備份上傳到Google雲端硬盤。首先為您的帳戶創建並輸入Google Drive ClientID和ClientSecret。", "xloc": [ - "default.handlebars->31->1372" + "default.handlebars->31->1385" ] }, { @@ -35095,7 +35130,7 @@ "zh-chs": "共享", "zh-cht": "共享", "xloc": [ - "default.handlebars->31->645" + "default.handlebars->31->658" ] }, { @@ -35116,7 +35151,7 @@ "zh-cht": "共享裝置", "xloc": [ "default.handlebars->31->212", - "default.handlebars->31->776" + "default.handlebars->31->789" ] }, { @@ -35156,7 +35191,7 @@ "zh-chs": "共享过程", "zh-cht": "共享過程", "xloc": [ - "default.handlebars->31->923" + "default.handlebars->31->936" ] }, { @@ -35208,8 +35243,8 @@ "xloc": [ "default-mobile.handlebars->11->332", "default-mobile.handlebars->11->336", - "default.handlebars->31->899", - "default.handlebars->31->903" + "default.handlebars->31->912", + "default.handlebars->31->916" ] }, { @@ -35391,8 +35426,8 @@ "zh-chs": "只显示自己的事件", "zh-cht": "只顯示自己的事件", "xloc": [ - "default-mobile.handlebars->11->486", - "default.handlebars->31->1532" + "default-mobile.handlebars->11->503", + "default.handlebars->31->1545" ] }, { @@ -35412,7 +35447,7 @@ "zh-chs": "显示连接工具栏", "zh-cht": "顯示連接工具欄", "xloc": [ - "default.handlebars->31->1494" + "default.handlebars->31->1507" ] }, { @@ -35452,7 +35487,7 @@ "zh-chs": "显示设备位置信息", "zh-cht": "顯示裝置位置訊息", "xloc": [ - "default.handlebars->31->653" + "default.handlebars->31->666" ] }, { @@ -35472,7 +35507,7 @@ "zh-chs": "显示设备网络接口信息", "zh-cht": "顯示裝置網絡介面訊息", "xloc": [ - "default.handlebars->31->651" + "default.handlebars->31->664" ] }, { @@ -35512,8 +35547,8 @@ "zh-chs": "显示1分钟", "zh-cht": "顯示1分鐘", "xloc": [ - "default.handlebars->31->1834", - "default.handlebars->31->1857" + "default.handlebars->31->1847", + "default.handlebars->31->1870" ] }, { @@ -35533,8 +35568,8 @@ "zh-chs": "显示10秒", "zh-cht": "顯示10秒", "xloc": [ - "default.handlebars->31->1833", - "default.handlebars->31->1856" + "default.handlebars->31->1846", + "default.handlebars->31->1869" ] }, { @@ -35554,8 +35589,8 @@ "zh-chs": "显示5分钟", "zh-cht": "顯示5分鐘", "xloc": [ - "default.handlebars->31->1835", - "default.handlebars->31->1858" + "default.handlebars->31->1848", + "default.handlebars->31->1871" ] }, { @@ -35575,8 +35610,8 @@ "zh-chs": "显示消息,直到被用户拒绝", "zh-cht": "顯示消息,直到被用戶拒絕", "xloc": [ - "default.handlebars->31->1832", - "default.handlebars->31->1855" + "default.handlebars->31->1845", + "default.handlebars->31->1868" ] }, { @@ -35770,8 +35805,8 @@ "zh-chs": "简单管理员控制模式(ACM)", "zh-cht": "簡單管理員控制模式(ACM)", "xloc": [ - "default.handlebars->31->1431", - "default.handlebars->31->1451" + "default.handlebars->31->1444", + "default.handlebars->31->1464" ] }, { @@ -35791,8 +35826,8 @@ "zh-chs": "简单客户端控制模式(CCM)", "zh-cht": "簡單客戶端控制模式(CCM)", "xloc": [ - "default.handlebars->31->1429", - "default.handlebars->31->1455" + "default.handlebars->31->1442", + "default.handlebars->31->1468" ] }, { @@ -35812,7 +35847,7 @@ "zh-chs": "信地", "zh-cht": "信地", "xloc": [ - "default.handlebars->31->1266" + "default.handlebars->31->1279" ] }, { @@ -35832,7 +35867,7 @@ "zh-chs": "僧伽罗文", "zh-cht": "僧伽羅文", "xloc": [ - "default.handlebars->31->1267" + "default.handlebars->31->1280" ] }, { @@ -35874,8 +35909,8 @@ "zh-chs": "尺寸", "zh-cht": "尺寸", "xloc": [ - "default.handlebars->31->2106", - "default.handlebars->31->2121", + "default.handlebars->31->2119", + "default.handlebars->31->2134", "default.handlebars->container->column_l->p1->devListToolbarSpan->1->0->9->devListToolbarSize" ] }, @@ -35896,7 +35931,7 @@ "zh-chs": "缩放:100%", "zh-cht": "縮放:100%", "xloc": [ - "default.handlebars->31->989" + "default.handlebars->31->1002" ] }, { @@ -35916,7 +35951,7 @@ "zh-chs": "缩放:125%", "zh-cht": "縮放:125%", "xloc": [ - "default.handlebars->31->990" + "default.handlebars->31->1003" ] }, { @@ -35936,7 +35971,7 @@ "zh-chs": "缩放:150%", "zh-cht": "縮放:150%", "xloc": [ - "default.handlebars->31->991" + "default.handlebars->31->1004" ] }, { @@ -35956,7 +35991,7 @@ "zh-chs": "缩放:200%", "zh-cht": "縮放:200%", "xloc": [ - "default.handlebars->31->992" + "default.handlebars->31->1005" ] }, { @@ -35983,7 +36018,7 @@ "default.handlebars->31->2", "default.handlebars->31->3", "default.handlebars->31->4", - "default.handlebars->31->780" + "default.handlebars->31->793" ] }, { @@ -36046,7 +36081,7 @@ "zh-chs": "斯洛伐克文", "zh-cht": "斯洛伐克文", "xloc": [ - "default.handlebars->31->1269" + "default.handlebars->31->1282" ] }, { @@ -36066,7 +36101,7 @@ "zh-chs": "斯洛文尼亞文", "zh-cht": "斯洛文尼亞文", "xloc": [ - "default.handlebars->31->1270" + "default.handlebars->31->1283" ] }, { @@ -36129,7 +36164,7 @@ "zh-chs": "小焦点", "zh-cht": "小焦點", "xloc": [ - "default.handlebars->31->882" + "default.handlebars->31->895" ] }, { @@ -36149,7 +36184,7 @@ "zh-chs": "软断开代理", "zh-cht": "軟斷開代理", "xloc": [ - "default.handlebars->31->1096" + "default.handlebars->31->1109" ] }, { @@ -36210,7 +36245,7 @@ "zh-chs": "索马尼", "zh-cht": "索馬尼", "xloc": [ - "default.handlebars->31->1271" + "default.handlebars->31->1284" ] }, { @@ -36230,7 +36265,7 @@ "zh-chs": "索比亚文", "zh-cht": "索比亞文", "xloc": [ - "default.handlebars->31->1272" + "default.handlebars->31->1285" ] }, { @@ -36381,7 +36416,7 @@ "zh-chs": "西班牙文", "zh-cht": "西班牙文", "xloc": [ - "default.handlebars->31->1273" + "default.handlebars->31->1286" ] }, { @@ -36401,7 +36436,7 @@ "zh-chs": "西班牙文(阿根廷)", "zh-cht": "西班牙文(阿根廷)", "xloc": [ - "default.handlebars->31->1274" + "default.handlebars->31->1287" ] }, { @@ -36421,7 +36456,7 @@ "zh-chs": "西班牙文(玻利维亚)", "zh-cht": "西班牙文(玻利維亞)", "xloc": [ - "default.handlebars->31->1275" + "default.handlebars->31->1288" ] }, { @@ -36441,7 +36476,7 @@ "zh-chs": "西班牙文(智利)", "zh-cht": "西班牙文(智利)", "xloc": [ - "default.handlebars->31->1276" + "default.handlebars->31->1289" ] }, { @@ -36461,7 +36496,7 @@ "zh-chs": "西班牙文(哥伦比亚)", "zh-cht": "西班牙文(哥倫比亞)", "xloc": [ - "default.handlebars->31->1277" + "default.handlebars->31->1290" ] }, { @@ -36481,7 +36516,7 @@ "zh-chs": "西班牙文(哥斯达黎加)", "zh-cht": "西班牙文(哥斯達黎加)", "xloc": [ - "default.handlebars->31->1278" + "default.handlebars->31->1291" ] }, { @@ -36501,7 +36536,7 @@ "zh-chs": "西班牙文(多米尼加共和国)", "zh-cht": "西班牙文(多米尼加共和國)", "xloc": [ - "default.handlebars->31->1279" + "default.handlebars->31->1292" ] }, { @@ -36521,7 +36556,7 @@ "zh-chs": "西班牙文(厄瓜多尔)", "zh-cht": "西班牙文(厄瓜多爾)", "xloc": [ - "default.handlebars->31->1280" + "default.handlebars->31->1293" ] }, { @@ -36541,7 +36576,7 @@ "zh-chs": "西班牙文(萨尔瓦多)", "zh-cht": "西班牙文(薩爾瓦多)", "xloc": [ - "default.handlebars->31->1281" + "default.handlebars->31->1294" ] }, { @@ -36561,7 +36596,7 @@ "zh-chs": "西班牙文(危地马拉)", "zh-cht": "西班牙文(危地馬拉)", "xloc": [ - "default.handlebars->31->1282" + "default.handlebars->31->1295" ] }, { @@ -36581,7 +36616,7 @@ "zh-chs": "西班牙文(洪都拉斯)", "zh-cht": "西班牙文(洪都拉斯)", "xloc": [ - "default.handlebars->31->1283" + "default.handlebars->31->1296" ] }, { @@ -36601,7 +36636,7 @@ "zh-chs": "西班牙文(墨西哥)", "zh-cht": "西班牙文(墨西哥)", "xloc": [ - "default.handlebars->31->1284" + "default.handlebars->31->1297" ] }, { @@ -36621,7 +36656,7 @@ "zh-chs": "西班牙文(尼加拉瓜)", "zh-cht": "西班牙文(尼加拉瓜)", "xloc": [ - "default.handlebars->31->1285" + "default.handlebars->31->1298" ] }, { @@ -36641,7 +36676,7 @@ "zh-chs": "西班牙文(巴拿马)", "zh-cht": "西班牙文(巴拿馬)", "xloc": [ - "default.handlebars->31->1286" + "default.handlebars->31->1299" ] }, { @@ -36661,7 +36696,7 @@ "zh-chs": "西班牙文(巴拉圭)", "zh-cht": "西班牙文(巴拉圭)", "xloc": [ - "default.handlebars->31->1287" + "default.handlebars->31->1300" ] }, { @@ -36681,7 +36716,7 @@ "zh-chs": "西班牙文(秘鲁)", "zh-cht": "西班牙文(秘魯)", "xloc": [ - "default.handlebars->31->1288" + "default.handlebars->31->1301" ] }, { @@ -36701,7 +36736,7 @@ "zh-chs": "西班牙文(波多黎各)", "zh-cht": "西班牙文(波多黎各)", "xloc": [ - "default.handlebars->31->1289" + "default.handlebars->31->1302" ] }, { @@ -36721,7 +36756,7 @@ "zh-chs": "西班牙文(西班牙)", "zh-cht": "西班牙文(西班牙)", "xloc": [ - "default.handlebars->31->1290" + "default.handlebars->31->1303" ] }, { @@ -36741,7 +36776,7 @@ "zh-chs": "西班牙文(乌拉圭)", "zh-cht": "西班牙文(烏拉圭)", "xloc": [ - "default.handlebars->31->1291" + "default.handlebars->31->1304" ] }, { @@ -36761,7 +36796,7 @@ "zh-chs": "西班牙文(委内瑞拉)", "zh-cht": "西班牙文(委內瑞拉)", "xloc": [ - "default.handlebars->31->1292" + "default.handlebars->31->1305" ] }, { @@ -36841,7 +36876,7 @@ "zh-chs": "开始", "zh-cht": "開始", "xloc": [ - "default.handlebars->31->926" + "default.handlebars->31->939" ] }, { @@ -36879,9 +36914,9 @@ "zh-cht": "開始時間", "xloc": [ "default.handlebars->31->202", - "default.handlebars->31->2104", - "default.handlebars->31->2123", - "default.handlebars->31->872", + "default.handlebars->31->2117", + "default.handlebars->31->2136", + "default.handlebars->31->885", "desktop.handlebars->3->14" ] }, @@ -36930,7 +36965,7 @@ "zh-chs": "开始桌面多重会话", "zh-cht": "啟動桌面多路復用會話", "xloc": [ - "default.handlebars->31->1666" + "default.handlebars->31->1679" ] }, { @@ -36950,7 +36985,7 @@ "zh-chs": "从{1}到{2}开始了桌面会话“{0}”", "zh-cht": "從{1}到{2}開始了桌面會話“{0}”", "xloc": [ - "default.handlebars->31->1675" + "default.handlebars->31->1688" ] }, { @@ -36970,7 +37005,7 @@ "zh-chs": "从{1}到{2}开始文件管理会话“{0}”", "zh-cht": "從{1}到{2}開始文件管理會話“{0}”", "xloc": [ - "default.handlebars->31->1676" + "default.handlebars->31->1689" ] }, { @@ -36990,7 +37025,7 @@ "zh-chs": "从{1}到{2}开始中继会话“{0}”", "zh-cht": "從{1}到{2}開始中繼會話“{0}”", "xloc": [ - "default.handlebars->31->1673" + "default.handlebars->31->1686" ] }, { @@ -37010,7 +37045,7 @@ "zh-chs": "使用Toast通知启动远程桌面", "zh-cht": "使用Toast通知啟動遠程桌面", "xloc": [ - "default.handlebars->31->1695" + "default.handlebars->31->1708" ] }, { @@ -37030,7 +37065,7 @@ "zh-chs": "启动远程桌面,而无需通知", "zh-cht": "啟動遠程桌面,而無需通知", "xloc": [ - "default.handlebars->31->1696" + "default.handlebars->31->1709" ] }, { @@ -37050,7 +37085,7 @@ "zh-chs": "启动带有Toast通知的远程文件", "zh-cht": "啟動帶有Toast通知的遠程文件", "xloc": [ - "default.handlebars->31->1702" + "default.handlebars->31->1715" ] }, { @@ -37070,7 +37105,7 @@ "zh-chs": "已启动的远程文件,恕不另行通知", "zh-cht": "已啟動的遠程文件,恕不另行通知", "xloc": [ - "default.handlebars->31->1703" + "default.handlebars->31->1716" ] }, { @@ -37090,7 +37125,7 @@ "zh-chs": "从{1}到{2}开始了终端会话“{0}”", "zh-cht": "從{1}到{2}開始了終端會話“{0}”", "xloc": [ - "default.handlebars->31->1674" + "default.handlebars->31->1687" ] }, { @@ -37110,7 +37145,7 @@ "zh-chs": "现在开始", "zh-cht": "現在開始", "xloc": [ - "default.handlebars->31->769" + "default.handlebars->31->782" ] }, { @@ -37130,7 +37165,7 @@ "zh-chs": "接受本地用户后启动远程桌面", "zh-cht": "接受本地用戶後啟動遠程桌面", "xloc": [ - "default.handlebars->31->1690" + "default.handlebars->31->1703" ] }, { @@ -37150,7 +37185,7 @@ "zh-chs": "本地用户接受后启动远程文件", "zh-cht": "本地用戶接受後啟動遠程文件", "xloc": [ - "default.handlebars->31->1700" + "default.handlebars->31->1713" ] }, { @@ -37170,7 +37205,7 @@ "zh-chs": "状况", "zh-cht": "狀態", "xloc": [ - "default.handlebars->31->917", + "default.handlebars->31->930", "default.handlebars->container->column_l->p11->deskarea0->deskarea3x->DeskTools->deskToolsArea->DeskToolsServiceTab->deskToolsServiceHeader->1" ] }, @@ -37211,8 +37246,8 @@ "zh-chs": "状况", "zh-cht": "狀態", "xloc": [ - "default.handlebars->31->2051", - "default.handlebars->31->2116", + "default.handlebars->31->2064", + "default.handlebars->31->2129", "default.handlebars->container->column_l->p42->p42tbl->1->0->7" ] }, @@ -37233,7 +37268,7 @@ "zh-chs": "停止", "zh-cht": "停止", "xloc": [ - "default.handlebars->31->927" + "default.handlebars->31->940" ] }, { @@ -37253,7 +37288,7 @@ "zh-chs": "停止进程", "zh-cht": "停止進程", "xloc": [ - "default.handlebars->31->914" + "default.handlebars->31->927" ] }, { @@ -37273,7 +37308,7 @@ "zh-chs": "停止进程#{0} “{1}”?", "zh-cht": "停止進程#{0} “{1}”?", "xloc": [ - "default.handlebars->31->933", + "default.handlebars->31->946", "desktop.handlebars->3->25" ] }, @@ -37311,8 +37346,8 @@ "zh-chs": "储存", "zh-cht": "儲存", "xloc": [ - "default-mobile.handlebars->11->451", - "default.handlebars->31->1079" + "default-mobile.handlebars->11->468", + "default.handlebars->31->1092" ] }, { @@ -37352,7 +37387,7 @@ "zh-chs": "超出储存空间", "zh-cht": "超出儲存空間", "xloc": [ - "default.handlebars->31->1621" + "default.handlebars->31->1634" ] }, { @@ -37372,7 +37407,7 @@ "zh-chs": "强", "zh-cht": "強", "xloc": [ - "default.handlebars->31->1365" + "default.handlebars->31->1378" ] }, { @@ -37417,7 +37452,7 @@ "zh-chs": "主题", "zh-cht": "主題", "xloc": [ - "default.handlebars->31->1829" + "default.handlebars->31->1842" ] }, { @@ -37517,7 +37552,7 @@ "zh-chs": "苏图", "zh-cht": "蘇圖", "xloc": [ - "default.handlebars->31->1293" + "default.handlebars->31->1306" ] }, { @@ -37537,7 +37572,7 @@ "zh-chs": "斯瓦希里文", "zh-cht": "斯瓦希里文", "xloc": [ - "default.handlebars->31->1294" + "default.handlebars->31->1307" ] }, { @@ -37577,7 +37612,7 @@ "zh-chs": "瑞典文", "zh-cht": "瑞典文", "xloc": [ - "default.handlebars->31->1295" + "default.handlebars->31->1308" ] }, { @@ -37597,7 +37632,7 @@ "zh-chs": "瑞典文(芬兰)", "zh-cht": "瑞典文(芬蘭)", "xloc": [ - "default.handlebars->31->1296" + "default.handlebars->31->1309" ] }, { @@ -37617,7 +37652,7 @@ "zh-chs": "瑞典文(瑞典)", "zh-cht": "瑞典文(瑞典)", "xloc": [ - "default.handlebars->31->1297" + "default.handlebars->31->1310" ] }, { @@ -37637,7 +37672,7 @@ "zh-chs": "将英特尔AMT切换到管理员控制模式(ACM)。", "zh-cht": "將英特爾AMT切換到管理員控制模式(ACM)。", "xloc": [ - "default.handlebars->31->1445" + "default.handlebars->31->1458" ] }, { @@ -37657,7 +37692,7 @@ "zh-chs": "将服务器设备名称同步到主机名称", "zh-cht": "將伺服器裝置名稱同步到主機名稱", "xloc": [ - "default.handlebars->31->1502" + "default.handlebars->31->1515" ] }, { @@ -37823,8 +37858,8 @@ "zh-chs": "未设置TLS", "zh-cht": "未設置TLS", "xloc": [ - "default-mobile.handlebars->11->425", - "default.handlebars->31->1053" + "default-mobile.handlebars->11->442", + "default.handlebars->31->1066" ] }, { @@ -37846,7 +37881,7 @@ "xloc": [ "default-mobile.handlebars->11->297", "default.handlebars->31->313", - "default.handlebars->31->803" + "default.handlebars->31->816" ] }, { @@ -37868,7 +37903,7 @@ "xloc": [ "default-mobile.handlebars->11->318", "default-mobile.handlebars->dialog->3->dialog3->deskkeys->3", - "default.handlebars->31->885" + "default.handlebars->31->898" ] }, { @@ -37889,7 +37924,7 @@ "zh-cht": "標籤1,標籤2,標籤3", "xloc": [ "default.handlebars->31->488", - "default.handlebars->31->862" + "default.handlebars->31->875" ] }, { @@ -37933,9 +37968,9 @@ "default-mobile.handlebars->11->269", "default-mobile.handlebars->11->306", "default.handlebars->31->487", - "default.handlebars->31->635", - "default.handlebars->31->636", - "default.handlebars->31->861", + "default.handlebars->31->648", + "default.handlebars->31->649", + "default.handlebars->31->874", "default.handlebars->container->column_l->p1->devListToolbarSpan->1->0->9->devListToolbarSort->sortselect->7" ] }, @@ -37956,7 +37991,7 @@ "zh-chs": "泰米尔文", "zh-cht": "泰米爾文", "xloc": [ - "default.handlebars->31->1298" + "default.handlebars->31->1311" ] }, { @@ -37976,7 +38011,7 @@ "zh-chs": "塔塔尔族", "zh-cht": "塔塔爾族", "xloc": [ - "default.handlebars->31->1299" + "default.handlebars->31->1312" ] }, { @@ -37996,7 +38031,7 @@ "zh-chs": "泰卢加", "zh-cht": "泰盧加", "xloc": [ - "default.handlebars->31->1300" + "default.handlebars->31->1313" ] }, { @@ -38017,12 +38052,12 @@ "zh-cht": "終端機", "xloc": [ "default-mobile.handlebars->11->179", - "default.handlebars->31->1495", - "default.handlebars->31->2110", + "default.handlebars->31->1508", + "default.handlebars->31->2123", "default.handlebars->31->273", "default.handlebars->31->542", - "default.handlebars->31->694", - "default.handlebars->31->752", + "default.handlebars->31->707", + "default.handlebars->31->765", "default.handlebars->container->topbar->1->1->MainSubMenuSpan->MainSubMenu->1->0->MainDevTerminal", "default.handlebars->contextMenu->cxterminal" ] @@ -38064,10 +38099,10 @@ "zh-chs": "终端通知", "zh-cht": "終端機通知", "xloc": [ - "default.handlebars->31->1414", - "default.handlebars->31->1928", - "default.handlebars->31->2015", - "default.handlebars->31->616" + "default.handlebars->31->1427", + "default.handlebars->31->1941", + "default.handlebars->31->2028", + "default.handlebars->31->629" ] }, { @@ -38087,10 +38122,10 @@ "zh-chs": "终端提示", "zh-cht": "終端機提示", "xloc": [ - "default.handlebars->31->1413", - "default.handlebars->31->1927", - "default.handlebars->31->2014", - "default.handlebars->31->615" + "default.handlebars->31->1426", + "default.handlebars->31->1940", + "default.handlebars->31->2027", + "default.handlebars->31->628" ] }, { @@ -38199,7 +38234,7 @@ "zh-chs": "泰国", "zh-cht": "泰國", "xloc": [ - "default.handlebars->31->1301" + "default.handlebars->31->1314" ] }, { @@ -38338,8 +38373,8 @@ "zh-chs": "目前没有任何通知", "zh-cht": "目前沒有任何通知", "xloc": [ - "default-mobile.handlebars->11->519", - "default.handlebars->31->2131" + "default-mobile.handlebars->11->536", + "default.handlebars->31->2144" ] }, { @@ -38347,8 +38382,8 @@ "nl": "Er zijn {0} mislukte inlogpogingen voor dit account sinds de laatste keer inloggen.", "fr": "Il y a eu {0} tentatives de connexion infructueuses sur ce compte depuis la dernière connexion.", "xloc": [ - "default-mobile.handlebars->11->540", - "default.handlebars->31->2152" + "default-mobile.handlebars->11->557", + "default.handlebars->31->2165" ] }, { @@ -38409,7 +38444,7 @@ "zh-cht": "此帳戶無權建立新的裝置群。", "xloc": [ "default-mobile.handlebars->11->103", - "default.handlebars->31->1351" + "default.handlebars->31->1364" ] }, { @@ -38503,7 +38538,7 @@ "zh-chs": "这是推荐的策略。英特尔®AMT激活和管理是完全自动化的,服务器将尝试最大程度地利用硬件管理。", "zh-cht": "這是推薦的策略。英特爾®AMT激活和管理是完全自動化的,服務器將嘗試最大程度地利用硬件管理。", "xloc": [ - "default.handlebars->31->1480" + "default.handlebars->31->1493" ] }, { @@ -38544,7 +38579,7 @@ "zh-chs": "此政策不会影响采用ACM模式的英特尔®AMT的设备。", "zh-cht": "此政策不會影響採用ACM模式的Intel® AMT的裝置。", "xloc": [ - "default.handlebars->31->1477" + "default.handlebars->31->1490" ] }, { @@ -38627,7 +38662,7 @@ "zh-chs": "这会在此设备的事件日志中添加一个条目。", "zh-cht": "這會在此裝置的事件日誌中增加一個記錄。", "xloc": [ - "default.handlebars->31->740" + "default.handlebars->31->753" ] }, { @@ -38664,7 +38699,7 @@ "zh-chs": "这不会从服务器上删除该设备,但是该设备将不再能够连接到服务器。该设备的所有远程访问都将丢失。该设备必须连线,此命令才能起作用。", "zh-cht": "這不會從伺服器上刪除該裝置,但是該裝置將不再能夠連接到伺服器。該裝置的所有遠程訪問都將丟失。該設備必須連線,此命令才能起作用。", "xloc": [ - "default.handlebars->31->810" + "default.handlebars->31->823" ] }, { @@ -38684,7 +38719,7 @@ "zh-chs": "这不会从服务器上删除该设备,但是该设备将不再能够连接到服务器。该设备的所有远程访问都将丢失。该设备必须连线,此命令才能起作用。", "zh-cht": "這不會從伺服器上刪除該裝置,但是該裝置將不再能夠連接到伺服器。該裝置的所有遠程訪問都將丟失。該設備必須連線,此命令才能起作用。", "xloc": [ - "default.handlebars->31->811" + "default.handlebars->31->824" ] }, { @@ -38704,7 +38739,7 @@ "zh-chs": "蒂格雷", "zh-cht": "蒂格雷", "xloc": [ - "default.handlebars->31->1302" + "default.handlebars->31->1315" ] }, { @@ -38744,7 +38779,7 @@ "zh-chs": "时间范围", "zh-cht": "時間範圍", "xloc": [ - "default.handlebars->31->772" + "default.handlebars->31->785" ] }, { @@ -38764,7 +38799,7 @@ "zh-chs": "时间跨度", "zh-cht": "時間跨度", "xloc": [ - "default.handlebars->31->1768" + "default.handlebars->31->1781" ] }, { @@ -38784,7 +38819,7 @@ "zh-chs": "时间范围", "zh-cht": "時間範圍", "xloc": [ - "default.handlebars->31->770" + "default.handlebars->31->783" ] }, { @@ -38805,7 +38840,7 @@ "zh-cht": "超時", "xloc": [ "default-mobile.handlebars->11->312", - "default.handlebars->31->867", + "default.handlebars->31->880", "desktop.handlebars->3->9", "terminal.handlebars->3->13" ] @@ -38965,7 +39000,7 @@ "zh-chs": "要删除此帐户,请在下面的两个框中键入帐户密码,然后单击确定。", "zh-cht": "要刪除此帳戶,請在下面的兩個框中鍵入帳戶密碼,然後單擊確定。", "xloc": [ - "default.handlebars->31->1338" + "default.handlebars->31->1351" ] }, { @@ -39444,7 +39479,7 @@ "zh-chs": "主题", "zh-cht": "主題", "xloc": [ - "default.handlebars->31->805" + "default.handlebars->31->818" ] }, { @@ -39504,7 +39539,7 @@ "zh-chs": "用于通过此服务器连接到设备的流量路由器", "zh-cht": "用於通過此伺服器連接到裝置的流量路由器", "xloc": [ - "default.handlebars->31->655" + "default.handlebars->31->668" ] }, { @@ -39564,7 +39599,7 @@ "zh-chs": "特松加", "zh-cht": "特松加", "xloc": [ - "default.handlebars->31->1303" + "default.handlebars->31->1316" ] }, { @@ -39584,7 +39619,7 @@ "zh-chs": "茨瓦纳", "zh-cht": "茨瓦納", "xloc": [ - "default.handlebars->31->1304" + "default.handlebars->31->1317" ] }, { @@ -39604,7 +39639,7 @@ "zh-chs": "土耳其", "zh-cht": "土耳其", "xloc": [ - "default.handlebars->31->1305" + "default.handlebars->31->1318" ] }, { @@ -39624,7 +39659,7 @@ "zh-chs": "土库曼文", "zh-cht": "土庫曼文", "xloc": [ - "default.handlebars->31->1306" + "default.handlebars->31->1319" ] }, { @@ -39665,12 +39700,12 @@ "zh-cht": "類型", "xloc": [ "default-mobile.handlebars->11->109", - "default-mobile.handlebars->11->459", - "default.handlebars->31->1358", - "default.handlebars->31->1400", - "default.handlebars->31->1452", - "default.handlebars->31->749", - "default.handlebars->31->924", + "default-mobile.handlebars->11->476", + "default.handlebars->31->1371", + "default.handlebars->31->1413", + "default.handlebars->31->1465", + "default.handlebars->31->762", + "default.handlebars->31->937", "default.handlebars->container->column_l->p11->deskarea0->deskarea4->3", "desktop.handlebars->p11->deskarea0->deskarea4->3" ] @@ -39692,7 +39727,7 @@ "zh-chs": "输入密钥名称,选择OTP框,然后按YubiKey™上的按钮。", "zh-cht": "輸入密鑰名稱,選擇OTP框,然後按YubiKey™上的按鈕。", "xloc": [ - "default.handlebars->31->1115" + "default.handlebars->31->1128" ] }, { @@ -39712,7 +39747,7 @@ "zh-chs": "输入要添加的密钥的名称。", "zh-cht": "輸入要新增的密鑰的名稱。", "xloc": [ - "default.handlebars->31->1112" + "default.handlebars->31->1125" ] }, { @@ -39753,7 +39788,7 @@ "zh-chs": "UTF8终端", "zh-cht": "UTF8終端", "xloc": [ - "default.handlebars->31->937", + "default.handlebars->31->950", "terminal.handlebars->3->15" ] }, @@ -39774,7 +39809,7 @@ "zh-chs": "乌克兰", "zh-cht": "烏克蘭", "xloc": [ - "default.handlebars->31->1307" + "default.handlebars->31->1320" ] }, { @@ -39870,7 +39905,7 @@ "zh-chs": "在验证电子邮件地址之前,无法访问此功能。这是密码恢复所必需的。转到“我的帐户”标签以更改和验证电子邮件地址。", "zh-cht": "在驗證電子郵件地址之前,無法訪問此功能。這是密碼恢復所必需的。轉到“我的帳戶”標籤以更改和驗證電子郵件地址。", "xloc": [ - "default.handlebars->31->1353", + "default.handlebars->31->1366", "default.handlebars->31->558" ] }, @@ -39891,8 +39926,8 @@ "zh-chs": "在启用两因素身份验证之前,无法访问此功能。这是额外的安全性所必需的。转到“我的帐户”标签,然后查看“帐户安全性”部分。", "zh-cht": "在啟用兩因素身份驗證之前,無法訪問此功能。這是額外的安全性所必需的。轉到“我的帳戶”標籤,然後查看“帳戶安全性”部分。", "xloc": [ - "default.handlebars->31->1355", - "default.handlebars->31->2245", + "default.handlebars->31->1368", + "default.handlebars->31->2258", "default.handlebars->31->560" ] }, @@ -39901,8 +39936,8 @@ "nl": "Kan geen gebruiker toevoegen in deze modus", "fr": "Impossible d'ajouter un utilisateur dans ce mode", "xloc": [ - "default-mobile.handlebars->11->536", - "default.handlebars->31->2148" + "default-mobile.handlebars->11->553", + "default.handlebars->31->2161" ] }, { @@ -40029,10 +40064,10 @@ "zh-cht": "卸載", "xloc": [ "agent-translations.json", - "default-mobile.handlebars->11->508", - "default.handlebars->31->1570", - "default.handlebars->31->714", - "default.handlebars->31->735" + "default-mobile.handlebars->11->525", + "default.handlebars->31->1583", + "default.handlebars->31->727", + "default.handlebars->31->748" ] }, { @@ -40052,9 +40087,9 @@ "zh-chs": "卸载代理", "zh-cht": "卸載代理", "xloc": [ - "default-mobile.handlebars->11->488", + "default-mobile.handlebars->11->505", "default.handlebars->31->457", - "default.handlebars->31->784" + "default.handlebars->31->797" ] }, { @@ -40074,7 +40109,7 @@ "zh-chs": "卸载代理/删除设备", "zh-cht": "卸載代理/刪除設備", "xloc": [ - "default.handlebars->31->1534" + "default.handlebars->31->1547" ] }, { @@ -40094,7 +40129,7 @@ "zh-chs": "卸载代理", "zh-cht": "卸載代理", "xloc": [ - "default.handlebars->31->813" + "default.handlebars->31->826" ] }, { @@ -40119,26 +40154,26 @@ "default-mobile.handlebars->11->39", "default-mobile.handlebars->11->40", "default-mobile.handlebars->11->41", - "default-mobile.handlebars->11->415", "default-mobile.handlebars->11->42", - "default-mobile.handlebars->11->422", "default-mobile.handlebars->11->43", + "default-mobile.handlebars->11->432", + "default-mobile.handlebars->11->439", "default-mobile.handlebars->11->44", "default-mobile.handlebars->11->45", "default-mobile.handlebars->11->6", - "default.handlebars->31->1043", - "default.handlebars->31->1050", + "default.handlebars->31->1056", + "default.handlebars->31->1063", "default.handlebars->31->118", "default.handlebars->31->119", "default.handlebars->31->120", "default.handlebars->31->122", "default.handlebars->31->124", "default.handlebars->31->13", - "default.handlebars->31->1387", - "default.handlebars->31->1388", - "default.handlebars->31->2093", - "default.handlebars->31->2108", - "default.handlebars->31->2109", + "default.handlebars->31->1400", + "default.handlebars->31->1401", + "default.handlebars->31->2106", + "default.handlebars->31->2121", + "default.handlebars->31->2122", "default.handlebars->31->44", "default.handlebars->31->452", "default.handlebars->31->46", @@ -40167,8 +40202,8 @@ "zh-chs": "未知#{0}", "zh-cht": "未知#{0}", "xloc": [ - "default-mobile.handlebars->11->453", - "default.handlebars->31->1394" + "default-mobile.handlebars->11->470", + "default.handlebars->31->1407" ] }, { @@ -40188,7 +40223,7 @@ "zh-chs": "未知动作", "zh-cht": "未知動作", "xloc": [ - "default.handlebars->31->2180" + "default.handlebars->31->2193" ] }, { @@ -40208,8 +40243,8 @@ "zh-chs": "未知设备", "zh-cht": "未知裝置", "xloc": [ - "default.handlebars->31->1953", - "default.handlebars->31->2079" + "default.handlebars->31->1966", + "default.handlebars->31->2092" ] }, { @@ -40229,9 +40264,9 @@ "zh-chs": "未知设备组", "zh-cht": "未知裝置群", "xloc": [ - "default.handlebars->31->1947", - "default.handlebars->31->2067", - "default.handlebars->31->2184" + "default.handlebars->31->1960", + "default.handlebars->31->2080", + "default.handlebars->31->2197" ] }, { @@ -40251,7 +40286,7 @@ "zh-chs": "未知群组", "zh-cht": "未知群組", "xloc": [ - "default.handlebars->31->2176" + "default.handlebars->31->2189" ] }, { @@ -40292,7 +40327,7 @@ "zh-chs": "未知用户组", "zh-cht": "未知用戶群", "xloc": [ - "default.handlebars->31->2073" + "default.handlebars->31->2086" ] }, { @@ -40333,7 +40368,7 @@ "zh-chs": "密码未知", "zh-cht": "密碼未知", "xloc": [ - "default.handlebars->31->1468" + "default.handlebars->31->1481" ] }, { @@ -40375,7 +40410,7 @@ "zh-chs": "解锁帐户", "zh-cht": "解鎖帳戶", "xloc": [ - "default.handlebars->31->1822" + "default.handlebars->31->1835" ] }, { @@ -40418,7 +40453,7 @@ "default-mobile.handlebars->11->328", "default-mobile.handlebars->container->page_content->column_l->p10->p10files->p13toolbar->1->2->1->1", "default-mobile.handlebars->container->page_content->column_l->p5->p5myfiles->p5toolbar->1->0->1->1", - "default.handlebars->31->895", + "default.handlebars->31->908", "default.handlebars->container->column_l->p13->p13toolbar->1->2->1->3", "default.handlebars->container->column_l->p5->p5toolbar->1->0->p5filehead->3", "default.handlebars->container->dialog->dialogBody->dialog3->d3servermode->d3serveraction" @@ -40441,7 +40476,7 @@ "zh-chs": "最新", "zh-cht": "最新", "xloc": [ - "default.handlebars->31->2250" + "default.handlebars->31->2263" ] }, { @@ -40461,7 +40496,11 @@ "zh-chs": "更新资料", "zh-cht": "更新資料", "xloc": [ - "agent-translations.json" + "agent-translations.json", + "default-mobile.handlebars->11->389", + "default-mobile.handlebars->11->391", + "default.handlebars->31->611", + "default.handlebars->31->613" ] }, { @@ -40509,11 +40548,11 @@ "default-mobile.handlebars->11->359", "default-mobile.handlebars->11->377", "default-mobile.handlebars->11->380", - "default.handlebars->31->1650", - "default.handlebars->31->1658", - "default.handlebars->31->969", - "default.handlebars->31->993", - "default.handlebars->31->996", + "default.handlebars->31->1006", + "default.handlebars->31->1009", + "default.handlebars->31->1663", + "default.handlebars->31->1671", + "default.handlebars->31->982", "default.handlebars->container->dialog->dialogBody->dialog3->d3localmode->1" ] }, @@ -40534,7 +40573,7 @@ "zh-chs": "上载网格代理核心", "zh-cht": "上載mesh agent核心", "xloc": [ - "default.handlebars->31->1098" + "default.handlebars->31->1111" ] }, { @@ -40554,7 +40593,7 @@ "zh-chs": "上载核心档案", "zh-cht": "上載核心檔案", "xloc": [ - "default.handlebars->31->1095" + "default.handlebars->31->1108" ] }, { @@ -40574,7 +40613,7 @@ "zh-chs": "上载默认服务器核心", "zh-cht": "上載默認伺服器核心", "xloc": [ - "default.handlebars->31->1091" + "default.handlebars->31->1104" ] }, { @@ -40634,7 +40673,7 @@ "zh-chs": "上传恢复核心", "zh-cht": "上傳恢復核心", "xloc": [ - "default.handlebars->31->1093" + "default.handlebars->31->1106" ] }, { @@ -40660,7 +40699,7 @@ { "en": "Upload tiny core", "xloc": [ - "default.handlebars->31->1094" + "default.handlebars->31->1107" ] }, { @@ -40681,8 +40720,8 @@ "zh-cht": "上傳將覆蓋1個檔案。繼續?", "xloc": [ "default-mobile.handlebars->11->378", - "default.handlebars->31->1659", - "default.handlebars->31->994" + "default.handlebars->31->1007", + "default.handlebars->31->1672" ] }, { @@ -40703,8 +40742,8 @@ "zh-cht": "上傳將覆蓋{0}個檔案。繼續?", "xloc": [ "default-mobile.handlebars->11->379", - "default.handlebars->31->1660", - "default.handlebars->31->995" + "default.handlebars->31->1008", + "default.handlebars->31->1673" ] }, { @@ -40741,7 +40780,7 @@ "zh-chs": "上传:“{0}”", "zh-cht": "上傳:“{0}”", "xloc": [ - "default.handlebars->31->1710" + "default.handlebars->31->1723" ] }, { @@ -40761,7 +40800,7 @@ "zh-chs": "上索布族", "zh-cht": "上索布族", "xloc": [ - "default.handlebars->31->1308" + "default.handlebars->31->1321" ] }, { @@ -40781,7 +40820,7 @@ "zh-chs": "乌尔都文", "zh-cht": "烏爾都文", "xloc": [ - "default.handlebars->31->1309" + "default.handlebars->31->1322" ] }, { @@ -40865,8 +40904,8 @@ "zh-chs": "用过的", "zh-cht": "用過的", "xloc": [ - "default.handlebars->31->2170", - "default.handlebars->31->2172" + "default.handlebars->31->2183", + "default.handlebars->31->2185" ] }, { @@ -40886,13 +40925,13 @@ "zh-chs": "用户", "zh-cht": "用戶", "xloc": [ - "default.handlebars->31->1449", - "default.handlebars->31->1775", - "default.handlebars->31->1804", - "default.handlebars->31->1943", - "default.handlebars->31->2128", + "default.handlebars->31->1462", + "default.handlebars->31->1788", + "default.handlebars->31->1817", + "default.handlebars->31->1956", + "default.handlebars->31->2141", "default.handlebars->31->233", - "default.handlebars->31->688" + "default.handlebars->31->701" ] }, { @@ -40912,7 +40951,7 @@ "zh-chs": "用户+档案", "zh-cht": "用戶+檔案", "xloc": [ - "default.handlebars->31->1805" + "default.handlebars->31->1818" ] }, { @@ -40932,10 +40971,10 @@ "zh-chs": "用户帐户导入", "zh-cht": "用戶帳戶導入", "xloc": [ - "default.handlebars->31->1838", - "default.handlebars->31->1839", - "default.handlebars->31->1841", - "default.handlebars->31->1843" + "default.handlebars->31->1851", + "default.handlebars->31->1852", + "default.handlebars->31->1854", + "default.handlebars->31->1856" ] }, { @@ -40955,7 +40994,7 @@ "zh-chs": "用户帐户", "zh-cht": "用戶帳戶", "xloc": [ - "default.handlebars->31->2189" + "default.handlebars->31->2202" ] }, { @@ -40975,9 +41014,9 @@ "zh-chs": "用户授权", "zh-cht": "用戶授權", "xloc": [ - "default-mobile.handlebars->11->461", - "default.handlebars->31->1447", - "default.handlebars->31->684" + "default-mobile.handlebars->11->478", + "default.handlebars->31->1460", + "default.handlebars->31->697" ] }, { @@ -40997,12 +41036,12 @@ "zh-chs": "用户同意", "zh-cht": "用戶同意", "xloc": [ - "default.handlebars->31->1420", - "default.handlebars->31->1934", - "default.handlebars->31->2021", + "default.handlebars->31->1433", + "default.handlebars->31->1947", + "default.handlebars->31->2034", "default.handlebars->31->208", - "default.handlebars->31->622", - "default.handlebars->31->773" + "default.handlebars->31->635", + "default.handlebars->31->786" ] }, { @@ -41022,12 +41061,12 @@ "zh-chs": "用户组", "zh-cht": "用戶群", "xloc": [ - "default.handlebars->31->1510", - "default.handlebars->31->1511", - "default.handlebars->31->1907", - "default.handlebars->31->2075", - "default.handlebars->31->2096", - "default.handlebars->31->687" + "default.handlebars->31->1523", + "default.handlebars->31->1524", + "default.handlebars->31->1920", + "default.handlebars->31->2088", + "default.handlebars->31->2109", + "default.handlebars->31->700" ] }, { @@ -41067,7 +41106,7 @@ "zh-chs": "用户组成员", "zh-cht": "用戶群成員", "xloc": [ - "default.handlebars->31->2072" + "default.handlebars->31->2085" ] }, { @@ -41087,7 +41126,7 @@ "zh-chs": "用户识别码", "zh-cht": "用戶識別碼", "xloc": [ - "default-mobile.handlebars->11->513" + "default-mobile.handlebars->11->530" ] }, { @@ -41107,9 +41146,9 @@ "zh-chs": "用户识别码", "zh-cht": "用戶識別碼", "xloc": [ - "default.handlebars->31->1575", - "default.handlebars->31->1988", - "default.handlebars->31->1989" + "default.handlebars->31->1588", + "default.handlebars->31->2001", + "default.handlebars->31->2002" ] }, { @@ -41129,8 +41168,8 @@ "zh-chs": "用户标识符", "zh-cht": "用戶標識符", "xloc": [ - "default.handlebars->31->1508", - "default.handlebars->31->1972" + "default.handlebars->31->1521", + "default.handlebars->31->1985" ] }, { @@ -41157,7 +41196,7 @@ "zh-chs": "用户列表输出", "zh-cht": "用戶列表輸出", "xloc": [ - "default.handlebars->31->1850" + "default.handlebars->31->1863" ] }, { @@ -41177,8 +41216,8 @@ "zh-chs": "用户名", "zh-cht": "用戶名", "xloc": [ - "default-mobile.handlebars->11->512", - "default.handlebars->31->1574" + "default-mobile.handlebars->11->529", + "default.handlebars->31->1587" ] }, { @@ -41253,7 +41292,7 @@ "zh-chs": "用户节", "zh-cht": "用戶節", "xloc": [ - "default.handlebars->31->2209" + "default.handlebars->31->2222" ] }, { @@ -41336,7 +41375,7 @@ "zh-chs": "用户“{0}”", "zh-cht": "用戶“{0}”", "xloc": [ - "default.handlebars->31->875", + "default.handlebars->31->888", "desktop.handlebars->3->17" ] }, @@ -41345,8 +41384,8 @@ "nl": "Gebruiker bestaat al", "fr": "L'utilisateur existe déjà", "xloc": [ - "default-mobile.handlebars->11->535", - "default.handlebars->31->2147" + "default-mobile.handlebars->11->552", + "default.handlebars->31->2160" ] }, { @@ -41366,8 +41405,8 @@ "zh-chs": "用户浏览器值", "zh-cht": "用戶瀏覽器值", "xloc": [ - "default.handlebars->31->1320", - "default.handlebars->31->1322" + "default.handlebars->31->1333", + "default.handlebars->31->1335" ] }, { @@ -41387,7 +41426,7 @@ "zh-chs": "用户组已更改:{0}", "zh-cht": "用戶組已更改:{0}", "xloc": [ - "default.handlebars->31->1739" + "default.handlebars->31->1752" ] }, { @@ -41407,7 +41446,7 @@ "zh-chs": "已创建用户组:{0}", "zh-cht": "已創建用戶組:{0}", "xloc": [ - "default.handlebars->31->1729" + "default.handlebars->31->1742" ] }, { @@ -41427,7 +41466,7 @@ "zh-chs": "用户组成员身份已更改:{0}", "zh-cht": "用戶組成員身份已更改:{0}", "xloc": [ - "default.handlebars->31->1727" + "default.handlebars->31->1740" ] }, { @@ -41460,8 +41499,8 @@ "nl": "Gebruiker {0} niet gevonden.", "fr": "Utilisateur {0} introuvable.", "xloc": [ - "default-mobile.handlebars->11->543", - "default.handlebars->31->2155" + "default-mobile.handlebars->11->560", + "default.handlebars->31->2168" ] }, { @@ -41502,9 +41541,9 @@ "zh-cht": "用戶名", "xloc": [ "default-mobile.handlebars->11->293", - "default.handlebars->31->1862", + "default.handlebars->31->1875", "default.handlebars->31->308", - "default.handlebars->31->799", + "default.handlebars->31->812", "login2.handlebars->centralTable->1->0->logincell->loginpanel->1->loginuserpassdiv->1->1->0->1", "login2.handlebars->centralTable->1->0->logincell->loginpanel->1->loginuserpassdiv->1->1->0->1", "mstsc.handlebars->main->1->3->1->4->1->0", @@ -41576,9 +41615,9 @@ "zh-chs": "用户", "zh-cht": "用戶", "xloc": [ - "default.handlebars->31->1895", - "default.handlebars->31->1935", - "default.handlebars->31->2208", + "default.handlebars->31->1908", + "default.handlebars->31->1948", + "default.handlebars->31->2221", "default.handlebars->container->topbar->1->1->UsersSubMenuSpan->UsersSubMenu->1->0->UsersGeneral" ] }, @@ -41599,7 +41638,7 @@ "zh-chs": "用户会话", "zh-cht": "用戶節", "xloc": [ - "default.handlebars->31->2193" + "default.handlebars->31->2206" ] }, { @@ -41607,8 +41646,8 @@ "nl": "Gebruikers {0} niet gevonden.", "fr": "Utilisateurs {0} introuvables.", "xloc": [ - "default-mobile.handlebars->11->544", - "default.handlebars->31->2156" + "default-mobile.handlebars->11->561", + "default.handlebars->31->2169" ] }, { @@ -41628,7 +41667,7 @@ "zh-chs": "VT100 +(F10 = ESC + [OY)", "zh-cht": "VT100 +(F10 = ESC + [OY)", "xloc": [ - "default.handlebars->31->942", + "default.handlebars->31->955", "terminal.handlebars->3->20" ] }, @@ -41649,7 +41688,7 @@ "zh-chs": "验证电邮", "zh-cht": "驗證電郵", "xloc": [ - "default.handlebars->31->1817" + "default.handlebars->31->1830" ] }, { @@ -41657,8 +41696,8 @@ "nl": "Validatie uitzondering", "fr": "Exception de validation", "xloc": [ - "default-mobile.handlebars->11->537", - "default.handlebars->31->2149" + "default-mobile.handlebars->11->554", + "default.handlebars->31->2162" ] }, { @@ -41678,7 +41717,7 @@ "zh-chs": "有效期", "zh-cht": "有效期", "xloc": [ - "default.handlebars->31->768" + "default.handlebars->31->781" ] }, { @@ -41698,7 +41737,7 @@ "zh-chs": "文达", "zh-cht": "文達", "xloc": [ - "default.handlebars->31->1310" + "default.handlebars->31->1323" ] }, { @@ -41718,10 +41757,10 @@ "zh-chs": "供应商", "zh-cht": "供應商", "xloc": [ - "default-mobile.handlebars->11->430", - "default-mobile.handlebars->11->433", - "default.handlebars->31->1058", - "default.handlebars->31->1061" + "default-mobile.handlebars->11->447", + "default-mobile.handlebars->11->450", + "default.handlebars->31->1071", + "default.handlebars->31->1074" ] }, { @@ -41762,7 +41801,7 @@ "zh-chs": "已验证", "zh-cht": "已驗證", "xloc": [ - "default.handlebars->31->2053" + "default.handlebars->31->2066" ] }, { @@ -41804,8 +41843,8 @@ "zh-cht": "驗證電話號碼", "xloc": [ "default-mobile.handlebars->11->74", - "default.handlebars->31->1099", - "default.handlebars->31->1813" + "default.handlebars->31->1112", + "default.handlebars->31->1826" ] }, { @@ -41825,7 +41864,7 @@ "zh-chs": "用户{0}的已验证电话号码", "zh-cht": "用戶{0}的已驗證電話號碼", "xloc": [ - "default.handlebars->31->1756" + "default.handlebars->31->1769" ] }, { @@ -41887,13 +41926,13 @@ "zh-cht": "版", "xloc": [ "default-mobile.handlebars->11->383", - "default-mobile.handlebars->11->414", "default-mobile.handlebars->11->431", - "default-mobile.handlebars->11->436", - "default.handlebars->31->1001", - "default.handlebars->31->1042", - "default.handlebars->31->1059", - "default.handlebars->31->1064", + "default-mobile.handlebars->11->448", + "default-mobile.handlebars->11->453", + "default.handlebars->31->1014", + "default.handlebars->31->1055", + "default.handlebars->31->1072", + "default.handlebars->31->1077", "default.handlebars->container->column_l->p42->p42tbl->1->0->5" ] }, @@ -41914,7 +41953,7 @@ "zh-chs": "版本不兼容,请先升级您的MeshCentral", "zh-cht": "版本不兼容,請先升級你的MeshCentral", "xloc": [ - "default.handlebars->31->2246" + "default.handlebars->31->2259" ] }, { @@ -41956,7 +41995,7 @@ "zh-chs": "越南文", "zh-cht": "越南文", "xloc": [ - "default.handlebars->31->1311" + "default.handlebars->31->1324" ] }, { @@ -41996,7 +42035,7 @@ "zh-chs": "查看所有事件", "zh-cht": "查看所有事件", "xloc": [ - "default.handlebars->31->1887" + "default.handlebars->31->1900" ] }, { @@ -42016,8 +42055,8 @@ "zh-chs": "查看变更日志", "zh-cht": "查看變更日誌", "xloc": [ - "default.handlebars->31->2249", - "default.handlebars->31->2251" + "default.handlebars->31->2262", + "default.handlebars->31->2264" ] }, { @@ -42037,7 +42076,7 @@ "zh-chs": "查看有关此设备的注释", "zh-cht": "查看有關此裝置的註釋", "xloc": [ - "default.handlebars->31->640" + "default.handlebars->31->653" ] }, { @@ -42057,7 +42096,7 @@ "zh-chs": "查看有关此设备组的注释", "zh-cht": "查看有關此裝置群的註釋", "xloc": [ - "default.handlebars->31->1436" + "default.handlebars->31->1449" ] }, { @@ -42077,7 +42116,7 @@ "zh-chs": "查看有关此用户的注释", "zh-cht": "查看有關此用戶的註釋", "xloc": [ - "default.handlebars->31->2029" + "default.handlebars->31->2042" ] }, { @@ -42097,7 +42136,7 @@ "zh-chs": "沃拉普克", "zh-cht": "沃拉普克", "xloc": [ - "default.handlebars->31->1312" + "default.handlebars->31->1325" ] }, { @@ -42243,7 +42282,7 @@ "zh-cht": "正在等待用戶授予訪問權限...", "xloc": [ "default-mobile.handlebars->11->309", - "default.handlebars->31->864", + "default.handlebars->31->877", "desktop.handlebars->3->6", "terminal.handlebars->3->10" ] @@ -42265,8 +42304,8 @@ "zh-chs": "唤醒", "zh-cht": "喚醒", "xloc": [ - "default.handlebars->31->710", - "default.handlebars->31->731" + "default.handlebars->31->723", + "default.handlebars->31->744" ] }, { @@ -42286,10 +42325,10 @@ "zh-chs": "唤醒设备", "zh-cht": "喚醒裝置", "xloc": [ - "default-mobile.handlebars->11->484", - "default-mobile.handlebars->11->499", - "default.handlebars->31->1530", - "default.handlebars->31->1560" + "default-mobile.handlebars->11->501", + "default-mobile.handlebars->11->516", + "default.handlebars->31->1543", + "default.handlebars->31->1573" ] }, { @@ -42310,7 +42349,7 @@ "zh-cht": "喚醒", "xloc": [ "default-mobile.handlebars->11->282", - "default.handlebars->31->778" + "default.handlebars->31->791" ] }, { @@ -42350,7 +42389,7 @@ "zh-chs": "瓦隆", "zh-cht": "瓦隆", "xloc": [ - "default.handlebars->31->1313" + "default.handlebars->31->1326" ] }, { @@ -42370,7 +42409,7 @@ "zh-chs": "弱", "zh-cht": "弱", "xloc": [ - "default.handlebars->31->1367" + "default.handlebars->31->1380" ] }, { @@ -42415,15 +42454,15 @@ "zh-chs": "网络服务器", "zh-cht": "網絡伺服器", "xloc": [ - "default.handlebars->31->2231", - "default.handlebars->31->2232" + "default.handlebars->31->2244", + "default.handlebars->31->2245" ] }, { "en": "Web Server HTTP Headers", "nl": "Webserver HTTP Headers", "xloc": [ - "default.handlebars->31->2235" + "default.handlebars->31->2248" ] }, { @@ -42443,7 +42482,7 @@ "zh-chs": "Web服务器请求", "zh-cht": "Web伺服器請求", "xloc": [ - "default.handlebars->31->2233" + "default.handlebars->31->2246" ] }, { @@ -42463,7 +42502,7 @@ "zh-chs": "Web套接字中继", "zh-cht": "Web插座中繼", "xloc": [ - "default.handlebars->31->2234" + "default.handlebars->31->2247" ] }, { @@ -42483,7 +42522,7 @@ "zh-chs": "网络RDP", "zh-cht": "網絡RDP", "xloc": [ - "default.handlebars->31->668" + "default.handlebars->31->681" ] }, { @@ -42545,7 +42584,7 @@ "zh-chs": "威尔士文", "zh-cht": "威爾士文", "xloc": [ - "default.handlebars->31->1314" + "default.handlebars->31->1327" ] }, { @@ -42565,7 +42604,7 @@ "zh-chs": "启用后,任何人都可以使用邀请代码通过以下公共连结将设备加入该设备组:", "zh-cht": "啟用後,任何人都可以使用邀請代碼通過以下公共鏈結將裝置加入該裝置群:", "xloc": [ - "default.handlebars->31->1583" + "default.handlebars->31->1596" ] }, { @@ -42586,7 +42625,7 @@ "zh-cht": "啟用後,每次登入時,你都可以選擇向電郵帳戶接收登入保安編碼,以提高安全性。", "xloc": [ "default-mobile.handlebars->11->80", - "default.handlebars->31->1106" + "default.handlebars->31->1119" ] }, { @@ -42606,7 +42645,7 @@ "zh-chs": "选择此策略时,此服务器不管理英特尔®AMT。 仍然可以通过手动激活和配置Intel AMT来使用它。", "zh-cht": "選擇此策略時,此服務器不管理英特爾®AMT。 仍然可以通過手動激活和配置Intel AMT來使用它。", "xloc": [ - "default.handlebars->31->1478" + "default.handlebars->31->1491" ] }, { @@ -42643,7 +42682,7 @@ "zh-chs": "选择此策略后,将禁用处于客户端控制模式(CCM)的所有英特尔®AMT。 其他设备将清除CIRA,并且仍然可以手动进行管理。", "zh-cht": "選擇此策略後,將禁用處於客戶端控制模式(CCM)的所有英特爾®AMT。 其他設備將清除CIRA,並且仍然可以手動進行管理。", "xloc": [ - "default.handlebars->31->1479" + "default.handlebars->31->1492" ] }, { @@ -42663,7 +42702,7 @@ "zh-chs": "下次登录时将更改。", "zh-cht": "下次登入時將更改。", "xloc": [ - "default.handlebars->31->2001" + "default.handlebars->31->2014" ] }, { @@ -42686,8 +42725,8 @@ "default-mobile.handlebars->11->335", "default-mobile.handlebars->11->339", "default-mobile.handlebars->dialog->3->dialog3->deskkeys->5", - "default.handlebars->31->902", - "default.handlebars->31->906", + "default.handlebars->31->915", + "default.handlebars->31->919", "desktop.handlebars->p11->deskarea0->deskarea4->3->deskkeys->3" ] }, @@ -42853,7 +42892,7 @@ "zh-chs": "Win32可执行档案", "zh-cht": "Win32可執行檔案", "xloc": [ - "default.handlebars->31->827" + "default.handlebars->31->840" ] }, { @@ -42931,7 +42970,7 @@ "zh-chs": "Windows(32位)", "zh-cht": "Windows(32位)", "xloc": [ - "default.handlebars->31->833" + "default.handlebars->31->846" ] }, { @@ -42951,7 +42990,7 @@ "zh-chs": "Windows(64位)", "zh-cht": "Windows(64位)", "xloc": [ - "default.handlebars->31->832" + "default.handlebars->31->845" ] }, { @@ -43116,7 +43155,7 @@ "zh-cht": "Windows命令提示", "xloc": [ "default.handlebars->31->475", - "default.handlebars->31->789" + "default.handlebars->31->802" ] }, { @@ -43199,7 +43238,14 @@ "zh-cht": "Windows PowerShell", "xloc": [ "default.handlebars->31->476", - "default.handlebars->31->790" + "default.handlebars->31->803" + ] + }, + { + "en": "Windows Security", + "xloc": [ + "default-mobile.handlebars->11->397", + "default.handlebars->31->619" ] }, { @@ -43280,7 +43326,7 @@ "zh-chs": "换行:关", "zh-cht": "换行:關", "xloc": [ - "default.handlebars->31->988" + "default.handlebars->31->1001" ] }, { @@ -43300,7 +43346,7 @@ "zh-chs": "换行:开", "zh-cht": "换行:開", "xloc": [ - "default.handlebars->31->987" + "default.handlebars->31->1000" ] }, { @@ -43320,7 +43366,7 @@ "zh-chs": "为此设备写一个事件", "zh-cht": "為此裝置寫一個事件", "xloc": [ - "default.handlebars->31->642" + "default.handlebars->31->655" ] }, { @@ -43381,7 +43427,7 @@ "zh-chs": "XTerm", "zh-cht": "XTerm", "xloc": [ - "default.handlebars->31->658" + "default.handlebars->31->671" ] }, { @@ -43401,7 +43447,7 @@ "zh-chs": "科萨", "zh-cht": "科薩", "xloc": [ - "default.handlebars->31->1315" + "default.handlebars->31->1328" ] }, { @@ -43421,7 +43467,7 @@ "zh-chs": "意第绪文", "zh-cht": "意第緒文", "xloc": [ - "default.handlebars->31->1316" + "default.handlebars->31->1329" ] }, { @@ -43559,7 +43605,7 @@ "zh-chs": "YubiKey™ OTP", "zh-cht": "YubiKey™OTP", "xloc": [ - "default.handlebars->31->1118" + "default.handlebars->31->1131" ] }, { @@ -43599,7 +43645,7 @@ "zh-chs": "邮编档案名", "zh-cht": "郵編檔案名", "xloc": [ - "default.handlebars->31->972" + "default.handlebars->31->985" ] }, { @@ -43681,7 +43727,7 @@ "zh-chs": "祖鲁族", "zh-cht": "祖魯族", "xloc": [ - "default.handlebars->31->1317" + "default.handlebars->31->1330" ] }, { @@ -43949,7 +43995,7 @@ "zh-chs": "\\\\'", "zh-cht": "\\\\'", "xloc": [ - "default.handlebars->31->2247" + "default.handlebars->31->2260" ] }, { @@ -44195,7 +44241,7 @@ "zh-chs": "console.txt", "zh-cht": "console.txt", "xloc": [ - "default.handlebars->31->1088" + "default.handlebars->31->1101" ] }, { @@ -44216,7 +44262,7 @@ "zh-cht": "複製", "xloc": [ "default-mobile.handlebars->11->141", - "default.handlebars->31->1655" + "default.handlebars->31->1668" ] }, { @@ -44315,8 +44361,8 @@ "zh-chs": "eventslist.csv", "zh-cht": "eventslist.csv", "xloc": [ - "default.handlebars->31->1782", - "default.handlebars->31->1787" + "default.handlebars->31->1795", + "default.handlebars->31->1800" ] }, { @@ -44336,8 +44382,8 @@ "zh-chs": "eventslist.json", "zh-cht": "eventslist.json", "xloc": [ - "default.handlebars->31->1784", - "default.handlebars->31->1788" + "default.handlebars->31->1797", + "default.handlebars->31->1801" ] }, { @@ -44377,8 +44423,8 @@ "zh-chs": "免费", "zh-cht": "免費", "xloc": [ - "default.handlebars->31->2201", - "default.handlebars->31->2204" + "default.handlebars->31->2214", + "default.handlebars->31->2217" ] }, { @@ -44593,7 +44639,7 @@ "zh-chs": "id, name, email, creation, lastlogin, groups, authfactors", "zh-cht": "id, name, email, creation, lastlogin, groups, authfactors", "xloc": [ - "default.handlebars->31->1851" + "default.handlebars->31->1864" ] }, { @@ -44716,7 +44762,7 @@ "zh-chs": "k max,默认为空白", "zh-cht": "k max,默認為空白", "xloc": [ - "default.handlebars->31->1879" + "default.handlebars->31->1892" ] }, { @@ -44828,7 +44874,7 @@ "zh-chs": "macOS ARM (64位)", "zh-cht": "macOS ARM (64位)", "xloc": [ - "default.handlebars->31->837" + "default.handlebars->31->850" ] }, { @@ -44848,7 +44894,7 @@ "zh-chs": "macOS x86 (64位)", "zh-cht": "macOS x86 (64位)", "xloc": [ - "default.handlebars->31->836" + "default.handlebars->31->849" ] }, { @@ -44931,7 +44977,7 @@ "zh-cht": "移動", "xloc": [ "default-mobile.handlebars->11->142", - "default.handlebars->31->1656" + "default.handlebars->31->1669" ] }, { @@ -44951,7 +44997,7 @@ "zh-chs": "无VNC", "zh-cht": "無VNC", "xloc": [ - "default.handlebars->31->666" + "default.handlebars->31->679" ] }, { @@ -45028,7 +45074,7 @@ "zh-chs": "servererrors.txt", "zh-cht": "servererrors.txt", "xloc": [ - "default.handlebars->31->1391" + "default.handlebars->31->1404" ] }, { @@ -45048,7 +45094,7 @@ "zh-chs": "servertrace.csv", "zh-cht": "servertrace.csv", "xloc": [ - "default.handlebars->31->2243" + "default.handlebars->31->2256" ] }, { @@ -45114,7 +45160,7 @@ "zh-chs": "time, conn.agent, conn.users, conn.usersessions, conn.relaysession, conn.intelamt, mem.external, mem.heapused, mem.heaptotal, mem.rss", "zh-cht": "time, conn.agent, conn.users, conn.usersessions, conn.relaysession, conn.intelamt, mem.external, mem.heapused, mem.heaptotal, mem.rss", "xloc": [ - "default.handlebars->31->2218" + "default.handlebars->31->2231" ] }, { @@ -45134,7 +45180,7 @@ "zh-chs": "时间,来源,信息", "zh-cht": "時間,來源,訊息", "xloc": [ - "default.handlebars->31->2242" + "default.handlebars->31->2255" ] }, { @@ -45171,8 +45217,8 @@ "zh-chs": "总计", "zh-cht": "總", "xloc": [ - "default.handlebars->31->2202", - "default.handlebars->31->2205" + "default.handlebars->31->2215", + "default.handlebars->31->2218" ] }, { @@ -45255,8 +45301,8 @@ "zh-chs": "userlist.csv", "zh-cht": "userlist.csv", "xloc": [ - "default.handlebars->31->1847", - "default.handlebars->31->1852" + "default.handlebars->31->1860", + "default.handlebars->31->1865" ] }, { @@ -45276,8 +45322,8 @@ "zh-chs": "userlist.json", "zh-cht": "userlist.json", "xloc": [ - "default.handlebars->31->1849", - "default.handlebars->31->1853" + "default.handlebars->31->1862", + "default.handlebars->31->1866" ] }, { @@ -45297,7 +45343,14 @@ "zh-chs": "utc,时间,类型,指令,用户,设备,消息", "zh-cht": "utc,時間,類型,指令,用戶,裝置,消息", "xloc": [ - "default.handlebars->31->1786" + "default.handlebars->31->1799" + ] + }, + { + "en": "{0}", + "xloc": [ + "default-mobile.handlebars->11->425", + "default-mobile.handlebars->11->429" ] }, { @@ -45337,8 +45390,8 @@ "zh-chs": "{0} Gb", "zh-cht": "{0} Gb", "xloc": [ - "default.handlebars->31->1630", - "default.handlebars->31->1635" + "default.handlebars->31->1643", + "default.handlebars->31->1648" ] }, { @@ -45358,9 +45411,9 @@ "zh-chs": "{0} Kb", "zh-cht": "{0} Kb", "xloc": [ - "default.handlebars->31->1628", - "default.handlebars->31->1633", - "default.handlebars->31->2107" + "default.handlebars->31->1641", + "default.handlebars->31->1646", + "default.handlebars->31->2120" ] }, { @@ -45380,12 +45433,12 @@ "zh-chs": "{0} Mb", "zh-cht": "{0} Mb", "xloc": [ - "default-mobile.handlebars->11->444", - "default-mobile.handlebars->11->449", - "default.handlebars->31->1072", - "default.handlebars->31->1077", - "default.handlebars->31->1629", - "default.handlebars->31->1634" + "default-mobile.handlebars->11->461", + "default-mobile.handlebars->11->466", + "default.handlebars->31->1085", + "default.handlebars->31->1090", + "default.handlebars->31->1642", + "default.handlebars->31->1647" ] }, { @@ -45405,8 +45458,8 @@ "zh-chs": "{0} Mb,{1} Mhz", "zh-cht": "{0} Mb,{1} Mhz", "xloc": [ - "default-mobile.handlebars->11->442", - "default.handlebars->31->1070" + "default-mobile.handlebars->11->459", + "default.handlebars->31->1083" ] }, { @@ -45426,7 +45479,7 @@ "zh-chs": "{0}个活跃会话", "zh-cht": "{0}個活躍節", "xloc": [ - "default.handlebars->31->2043" + "default.handlebars->31->2056" ] }, { @@ -45446,8 +45499,8 @@ "zh-chs": "{0} b", "zh-cht": "{0} b", "xloc": [ - "default.handlebars->31->1627", - "default.handlebars->31->1632" + "default.handlebars->31->1640", + "default.handlebars->31->1645" ] }, { @@ -45468,8 +45521,8 @@ "zh-cht": "{0}個字節", "xloc": [ "default-mobile.handlebars->11->130", - "default.handlebars->31->1643", - "default.handlebars->31->2122", + "default.handlebars->31->1656", + "default.handlebars->31->2135", "download.handlebars->3->2", "download2.handlebars->5->2" ] @@ -45491,7 +45544,7 @@ "zh-chs": "剩余{0}个字节", "zh-cht": "剩餘{0}個字節", "xloc": [ - "default.handlebars->31->1622" + "default.handlebars->31->1635" ] }, { @@ -45511,7 +45564,7 @@ "zh-chs": "{0}个连接", "zh-cht": "{0}個連接", "xloc": [ - "default.handlebars->31->874", + "default.handlebars->31->887", "desktop.handlebars->3->16" ] }, @@ -45532,7 +45585,7 @@ "zh-chs": "剩余{0} GB", "zh-cht": "剩餘{0} GB", "xloc": [ - "default.handlebars->31->1625" + "default.handlebars->31->1638" ] }, { @@ -45552,7 +45605,7 @@ "zh-chs": "{0}个群组", "zh-cht": "{0}個群組", "xloc": [ - "default.handlebars->31->2006" + "default.handlebars->31->2019" ] }, { @@ -45609,7 +45662,7 @@ "zh-chs": "剩余{0}千字节", "zh-cht": "剩餘{0}千字節", "xloc": [ - "default.handlebars->31->1623" + "default.handlebars->31->1636" ] }, { @@ -45651,7 +45704,7 @@ "zh-chs": "剩余{0}兆字节", "zh-cht": "剩餘{0}兆字節", "xloc": [ - "default.handlebars->31->1624" + "default.handlebars->31->1637" ] }, { @@ -45691,7 +45744,7 @@ "zh-chs": "{0}未显示更多用户,请使用搜索框查找用户...", "zh-cht": "{0}未顯示更多用戶,請使用搜索框查找用戶...", "xloc": [ - "default.handlebars->31->1796" + "default.handlebars->31->1809" ] }, { @@ -45855,7 +45908,7 @@ "default-mobile.handlebars->11->184", "default-mobile.handlebars->11->187", "default-mobile.handlebars->11->190", - "default.handlebars->31->1800", + "default.handlebars->31->1813", "default.handlebars->31->269", "default.handlebars->31->272", "default.handlebars->31->275", @@ -45946,6 +45999,13 @@ "default.handlebars->31->287" ] }, + { + "en": "{0}, Mask: {1}, Gateway: {2}", + "xloc": [ + "default-mobile.handlebars->11->423", + "default-mobile.handlebars->11->427" + ] + }, { "cs": "{0}, {1} až {2}", "de": "{0}, {1} bis {2}", @@ -45963,7 +46023,7 @@ "zh-chs": "{0},{1}至{2}", "zh-cht": "{0},{1}至{2}", "xloc": [ - "default.handlebars->31->693" + "default.handlebars->31->706" ] }, { @@ -46023,7 +46083,7 @@ "zh-chs": "{0}k在1档案内。最多{1}k", "zh-cht": "{0}k在1檔案內。最多{1}k", "xloc": [ - "default.handlebars->31->1637" + "default.handlebars->31->1650" ] }, { @@ -46043,7 +46103,7 @@ "zh-chs": "{1}k在{0}个档案中。最多{2}k", "zh-cht": "{1}k在{0}個檔案中。最多{2}k", "xloc": [ - "default.handlebars->31->1636" + "default.handlebars->31->1649" ] }, { diff --git a/views/default-mobile.handlebars b/views/default-mobile.handlebars index 141e2190..9f8e7662 100644 --- a/views/default-mobile.handlebars +++ b/views/default-mobile.handlebars @@ -1579,6 +1579,8 @@ if (message.event.node.intelamt.flags != null) { node.intelamt.flags = message.event.node.intelamt.flags; } if (message.event.node.intelamt.warn != null) { node.intelamt.warn = message.event.node.intelamt.warn; } else { delete node.intelamt.warn; } } + if (message.event.node.av != null) { node.av = message.event.node.av; } + if (message.event.node.wsc != null) { node.wsc = message.event.node.wsc; } node.namel = node.name.toLowerCase(); if (node.rname) { node.rnamel = node.rname.toLowerCase(); } else { node.rnamel = node.namel; } if (message.event.node.icon) { node.icon = message.event.node.icon; } @@ -1588,6 +1590,7 @@ refreshDevice(node._id); //updateMapMarkers(); updateDevices(); + if (currentNode == node) { updateDeviceDetails(); } //if ((currentNode == node) && (xxdialogMode != null) && (xxdialogTag == '@xxmap')) { p10showNodeLocationDialog(); } } @@ -4293,6 +4296,32 @@ var m = hardware.windows.osinfo; if (m.OSArchitecture) { x += addDetailItem("Architecture", EscapeHtml(m.OSArchitecture), s); } } + + // Windows Security Central + if (node.wsc) { + var y = []; + if (node.wsc.antiVirus != null) { if (node.wsc.antiVirus == 'OK') { y.push("AV" + ' - ' + "OK" + ''); } else { y.push("AV" + ' - ' + "BAD" + ''); } } + if (node.wsc.autoUpdate != null) { if (node.wsc.autoUpdate == 'OK') { y.push("Update" + ' - ' + "OK" + ''); } else { y.push("Update" + ' - ' + "BAD" + ''); } } + if (node.wsc.firewall != null) { if (node.wsc.firewall == 'OK') { y.push("Firewall" + ' - ' + "OK" + ''); } else { y.push("Firewall" + ' - ' + "BAD" + ''); } } + x += addDetailItem("Windows Security", y.join(', ')); + } + + // Antivirus + if (node.av && node.av.length > 0) { + var y = []; + for (var i in node.av) { + if (node.av[i].product) { + var avx = EscapeHtml(node.av[i].product); + if (node.av[i].enabled !== true) { avx += ' - ' + "Disabled" + ''; } + if (node.av[i].updated !== true) { avx += ' - ' + "Out of date" + ''; } + if ((node.av[i].enabled == true) && (node.av[i].updated == true)) { avx += ' - ' + "OK" + ''; } + y.push(avx); + } + } + x += addDetailItem("Antivirus", y.join('
')); + } + + if (x != '') { sections.push({ name: "Operating System", html: x, img: 'software' }); } } @@ -4361,16 +4390,16 @@ var iplayer = m[j]; if (iplayer.family == 'IPv4') { if (iplayer.gateway && iplayer.netmask) { - x += addDetailItem("IPv4 Layer", format("IP: {0}, Mask: {1}, Gateway: {2}", EscapeHtml(iplayer.address), EscapeHtml(iplayer.netmask), EscapeHtml(iplayer.gateway))); + x += addDetailItem("IPv4 Layer", format("{0}, Mask: {1}, Gateway: {2}", EscapeHtml(iplayer.address), EscapeHtml(iplayer.netmask), EscapeHtml(iplayer.gateway))); } else { - x += addDetailItem("IPv4 Layer", format("IP: {0}", EscapeHtml(iplayer.address))); + x += addDetailItem("IPv4 Layer", format("{0}", EscapeHtml(iplayer.address))); } } if (iplayer.family == 'IPv6') { if (iplayer.gateway && iplayer.netmask) { - x += addDetailItem("IPv6 Layer", format("IP: {0}, Mask: {1}, Gateway: {2}", EscapeHtml(iplayer.address), EscapeHtml(iplayer.netmask), EscapeHtml(iplayer.gateway))); + x += addDetailItem("IPv6 Layer", format("{0}, Mask: {1}, Gateway: {2}", EscapeHtml(iplayer.address), EscapeHtml(iplayer.netmask), EscapeHtml(iplayer.gateway))); } else { - x += addDetailItem("IPv6 Layer", format("IP: {0}", EscapeHtml(iplayer.address))); + x += addDetailItem("IPv6 Layer", format("{0}", EscapeHtml(iplayer.address))); } } } diff --git a/views/default.handlebars b/views/default.handlebars index 5f499010..f3e66a69 100644 --- a/views/default.handlebars +++ b/views/default.handlebars @@ -2866,6 +2866,7 @@ if (message.event.node.intelamt.warn != null) { node.intelamt.warn = message.event.node.intelamt.warn; } else { delete node.intelamt.warn; } } if (message.event.node.av != null) { node.av = message.event.node.av; } + if (message.event.node.wsc != null) { node.wsc = message.event.node.wsc; } node.namel = node.name.toLowerCase(); if (node.rname) { node.rnamel = node.rname.toLowerCase(); } else { node.rnamel = node.namel; } if (message.event.node.icon) { node.icon = message.event.node.icon; } @@ -4358,7 +4359,9 @@ if (xxdialogMode) return false; var mesh = meshes[meshid], x = '', installType = 0, moreoptions = ''; - var opts = ''; + var opts = ''; x += addHtmlValue("Operating System", opts); var servername = serverinfo.name; @@ -5901,6 +5904,15 @@ // Operating system description if (node.osdesc) { x += addDeviceAttribute("Operating System", node.osdesc); } + // Windows Security Central + if (node.wsc) { + var y = []; + if (node.wsc.antiVirus != null) { if (node.wsc.antiVirus == 'OK') { y.push("AV" + ' - ' + "OK" + ''); } else { y.push("AV" + ' - ' + "BAD" + ''); } } + if (node.wsc.autoUpdate != null) { if (node.wsc.autoUpdate == 'OK') { y.push("Update" + ' - ' + "OK" + ''); } else { y.push("Update" + ' - ' + "BAD" + ''); } } + if (node.wsc.firewall != null) { if (node.wsc.firewall == 'OK') { y.push("Firewall" + ' - ' + "OK" + ''); } else { y.push("Firewall" + ' - ' + "BAD" + ''); } } + x += addDeviceAttribute("Windows Security", y.join(', ')); + } + // Antivirus if (node.av && node.av.length > 0) { var y = [];