Added terminal device sharing.

Ylian Saint-Hilaire committed Nov 27, 2020 at 13:55 UTC 1b2a63977b59fe801171efc862698ede3db75a0e
13 files changed +2528 -2006
MeshCentralServer.njsproj
+1
@@ -564,6 +564,7 @@
564 <Content Include="views\messenger.handlebars" />
565 <Content Include="views\mstsc.handlebars" />
566 <Content Include="views\player.handlebars" />
567 + <Content Include="views\terminal.handlebars" />
568 <Content Include="views\terms-mobile.handlebars" />
569 <Content Include="views\terms.handlebars" />
570 <Content Include="views\xterm.handlebars" />
db.js
+1
@@ -463,6 +463,7 @@ module.exports.CreateDB = function (parent, func) {
463 case 'ugrp': { dbUGrpChange(change, true); break; } // A user account has created
464 }
465 } else if (change.operationType == 'delete') {
466 + if ((change.documentKey == null) || (change.documentKey._id == null)) return;
467 var splitId = change.documentKey._id.split('/');
468 switch (splitId[0]) {
469 case 'node': {
meshrelay.js
+2 -2
@@ -621,7 +621,7 @@ function CreateMeshRelayEx(parent, ws, req, domain, user, cookie) {
621 performRelay();
622 });
623 return obj;
624 - } else if ((cookie != null) && (cookie.nid != null) && (typeof cookie.r == 'number') && (typeof cookie.cf == 'number') && (typeof cookie.gn == 'string')) {
624 + } else if ((cookie != null) && (cookie.nid != null) && (typeof cookie.r == 'number') && (typeof cookie.p == 'number') && (typeof cookie.cf == 'number') && (typeof cookie.gn == 'string')) {
625 // We have routing instructions in the cookie, but first, check user access for this node.
626 parent.db.Get(cookie.nid, function (err, docs) {
627 if (docs.length == 0) { console.log('ERR: Node not found'); try { obj.close(); } catch (e) { } return; } // Disconnect websocket
@@ -633,7 +633,7 @@ function CreateMeshRelayEx(parent, ws, req, domain, user, cookie) {
633 // Send connection request to agent
634 if (obj.id == null) { obj.id = ('' + Math.random()).substring(2); }
635 const rcookie = parent.parent.encodeCookie({ ruserid: user._id, nodeid: node._id }, parent.parent.loginCookieEncryptionKey);
636 - const command = { nodeid: node._id, action: 'msg', type: 'tunnel', userid: user._id, value: '*/meshrelay.ashx?p=2&id=' + obj.id + '&rauth=' + rcookie + '&nodeid=' + node._id, soptions: {}, usage: 2, rights: cookie.r, guestname: cookie.gn, consent: cookie.cf, remoteaddr: cleanRemoteAddr(obj.req.clientIp) };
636 + const command = { nodeid: node._id, action: 'msg', type: 'tunnel', userid: user._id, value: '*/meshrelay.ashx?p=' + cookie.p + '&id=' + obj.id + '&rauth=' + rcookie + '&nodeid=' + node._id, soptions: {}, usage: 2, rights: cookie.r, guestname: cookie.gn, consent: cookie.cf, remoteaddr: cleanRemoteAddr(obj.req.clientIp) };
637 if (typeof domain.consentmessages == 'object') {
638 if (typeof domain.consentmessages.title == 'string') { command.soptions.consentTitle = domain.consentmessages.title; }
639 if (typeof domain.consentmessages.desktop == 'string') { command.soptions.consentMsgDesktop = domain.consentmessages.desktop; }
meshuser.js
+6 -4
@@ -4707,6 +4707,7 @@ module.exports.CreateMeshUser = function (parent, db, ws, req, args, domain, use
4707 else if ((command.start != null) && (typeof command.start != 'number')) { err = 'Invalid start time'; } // Check the start time in seconds
4708 else if ((command.end != null) && (typeof command.end != 'number')) { err = 'Invalid end time'; } // Check the end time in seconds
4709 else if (common.validateInt(command.consent, 0, 256) == false) { err = 'Invalid flags'; } // Check the flags
4710 + else if (common.validateInt(command.p, 1, 2) == false) { err = 'Invalid protocol'; } // Check the protocol, 1 = Terminal, 2 = Desktop
4711 else if ((command.expire == null) && ((command.start == null) || (command.end == null) || (command.start > command.end))) { err = 'No time specified'; } // Check that a time range is present
4712 else {
4713 if (command.nodeid.split('/').length == 1) { command.nodeid = 'node/' + domain.id + '/' + command.nodeid; }
@@ -4740,7 +4741,7 @@ module.exports.CreateMeshUser = function (parent, db, ws, req, args, domain, use
4741 expireTime = command.end * 1000;
4742 }
4743
4743 - const inviteCookie = parent.parent.encodeCookie({ a: 5, uid: user._id, gn: command.guestname, nid: node._id, cf: command.consent, start: startTime, expire: expireTime, pid: publicid }, parent.parent.invitationLinkEncryptionKey);
4744 + const inviteCookie = parent.parent.encodeCookie({ a: 5, p: command.p, uid: user._id, gn: command.guestname, nid: node._id, cf: command.consent, start: startTime, expire: expireTime, pid: publicid }, parent.parent.invitationLinkEncryptionKey);
4745 if (inviteCookie == null) { if (command.responseid != null) { try { ws.send(JSON.stringify({ action: 'createDeviceShareLink', responseid: command.responseid, result: 'Unable to generate shareing cookie' })); } catch (ex) { } } return; }
4746 command.start = startTime;
4747 command.expire = expireTime;
@@ -4750,13 +4751,14 @@ module.exports.CreateMeshUser = function (parent, db, ws, req, args, domain, use
4751 var httpsPort = ((args.aliasport == null) ? args.port : args.aliasport); // Use HTTPS alias port is specified
4752 var xdomain = (domain.dns == null) ? domain.id : '';
4753 if (xdomain != '') xdomain += '/';
4753 - var url = 'https://' + serverName + ':' + httpsPort + '/' + xdomain + 'desktop?c=' + inviteCookie;
4754 - if (serverName.split('.') == 1) { url = '/' + xdomain + 'desktop?c=' + inviteCookie; }
4754 + var page = (command.p == 1) ? 'terminal' : 'desktop';
4755 + var url = 'https://' + serverName + ':' + httpsPort + '/' + xdomain + page + '?c=' + inviteCookie;
4756 + if (serverName.split('.') == 1) { url = '/' + xdomain + page + '?c=' + inviteCookie; }
4757 command.url = url;
4758 ws.send(JSON.stringify(command));
4759
4760 // Create a device sharing database entry
4759 - parent.db.Set({ type: 'deviceshare', nodeid: node._id, domain: node.domain, publicid: publicid, startTime: startTime, expireTime: expireTime, userid: user._id, guestName: command.guestname, consent: command.consent, url: url });
4761 + parent.db.Set({ _id: 'deviceshare-' + publicid, type: 'deviceshare', nodeid: node._id, p: command.p, domain: node.domain, publicid: publicid, startTime: startTime, expireTime: expireTime, userid: user._id, guestName: command.guestname, consent: command.consent, url: url });
4762
4763 // Send out an event that we added a device share
4764 var targets = parent.CreateNodeDispatchTargets(node.meshid, node._id, ['server-users', user._id]);
public/scripts/agent-desktop-0.0.2-min.js
+1 -1
@@ -1 +1 @@
1 -Uint8Array.prototype.slice||Object.defineProperty(Uint8Array.prototype,"slice",{value:function(e,t){return new Uint8Array(Array.prototype.slice.call(this,e,t))}});var CreateAgentRemoteDesktop=function(e,t){var h={};"string"==typeof(h.CanvasId=e)&&(h.CanvasId=Q(e)),h.Canvas=h.CanvasId.getContext("2d"),h.scrolldiv=t,h.State=0,h.PendingOperations=[],h.tilesReceived=0,h.TilesDrawn=0,h.KillDraw=0,h.ipad=!1,h.tabletKeyboardVisible=!1,h.LastX=0,h.LastY=0,h.touchenabled=0,h.submenuoffset=0,h.touchtimer=null,h.TouchArray={},h.connectmode=0,h.connectioncount=0,h.rotation=0,h.protocol=2,h.debugmode=0,h.firstUpKeys=[],h.stopInput=!1,h.localKeyMap=!0,h.remoteKeyMap=!1,h.pressedKeys=[],h.sessionid=0,h.username,h.oldie=!1,h.CompressionLevel=50,h.ScalingLevel=1024,h.FrameRateTimer=100,h.SwapMouse=!1,h.FirstDraw=!1,h.ScreenWidth=960,h.ScreenHeight=701,h.width=960,h.height=960,h.displays=null,h.selectedDisplay=null,h.onScreenSizeChange=null,h.onMessage=null,h.onConnectCountChanged=null,h.onDebugMessage=null,h.onTouchEnabledChanged=null,h.onDisplayinfo=null;var g=!(h.accumulator=null),p="default";h.mouseCursorActive=function(e){g!=e&&(g=e,h.CanvasId.style.cursor=1==e?p:"default")};var S=["default","progress","crosshair","pointer","help","text","no-drop","move","nesw-resize","ns-resize","nwse-resize","w-resize","alias","wait","none","not-allowed","col-resize","row-resize","copy","zoom-in","zoom-out"];h.Start=function(){h.State=0,h.accumulator=null},h.Stop=function(){h.setRotation(0),h.UnGrabKeyInput(),h.UnGrabMouseInput(),h.touchenabled=0,null!=h.onScreenSizeChange&&h.onScreenSizeChange(h,h.ScreenWidth,h.ScreenHeight,h.CanvasId),h.Canvas.clearRect(0,0,h.CanvasId.width,h.CanvasId.height)},h.xxStateChange=function(e){if(h.State!=e)switch(h.State=e,h.CanvasId.style.cursor="default",e){case 0:h.Stop()}},h.send=function(e){2<h.debugmode&&console.log("KSend("+e.length+"): "+rstr2hex(e)),null!=h.parent&&h.parent.send(e)},h.ProcessPictureMsg=function(e,t,n){var o=new Image;o.xcount=h.tilesReceived++;for(var a=h.tilesReceived,r=e.slice(4),i=0,s=[];5e4<r.byteLength-i;)s.push(String.fromCharCode.apply(null,r.slice(i,i+5e4))),i+=5e4;0<i?s.push(String.fromCharCode.apply(null,r.slice(i))):s.push(String.fromCharCode.apply(null,r)),o.src="data:image/jpeg;base64,"+btoa(s.join("")),o.onload=function(){if(null!=h.Canvas&&h.KillDraw<a&&0!=h.State)for(h.PendingOperations.push([a,2,o,t,n]);h.DoPendingOperations(););else h.PendingOperations.push([a,0])},o.error=function(){console.log("DecodeTileError")}},h.DoPendingOperations=function(){if(0==h.PendingOperations.length)return!1;for(var e=0;e<h.PendingOperations.length;e++){var t=h.PendingOperations[e];if(t[0]==h.TilesDrawn+1)return 1==t[1]?h.ProcessCopyRectMsg(t[2]):2==t[1]&&(h.Canvas.drawImage(t[2],h.rotX(t[3],t[4]),h.rotY(t[3],t[4])),delete t[2]),h.PendingOperations.splice(e,1),delete t,h.TilesDrawn++,h.TilesDrawn==h.tilesReceived&&h.KillDraw<h.TilesDrawn&&(h.KillDraw=h.TilesDrawn=h.tilesReceived=0),!0}return h.oldie&&0<h.PendingOperations.length&&h.TilesDrawn++,!1},h.ProcessCopyRectMsg=function(e){var t=((255&e.charCodeAt(0))<<8)+(255&e.charCodeAt(1)),n=((255&e.charCodeAt(2))<<8)+(255&e.charCodeAt(3)),o=((255&e.charCodeAt(4))<<8)+(255&e.charCodeAt(5)),a=((255&e.charCodeAt(6))<<8)+(255&e.charCodeAt(7)),r=((255&e.charCodeAt(8))<<8)+(255&e.charCodeAt(9)),i=((255&e.charCodeAt(10))<<8)+(255&e.charCodeAt(11));h.Canvas.drawImage(Canvas.canvas,t,n,r,i,o,a,r,i)},h.SendUnPause=function(){1<h.debugmode&&console.log("SendUnPause"),h.send(String.fromCharCode(0,8,0,5,0))},h.SendPause=function(){1<h.debugmode&&console.log("SendPause"),h.send(String.fromCharCode(0,8,0,5,1))},h.SendCompressionLevel=function(e,t,n,o){t&&(h.CompressionLevel=t),n&&(h.ScalingLevel=n),o&&(h.FrameRateTimer=o),h.send(String.fromCharCode(0,5,0,10,e,h.CompressionLevel)+h.shortToStr(h.ScalingLevel)+h.shortToStr(h.FrameRateTimer))},h.SendRefresh=function(){h.send(String.fromCharCode(0,6,0,4))},h.ProcessScreenMsg=function(e,t){if(0<h.debugmode&&console.log("ScreenSize: "+e+" x "+t),h.ScreenWidth!=e||h.ScreenHeight!=t){for(h.Canvas.setTransform(1,0,0,1,0,0),h.rotation=0,h.FirstDraw=!0,h.ScreenWidth=h.width=e,h.ScreenHeight=h.height=t,h.KillDraw=h.tilesReceived;0<h.PendingOperations.length;)h.PendingOperations.shift();h.SendCompressionLevel(1),h.SendUnPause(),null!=h.onScreenSizeChange&&h.onScreenSizeChange(h,h.ScreenWidth,h.ScreenHeight,h.CanvasId)}},h.ProcessBinaryCommand=function(e,t,n){var o,a;switch(3!=e&&4!=e&&7!=e||(o=(n[4]<<8)+n[5],a=(n[6]<<8)+n[7]),2<h.debugmode&&console.log("CMD",e,t,o,a),null!=h.recordedData&&(65e3<t?h.recordedData.push(v(2,1,h.shortToStr(27)+h.shortToStr(8)+h.intToStr(t)+h.shortToStr(e)+h.shortToStr(0)+h.shortToStr(0)+h.shortToStr(0)+String.fromCharCode.apply(null,n))):h.recordedData.push(v(2,1,String.fromCharCode.apply(null,n)))),e){case 3:h.FirstDraw&&h.onResize(),h.ProcessPictureMsg(n.slice(4),o,a);break;case 7:h.ProcessScreenMsg(o,a),h.SendKeyMsgKC(h.KeyAction.UP,16),h.SendKeyMsgKC(h.KeyAction.UP,17),h.SendKeyMsgKC(h.KeyAction.UP,18),h.SendKeyMsgKC(h.KeyAction.UP,91),h.SendKeyMsgKC(h.KeyAction.UP,92),h.SendKeyMsgKC(h.KeyAction.UP,16),h.send(String.fromCharCode(0,14,0,4));break;case 11:var r=0,i={},s=(n[4]<<8)+n[5];if(0<s){r=(n[6+2*s]<<8)+n[7+2*s];for(var c=0;c<s;c++){var u=(n[6+2*c]<<8)+n[7+2*c];i[u]=65535==u?"All Displays":"Display "+u}}h.displays=i,h.selectedDisplay=r,null!=h.onDisplayinfo&&h.onDisplayinfo(h,i,r);break;case 12:break;case 14:h.touchenabled=1,h.TouchArray={},null!=h.onTouchEnabledChanged&&h.onTouchEnabledChanged(h.touchenabled);break;case 15:h.TouchArray={};break;case 17:var l=String.fromCharCode.apply(null,data.slice(4));console.log("Got KVM Message: "+l),null!=h.onMessage&&h.onMessage(l,h);break;case 65:"."!=(l=String.fromCharCode.apply(null,data.slice(4)))[0]?(console.log(l),h.parent&&h.parent.setConsoleMessage&&h.parent.setConsoleMessage(l)):console.log("KVM: "+l.substring(1));break;case 88:if(5!=t)break;var d=n[4];S.length<d&&(d=0),p=S[d],g&&(h.CanvasId.style.cursor=p);break;default:console.log("Unknown command",e,t)}},h.MouseButton={NONE:0,LEFT:2,RIGHT:8,MIDDLE:32},h.KeyAction={NONE:0,DOWN:1,UP:2,SCROLL:3,EXUP:4,EXDOWN:5,DBLCLICK:6},h.InputType={KEY:1,MOUSE:2,CTRLALTDEL:10,TOUCH:15,KEYUNICODE:85},h.Alternate=0;var o={Pause:19,CapsLock:20,Space:32,Quote:222,Minus:189,NumpadMultiply:106,NumpadAdd:107,PrintScreen:44,Comma:188,NumpadSubtract:109,NumpadDecimal:110,Period:190,Slash:191,NumpadDivide:111,Semicolon:186,Equal:187,OSLeft:91,BracketLeft:219,OSRight:91,Backslash:220,BracketRight:221,ContextMenu:93,Backquote:192,NumLock:144,ScrollLock:145,Backspace:8,Tab:9,Enter:13,NumpadEnter:13,Escape:27,Delete:46,Home:36,PageUp:33,PageDown:34,ArrowLeft:37,ArrowUp:38,ArrowRight:39,ArrowDown:40,End:35,Insert:45,F1:112,F2:113,F3:114,F4:115,F5:116,F6:117,F7:118,F8:119,F9:120,F10:121,F11:122,F12:123,ShiftLeft:16,ShiftRight:16,ControlLeft:17,ControlRight:17,AltLeft:18,AltRight:18,MetaLeft:91,MetaRight:92,VolumeMute:181};function v(e,t,n){var o=Date.now();return"number"==typeof n?(h.recordedSize+=n,h.shortToStr(e)+h.shortToStr(t)+h.intToStr(n)+h.intToStr(o>>32)+h.intToStr(32&o)):(h.recordedSize+=n.length,h.shortToStr(e)+h.shortToStr(t)+h.intToStr(n.length)+h.intToStr(o>>32)+h.intToStr(32&o)+n)}return h.SendKeyMsg=function(e,t){var n;null!=e&&((t=t||window.event).code&&0==h.localKeyMap?null!=(n=function(e){return e.code.startsWith("Key")&&4==e.code.length?e.code.charCodeAt(3):e.code.startsWith("Digit")&&6==e.code.length?e.code.charCodeAt(5):e.code.startsWith("Numpad")&&7==e.code.length?e.code.charCodeAt(6)+48:o[e.code]}(t))&&h.SendKeyMsgKC(e,n):(59==(n=t.keyCode)?n=186:173==n?n=189:61==n&&(n=187),h.SendKeyMsgKC(e,n)))},h.SendMessage=function(e){3==h.State&&h.send(String.fromCharCode(0,17)+h.shortToStr(4+e.length)+e)},h.SendKeyMsgKC=function(e,t){if(3==h.State)if("object"==typeof e)for(var n in e)h.SendKeyMsgKC(e[n][0],e[n][1]);else{if(1==e)-1==h.pressedKeys.indexOf(t)&&h.pressedKeys.unshift(t);else if(2==e){-1!=(n=h.pressedKeys.indexOf(t))&&h.pressedKeys.splice(n,1)}h.send(String.fromCharCode(0,h.InputType.KEY,0,6,e-1,t))}},h.SendStringUnicode=function(e){if(3==h.State)for(var t=0;t<e.length;t++)h.send(String.fromCharCode(0,h.InputType.KEYUNICODE,0,7,0)+ShortToStr(e.charCodeAt(t)))},h.SendKeyUnicode=function(e,t){3==h.State&&h.send(String.fromCharCode(0,h.InputType.KEYUNICODE,0,7,e-1)+ShortToStr(t))},h.sendcad=function(){h.SendCtrlAltDelMsg()},h.SendCtrlAltDelMsg=function(){3==h.State&&h.send(String.fromCharCode(0,h.InputType.CTRLALTDEL,0,4))},h.SendEscKey=function(){3==h.State&&h.send(String.fromCharCode(0,h.InputType.KEY,0,6,0,27,0,h.InputType.KEY,0,6,1,27))},h.SendStartMsg=function(){h.SendKeyMsgKC(h.KeyAction.EXDOWN,91),h.SendKeyMsgKC(h.KeyAction.EXUP,91)},h.SendCharmsMsg=function(){h.SendKeyMsgKC(h.KeyAction.EXDOWN,91),h.SendKeyMsgKC(h.KeyAction.DOWN,67),h.SendKeyMsgKC(h.KeyAction.UP,67),h.SendKeyMsgKC(h.KeyAction.EXUP,91)},h.SendTouchMsg1=function(e,t,n,o){3==h.State&&h.send(String.fromCharCode(0,h.InputType.TOUCH)+h.shortToStr(14)+String.fromCharCode(1,e)+h.intToStr(t)+h.shortToStr(n)+h.shortToStr(o))},h.SendTouchMsg2=function(e,t){var n,o="";for(var a in h.TouchArray)a==e?n=t:1==h.TouchArray[a].f?(n=65542,h.TouchArray[a].f=3,"START"+a):2==h.TouchArray[a].f?(n=262144,"STOP"+a):n=131078,o+=String.fromCharCode(a)+h.intToStr(n)+h.shortToStr(h.TouchArray[a].x)+h.shortToStr(h.TouchArray[a].y),2==h.TouchArray[a].f&&delete h.TouchArray[a];3==h.State&&h.send(String.fromCharCode(0,h.InputType.TOUCH)+h.shortToStr(5+o.length)+String.fromCharCode(2)+o),0==Object.keys(h.TouchArray).length&&null!=h.touchtimer&&(clearInterval(h.touchtimer),h.touchtimer=null)},h.SendMouseMsg=function(e,t){if(3==h.State&&null!=e&&null!=h.Canvas){if(!t)t=window.event;var n=h.Canvas.canvas.height/h.CanvasId.clientHeight,o=h.Canvas.canvas.width/h.CanvasId.clientWidth,a=h.GetPositionOfControl(h.Canvas.canvas),r=(t.pageX-a[0])*o,i=(t.pageY-a[1])*n;if(t.addx&&(r+=t.addx),t.addy&&(i+=t.addy),0<=r&&r<=h.Canvas.canvas.width&&0<=i&&i<=h.Canvas.canvas.height){var s=0,c=0;e==h.KeyAction.UP||e==h.KeyAction.DOWN?t.which?s=1==t.which?h.MouseButton.LEFT:2==t.which?h.MouseButton.MIDDLE:h.MouseButton.RIGHT:t.button&&(s=0==t.button?h.MouseButton.LEFT:1==t.button?h.MouseButton.MIDDLE:h.MouseButton.RIGHT):e==h.KeyAction.SCROLL&&(t.detail?c=120*t.detail*-1:t.wheelDelta&&(c=3*t.wheelDelta)),!0===h.SwapMouse&&(s==h.MouseButton.LEFT?s=h.MouseButton.RIGHT:s==h.MouseButton.RIGHT&&(s=h.MouseButton.LEFT));var u="";if(e==h.KeyAction.DBLCLICK)u=String.fromCharCode(0,h.InputType.MOUSE,0,10,0,136,r/256&255,255&r,i/256&255,255&i);else if(e==h.KeyAction.SCROLL){var l=0,d=0;d=c<0?(l=255-(Math.abs(c)>>8),255-(255&Math.abs(c))):(l=c>>8,255&c),u=String.fromCharCode(0,h.InputType.MOUSE,0,12,0,0,r/256&255,255&r,i/256&255,255&i,l,d)}else u=String.fromCharCode(0,h.InputType.MOUSE,0,10,0,e==h.KeyAction.DOWN?s:2*s&255,r/256&255,255&r,i/256&255,255&i);h.Action==h.KeyAction.NONE?0==h.Alternate||h.ipad?(h.send(u),h.Alternate=1):h.Alternate=0:h.send(u)}}},h.GetDisplayNumbers=function(){h.send(String.fromCharCode(0,11,0,4))},h.SetDisplay=function(e){h.send(String.fromCharCode(0,12,0,6,e>>8,255&e))},h.intToStr=function(e){return String.fromCharCode(e>>24&255,e>>16&255,e>>8&255,255&e)},h.shortToStr=function(e){return String.fromCharCode(e>>8&255,255&e)},h.onResize=function(){0!=h.ScreenWidth&&0!=h.ScreenHeight&&(h.Canvas.canvas.width==h.ScreenWidth&&h.Canvas.canvas.height==h.ScreenHeight||(h.FirstDraw&&(h.Canvas.canvas.width=h.ScreenWidth,h.Canvas.canvas.height=h.ScreenHeight,h.Canvas.fillRect(0,0,h.ScreenWidth,h.ScreenHeight),null!=h.onScreenSizeChange&&h.onScreenSizeChange(h,h.ScreenWidth,h.ScreenHeight,h.CanvasId)),h.FirstDraw=!1,1<h.debugmode&&console.log("onResize: "+h.ScreenWidth+" x "+h.ScreenHeight)))},h.xxMouseInputGrab=!1,h.xxKeyInputGrab=!1,h.xxMouseMove=function(e){return 3==h.State&&h.SendMouseMsg(h.KeyAction.NONE,e),e.preventDefault&&e.preventDefault(),e.stopPropagation&&e.stopPropagation(),!1},h.xxMouseUp=function(e){return 3==h.State&&h.SendMouseMsg(h.KeyAction.UP,e),e.preventDefault&&e.preventDefault(),e.stopPropagation&&e.stopPropagation(),!1},h.xxMouseDown=function(e){return 3==h.State&&h.SendMouseMsg(h.KeyAction.DOWN,e),e.preventDefault&&e.preventDefault(),e.stopPropagation&&e.stopPropagation(),!1},h.xxMouseDblClick=function(e){return 3==h.State&&h.SendMouseMsg(h.KeyAction.DBLCLICK,e),e.preventDefault&&e.preventDefault(),e.stopPropagation&&e.stopPropagation(),!1},h.xxDOMMouseScroll=function(e){return 3!=h.State||(h.SendMouseMsg(h.KeyAction.SCROLL,e),!1)},h.xxMouseWheel=function(e){return 3!=h.State||(h.SendMouseMsg(h.KeyAction.SCROLL,e),!1)},h.xxKeyUp=function(e){return"Dead"!=e.key&&3==h.State&&(1==e.key.length&&1!=e.ctrlKey&&1!=e.altKey&&(0==h.remoteKeyMap||0<h.debugmode)?h.SendKeyUnicode(h.KeyAction.UP,e.key.charCodeAt(0)):h.SendKeyMsg(h.KeyAction.UP,e)),e.preventDefault&&e.preventDefault(),e.stopPropagation&&e.stopPropagation(),!1},h.xxKeyDown=function(e){return"Dead"!=e.key&&3==h.State&&(1==e.key.length&&1!=e.ctrlKey&&1!=e.altKey&&(0==h.remoteKeyMap||0<h.debugmode)?h.SendKeyUnicode(h.KeyAction.DOWN,e.key.charCodeAt(0)):h.SendKeyMsg(h.KeyAction.DOWN,e)),e.preventDefault&&e.preventDefault(),e.stopPropagation&&e.stopPropagation(),!1},h.xxKeyPress=function(e){return e.preventDefault&&e.preventDefault(),e.stopPropagation&&e.stopPropagation(),!1},h.handleKeys=function(e){return 1!=h.stopInput&&3==desktop.State&&h.xxKeyPress(e)},h.handleKeyUp=function(e){if(1==h.stopInput||3!=desktop.State)return!1;if(h.firstUpKeys.length<5&&(h.firstUpKeys.push(e.keyCode),5==h.firstUpKeys.length)){var t=h.firstUpKeys.join(",");"16,17,91,91,16"!=t&&"16,17,18,91,92"!=t||(h.stopInput=!0)}return h.xxKeyUp(e)},h.handleKeyDown=function(e){return 1!=h.stopInput&&3==desktop.State&&h.xxKeyDown(e)},h.handleReleaseKeys=function(){var e=JSON.parse(JSON.stringify(h.pressedKeys));for(var t in e)h.SendKeyMsgKC(h.KeyAction.UP,e[t])},h.mousedblclick=function(e){return 1!=h.stopInput&&h.xxMouseDblClick(e)},h.mousedown=function(e){return 1!=h.stopInput&&h.xxMouseDown(e)},h.mouseup=function(e){return 1!=h.stopInput&&h.xxMouseUp(e)},h.mousemove=function(e){return 1!=h.stopInput&&h.xxMouseMove(e)},h.mousewheel=function(e){return 1!=h.stopInput&&h.xxMouseWheel(e)},h.xxMsTouchEvent=function(e){if(4!=e.originalEvent.pointerType){if(e.preventDefault&&e.preventDefault(),e.stopPropagation&&e.stopPropagation(),"MSPointerDown"==e.type||"MSPointerMove"==e.type||"MSPointerUp"==e.type){var t=0,n=e.originalEvent.pointerId%256,o=e.offsetX*(Canvas.canvas.width/h.CanvasId.clientWidth),a=e.offsetY*(Canvas.canvas.height/h.CanvasId.clientHeight);"MSPointerDown"==e.type?t=65542:"MSPointerMove"==e.type?t=131078:"MSPointerUp"==e.type&&(t=262144),h.TouchArray[n]||(h.TouchArray[n]={x:o,y:a}),h.SendTouchMsg2(n,t),"MSPointerUp"==e.type&&delete h.TouchArray[n]}else alert(e.type);return!0}},h.xxTouchStart=function(e){if(3==h.State)if(e.preventDefault&&e.preventDefault(),0==h.touchenabled||1==h.touchenabled){if(1<e.originalEvent.touches.length)return;var t=e.originalEvent.touches[0];e.which=1,h.LastX=e.pageX=t.pageX,h.LastY=e.pageY=t.pageY,h.SendMouseMsg(KeyAction.DOWN,e)}else{var n=h.GetPositionOfControl(Canvas.canvas);for(var o in e.originalEvent.changedTouches)if(e.originalEvent.changedTouches[o].identifier){var a=e.originalEvent.changedTouches[o].identifier%256;h.TouchArray[a]||(h.TouchArray[a]={x:(e.originalEvent.touches[o].pageX-n[0])*(Canvas.canvas.width/h.CanvasId.clientWidth),y:(e.originalEvent.touches[o].pageY-n[1])*(Canvas.canvas.height/h.CanvasId.clientHeight),f:1})}0<Object.keys(h.TouchArray).length&&null==touchtimer&&(h.touchtimer=setInterval(function(){h.SendTouchMsg2(256,0)},50))}},h.xxTouchMove=function(e){if(3==h.State)if(e.preventDefault&&e.preventDefault(),0==h.touchenabled||1==h.touchenabled){if(1<e.originalEvent.touches.length)return;var t=e.originalEvent.touches[0];e.which=1,h.LastX=e.pageX=t.pageX,h.LastY=e.pageY=t.pageY,h.SendMouseMsg(h.KeyAction.NONE,e)}else{var n=h.GetPositionOfControl(Canvas.canvas);for(var o in e.originalEvent.changedTouches)if(e.originalEvent.changedTouches[o].identifier){var a=e.originalEvent.changedTouches[o].identifier%256;h.TouchArray[a]&&(h.TouchArray[a].x=(e.originalEvent.touches[o].pageX-n[0])*(h.Canvas.canvas.width/h.CanvasId.clientWidth),h.TouchArray[a].y=(e.originalEvent.touches[o].pageY-n[1])*(h.Canvas.canvas.height/h.CanvasId.clientHeight))}}},h.xxTouchEnd=function(e){if(3==h.State)if(e.preventDefault&&e.preventDefault(),0==h.touchenabled||1==h.touchenabled){if(1<e.originalEvent.touches.length)return;e.which=1,e.pageX=LastX,e.pageY=LastY,h.SendMouseMsg(KeyAction.UP,e)}else for(var t in e.originalEvent.changedTouches)if(e.originalEvent.changedTouches[t].identifier){var n=e.originalEvent.changedTouches[t].identifier%256;h.TouchArray[n]&&(h.TouchArray[n].f=2)}},h.GrabMouseInput=function(){if(1!=h.xxMouseInputGrab){var e=h.CanvasId;e.onmousemove=h.xxMouseMove,e.onmouseup=h.xxMouseUp,e.onmousedown=h.xxMouseDown,e.touchstart=h.xxTouchStart,e.touchmove=h.xxTouchMove,e.touchend=h.xxTouchEnd,e.MSPointerDown=h.xxMsTouchEvent,e.MSPointerMove=h.xxMsTouchEvent,e.MSPointerUp=h.xxMsTouchEvent,navigator.userAgent.match(/mozilla/i)?e.DOMMouseScroll=h.xxDOMMouseScroll:e.onmousewheel=h.xxMouseWheel,h.xxMouseInputGrab=!0}},h.UnGrabMouseInput=function(){if(0!=h.xxMouseInputGrab){var e=h.CanvasId;e.onmousemove=null,e.onmouseup=null,e.onmousedown=null,e.touchstart=null,e.touchmove=null,e.touchend=null,e.MSPointerDown=null,e.MSPointerMove=null,e.MSPointerUp=null,navigator.userAgent.match(/mozilla/i)?e.DOMMouseScroll=null:e.onmousewheel=null,h.xxMouseInputGrab=!1}},h.GrabKeyInput=function(){1!=h.xxKeyInputGrab&&(document.onkeyup=h.xxKeyUp,document.onkeydown=h.xxKeyDown,document.onkeypress=h.xxKeyPress,h.xxKeyInputGrab=!0)},h.UnGrabKeyInput=function(){0!=h.xxKeyInputGrab&&(document.onkeyup=null,document.onkeydown=null,document.onkeypress=null,h.xxKeyInputGrab=!1)},h.GetPositionOfControl=function(e){var t=Array(2);for(t[0]=t[1]=0;e;)t[0]+=e.offsetLeft,t[1]+=e.offsetTop,e=e.offsetParent;return t},h.crotX=function(e,t){return 0==h.rotation?e:1==h.rotation?t:2==h.rotation?h.Canvas.canvas.width-e:3==h.rotation?h.Canvas.canvas.height-t:void 0},h.crotY=function(e,t){return 0==h.rotation?t:1==h.rotation?h.Canvas.canvas.width-e:2==h.rotation?h.Canvas.canvas.height-t:3==h.rotation?e:void 0},h.rotX=function(e,t){return 0==h.rotation||1==h.rotation?e:2==h.rotation?e-h.Canvas.canvas.width:3==h.rotation?e-h.Canvas.canvas.height:void 0},h.rotY=function(e,t){return 0==h.rotation||3==h.rotation?t:1==h.rotation?t-h.Canvas.canvas.width:2==h.rotation?t-h.Canvas.canvas.height:void 0},h.tcanvas=null,h.setRotation=function(e){for(;e<0;)e+=4;var t=e%4;if(t==h.rotation)return!0;var n=h.Canvas.canvas.width,o=h.Canvas.canvas.height;1!=h.rotation&&3!=h.rotation||(n=h.Canvas.canvas.height,o=h.Canvas.canvas.width),null==h.tcanvas&&(h.tcanvas=document.createElement("canvas"));var a=h.tcanvas.getContext("2d");return a.setTransform(1,0,0,1,0,0),a.canvas.width=n,a.canvas.height=o,a.rotate(-90*h.rotation*Math.PI/180),0==h.rotation&&a.drawImage(h.Canvas.canvas,0,0),1==h.rotation&&a.drawImage(h.Canvas.canvas,-h.Canvas.canvas.width,0),2==h.rotation&&a.drawImage(h.Canvas.canvas,-h.Canvas.canvas.width,-h.Canvas.canvas.height),3==h.rotation&&a.drawImage(h.Canvas.canvas,0,-h.Canvas.canvas.height),0!=h.rotation&&2!=h.rotation||(h.Canvas.canvas.height=n,h.Canvas.canvas.width=o),1!=h.rotation&&3!=h.rotation||(h.Canvas.canvas.height=o,h.Canvas.canvas.width=n),h.Canvas.setTransform(1,0,0,1,0,0),h.Canvas.rotate(90*t*Math.PI/180),h.rotation=t,h.Canvas.drawImage(h.tcanvas,h.rotX(0,0),h.rotY(0,0)),h.ScreenWidth=h.Canvas.canvas.width,h.ScreenHeight=h.Canvas.canvas.height,null!=h.onScreenSizeChange&&h.onScreenSizeChange(h,h.ScreenWidth,h.ScreenHeight,h.CanvasId),!0},h.StartRecording=function(){null==h.recordedData&&h.CanvasId.toBlob(function(e){var i=new FileReader;i.readAsArrayBuffer(e),i.onload=function(e){for(var t="",n=new Uint8Array(i.result),o=n.byteLength,a=0;a<o;a++)t+=String.fromCharCode(n[a]);h.recordedData=[],h.recordedStart=Date.now(),h.recordedSize=0,h.recordedData.push(v(1,0,JSON.stringify({magic:"MeshCentralRelaySession",ver:1,time:(new Date).toLocaleString(),protocol:2}))),h.recordedData.push(v(2,1,h.shortToStr(7)+h.shortToStr(8)+h.shortToStr(h.ScreenWidth)+h.shortToStr(h.ScreenHeight)));var r=8+t.length;65e3<r?h.recordedData.push(v(2,1,h.shortToStr(27)+h.shortToStr(8)+h.intToStr(r)+h.shortToStr(3)+h.shortToStr(0)+h.shortToStr(0)+h.shortToStr(0)+t)):h.recordedData.push(v(2,1,h.shortToStr(3)+h.shortToStr(r)+h.shortToStr(0)+h.shortToStr(0)+t))}})},h.StopRecording=function(){if(null!=h.recordedData){var e=h.recordedData;return e.push(v(3,0,"MeshCentralMCREC")),delete h.recordedData,delete h.recordedStart,delete h.recordedSize,e}},h.MuchTheSame=function(e,t){return Math.abs(e-t)<4},h.Debug=function(e){console.log(e)},h.getIEVersion=function(){var e=-1;if("Microsoft Internet Explorer"==navigator.appName){var t=navigator.userAgent;null!=new RegExp("MSIE ([0-9]{1,}[.0-9]{0,})").exec(t)&&(e=parseFloat(RegExp.$1))}return e},h.haltEvent=function(e){return e.preventDefault&&e.preventDefault(),e.stopPropagation&&e.stopPropagation(),!1},h}
\ No newline at end of file
1 +Uint8Array.prototype.slice||Object.defineProperty(Uint8Array.prototype,"slice",{value:function(e,t){return new Uint8Array(Array.prototype.slice.call(this,e,t))}});var CreateAgentRemoteDesktop=function(e,t){var h={};"string"==typeof(h.CanvasId=e)&&(h.CanvasId=Q(e)),h.Canvas=h.CanvasId.getContext("2d"),h.scrolldiv=t,h.State=0,h.PendingOperations=[],h.tilesReceived=0,h.TilesDrawn=0,h.KillDraw=0,h.ipad=!1,h.tabletKeyboardVisible=!1,h.LastX=0,h.LastY=0,h.touchenabled=0,h.submenuoffset=0,h.touchtimer=null,h.TouchArray={},h.connectmode=0,h.connectioncount=0,h.rotation=0,h.protocol=2,h.debugmode=0,h.firstUpKeys=[],h.stopInput=!1,h.localKeyMap=!0,h.remoteKeyMap=!1,h.pressedKeys=[],h.sessionid=0,h.username,h.oldie=!1,h.CompressionLevel=50,h.ScalingLevel=1024,h.FrameRateTimer=100,h.SwapMouse=!1,h.FirstDraw=!1,h.ScreenWidth=960,h.ScreenHeight=701,h.width=960,h.height=960,h.displays=null,h.selectedDisplay=null,h.onScreenSizeChange=null,h.onMessage=null,h.onConnectCountChanged=null,h.onDebugMessage=null,h.onTouchEnabledChanged=null,h.onDisplayinfo=null;var g=!(h.accumulator=null),p="default";h.mouseCursorActive=function(e){g!=e&&(g=e,h.CanvasId.style.cursor=1==e?p:"default")};var S=["default","progress","crosshair","pointer","help","text","no-drop","move","nesw-resize","ns-resize","nwse-resize","w-resize","alias","wait","none","not-allowed","col-resize","row-resize","copy","zoom-in","zoom-out"];h.Start=function(){h.State=0,h.accumulator=null},h.Stop=function(){h.setRotation(0),h.UnGrabKeyInput(),h.UnGrabMouseInput(),h.touchenabled=0,null!=h.onScreenSizeChange&&h.onScreenSizeChange(h,h.ScreenWidth,h.ScreenHeight,h.CanvasId),h.Canvas.clearRect(0,0,h.CanvasId.width,h.CanvasId.height)},h.xxStateChange=function(e){if(h.State!=e)switch(h.State=e,h.CanvasId.style.cursor="default",e){case 0:h.Stop()}},h.send=function(e){2<h.debugmode&&console.log("KSend("+e.length+"): "+rstr2hex(e)),null!=h.parent&&h.parent.send(e)},h.ProcessPictureMsg=function(e,t,n){var o=new Image;o.xcount=h.tilesReceived++;for(var a=h.tilesReceived,r=e.slice(4),i=0,s=[];5e4<r.byteLength-i;)s.push(String.fromCharCode.apply(null,r.slice(i,i+5e4))),i+=5e4;0<i?s.push(String.fromCharCode.apply(null,r.slice(i))):s.push(String.fromCharCode.apply(null,r)),o.src="data:image/jpeg;base64,"+btoa(s.join("")),o.onload=function(){if(null!=h.Canvas&&h.KillDraw<a&&0!=h.State)for(h.PendingOperations.push([a,2,o,t,n]);h.DoPendingOperations(););else h.PendingOperations.push([a,0])},o.error=function(){console.log("DecodeTileError")}},h.DoPendingOperations=function(){if(0==h.PendingOperations.length)return!1;for(var e=0;e<h.PendingOperations.length;e++){var t=h.PendingOperations[e];if(t[0]==h.TilesDrawn+1)return 1==t[1]?h.ProcessCopyRectMsg(t[2]):2==t[1]&&(h.Canvas.drawImage(t[2],h.rotX(t[3],t[4]),h.rotY(t[3],t[4])),delete t[2]),h.PendingOperations.splice(e,1),delete t,h.TilesDrawn++,h.TilesDrawn==h.tilesReceived&&h.KillDraw<h.TilesDrawn&&(h.KillDraw=h.TilesDrawn=h.tilesReceived=0),!0}return h.oldie&&0<h.PendingOperations.length&&h.TilesDrawn++,!1},h.ProcessCopyRectMsg=function(e){var t=((255&e.charCodeAt(0))<<8)+(255&e.charCodeAt(1)),n=((255&e.charCodeAt(2))<<8)+(255&e.charCodeAt(3)),o=((255&e.charCodeAt(4))<<8)+(255&e.charCodeAt(5)),a=((255&e.charCodeAt(6))<<8)+(255&e.charCodeAt(7)),r=((255&e.charCodeAt(8))<<8)+(255&e.charCodeAt(9)),i=((255&e.charCodeAt(10))<<8)+(255&e.charCodeAt(11));h.Canvas.drawImage(Canvas.canvas,t,n,r,i,o,a,r,i)},h.SendUnPause=function(){1<h.debugmode&&console.log("SendUnPause"),h.send(String.fromCharCode(0,8,0,5,0))},h.SendPause=function(){1<h.debugmode&&console.log("SendPause"),h.send(String.fromCharCode(0,8,0,5,1))},h.SendCompressionLevel=function(e,t,n,o){t&&(h.CompressionLevel=t),n&&(h.ScalingLevel=n),o&&(h.FrameRateTimer=o),h.send(String.fromCharCode(0,5,0,10,e,h.CompressionLevel)+h.shortToStr(h.ScalingLevel)+h.shortToStr(h.FrameRateTimer))},h.SendRefresh=function(){h.send(String.fromCharCode(0,6,0,4))},h.ProcessScreenMsg=function(e,t){if(0<h.debugmode&&console.log("ScreenSize: "+e+" x "+t),h.ScreenWidth!=e||h.ScreenHeight!=t){for(h.Canvas.setTransform(1,0,0,1,0,0),h.rotation=0,h.FirstDraw=!0,h.ScreenWidth=h.width=e,h.ScreenHeight=h.height=t,h.KillDraw=h.tilesReceived;0<h.PendingOperations.length;)h.PendingOperations.shift();h.SendCompressionLevel(1),h.SendUnPause(),null!=h.onScreenSizeChange&&h.onScreenSizeChange(h,h.ScreenWidth,h.ScreenHeight,h.CanvasId)}},h.ProcessBinaryCommand=function(e,t,n){var o,a;switch(3!=e&&4!=e&&7!=e||(o=(n[4]<<8)+n[5],a=(n[6]<<8)+n[7]),2<h.debugmode&&console.log("CMD",e,t,o,a),null!=h.recordedData&&(65e3<t?h.recordedData.push(v(2,1,h.shortToStr(27)+h.shortToStr(8)+h.intToStr(t)+h.shortToStr(e)+h.shortToStr(0)+h.shortToStr(0)+h.shortToStr(0)+String.fromCharCode.apply(null,n))):h.recordedData.push(v(2,1,String.fromCharCode.apply(null,n)))),e){case 3:h.FirstDraw&&h.onResize(),h.ProcessPictureMsg(n.slice(4),o,a);break;case 7:h.ProcessScreenMsg(o,a),h.SendKeyMsgKC(h.KeyAction.UP,16),h.SendKeyMsgKC(h.KeyAction.UP,17),h.SendKeyMsgKC(h.KeyAction.UP,18),h.SendKeyMsgKC(h.KeyAction.UP,91),h.SendKeyMsgKC(h.KeyAction.UP,92),h.SendKeyMsgKC(h.KeyAction.UP,16),h.send(String.fromCharCode(0,14,0,4));break;case 11:var r=0,i={},s=(n[4]<<8)+n[5];if(0<s){r=(n[6+2*s]<<8)+n[7+2*s];for(var c=0;c<s;c++){var u=(n[6+2*c]<<8)+n[7+2*c];i[u]=65535==u?"All Displays":"Display "+u}}h.displays=i,h.selectedDisplay=r,null!=h.onDisplayinfo&&h.onDisplayinfo(h,i,r);break;case 12:break;case 14:h.touchenabled=1,h.TouchArray={},null!=h.onTouchEnabledChanged&&h.onTouchEnabledChanged(h.touchenabled);break;case 15:h.TouchArray={};break;case 17:var l=String.fromCharCode.apply(null,data.slice(4));console.log("Got KVM Message: "+l),null!=h.onMessage&&h.onMessage(l,h);break;case 65:"."!=(l=String.fromCharCode.apply(null,data.slice(4)))[0]?(console.log(l),h.parent&&h.parent.setConsoleMessage&&h.parent.setConsoleMessage(l)):console.log("KVM: "+l.substring(1));break;case 88:if(5!=t)break;var d=n[4];S.length<d&&(d=0),p=S[d],g&&(h.CanvasId.style.cursor=p);break;default:console.log("Unknown command",e,t)}},h.MouseButton={NONE:0,LEFT:2,RIGHT:8,MIDDLE:32},h.KeyAction={NONE:0,DOWN:1,UP:2,SCROLL:3,EXUP:4,EXDOWN:5,DBLCLICK:6},h.InputType={KEY:1,MOUSE:2,CTRLALTDEL:10,TOUCH:15,KEYUNICODE:85},h.Alternate=0;var o={Pause:19,CapsLock:20,Space:32,Quote:222,Minus:189,NumpadMultiply:106,NumpadAdd:107,PrintScreen:44,Comma:188,NumpadSubtract:109,NumpadDecimal:110,Period:190,Slash:191,NumpadDivide:111,Semicolon:186,Equal:187,OSLeft:91,BracketLeft:219,OSRight:91,Backslash:220,BracketRight:221,ContextMenu:93,Backquote:192,NumLock:144,ScrollLock:145,Backspace:8,Tab:9,Enter:13,NumpadEnter:13,Escape:27,Delete:46,Home:36,PageUp:33,PageDown:34,ArrowLeft:37,ArrowUp:38,ArrowRight:39,ArrowDown:40,End:35,Insert:45,F1:112,F2:113,F3:114,F4:115,F5:116,F6:117,F7:118,F8:119,F9:120,F10:121,F11:122,F12:123,ShiftLeft:16,ShiftRight:16,ControlLeft:17,ControlRight:17,AltLeft:18,AltRight:18,MetaLeft:91,MetaRight:92,VolumeMute:181};function v(e,t,n){var o=Date.now();return"number"==typeof n?(h.recordedSize+=n,h.shortToStr(e)+h.shortToStr(t)+h.intToStr(n)+h.intToStr(o>>32)+h.intToStr(32&o)):(h.recordedSize+=n.length,h.shortToStr(e)+h.shortToStr(t)+h.intToStr(n.length)+h.intToStr(o>>32)+h.intToStr(32&o)+n)}return h.SendKeyMsg=function(e,t){var n;null!=e&&((t=t||window.event).code&&0==h.localKeyMap?null!=(n=function(e){return e.code.startsWith("Key")&&4==e.code.length?e.code.charCodeAt(3):e.code.startsWith("Digit")&&6==e.code.length?e.code.charCodeAt(5):e.code.startsWith("Numpad")&&7==e.code.length?e.code.charCodeAt(6)+48:o[e.code]}(t))&&h.SendKeyMsgKC(e,n):(59==(n=t.keyCode)?n=186:173==n?n=189:61==n&&(n=187),h.SendKeyMsgKC(e,n)))},h.SendMessage=function(e){3==h.State&&h.send(String.fromCharCode(0,17)+h.shortToStr(4+e.length)+e)},h.SendKeyMsgKC=function(e,t){if(3==h.State)if("object"==typeof e)for(var n in e)h.SendKeyMsgKC(e[n][0],e[n][1]);else{if(1==e)-1==h.pressedKeys.indexOf(t)&&h.pressedKeys.unshift(t);else if(2==e){-1!=(n=h.pressedKeys.indexOf(t))&&h.pressedKeys.splice(n,1)}h.send(String.fromCharCode(0,h.InputType.KEY,0,6,e-1,t))}},h.SendStringUnicode=function(e){if(3==h.State)for(var t=0;t<e.length;t++)h.send(String.fromCharCode(0,h.InputType.KEYUNICODE,0,7,0)+ShortToStr(e.charCodeAt(t)))},h.SendKeyUnicode=function(e,t){3==h.State&&(0<h.debugmode&&console.log("Sending UnicodeKey "+t),h.send(String.fromCharCode(0,h.InputType.KEYUNICODE,0,7,e-1)+ShortToStr(t)))},h.sendcad=function(){h.SendCtrlAltDelMsg()},h.SendCtrlAltDelMsg=function(){3==h.State&&h.send(String.fromCharCode(0,h.InputType.CTRLALTDEL,0,4))},h.SendEscKey=function(){3==h.State&&h.send(String.fromCharCode(0,h.InputType.KEY,0,6,0,27,0,h.InputType.KEY,0,6,1,27))},h.SendStartMsg=function(){h.SendKeyMsgKC(h.KeyAction.EXDOWN,91),h.SendKeyMsgKC(h.KeyAction.EXUP,91)},h.SendCharmsMsg=function(){h.SendKeyMsgKC(h.KeyAction.EXDOWN,91),h.SendKeyMsgKC(h.KeyAction.DOWN,67),h.SendKeyMsgKC(h.KeyAction.UP,67),h.SendKeyMsgKC(h.KeyAction.EXUP,91)},h.SendTouchMsg1=function(e,t,n,o){3==h.State&&h.send(String.fromCharCode(0,h.InputType.TOUCH)+h.shortToStr(14)+String.fromCharCode(1,e)+h.intToStr(t)+h.shortToStr(n)+h.shortToStr(o))},h.SendTouchMsg2=function(e,t){var n,o="";for(var a in h.TouchArray)a==e?n=t:1==h.TouchArray[a].f?(n=65542,h.TouchArray[a].f=3,"START"+a):2==h.TouchArray[a].f?(n=262144,"STOP"+a):n=131078,o+=String.fromCharCode(a)+h.intToStr(n)+h.shortToStr(h.TouchArray[a].x)+h.shortToStr(h.TouchArray[a].y),2==h.TouchArray[a].f&&delete h.TouchArray[a];3==h.State&&h.send(String.fromCharCode(0,h.InputType.TOUCH)+h.shortToStr(5+o.length)+String.fromCharCode(2)+o),0==Object.keys(h.TouchArray).length&&null!=h.touchtimer&&(clearInterval(h.touchtimer),h.touchtimer=null)},h.SendMouseMsg=function(e,t){if(3==h.State&&null!=e&&null!=h.Canvas){if(!t)t=window.event;var n=h.Canvas.canvas.height/h.CanvasId.clientHeight,o=h.Canvas.canvas.width/h.CanvasId.clientWidth,a=h.GetPositionOfControl(h.Canvas.canvas),r=(t.pageX-a[0])*o,i=(t.pageY-a[1])*n;if(t.addx&&(r+=t.addx),t.addy&&(i+=t.addy),0<=r&&r<=h.Canvas.canvas.width&&0<=i&&i<=h.Canvas.canvas.height){var s=0,c=0;e==h.KeyAction.UP||e==h.KeyAction.DOWN?t.which?s=1==t.which?h.MouseButton.LEFT:2==t.which?h.MouseButton.MIDDLE:h.MouseButton.RIGHT:t.button&&(s=0==t.button?h.MouseButton.LEFT:1==t.button?h.MouseButton.MIDDLE:h.MouseButton.RIGHT):e==h.KeyAction.SCROLL&&(t.detail?c=120*t.detail*-1:t.wheelDelta&&(c=3*t.wheelDelta)),!0===h.SwapMouse&&(s==h.MouseButton.LEFT?s=h.MouseButton.RIGHT:s==h.MouseButton.RIGHT&&(s=h.MouseButton.LEFT));var u="";if(e==h.KeyAction.DBLCLICK)u=String.fromCharCode(0,h.InputType.MOUSE,0,10,0,136,r/256&255,255&r,i/256&255,255&i);else if(e==h.KeyAction.SCROLL){var l=0,d=0;d=c<0?(l=255-(Math.abs(c)>>8),255-(255&Math.abs(c))):(l=c>>8,255&c),u=String.fromCharCode(0,h.InputType.MOUSE,0,12,0,0,r/256&255,255&r,i/256&255,255&i,l,d)}else u=String.fromCharCode(0,h.InputType.MOUSE,0,10,0,e==h.KeyAction.DOWN?s:2*s&255,r/256&255,255&r,i/256&255,255&i);h.Action==h.KeyAction.NONE?0==h.Alternate||h.ipad?(h.send(u),h.Alternate=1):h.Alternate=0:h.send(u)}}},h.GetDisplayNumbers=function(){h.send(String.fromCharCode(0,11,0,4))},h.SetDisplay=function(e){h.send(String.fromCharCode(0,12,0,6,e>>8,255&e))},h.intToStr=function(e){return String.fromCharCode(e>>24&255,e>>16&255,e>>8&255,255&e)},h.shortToStr=function(e){return String.fromCharCode(e>>8&255,255&e)},h.onResize=function(){0!=h.ScreenWidth&&0!=h.ScreenHeight&&(h.Canvas.canvas.width==h.ScreenWidth&&h.Canvas.canvas.height==h.ScreenHeight||(h.FirstDraw&&(h.Canvas.canvas.width=h.ScreenWidth,h.Canvas.canvas.height=h.ScreenHeight,h.Canvas.fillRect(0,0,h.ScreenWidth,h.ScreenHeight),null!=h.onScreenSizeChange&&h.onScreenSizeChange(h,h.ScreenWidth,h.ScreenHeight,h.CanvasId)),h.FirstDraw=!1,1<h.debugmode&&console.log("onResize: "+h.ScreenWidth+" x "+h.ScreenHeight)))},h.xxMouseInputGrab=!1,h.xxKeyInputGrab=!1,h.xxMouseMove=function(e){return 3==h.State&&h.SendMouseMsg(h.KeyAction.NONE,e),e.preventDefault&&e.preventDefault(),e.stopPropagation&&e.stopPropagation(),!1},h.xxMouseUp=function(e){return 3==h.State&&h.SendMouseMsg(h.KeyAction.UP,e),e.preventDefault&&e.preventDefault(),e.stopPropagation&&e.stopPropagation(),!1},h.xxMouseDown=function(e){return 3==h.State&&h.SendMouseMsg(h.KeyAction.DOWN,e),e.preventDefault&&e.preventDefault(),e.stopPropagation&&e.stopPropagation(),!1},h.xxMouseDblClick=function(e){return 3==h.State&&h.SendMouseMsg(h.KeyAction.DBLCLICK,e),e.preventDefault&&e.preventDefault(),e.stopPropagation&&e.stopPropagation(),!1},h.xxDOMMouseScroll=function(e){return 3!=h.State||(h.SendMouseMsg(h.KeyAction.SCROLL,e),!1)},h.xxMouseWheel=function(e){return 3!=h.State||(h.SendMouseMsg(h.KeyAction.SCROLL,e),!1)},h.xxKeyUp=function(e){return"Dead"!=e.key&&3==h.State&&(1==e.key.length&&1!=e.ctrlKey&&1!=e.altKey&&(0==h.remoteKeyMap||0<h.debugmode)?h.SendKeyUnicode(h.KeyAction.UP,e.key.charCodeAt(0)):h.SendKeyMsg(h.KeyAction.UP,e)),e.preventDefault&&e.preventDefault(),e.stopPropagation&&e.stopPropagation(),!1},h.xxKeyDown=function(e){if("Dead"!=e.key&&3==h.State&&(1!=e.key.length||1==e.ctrlKey||1==e.altKey||!(0==h.remoteKeyMap||0<h.debugmode)))return h.SendKeyMsg(h.KeyAction.DOWN,e),e.preventDefault&&e.preventDefault(),e.stopPropagation&&e.stopPropagation(),!1},h.xxKeyPress=function(e){return"Dead"!=e.key&&3==h.State&&1==e.key.length&&1!=e.ctrlKey&&1!=e.altKey&&(0==h.remoteKeyMap||0<h.debugmode)&&h.SendKeyUnicode(h.KeyAction.DOWN,e.key.charCodeAt(0)),e.preventDefault&&e.preventDefault(),e.stopPropagation&&e.stopPropagation(),!1},h.handleKeys=function(e){return 1!=h.stopInput&&3==desktop.State&&h.xxKeyPress(e)},h.handleKeyUp=function(e){if(1==h.stopInput||3!=desktop.State)return!1;if(h.firstUpKeys.length<5&&(h.firstUpKeys.push(e.keyCode),5==h.firstUpKeys.length)){var t=h.firstUpKeys.join(",");"16,17,91,91,16"!=t&&"16,17,18,91,92"!=t||(h.stopInput=!0)}return h.xxKeyUp(e)},h.handleKeyDown=function(e){return 1!=h.stopInput&&3==desktop.State&&h.xxKeyDown(e)},h.handleReleaseKeys=function(){var e=JSON.parse(JSON.stringify(h.pressedKeys));for(var t in e)h.SendKeyMsgKC(h.KeyAction.UP,e[t])},h.mousedblclick=function(e){return 1!=h.stopInput&&h.xxMouseDblClick(e)},h.mousedown=function(e){return 1!=h.stopInput&&h.xxMouseDown(e)},h.mouseup=function(e){return 1!=h.stopInput&&h.xxMouseUp(e)},h.mousemove=function(e){return 1!=h.stopInput&&h.xxMouseMove(e)},h.mousewheel=function(e){return 1!=h.stopInput&&h.xxMouseWheel(e)},h.xxMsTouchEvent=function(e){if(4!=e.originalEvent.pointerType){if(e.preventDefault&&e.preventDefault(),e.stopPropagation&&e.stopPropagation(),"MSPointerDown"==e.type||"MSPointerMove"==e.type||"MSPointerUp"==e.type){var t=0,n=e.originalEvent.pointerId%256,o=e.offsetX*(Canvas.canvas.width/h.CanvasId.clientWidth),a=e.offsetY*(Canvas.canvas.height/h.CanvasId.clientHeight);"MSPointerDown"==e.type?t=65542:"MSPointerMove"==e.type?t=131078:"MSPointerUp"==e.type&&(t=262144),h.TouchArray[n]||(h.TouchArray[n]={x:o,y:a}),h.SendTouchMsg2(n,t),"MSPointerUp"==e.type&&delete h.TouchArray[n]}else alert(e.type);return!0}},h.xxTouchStart=function(e){if(3==h.State)if(e.preventDefault&&e.preventDefault(),0==h.touchenabled||1==h.touchenabled){if(1<e.originalEvent.touches.length)return;var t=e.originalEvent.touches[0];e.which=1,h.LastX=e.pageX=t.pageX,h.LastY=e.pageY=t.pageY,h.SendMouseMsg(KeyAction.DOWN,e)}else{var n=h.GetPositionOfControl(Canvas.canvas);for(var o in e.originalEvent.changedTouches)if(e.originalEvent.changedTouches[o].identifier){var a=e.originalEvent.changedTouches[o].identifier%256;h.TouchArray[a]||(h.TouchArray[a]={x:(e.originalEvent.touches[o].pageX-n[0])*(Canvas.canvas.width/h.CanvasId.clientWidth),y:(e.originalEvent.touches[o].pageY-n[1])*(Canvas.canvas.height/h.CanvasId.clientHeight),f:1})}0<Object.keys(h.TouchArray).length&&null==touchtimer&&(h.touchtimer=setInterval(function(){h.SendTouchMsg2(256,0)},50))}},h.xxTouchMove=function(e){if(3==h.State)if(e.preventDefault&&e.preventDefault(),0==h.touchenabled||1==h.touchenabled){if(1<e.originalEvent.touches.length)return;var t=e.originalEvent.touches[0];e.which=1,h.LastX=e.pageX=t.pageX,h.LastY=e.pageY=t.pageY,h.SendMouseMsg(h.KeyAction.NONE,e)}else{var n=h.GetPositionOfControl(Canvas.canvas);for(var o in e.originalEvent.changedTouches)if(e.originalEvent.changedTouches[o].identifier){var a=e.originalEvent.changedTouches[o].identifier%256;h.TouchArray[a]&&(h.TouchArray[a].x=(e.originalEvent.touches[o].pageX-n[0])*(h.Canvas.canvas.width/h.CanvasId.clientWidth),h.TouchArray[a].y=(e.originalEvent.touches[o].pageY-n[1])*(h.Canvas.canvas.height/h.CanvasId.clientHeight))}}},h.xxTouchEnd=function(e){if(3==h.State)if(e.preventDefault&&e.preventDefault(),0==h.touchenabled||1==h.touchenabled){if(1<e.originalEvent.touches.length)return;e.which=1,e.pageX=LastX,e.pageY=LastY,h.SendMouseMsg(KeyAction.UP,e)}else for(var t in e.originalEvent.changedTouches)if(e.originalEvent.changedTouches[t].identifier){var n=e.originalEvent.changedTouches[t].identifier%256;h.TouchArray[n]&&(h.TouchArray[n].f=2)}},h.GrabMouseInput=function(){if(1!=h.xxMouseInputGrab){var e=h.CanvasId;e.onmousemove=h.xxMouseMove,e.onmouseup=h.xxMouseUp,e.onmousedown=h.xxMouseDown,e.touchstart=h.xxTouchStart,e.touchmove=h.xxTouchMove,e.touchend=h.xxTouchEnd,e.MSPointerDown=h.xxMsTouchEvent,e.MSPointerMove=h.xxMsTouchEvent,e.MSPointerUp=h.xxMsTouchEvent,navigator.userAgent.match(/mozilla/i)?e.DOMMouseScroll=h.xxDOMMouseScroll:e.onmousewheel=h.xxMouseWheel,h.xxMouseInputGrab=!0}},h.UnGrabMouseInput=function(){if(0!=h.xxMouseInputGrab){var e=h.CanvasId;e.onmousemove=null,e.onmouseup=null,e.onmousedown=null,e.touchstart=null,e.touchmove=null,e.touchend=null,e.MSPointerDown=null,e.MSPointerMove=null,e.MSPointerUp=null,navigator.userAgent.match(/mozilla/i)?e.DOMMouseScroll=null:e.onmousewheel=null,h.xxMouseInputGrab=!1}},h.GrabKeyInput=function(){1!=h.xxKeyInputGrab&&(document.onkeyup=h.xxKeyUp,document.onkeydown=h.xxKeyDown,document.onkeypress=h.xxKeyPress,h.xxKeyInputGrab=!0)},h.UnGrabKeyInput=function(){0!=h.xxKeyInputGrab&&(document.onkeyup=null,document.onkeydown=null,document.onkeypress=null,h.xxKeyInputGrab=!1)},h.GetPositionOfControl=function(e){var t=Array(2);for(t[0]=t[1]=0;e;)t[0]+=e.offsetLeft,t[1]+=e.offsetTop,e=e.offsetParent;return t},h.crotX=function(e,t){return 0==h.rotation?e:1==h.rotation?t:2==h.rotation?h.Canvas.canvas.width-e:3==h.rotation?h.Canvas.canvas.height-t:void 0},h.crotY=function(e,t){return 0==h.rotation?t:1==h.rotation?h.Canvas.canvas.width-e:2==h.rotation?h.Canvas.canvas.height-t:3==h.rotation?e:void 0},h.rotX=function(e,t){return 0==h.rotation||1==h.rotation?e:2==h.rotation?e-h.Canvas.canvas.width:3==h.rotation?e-h.Canvas.canvas.height:void 0},h.rotY=function(e,t){return 0==h.rotation||3==h.rotation?t:1==h.rotation?t-h.Canvas.canvas.width:2==h.rotation?t-h.Canvas.canvas.height:void 0},h.tcanvas=null,h.setRotation=function(e){for(;e<0;)e+=4;var t=e%4;if(t==h.rotation)return!0;var n=h.Canvas.canvas.width,o=h.Canvas.canvas.height;1!=h.rotation&&3!=h.rotation||(n=h.Canvas.canvas.height,o=h.Canvas.canvas.width),null==h.tcanvas&&(h.tcanvas=document.createElement("canvas"));var a=h.tcanvas.getContext("2d");return a.setTransform(1,0,0,1,0,0),a.canvas.width=n,a.canvas.height=o,a.rotate(-90*h.rotation*Math.PI/180),0==h.rotation&&a.drawImage(h.Canvas.canvas,0,0),1==h.rotation&&a.drawImage(h.Canvas.canvas,-h.Canvas.canvas.width,0),2==h.rotation&&a.drawImage(h.Canvas.canvas,-h.Canvas.canvas.width,-h.Canvas.canvas.height),3==h.rotation&&a.drawImage(h.Canvas.canvas,0,-h.Canvas.canvas.height),0!=h.rotation&&2!=h.rotation||(h.Canvas.canvas.height=n,h.Canvas.canvas.width=o),1!=h.rotation&&3!=h.rotation||(h.Canvas.canvas.height=o,h.Canvas.canvas.width=n),h.Canvas.setTransform(1,0,0,1,0,0),h.Canvas.rotate(90*t*Math.PI/180),h.rotation=t,h.Canvas.drawImage(h.tcanvas,h.rotX(0,0),h.rotY(0,0)),h.ScreenWidth=h.Canvas.canvas.width,h.ScreenHeight=h.Canvas.canvas.height,null!=h.onScreenSizeChange&&h.onScreenSizeChange(h,h.ScreenWidth,h.ScreenHeight,h.CanvasId),!0},h.StartRecording=function(){null==h.recordedData&&h.CanvasId.toBlob(function(e){var i=new FileReader;i.readAsArrayBuffer(e),i.onload=function(e){for(var t="",n=new Uint8Array(i.result),o=n.byteLength,a=0;a<o;a++)t+=String.fromCharCode(n[a]);h.recordedData=[],h.recordedStart=Date.now(),h.recordedSize=0,h.recordedData.push(v(1,0,JSON.stringify({magic:"MeshCentralRelaySession",ver:1,time:(new Date).toLocaleString(),protocol:2}))),h.recordedData.push(v(2,1,h.shortToStr(7)+h.shortToStr(8)+h.shortToStr(h.ScreenWidth)+h.shortToStr(h.ScreenHeight)));var r=8+t.length;65e3<r?h.recordedData.push(v(2,1,h.shortToStr(27)+h.shortToStr(8)+h.intToStr(r)+h.shortToStr(3)+h.shortToStr(0)+h.shortToStr(0)+h.shortToStr(0)+t)):h.recordedData.push(v(2,1,h.shortToStr(3)+h.shortToStr(r)+h.shortToStr(0)+h.shortToStr(0)+t))}})},h.StopRecording=function(){if(null!=h.recordedData){var e=h.recordedData;return e.push(v(3,0,"MeshCentralMCREC")),delete h.recordedData,delete h.recordedStart,delete h.recordedSize,e}},h.MuchTheSame=function(e,t){return Math.abs(e-t)<4},h.Debug=function(e){console.log(e)},h.getIEVersion=function(){var e=-1;if("Microsoft Internet Explorer"==navigator.appName){var t=navigator.userAgent;null!=new RegExp("MSIE ([0-9]{1,}[.0-9]{0,})").exec(t)&&(e=parseFloat(RegExp.$1))}return e},h.haltEvent=function(e){return e.preventDefault&&e.preventDefault(),e.stopPropagation&&e.stopPropagation(),!1},h}
\ No newline at end of file
public/scripts/agent-redir-ws-0.1.1.js
-1
@@ -76,7 +76,6 @@ var CreateAgentRedirect = function (meshserver, module, serverPublicNamePort, au
76 var controlMsg;
77 try { controlMsg = JSON.parse(msg); } catch (e) { return; }
78 if (controlMsg.ctrlChannel != '102938') { obj.m.ProcessData(msg); return; }
79 - //console.log(controlMsg);
79 if ((typeof args != 'undefined') && args.redirtrace) { console.log('RedirRecv', controlMsg); }
80 if (controlMsg.type == 'console') {
81 obj.setConsoleMessage(controlMsg.msg, controlMsg.msgid, controlMsg.msgargs, controlMsg.timeout);
translate/translate.json
+2008 -1972
@@ -17,8 +17,8 @@
17 "zh-chs": " + CIRA",
18 "zh-cht": " + CIRA",
19 "xloc": [
20 - "default.handlebars->29->1361",
21 - "default.handlebars->29->1363"
20 + "default.handlebars->29->1369",
21 + "default.handlebars->29->1371"
22 ]
23 },
24 {
@@ -204,7 +204,7 @@
204 "zh-chs": " 可以使用密码提示,但不建议使用。",
205 "zh-cht": " 可以使用密碼提示,但不建議使用。",
206 "xloc": [
207 - "default.handlebars->29->1274"
207 + "default.handlebars->29->1282"
208 ]
209 },
210 {
@@ -224,8 +224,8 @@
224 "zh-chs": " 用户需要先登录到该服务器一次,然后才能将其添加到设备组。",
225 "zh-cht": " 用戶需要先登入到該伺服器一次,然後才能將其新增到裝置群。",
226 "xloc": [
227 - "default.handlebars->29->1438",
228 - "default.handlebars->29->1901"
227 + "default.handlebars->29->1446",
228 + "default.handlebars->29->1909"
229 ]
230 },
231 {
@@ -395,7 +395,7 @@
395 "zh-chs": "(可选的)",
396 "zh-cht": "(可選的)",
397 "xloc": [
398 - "default.handlebars->29->340"
398 + "default.handlebars->29->341"
399 ]
400 },
401 {
@@ -420,8 +420,8 @@
420 "fr": "* 8 caractères, 1 majuscule, 1 minuscule, 1 numérique, 1 non alphanumérique.",
421 "nl": "* 8 karakters, 1 hoofdletter, 1 normale letter, 1 nummeriek, 1 niet alfanumeriek.",
422 "xloc": [
423 - "default.handlebars->29->1407",
424 - "default.handlebars->29->306"
423 + "default.handlebars->29->1415",
424 + "default.handlebars->29->307"
425 ]
426 },
427 {
@@ -441,7 +441,7 @@
441 "zh-chs": "*对于BSD,首先运行“ pkg install wget sudo bash ”。",
442 "zh-cht": "*對於BSD,首先運行“ pkg install wget sudo bash ”。",
443 "xloc": [
444 - "default.handlebars->29->379"
444 + "default.handlebars->29->380"
445 ]
446 },
447 {
@@ -496,7 +496,7 @@
496 "zh-cht": ",",
497 "xloc": [
498 "default-mobile.handlebars->9->465",
499 - "default.handlebars->29->1508"
499 + "default.handlebars->29->1516"
500 ]
501 },
502 {
@@ -517,7 +517,7 @@
517 "zh-cht": ",只適用於Intel&reg;AMT",
518 "xloc": [
519 "default-mobile.handlebars->9->147",
520 - "default.handlebars->29->207"
520 + "default.handlebars->29->208"
521 ]
522 },
523 {
@@ -537,7 +537,13 @@
537 "zh-chs": ",MQTT在线",
538 "zh-cht": ",MQTT在線",
539 "xloc": [
540 - "default.handlebars->29->1016"
540 + "default.handlebars->29->1024"
541 + ]
542 + },
543 + {
544 + "en": ", Prompt for consent",
545 + "xloc": [
546 + "default.handlebars->29->677"
547 ]
548 },
549 {
@@ -557,7 +563,7 @@
563 "zh-chs": ",软体KVM",
564 "zh-cht": ",軟體KVM",
565 "xloc": [
560 - "default.handlebars->29->834",
566 + "default.handlebars->29->842",
567 "desktop.handlebars->3->12"
568 ]
569 },
@@ -580,9 +586,9 @@
586 "xloc": [
587 "default-mobile.handlebars->9->296",
588 "default-mobile.handlebars->9->303",
583 - "default.handlebars->29->841",
584 - "default.handlebars->29->874",
585 - "default.handlebars->29->886",
589 + "default.handlebars->29->849",
590 + "default.handlebars->29->882",
591 + "default.handlebars->29->894",
592 "desktop.handlebars->3->19",
593 "xterm.handlebars->9->6"
594 ]
@@ -703,7 +709,7 @@
709 "zh-chs": ",{0}观看",
710 "zh-cht": ",{0}觀看",
711 "xloc": [
706 - "default.handlebars->29->835",
712 + "default.handlebars->29->843",
713 "desktop.handlebars->3->13"
714 ]
715 },
@@ -768,9 +774,9 @@
774 "xloc": [
775 "default-mobile.handlebars->9->108",
776 "default-mobile.handlebars->9->305",
771 - "default.handlebars->29->1549",
772 - "default.handlebars->29->2058",
773 - "default.handlebars->29->892"
777 + "default.handlebars->29->1557",
778 + "default.handlebars->29->2066",
779 + "default.handlebars->29->900"
780 ]
781 },
782 {
@@ -826,7 +832,7 @@
832 "zh-chs": "1个活跃时段",
833 "zh-cht": "1個活躍時段",
834 "xloc": [
829 - "default.handlebars->29->1970"
835 + "default.handlebars->29->1978"
836 ]
837 },
838 {
@@ -848,7 +854,7 @@
854 "xloc": [
855 "default-mobile.handlebars->9->118",
856 "default-mobile.handlebars->9->469",
851 - "default.handlebars->29->1573",
857 + "default.handlebars->29->1581",
858 "download.handlebars->3->1",
859 "download2.handlebars->5->1"
860 ]
@@ -870,7 +876,7 @@
876 "zh-chs": "1条连接",
877 "zh-cht": "1位聯絡文",
878 "xloc": [
873 - "default.handlebars->29->837",
879 + "default.handlebars->29->845",
880 "desktop.handlebars->3->15"
881 ]
882 },
@@ -892,8 +898,8 @@
898 "zh-cht": "1天",
899 "xloc": [
900 "default.handlebars->29->181",
895 - "default.handlebars->29->331",
896 - "default.handlebars->29->345"
901 + "default.handlebars->29->332",
902 + "default.handlebars->29->346"
903 ]
904 },
905 {
@@ -913,7 +919,7 @@
919 "zh-chs": "1组",
920 "zh-cht": "1群",
921 "xloc": [
916 - "default.handlebars->29->1935"
922 + "default.handlebars->29->1943"
923 ]
924 },
925 {
@@ -934,8 +940,8 @@
940 "zh-cht": "1小時",
941 "xloc": [
942 "default.handlebars->29->179",
937 - "default.handlebars->29->329",
938 - "default.handlebars->29->343"
943 + "default.handlebars->29->330",
944 + "default.handlebars->29->344"
945 ]
946 },
947 {
@@ -955,7 +961,7 @@
961 "zh-chs": "1分钟",
962 "zh-cht": "1分鐘",
963 "xloc": [
958 - "default.handlebars->29->722"
964 + "default.handlebars->29->730"
965 ]
966 },
967 {
@@ -996,8 +1002,8 @@
1002 "zh-cht": "1個月",
1003 "xloc": [
1004 "default.handlebars->29->183",
999 - "default.handlebars->29->333",
1000 - "default.handlebars->29->347"
1005 + "default.handlebars->29->334",
1006 + "default.handlebars->29->348"
1007 ]
1008 },
1009 {
@@ -1017,7 +1023,7 @@
1023 "zh-chs": "有1个用户没有显示,请使用搜索框查找用户...",
1024 "zh-cht": "有1個用戶沒有顯示,請使用搜尋框搜尋用戶...",
1025 "xloc": [
1020 - "default.handlebars->29->1725"
1026 + "default.handlebars->29->1733"
1027 ]
1028 },
1029 {
@@ -1037,7 +1043,7 @@
1043 "zh-chs": "1个节点",
1044 "zh-cht": "1個節點",
1045 "xloc": [
1040 - "default.handlebars->29->399"
1046 + "default.handlebars->29->400"
1047 ]
1048 },
1049 {
@@ -1083,13 +1089,13 @@
1089 "default-mobile.handlebars->9->172",
1090 "default-mobile.handlebars->9->175",
1091 "default-mobile.handlebars->9->178",
1086 - "default.handlebars->29->1729",
1087 - "default.handlebars->29->251",
1088 - "default.handlebars->29->254",
1089 - "default.handlebars->29->257",
1090 - "default.handlebars->29->260",
1091 - "default.handlebars->29->263",
1092 - "default.handlebars->29->266"
1092 + "default.handlebars->29->1737",
1093 + "default.handlebars->29->252",
1094 + "default.handlebars->29->255",
1095 + "default.handlebars->29->258",
1096 + "default.handlebars->29->261",
1097 + "default.handlebars->29->264",
1098 + "default.handlebars->29->267"
1099 ]
1100 },
1101 {
@@ -1110,8 +1116,8 @@
1116 "zh-cht": "1週",
1117 "xloc": [
1118 "default.handlebars->29->182",
1113 - "default.handlebars->29->332",
1114 - "default.handlebars->29->346"
1119 + "default.handlebars->29->333",
1120 + "default.handlebars->29->347"
1121 ]
1122 },
1123 {
@@ -1215,7 +1221,7 @@
1221 "zh-chs": "10分钟",
1222 "zh-cht": "10分鐘",
1223 "xloc": [
1218 - "default.handlebars->29->724"
1224 + "default.handlebars->29->732"
1225 ]
1226 },
1227 {
@@ -1285,7 +1291,7 @@
1291 "fr": "12 heures",
1292 "nl": "12 uur",
1293 "xloc": [
1288 - "default.handlebars->29->732"
1294 + "default.handlebars->29->740"
1295 ]
1296 },
1297 {
@@ -1327,7 +1333,7 @@
1333 "zh-chs": "15分钟",
1334 "zh-cht": "15分鐘",
1335 "xloc": [
1330 - "default.handlebars->29->725"
1336 + "default.handlebars->29->733"
1337 ]
1338 },
1339 {
@@ -1335,7 +1341,7 @@
1341 "fr": "16 heures",
1342 "nl": "16 uur",
1343 "xloc": [
1338 - "default.handlebars->29->733"
1344 + "default.handlebars->29->741"
1345 ]
1346 },
1347 {
@@ -1343,7 +1349,7 @@
1349 "fr": "2 jours",
1350 "nl": "2 dagen",
1351 "xloc": [
1346 - "default.handlebars->29->735"
1352 + "default.handlebars->29->743"
1353 ]
1354 },
1355 {
@@ -1351,7 +1357,7 @@
1357 "fr": "2 heures",
1358 "nl": "2 uur",
1359 "xloc": [
1354 - "default.handlebars->29->729"
1360 + "default.handlebars->29->737"
1361 ]
1362 },
1363 {
@@ -1443,7 +1449,7 @@
1449 "fr": "24 heures",
1450 "nl": "24 uur",
1451 "xloc": [
1446 - "default.handlebars->29->734"
1452 + "default.handlebars->29->742"
1453 ]
1454 },
1455 {
@@ -1505,7 +1511,7 @@
1511 "zh-chs": "2FA备份代码已清除",
1512 "zh-cht": "2FA備份代碼已清除",
1513 "xloc": [
1508 - "default.handlebars->29->1684"
1514 + "default.handlebars->29->1692"
1515 ]
1516 },
1517 {
@@ -1525,8 +1531,8 @@
1531 "zh-chs": "启用第二因素身份验证",
1532 "zh-cht": "啟用第二因素身份驗證",
1533 "xloc": [
1528 - "default.handlebars->29->1742",
1529 - "default.handlebars->29->1957"
1534 + "default.handlebars->29->1750",
1535 + "default.handlebars->29->1965"
1536 ]
1537 },
1538 {
@@ -1645,7 +1651,7 @@
1651 "zh-chs": "30分钟",
1652 "zh-cht": "30分鐘",
1653 "xloc": [
1648 - "default.handlebars->29->726"
1654 + "default.handlebars->29->734"
1655 ]
1656 },
1657 {
@@ -1665,8 +1671,8 @@
1671 "zh-chs": "MeshAgent的32位版本",
1672 "zh-cht": "MeshAgent的32位版本",
1673 "xloc": [
1668 - "default.handlebars->29->369",
1669 - "default.handlebars->29->386"
1674 + "default.handlebars->29->370",
1675 + "default.handlebars->29->387"
1676 ]
1677 },
1678 {
@@ -1696,7 +1702,7 @@
1702 "fr": "4 jours",
1703 "nl": "4 dagen",
1704 "xloc": [
1699 - "default.handlebars->29->736"
1705 + "default.handlebars->29->744"
1706 ]
1707 },
1708 {
@@ -1704,7 +1710,7 @@
1710 "fr": "4 heures",
1711 "nl": "4 uur",
1712 "xloc": [
1707 - "default.handlebars->29->730"
1713 + "default.handlebars->29->738"
1714 ]
1715 },
1716 {
@@ -1787,7 +1793,7 @@
1793 "zh-chs": "45分钟",
1794 "zh-cht": "45分鐘",
1795 "xloc": [
1790 - "default.handlebars->29->727"
1796 + "default.handlebars->29->735"
1797 ]
1798 },
1799 {
@@ -1827,7 +1833,7 @@
1833 "zh-chs": "5分钟",
1834 "zh-cht": "5分鐘",
1835 "xloc": [
1830 - "default.handlebars->29->723"
1836 + "default.handlebars->29->731"
1837 ]
1838 },
1839 {
@@ -1941,7 +1947,7 @@
1947 "fr": "60 minutes",
1948 "nl": "60 minuten",
1949 "xloc": [
1944 - "default.handlebars->29->728"
1950 + "default.handlebars->29->736"
1951 ]
1952 },
1953 {
@@ -1983,7 +1989,7 @@
1989 "zh-chs": "64位版本的macOS Mesh Agent",
1990 "zh-cht": "64位版本的macOS Mesh Agent",
1991 "xloc": [
1986 - "default.handlebars->29->382"
1992 + "default.handlebars->29->383"
1993 ]
1994 },
1995 {
@@ -2003,8 +2009,8 @@
2009 "zh-chs": "MeshAgent的64位版本",
2010 "zh-cht": "MeshAgent的64位版本",
2011 "xloc": [
2006 - "default.handlebars->29->373",
2007 - "default.handlebars->29->389"
2012 + "default.handlebars->29->374",
2013 + "default.handlebars->29->390"
2014 ]
2015 },
2016 {
@@ -2061,7 +2067,7 @@
2067 "zh-chs": "7天电源状态",
2068 "zh-cht": "7天電源狀態",
2069 "xloc": [
2064 - "default.handlebars->29->767"
2070 + "default.handlebars->29->775"
2071 ]
2072 },
2073 {
@@ -2124,9 +2130,9 @@
2130 "zh-chs": "8小時",
2131 "zh-cht": "8小時",
2132 "xloc": [
2127 - "default.handlebars->29->330",
2128 - "default.handlebars->29->344",
2129 - "default.handlebars->29->731"
2133 + "default.handlebars->29->331",
2134 + "default.handlebars->29->345",
2135 + "default.handlebars->29->739"
2136 ]
2137 },
2138 {
@@ -2344,8 +2350,8 @@
2350 "zh-cht": "ACM",
2351 "xloc": [
2352 "default-mobile.handlebars->9->236",
2347 - "default.handlebars->29->1377",
2348 - "default.handlebars->29->568"
2353 + "default.handlebars->29->1385",
2354 + "default.handlebars->29->569"
2355 ]
2356 },
2357 {
@@ -2381,8 +2387,8 @@
2387 "zh-chs": "AMT",
2388 "zh-cht": "AMT",
2389 "xloc": [
2384 - "default.handlebars->29->218",
2385 - "default.handlebars->29->427"
2390 + "default.handlebars->29->219",
2391 + "default.handlebars->29->428"
2392 ]
2393 },
2394 {
@@ -2486,7 +2492,7 @@
2492 "zh-chs": "拒绝访问",
2493 "zh-cht": "拒絕存取",
2494 "xloc": [
2489 - "default.handlebars->29->1017"
2495 + "default.handlebars->29->1025"
2496 ]
2497 },
2498 {
@@ -2528,7 +2534,7 @@
2534 "zh-chs": "访问服务器档案",
2535 "zh-cht": "存取伺服器檔案",
2536 "xloc": [
2531 - "default.handlebars->29->1907"
2537 + "default.handlebars->29->1915"
2538 ]
2539 },
2540 {
@@ -2617,10 +2623,10 @@
2623 "default-mobile.handlebars->9->93",
2624 "default-mobile.handlebars->9->95",
2625 "default-mobile.handlebars->container->page_content->column_l->p3->p3info->1->p3AccountActions->p2AccountSecurity->1->0",
2620 - "default.handlebars->29->1283",
2621 - "default.handlebars->29->1285",
2622 - "default.handlebars->29->537",
2623 - "default.handlebars->29->539"
2626 + "default.handlebars->29->1291",
2627 + "default.handlebars->29->1293",
2628 + "default.handlebars->29->538",
2629 + "default.handlebars->29->540"
2630 ]
2631 },
2632 {
@@ -2681,7 +2687,7 @@
2687 "zh-chs": "帐户已更改:{0}",
2688 "zh-cht": "帳戶已更改:{0}",
2689 "xloc": [
2684 - "default.handlebars->29->1657"
2690 + "default.handlebars->29->1665"
2691 ]
2692 },
2693 {
@@ -2701,7 +2707,7 @@
2707 "zh-chs": "创建帐户,电子邮件为{0}",
2708 "zh-cht": "創建帳戶,電子郵件為{0}",
2709 "xloc": [
2704 - "default.handlebars->29->1656"
2710 + "default.handlebars->29->1664"
2711 ]
2712 },
2713 {
@@ -2721,7 +2727,7 @@
2727 "zh-chs": "创建帐户,用户名是{0}",
2728 "zh-cht": "帳戶已創建,用戶名是{0}",
2729 "xloc": [
2724 - "default.handlebars->29->1655"
2730 + "default.handlebars->29->1663"
2731 ]
2732 },
2733 {
@@ -2741,8 +2747,8 @@
2747 "zh-chs": "帐户已被锁定",
2748 "zh-cht": "帳戶已被鎖定",
2749 "xloc": [
2744 - "default.handlebars->29->1744",
2745 - "default.handlebars->29->1904"
2750 + "default.handlebars->29->1752",
2751 + "default.handlebars->29->1912"
2752 ]
2753 },
2754 {
@@ -2806,7 +2812,7 @@
2812 "zh-chs": "帐号登录",
2813 "zh-cht": "帳號登錄",
2814 "xloc": [
2809 - "default.handlebars->29->1592"
2815 + "default.handlebars->29->1600"
2816 ]
2817 },
2818 {
@@ -2826,7 +2832,7 @@
2832 "zh-chs": "帐户登出",
2833 "zh-cht": "帳戶登出",
2834 "xloc": [
2829 - "default.handlebars->29->1593"
2835 + "default.handlebars->29->1601"
2836 ]
2837 },
2838 {
@@ -2868,7 +2874,7 @@
2874 "zh-chs": "帐户密码已更改:{0}",
2875 "zh-cht": "帳戶密碼已更改:{0}",
2876 "xloc": [
2871 - "default.handlebars->29->1665"
2877 + "default.handlebars->29->1673"
2878 ]
2879 },
2880 {
@@ -2888,7 +2894,7 @@
2894 "zh-chs": "帐户已删除",
2895 "zh-cht": "帳戶已刪除",
2896 "xloc": [
2891 - "default.handlebars->29->1654"
2897 + "default.handlebars->29->1662"
2898 ]
2899 },
2900 {
@@ -2928,7 +2934,7 @@
2934 "zh-chs": "指令",
2935 "zh-cht": "指令",
2936 "xloc": [
2931 - "default.handlebars->29->1022",
2937 + "default.handlebars->29->1030",
2938 "default.handlebars->container->column_l->p42->p42tbl->1->0->8"
2939 ]
2940 },
@@ -2949,8 +2955,8 @@
2955 "zh-chs": "动作档案",
2956 "zh-cht": "動作檔案",
2957 "xloc": [
2952 - "default.handlebars->29->810",
2953 - "default.handlebars->29->812"
2958 + "default.handlebars->29->818",
2959 + "default.handlebars->29->820"
2960 ]
2961 },
2962 {
@@ -2973,7 +2979,7 @@
2979 "default-mobile.handlebars->9->259",
2980 "default-mobile.handlebars->container->page_content->column_l->p10->p10desktop->deskarea4->1->3",
2981 "default-mobile.handlebars->container->page_content->column_l->p10->p10files->p13toolbar->1->0->1->1",
2976 - "default.handlebars->29->617",
2982 + "default.handlebars->29->618",
2983 "default.handlebars->container->column_l->p11->deskarea0->deskarea1->1",
2984 "default.handlebars->container->column_l->p12->termTable->1->1->0->1->1",
2985 "default.handlebars->container->column_l->p13->p13toolbar->1->0->1->1"
@@ -2984,7 +2990,7 @@
2990 "fr": "Activer Intel&reg; AMT dans ACM (Admin Control Mode) en utilisant une clé USB (format FAT). Copiez le fichier setup.bin dessus et démarrez un ou plusieurs appareils avec.",
2991 "nl": "Activeer Intel&reg; AMT in Admin Control Mode (ACM) gebruikmakend van een FAT geformateerde USB sleutel. Plaats setup.bin erop en start een of meer computers met deze sleutel.",
2992 "xloc": [
2987 - "default.handlebars->29->301"
2993 + "default.handlebars->29->302"
2994 ]
2995 },
2996 {
@@ -3030,7 +3036,7 @@
3036 {
3037 "en": "Activate to CCM, if ACM fails",
3038 "xloc": [
3033 - "default.handlebars->29->1398"
3039 + "default.handlebars->29->1406"
3040 ]
3041 },
3042 {
@@ -3053,9 +3059,9 @@
3059 "default-mobile.handlebars->9->231",
3060 "default-mobile.handlebars->9->233",
3061 "default-mobile.handlebars->9->368",
3056 - "default.handlebars->29->561",
3057 - "default.handlebars->29->563",
3058 - "default.handlebars->29->978"
3062 + "default.handlebars->29->562",
3063 + "default.handlebars->29->564",
3064 + "default.handlebars->29->986"
3065 ]
3066 },
3067 {
@@ -3075,7 +3081,7 @@
3081 "zh-chs": "激活",
3082 "zh-cht": "啟動",
3083 "xloc": [
3078 - "default.handlebars->29->203"
3084 + "default.handlebars->29->204"
3085 ]
3086 },
3087 {
@@ -3083,7 +3089,7 @@
3089 "fr": "Partage(s) actif(s) de l'appareil",
3090 "nl": "Actief delen van apparaten",
3091 "xloc": [
3086 - "default.handlebars->29->670"
3092 + "default.handlebars->29->671"
3093 ]
3094 },
3095 {
@@ -3120,8 +3126,8 @@
3126 "zh-chs": "添加代理",
3127 "zh-cht": "新增代理",
3128 "xloc": [
3123 - "default.handlebars->29->1373",
3124 - "default.handlebars->29->284"
3129 + "default.handlebars->29->1381",
3130 + "default.handlebars->29->285"
3131 ]
3132 },
3133 {
@@ -3158,8 +3164,8 @@
3164 "zh-chs": "添加设备",
3165 "zh-cht": "新增裝置",
3166 "xloc": [
3161 - "default.handlebars->29->1881",
3162 - "default.handlebars->29->2005"
3167 + "default.handlebars->29->1889",
3168 + "default.handlebars->29->2013"
3169 ]
3170 },
3171 {
@@ -3179,7 +3185,7 @@
3185 "zh-chs": "添加设备日志",
3186 "zh-cht": "新增裝置日誌",
3187 "xloc": [
3182 - "default.handlebars->29->712"
3188 + "default.handlebars->29->717"
3189 ]
3190 },
3191 {
@@ -3199,10 +3205,10 @@
3205 "zh-chs": "添加设备组",
3206 "zh-cht": "新增裝置群",
3207 "xloc": [
3202 - "default.handlebars->29->1472",
3203 - "default.handlebars->29->1875",
3204 - "default.handlebars->29->1993",
3205 - "default.handlebars->29->238"
3208 + "default.handlebars->29->1480",
3209 + "default.handlebars->29->1883",
3210 + "default.handlebars->29->2001",
3211 + "default.handlebars->29->239"
3212 ]
3213 },
3214 {
@@ -3222,7 +3228,7 @@
3228 "zh-chs": "添加设备组权限",
3229 "zh-cht": "新增裝置群權限",
3230 "xloc": [
3225 - "default.handlebars->29->1469"
3231 + "default.handlebars->29->1477"
3232 ]
3233 },
3234 {
@@ -3242,8 +3248,8 @@
3248 "zh-chs": "添加设备权限",
3249 "zh-cht": "新增裝置權限",
3250 "xloc": [
3245 - "default.handlebars->29->1474",
3246 - "default.handlebars->29->1476"
3251 + "default.handlebars->29->1482",
3252 + "default.handlebars->29->1484"
3253 ]
3254 },
3255 {
@@ -3280,7 +3286,7 @@
3286 "zh-chs": "添加英特尔&reg;AMT设备",
3287 "zh-cht": "新增Intel&reg; AMT裝置",
3288 "xloc": [
3283 - "default.handlebars->29->297"
3289 + "default.handlebars->29->298"
3290 ]
3291 },
3292 {
@@ -3320,7 +3326,7 @@
3326 "zh-chs": "添加本地",
3327 "zh-cht": "新增本地",
3328 "xloc": [
3323 - "default.handlebars->29->278"
3329 + "default.handlebars->29->279"
3330 ]
3331 },
3332 {
@@ -3340,7 +3346,7 @@
3346 "zh-chs": "添加成员身份",
3347 "zh-cht": "新增成員身份",
3348 "xloc": [
3343 - "default.handlebars->29->2025"
3349 + "default.handlebars->29->2033"
3350 ]
3351 },
3352 {
@@ -3360,7 +3366,7 @@
3366 "zh-chs": "添加 Mesh Agent",
3367 "zh-cht": "新增 Mesh Agent",
3368 "xloc": [
3363 - "default.handlebars->29->398"
3369 + "default.handlebars->29->399"
3370 ]
3371 },
3372 {
@@ -3380,8 +3386,8 @@
3386 "zh-chs": "添加安全密钥",
3387 "zh-cht": "新增安全密鑰",
3388 "xloc": [
3383 - "default.handlebars->29->1050",
3384 - "default.handlebars->29->1051",
3389 + "default.handlebars->29->1058",
3390 + "default.handlebars->29->1059",
3391 "default.handlebars->29->149",
3392 "default.handlebars->29->151",
3393 "default.handlebars->29->154",
@@ -3406,7 +3412,7 @@
3412 "zh-cht": "新增用戶",
3413 "xloc": [
3414 "default-mobile.handlebars->9->410",
3409 - "default.handlebars->29->662"
3415 + "default.handlebars->29->663"
3416 ]
3417 },
3418 {
@@ -3426,7 +3432,7 @@
3432 "zh-chs": "添加用户设备权限",
3433 "zh-cht": "新增用戶裝置權限",
3434 "xloc": [
3429 - "default.handlebars->29->1479"
3435 + "default.handlebars->29->1487"
3436 ]
3437 },
3438 {
@@ -3446,10 +3452,10 @@
3452 "zh-chs": "添加用户组",
3453 "zh-cht": "新增用戶群",
3454 "xloc": [
3449 - "default.handlebars->29->1369",
3450 - "default.handlebars->29->1471",
3451 - "default.handlebars->29->1999",
3452 - "default.handlebars->29->663"
3455 + "default.handlebars->29->1377",
3456 + "default.handlebars->29->1479",
3457 + "default.handlebars->29->2007",
3458 + "default.handlebars->29->664"
3459 ]
3460 },
3461 {
@@ -3469,7 +3475,7 @@
3475 "zh-chs": "添加用户组设备权限",
3476 "zh-cht": "新增用戶群裝置權限",
3477 "xloc": [
3472 - "default.handlebars->29->1481"
3478 + "default.handlebars->29->1489"
3479 ]
3480 },
3481 {
@@ -3526,8 +3532,8 @@
3532 "zh-chs": "添加用户",
3533 "zh-cht": "新增用戶",
3534 "xloc": [
3529 - "default.handlebars->29->1368",
3530 - "default.handlebars->29->1870"
3535 + "default.handlebars->29->1376",
3536 + "default.handlebars->29->1878"
3537 ]
3538 },
3539 {
@@ -3547,7 +3553,7 @@
3553 "zh-chs": "将用户添加到设备组",
3554 "zh-cht": "將用戶新增到裝置群",
3555 "xloc": [
3550 - "default.handlebars->29->1468"
3556 + "default.handlebars->29->1476"
3557 ]
3558 },
3559 {
@@ -3567,7 +3573,7 @@
3573 "zh-chs": "将用户添加到用户组",
3574 "zh-cht": "將用戶新增到用戶群",
3575 "xloc": [
3570 - "default.handlebars->29->1903"
3576 + "default.handlebars->29->1911"
3577 ]
3578 },
3579 {
@@ -3607,7 +3613,7 @@
3613 "zh-chs": "通过扫描本地网络添加新的英特尔&reg;AMT计算机。",
3614 "zh-cht": "通過掃描本地網絡新增新的Intel&reg; AMT電腦。",
3615 "xloc": [
3610 - "default.handlebars->29->279"
3616 + "default.handlebars->29->280"
3617 ]
3618 },
3619 {
@@ -3644,7 +3650,7 @@
3650 "zh-chs": "添加位于本地网络上的新英特尔&reg;AMT计算机。",
3651 "zh-cht": "新增位於本地網絡上的新Intel&reg; AMT電腦。",
3652 "xloc": [
3647 - "default.handlebars->29->277"
3653 + "default.handlebars->29->278"
3654 ]
3655 },
3656 {
@@ -3664,7 +3670,7 @@
3670 "zh-chs": "将新的英特尔&reg;AMT设备添加到设备组“{0}”。",
3671 "zh-cht": "將新的Intel&reg; AMT裝置新增到裝置群“{0}”。",
3672 "xloc": [
3667 - "default.handlebars->29->287"
3673 + "default.handlebars->29->288"
3674 ]
3675 },
3676 {
@@ -3684,8 +3690,8 @@
3690 "zh-chs": "通过安装Mesh Agent将新计算机添加到该设备组。",
3691 "zh-cht": "通過安裝Mesh Agent將新電腦新增到該裝置群。",
3692 "xloc": [
3687 - "default.handlebars->29->1372",
3688 - "default.handlebars->29->283"
3693 + "default.handlebars->29->1380",
3694 + "default.handlebars->29->284"
3695 ]
3696 },
3697 {
@@ -3705,7 +3711,7 @@
3711 "zh-chs": "添加标签",
3712 "zh-cht": "新增標籤",
3713 "xloc": [
3708 - "default.handlebars->29->464"
3714 + "default.handlebars->29->465"
3715 ]
3716 },
3717 {
@@ -3713,7 +3719,7 @@
3719 "nl": "Voeg toe, activeer en configureer Intel&reg; AMT aan groep \\\"{0}\\\" door MeshCmd periodiek uit te voeren als beheerder op het externe apparaat.",
3720 "fr": "Ajouter, activer et configurer Intel&reg; AMT au groupe \\\"{0}\\\" en exécutant périodiquement MeshCmd avec les droits administrateurs sur l'appareil distant.",
3721 "xloc": [
3716 - "default.handlebars->29->298"
3722 + "default.handlebars->29->299"
3723 ]
3724 },
3725 {
@@ -3733,7 +3739,7 @@
3739 "zh-chs": "添加了身份验证应用程序",
3740 "zh-cht": "添加了身份驗證應用程序",
3741 "xloc": [
3736 - "default.handlebars->29->1681"
3742 + "default.handlebars->29->1689"
3743 ]
3744 },
3745 {
@@ -3741,7 +3747,7 @@
3747 "fr": "Ajout du partage {0} de {1} à {2}",
3748 "nl": "Apparaat delen {0} toegevoegd van {1} tot {2}",
3749 "xloc": [
3744 - "default.handlebars->29->1692"
3750 + "default.handlebars->29->1700"
3751 ]
3752 },
3753 {
@@ -3761,8 +3767,8 @@
3767 "zh-chs": "已将设备{0}添加到设备组{1}",
3768 "zh-cht": "已將設備{0}添加到設備組{1}",
3769 "xloc": [
3764 - "default.handlebars->29->1648",
3765 - "default.handlebars->29->1675"
3770 + "default.handlebars->29->1656",
3771 + "default.handlebars->29->1683"
3772 ]
3773 },
3774 {
@@ -3782,7 +3788,7 @@
3788 "zh-chs": "添加了安全密钥",
3789 "zh-cht": "添加了安全密鑰",
3790 "xloc": [
3785 - "default.handlebars->29->1686"
3791 + "default.handlebars->29->1694"
3792 ]
3793 },
3794 {
@@ -3802,7 +3808,7 @@
3808 "zh-chs": "已将用户组{0}添加到设备组{1}",
3809 "zh-cht": "已將用戶組{0}添加到設備組{1}",
3810 "xloc": [
3805 - "default.handlebars->29->1659"
3811 + "default.handlebars->29->1667"
3812 ]
3813 },
3814 {
@@ -3822,8 +3828,8 @@
3828 "zh-chs": "已将用户{0}添加到用户组{1}",
3829 "zh-cht": "已將用戶{0}添加到用戶組{1}",
3830 "xloc": [
3825 - "default.handlebars->29->1662",
3826 - "default.handlebars->29->1671"
3831 + "default.handlebars->29->1670",
3832 + "default.handlebars->29->1679"
3833 ]
3834 },
3835 {
@@ -3843,7 +3849,7 @@
3849 "zh-chs": "地址",
3850 "zh-cht": "地址",
3851 "xloc": [
3846 - "default.handlebars->29->234"
3852 + "default.handlebars->29->235"
3853 ]
3854 },
3855 {
@@ -3884,7 +3890,7 @@
3890 "zh-cht": "管理員控制模式(ACM)",
3891 "xloc": [
3892 "default-mobile.handlebars->9->370",
3887 - "default.handlebars->29->980"
3893 + "default.handlebars->29->988"
3894 ]
3895 },
3896 {
@@ -3905,7 +3911,7 @@
3911 "zh-cht": "管理員憑證",
3912 "xloc": [
3913 "default-mobile.handlebars->9->376",
3908 - "default.handlebars->29->986"
3914 + "default.handlebars->29->994"
3915 ]
3916 },
3917 {
@@ -3946,7 +3952,7 @@
3952 "zh-chs": "管理领域",
3953 "zh-cht": "管理領域",
3954 "xloc": [
3949 - "default.handlebars->29->1939"
3955 + "default.handlebars->29->1947"
3956 ]
3957 },
3958 {
@@ -3987,7 +3993,7 @@
3993 "zh-chs": "管理领域",
3994 "zh-cht": "管理領域",
3995 "xloc": [
3990 - "default.handlebars->29->1807"
3996 + "default.handlebars->29->1815"
3997 ]
3998 },
3999 {
@@ -4007,7 +4013,7 @@
4013 "zh-chs": "管理员",
4014 "zh-cht": "管理員",
4015 "xloc": [
4010 - "default.handlebars->29->1736"
4016 + "default.handlebars->29->1744"
4017 ]
4018 },
4019 {
@@ -4027,7 +4033,7 @@
4033 "zh-chs": "南非文",
4034 "zh-cht": "南非文",
4035 "xloc": [
4030 - "default.handlebars->29->1053"
4036 + "default.handlebars->29->1061"
4037 ]
4038 },
4039 {
@@ -4050,10 +4056,10 @@
4056 "default-mobile.handlebars->9->203",
4057 "default-mobile.handlebars->9->228",
4058 "default-mobile.handlebars->9->250",
4053 - "default.handlebars->29->1535",
4059 "default.handlebars->29->1543",
4055 - "default.handlebars->29->214",
4056 - "default.handlebars->29->423",
4060 + "default.handlebars->29->1551",
4061 + "default.handlebars->29->215",
4062 + "default.handlebars->29->424",
4063 "default.handlebars->container->column_l->p15->consoleTable->1->6->1->1->1->0->p15outputselecttd->p15outputselect->1"
4064 ]
4065 },
@@ -4074,8 +4080,8 @@
4080 "zh-chs": "代理+英特尔AMT",
4081 "zh-cht": "代理+Intel&reg; AMT",
4082 "xloc": [
4077 - "default.handlebars->29->1537",
4078 - "default.handlebars->29->1545"
4083 + "default.handlebars->29->1545",
4084 + "default.handlebars->29->1553"
4085 ]
4086 },
4087 {
@@ -4116,7 +4122,7 @@
4122 "zh-cht": "代理控制台",
4123 "xloc": [
4124 "default-mobile.handlebars->9->447",
4119 - "default.handlebars->29->1489"
4125 + "default.handlebars->29->1497"
4126 ]
4127 },
4128 {
@@ -4136,7 +4142,7 @@
4142 "zh-chs": "代理错误计数器",
4143 "zh-cht": "代理錯誤計數器",
4144 "xloc": [
4139 - "default.handlebars->29->2068"
4145 + "default.handlebars->29->2076"
4146 ]
4147 },
4148 {
@@ -4177,7 +4183,7 @@
4183 "zh-cht": "代理訊息",
4184 "xloc": [
4185 "default-mobile.handlebars->9->181",
4180 - "default.handlebars->29->269"
4186 + "default.handlebars->29->270"
4187 ]
4188 },
4189 {
@@ -4239,7 +4245,7 @@
4245 "zh-chs": "代理时段",
4246 "zh-cht": "代理時段",
4247 "xloc": [
4242 - "default.handlebars->29->2084"
4248 + "default.handlebars->29->2092"
4249 ]
4250 },
4251 {
@@ -4260,7 +4266,7 @@
4266 "zh-cht": "代理標籤",
4267 "xloc": [
4268 "default-mobile.handlebars->9->249",
4263 - "default.handlebars->29->584"
4269 + "default.handlebars->29->585"
4270 ]
4271 },
4272 {
@@ -4280,7 +4286,7 @@
4286 "zh-chs": "代理类型",
4287 "zh-cht": "代理類型",
4288 "xloc": [
4283 - "default.handlebars->29->1541",
4289 + "default.handlebars->29->1549",
4290 "default.handlebars->container->column_l->p21->3->1->meshOsChartDiv->1"
4291 ]
4292 },
@@ -4301,7 +4307,7 @@
4307 "zh-chs": "代理关闭了与服务器压缩的{0}%代理会话。已发送:{1},已压缩:{2}",
4308 "zh-cht": "代理關閉了與{0}%代理到服務器壓縮的會話。已發送:{1},已壓縮:{2}",
4309 "xloc": [
4304 - "default.handlebars->29->1645"
4310 + "default.handlebars->29->1653"
4311 ]
4312 },
4313 {
@@ -4322,8 +4328,8 @@
4328 "zh-cht": "代理已連接",
4329 "xloc": [
4330 "default.handlebars->29->163",
4325 - "default.handlebars->29->653",
4326 - "default.handlebars->29->654"
4331 + "default.handlebars->29->654",
4332 + "default.handlebars->29->655"
4333 ]
4334 },
4335 {
@@ -4363,7 +4369,7 @@
4369 "zh-chs": "代理离线",
4370 "zh-cht": "代理離線",
4371 "xloc": [
4366 - "default.handlebars->29->1015"
4372 + "default.handlebars->29->1023"
4373 ]
4374 },
4375 {
@@ -4383,7 +4389,7 @@
4389 "zh-chs": "代理在线",
4390 "zh-cht": "代理在線",
4391 "xloc": [
4386 - "default.handlebars->29->1014"
4392 + "default.handlebars->29->1022"
4393 ]
4394 },
4395 {
@@ -4392,7 +4398,7 @@
4398 "nl": "De agent wordt op een extern apparaat uitgevoerd met beperkte rechten.",
4399 "xloc": [
4400 "default.handlebars->29->161",
4395 - "default.handlebars->29->651"
4401 + "default.handlebars->29->652"
4402 ]
4403 },
4404 {
@@ -4412,7 +4418,7 @@
4418 "zh-chs": "代理",
4419 "zh-cht": "代理",
4420 "xloc": [
4415 - "default.handlebars->29->2100"
4421 + "default.handlebars->29->2108"
4422 ]
4423 },
4424 {
@@ -4432,7 +4438,7 @@
4438 "zh-chs": "阿尔巴尼亚文",
4439 "zh-cht": "阿爾巴尼亞文",
4440 "xloc": [
4435 - "default.handlebars->29->1054"
4441 + "default.handlebars->29->1062"
4442 ]
4443 },
4444 {
@@ -4475,7 +4481,7 @@
4481 "zh-chs": "全部可用",
4482 "zh-cht": "全部可用",
4483 "xloc": [
4478 - "default.handlebars->29->1699"
4484 + "default.handlebars->29->1707"
4485 ]
4486 },
4487 {
@@ -4512,7 +4518,7 @@
4518 "zh-chs": "所有事件",
4519 "zh-cht": "所有事件",
4520 "xloc": [
4515 - "default.handlebars->29->1697"
4521 + "default.handlebars->29->1705"
4522 ]
4523 },
4524 {
@@ -4532,9 +4538,9 @@
4538 "zh-chs": "全部聚焦",
4539 "zh-cht": "全部聚焦",
4540 "xloc": [
4535 - "default.handlebars->29->842",
4536 - "default.handlebars->29->844",
4537 - "default.handlebars->29->845"
4541 + "default.handlebars->29->850",
4542 + "default.handlebars->29->852",
4543 + "default.handlebars->29->853"
4544 ]
4545 },
4546 {
@@ -4554,8 +4560,8 @@
4560 "zh-chs": "允许用户管理此设备组和该组中的设备。",
4561 "zh-cht": "允許用戶管理此裝置群和該群中的裝置。",
4562 "xloc": [
4557 - "default.handlebars->29->1436",
4558 - "default.handlebars->29->1900"
4563 + "default.handlebars->29->1444",
4564 + "default.handlebars->29->1908"
4565 ]
4566 },
4567 {
@@ -4575,7 +4581,7 @@
4581 "zh-chs": "允许用户管理此设备。",
4582 "zh-cht": "允許用戶管理此裝置。",
4583 "xloc": [
4578 - "default.handlebars->29->1437"
4584 + "default.handlebars->29->1445"
4585 ]
4586 },
4587 {
@@ -4639,7 +4645,7 @@
4645 "zh-chs": "备用(F10 = ESC + 0)",
4646 "zh-cht": "備用(F10 = ESC + 0)",
4647 "xloc": [
4642 - "default.handlebars->29->879"
4648 + "default.handlebars->29->887"
4649 ]
4650 },
4651 {
@@ -4680,10 +4686,10 @@
4686 "zh-chs": "一直通知",
4687 "zh-cht": "一直通知",
4688 "xloc": [
4683 - "default.handlebars->29->1348",
4684 - "default.handlebars->29->1861",
4685 - "default.handlebars->29->1948",
4686 - "default.handlebars->29->599"
4689 + "default.handlebars->29->1356",
4690 + "default.handlebars->29->1869",
4691 + "default.handlebars->29->1956",
4692 + "default.handlebars->29->600"
4693 ]
4694 },
4695 {
@@ -4703,10 +4709,10 @@
4709 "zh-chs": "一直提示",
4710 "zh-cht": "一直提示",
4711 "xloc": [
4706 - "default.handlebars->29->1349",
4707 - "default.handlebars->29->1862",
4708 - "default.handlebars->29->1949",
4709 - "default.handlebars->29->600"
4712 + "default.handlebars->29->1357",
4713 + "default.handlebars->29->1870",
4714 + "default.handlebars->29->1957",
4715 + "default.handlebars->29->601"
4716 ]
4717 },
4718 {
@@ -4829,7 +4835,7 @@
4835 "zh-chs": "杀毒软件",
4836 "zh-cht": "防毒軟體",
4837 "xloc": [
4832 - "default.handlebars->29->590"
4838 + "default.handlebars->29->591"
4839 ]
4840 },
4841 {
@@ -4849,7 +4855,7 @@
4855 "zh-chs": "任何可支持的",
4856 "zh-cht": "任何可支持的",
4857 "xloc": [
4852 - "default.handlebars->29->324"
4858 + "default.handlebars->29->325"
4859 ]
4860 },
4861 {
@@ -4869,7 +4875,7 @@
4875 "zh-chs": "苹果macOS",
4876 "zh-cht": "蘋果macOS",
4877 "xloc": [
4872 - "default.handlebars->29->359"
4878 + "default.handlebars->29->360"
4879 ]
4880 },
4881 {
@@ -4889,7 +4895,7 @@
4895 "zh-chs": "仅限Apple macOS",
4896 "zh-cht": "僅限Apple macOS",
4897 "xloc": [
4892 - "default.handlebars->29->326"
4898 + "default.handlebars->29->327"
4899 ]
4900 },
4901 {
@@ -4929,7 +4935,7 @@
4935 "zh-chs": "阿拉伯文(阿尔及利亚)",
4936 "zh-cht": "阿拉伯文(阿爾及利亞)",
4937 "xloc": [
4932 - "default.handlebars->29->1056"
4938 + "default.handlebars->29->1064"
4939 ]
4940 },
4941 {
@@ -4949,7 +4955,7 @@
4955 "zh-chs": "阿拉伯文(巴林)",
4956 "zh-cht": "阿拉伯文(巴林)",
4957 "xloc": [
4952 - "default.handlebars->29->1057"
4958 + "default.handlebars->29->1065"
4959 ]
4960 },
4961 {
@@ -4969,7 +4975,7 @@
4975 "zh-chs": "阿拉伯文(埃及)",
4976 "zh-cht": "阿拉伯文(埃及)",
4977 "xloc": [
4972 - "default.handlebars->29->1058"
4978 + "default.handlebars->29->1066"
4979 ]
4980 },
4981 {
@@ -4989,7 +4995,7 @@
4995 "zh-chs": "阿拉伯文(伊拉克)",
4996 "zh-cht": "阿拉伯文(伊拉克)",
4997 "xloc": [
4992 - "default.handlebars->29->1059"
4998 + "default.handlebars->29->1067"
4999 ]
5000 },
5001 {
@@ -5009,7 +5015,7 @@
5015 "zh-chs": "阿拉伯文(约旦)",
5016 "zh-cht": "阿拉伯文(約旦)",
5017 "xloc": [
5012 - "default.handlebars->29->1060"
5018 + "default.handlebars->29->1068"
5019 ]
5020 },
5021 {
@@ -5029,7 +5035,7 @@
5035 "zh-chs": "阿拉伯文(科威特)",
5036 "zh-cht": "阿拉伯文(科威特)",
5037 "xloc": [
5032 - "default.handlebars->29->1061"
5038 + "default.handlebars->29->1069"
5039 ]
5040 },
5041 {
@@ -5049,7 +5055,7 @@
5055 "zh-chs": "阿拉伯文(黎巴嫩)",
5056 "zh-cht": "阿拉伯文(黎巴嫩)",
5057 "xloc": [
5052 - "default.handlebars->29->1062"
5058 + "default.handlebars->29->1070"
5059 ]
5060 },
5061 {
@@ -5069,7 +5075,7 @@
5075 "zh-chs": "阿拉伯文(利比亚)",
5076 "zh-cht": "阿拉伯文(利比亞)",
5077 "xloc": [
5072 - "default.handlebars->29->1063"
5078 + "default.handlebars->29->1071"
5079 ]
5080 },
5081 {
@@ -5089,7 +5095,7 @@
5095 "zh-chs": "阿拉伯文(摩洛哥)",
5096 "zh-cht": "阿拉伯文(摩洛哥)",
5097 "xloc": [
5092 - "default.handlebars->29->1064"
5098 + "default.handlebars->29->1072"
5099 ]
5100 },
5101 {
@@ -5109,7 +5115,7 @@
5115 "zh-chs": "阿拉伯文(阿曼)",
5116 "zh-cht": "阿拉伯文(阿曼)",
5117 "xloc": [
5112 - "default.handlebars->29->1065"
5118 + "default.handlebars->29->1073"
5119 ]
5120 },
5121 {
@@ -5129,7 +5135,7 @@
5135 "zh-chs": "阿拉伯文(卡塔尔)",
5136 "zh-cht": "阿拉伯文(卡塔爾)",
5137 "xloc": [
5132 - "default.handlebars->29->1066"
5138 + "default.handlebars->29->1074"
5139 ]
5140 },
5141 {
@@ -5149,7 +5155,7 @@
5155 "zh-chs": "阿拉伯文(沙特阿拉伯)",
5156 "zh-cht": "阿拉伯文(沙特阿拉伯)",
5157 "xloc": [
5152 - "default.handlebars->29->1067"
5158 + "default.handlebars->29->1075"
5159 ]
5160 },
5161 {
@@ -5169,7 +5175,7 @@
5175 "zh-chs": "阿拉伯文(标准)",
5176 "zh-cht": "阿拉伯文(標準)",
5177 "xloc": [
5172 - "default.handlebars->29->1055"
5178 + "default.handlebars->29->1063"
5179 ]
5180 },
5181 {
@@ -5189,7 +5195,7 @@
5195 "zh-chs": "阿拉伯文(叙利亚)",
5196 "zh-cht": "阿拉伯文(敘利亞)",
5197 "xloc": [
5192 - "default.handlebars->29->1068"
5198 + "default.handlebars->29->1076"
5199 ]
5200 },
5201 {
@@ -5209,7 +5215,7 @@
5215 "zh-chs": "阿拉伯文(突尼斯)",
5216 "zh-cht": "阿拉伯文(突尼斯)",
5217 "xloc": [
5212 - "default.handlebars->29->1069"
5218 + "default.handlebars->29->1077"
5219 ]
5220 },
5221 {
@@ -5229,7 +5235,7 @@
5235 "zh-chs": "阿拉伯文(阿联酋)",
5236 "zh-cht": "阿拉伯文(阿聯酋)",
5237 "xloc": [
5232 - "default.handlebars->29->1070"
5238 + "default.handlebars->29->1078"
5239 ]
5240 },
5241 {
@@ -5249,7 +5255,7 @@
5255 "zh-chs": "阿拉伯文(也门)",
5256 "zh-cht": "阿拉伯文(也門)",
5257 "xloc": [
5252 - "default.handlebars->29->1071"
5258 + "default.handlebars->29->1079"
5259 ]
5260 },
5261 {
@@ -5269,7 +5275,7 @@
5275 "zh-chs": "阿拉贡文",
5276 "zh-cht": "阿拉貢文",
5277 "xloc": [
5272 - "default.handlebars->29->1072"
5278 + "default.handlebars->29->1080"
5279 ]
5280 },
5281 {
@@ -5290,7 +5296,7 @@
5296 "zh-cht": "結構",
5297 "xloc": [
5298 "default-mobile.handlebars->9->340",
5293 - "default.handlebars->29->940"
5299 + "default.handlebars->29->948"
5300 ]
5301 },
5302 {
@@ -5310,7 +5316,7 @@
5316 "zh-chs": "您确定要连接到{0}设备吗?",
5317 "zh-cht": "你確定要連接到{0}裝置嗎?",
5318 "xloc": [
5313 - "default.handlebars->29->272"
5319 + "default.handlebars->29->273"
5320 ]
5321 },
5322 {
@@ -5331,7 +5337,7 @@
5337 "zh-cht": "你確定要刪除群{0}嗎?刪除裝置群還將刪除該群中有關裝置的所有訊息。",
5338 "xloc": [
5339 "default-mobile.handlebars->9->416",
5334 - "default.handlebars->29->1412"
5340 + "default.handlebars->29->1420"
5341 ]
5342 },
5343 {
@@ -5351,7 +5357,7 @@
5357 "zh-chs": "您确定要删除节点{0}吗?",
5358 "zh-cht": "你確定要刪除節點{0}嗎?",
5359 "xloc": [
5354 - "default.handlebars->29->789"
5360 + "default.handlebars->29->797"
5361 ]
5362 },
5363 {
@@ -5371,7 +5377,7 @@
5377 "zh-chs": "您确定要卸载所选代理吗?",
5378 "zh-cht": "你確定要卸載所選代理嗎?",
5379 "xloc": [
5374 - "default.handlebars->29->778"
5380 + "default.handlebars->29->786"
5381 ]
5382 },
5383 {
@@ -5391,7 +5397,7 @@
5397 "zh-chs": "您确定要卸载所选的{0}代理吗?",
5398 "zh-cht": "你確定要卸載所選的{0}代理嗎?",
5399 "xloc": [
5394 - "default.handlebars->29->777"
5400 + "default.handlebars->29->785"
5401 ]
5402 },
5403 {
@@ -5411,7 +5417,7 @@
5417 "zh-chs": "您确定要{0}插件吗:{1}",
5418 "zh-cht": "你確定要{0}外掛嗎:{1}",
5419 "xloc": [
5414 - "default.handlebars->29->2140"
5420 + "default.handlebars->29->2148"
5421 ]
5422 },
5423 {
@@ -5431,7 +5437,7 @@
5437 "zh-chs": "亚美尼亚文",
5438 "zh-cht": "亞美尼亞文",
5439 "xloc": [
5434 - "default.handlebars->29->1073"
5440 + "default.handlebars->29->1081"
5441 ]
5442 },
5443 {
@@ -5491,7 +5497,7 @@
5497 "zh-chs": "阿萨姆文",
5498 "zh-cht": "阿薩姆文",
5499 "xloc": [
5494 - "default.handlebars->29->1074"
5500 + "default.handlebars->29->1082"
5501 ]
5502 },
5503 {
@@ -5511,7 +5517,7 @@
5517 "zh-chs": "阿斯图里亚斯文",
5518 "zh-cht": "阿斯圖里亞斯文",
5519 "xloc": [
5514 - "default.handlebars->29->1075"
5520 + "default.handlebars->29->1083"
5521 ]
5522 },
5523 {
@@ -5531,7 +5537,7 @@
5537 "zh-chs": "尝试激活英特尔(R)AMT ACM模式",
5538 "zh-cht": "嘗試激活英特爾(R)AMT ACM模式",
5539 "xloc": [
5534 - "default.handlebars->29->1614"
5540 + "default.handlebars->29->1622"
5541 ]
5542 },
5543 {
@@ -5551,7 +5557,7 @@
5557 "zh-chs": "认证软件",
5558 "zh-cht": "認證軟體",
5559 "xloc": [
5554 - "default.handlebars->29->1952"
5560 + "default.handlebars->29->1960"
5561 ]
5562 },
5563 {
@@ -5575,8 +5581,8 @@
5581 "default-mobile.handlebars->9->52",
5582 "default-mobile.handlebars->9->71",
5583 "default-mobile.handlebars->9->73",
5578 - "default.handlebars->29->1039",
5579 - "default.handlebars->29->1041",
5584 + "default.handlebars->29->1047",
5585 + "default.handlebars->29->1049",
5586 "default.handlebars->29->125",
5587 "default.handlebars->29->130"
5588 ]
@@ -5658,7 +5664,7 @@
5664 "zh-chs": "自动删除",
5665 "zh-cht": "自動刪除",
5666 "xloc": [
5661 - "default.handlebars->29->1335"
5667 + "default.handlebars->29->1343"
5668 ]
5669 },
5670 {
@@ -5722,7 +5728,7 @@
5728 "zh-chs": "可用內存",
5729 "zh-cht": "可用內存",
5730 "xloc": [
5725 - "default.handlebars->29->2093"
5731 + "default.handlebars->29->2101"
5732 ]
5733 },
5734 {
@@ -5742,7 +5748,7 @@
5748 "zh-chs": "阿塞拜疆文",
5749 "zh-cht": "阿塞拜疆文",
5750 "xloc": [
5745 - "default.handlebars->29->1076"
5751 + "default.handlebars->29->1084"
5752 ]
5753 },
5754 {
@@ -5763,7 +5769,7 @@
5769 "zh-cht": "的BIOS",
5770 "xloc": [
5771 "default-mobile.handlebars->9->382",
5766 - "default.handlebars->29->992"
5772 + "default.handlebars->29->1000"
5773 ]
5774 },
5775 {
@@ -5858,7 +5864,7 @@
5864 "zh-chs": "背景与互动",
5865 "zh-cht": "背景與互動",
5866 "xloc": [
5861 - "default.handlebars->29->364"
5867 + "default.handlebars->29->365"
5868 ]
5869 },
5870 {
@@ -5878,10 +5884,10 @@
5884 "zh-chs": "背景与互动",
5885 "zh-cht": "背景與互動",
5886 "xloc": [
5881 - "default.handlebars->29->1518",
5882 - "default.handlebars->29->1525",
5883 - "default.handlebars->29->336",
5884 - "default.handlebars->29->350"
5887 + "default.handlebars->29->1526",
5888 + "default.handlebars->29->1533",
5889 + "default.handlebars->29->337",
5890 + "default.handlebars->29->351"
5891 ]
5892 },
5893 {
@@ -5901,11 +5907,11 @@
5907 "zh-chs": "仅背景",
5908 "zh-cht": "僅背景",
5909 "xloc": [
5904 - "default.handlebars->29->1519",
5905 - "default.handlebars->29->1526",
5906 - "default.handlebars->29->337",
5907 - "default.handlebars->29->351",
5908 - "default.handlebars->29->365"
5910 + "default.handlebars->29->1527",
5911 + "default.handlebars->29->1534",
5912 + "default.handlebars->29->338",
5913 + "default.handlebars->29->352",
5914 + "default.handlebars->29->366"
5915 ]
5916 },
5917 {
@@ -5945,7 +5951,7 @@
5951 "zh-chs": "备用码",
5952 "zh-cht": "備用碼",
5953 "xloc": [
5948 - "default.handlebars->29->1954"
5954 + "default.handlebars->29->1962"
5955 ]
5956 },
5957 {
@@ -5965,7 +5971,7 @@
5971 "zh-chs": "错误的签名",
5972 "zh-cht": "錯誤的簽名",
5973 "xloc": [
5968 - "default.handlebars->29->2075"
5974 + "default.handlebars->29->2083"
5975 ]
5976 },
5977 {
@@ -5985,7 +5991,7 @@
5991 "zh-chs": "错误的网络证书",
5992 "zh-cht": "錯誤的網絡憑證",
5993 "xloc": [
5988 - "default.handlebars->29->2074"
5994 + "default.handlebars->29->2082"
5995 ]
5996 },
5997 {
@@ -6005,7 +6011,7 @@
6011 "zh-chs": "巴斯克",
6012 "zh-cht": "巴斯克",
6013 "xloc": [
6008 - "default.handlebars->29->1077"
6014 + "default.handlebars->29->1085"
6015 ]
6016 },
6017 {
@@ -6013,7 +6019,7 @@
6019 "nl": "Batch bestand uploaden",
6020 "fr": "Chargement de fichiers",
6021 "xloc": [
6016 - "default.handlebars->29->480"
6022 + "default.handlebars->29->481"
6023 ]
6024 },
6025 {
@@ -6041,7 +6047,7 @@
6047 "nl": "Batch-upload van {0} bestand (en) naar map {1}",
6048 "fr": "Chargement de {0} fichier(s) dans le dossier {1}",
6049 "xloc": [
6044 - "default.handlebars->29->1694"
6050 + "default.handlebars->29->1702"
6051 ]
6052 },
6053 {
@@ -6061,7 +6067,7 @@
6067 "zh-chs": "白俄罗斯文",
6068 "zh-cht": "白俄羅斯文",
6069 "xloc": [
6064 - "default.handlebars->29->1079"
6070 + "default.handlebars->29->1087"
6071 ]
6072 },
6073 {
@@ -6081,7 +6087,7 @@
6087 "zh-chs": "孟加拉",
6088 "zh-cht": "孟加拉",
6089 "xloc": [
6084 - "default.handlebars->29->1080"
6090 + "default.handlebars->29->1088"
6091 ]
6092 },
6093 {
@@ -6124,7 +6130,7 @@
6130 "zh-chs": "波斯尼亚文",
6131 "zh-cht": "波斯尼亞文",
6132 "xloc": [
6127 - "default.handlebars->29->1081"
6133 + "default.handlebars->29->1089"
6134 ]
6135 },
6136 {
@@ -6144,7 +6150,7 @@
6150 "zh-chs": "布列塔尼",
6151 "zh-cht": "布列塔尼",
6152 "xloc": [
6147 - "default.handlebars->29->1082"
6153 + "default.handlebars->29->1090"
6154 ]
6155 },
6156 {
@@ -6164,7 +6170,7 @@
6170 "zh-chs": "广播",
6171 "zh-cht": "廣播",
6172 "xloc": [
6167 - "default.handlebars->29->1868",
6173 + "default.handlebars->29->1876",
6174 "default.handlebars->container->column_l->p4->3->1->0->3->1"
6175 ]
6176 },
@@ -6185,7 +6191,7 @@
6191 "zh-chs": "广播消息",
6192 "zh-cht": "廣播消息",
6193 "xloc": [
6188 - "default.handlebars->29->1789"
6194 + "default.handlebars->29->1797"
6195 ]
6196 },
6197 {
@@ -6205,7 +6211,7 @@
6211 "zh-chs": "向所有连接的用户广播消息。",
6212 "zh-cht": "向所有連接的用戶廣播消息。",
6213 "xloc": [
6208 - "default.handlebars->29->1784"
6214 + "default.handlebars->29->1792"
6215 ]
6216 },
6217 {
@@ -6225,7 +6231,7 @@
6231 "zh-chs": "保加利亚文",
6232 "zh-cht": "保加利亞文",
6233 "xloc": [
6228 - "default.handlebars->29->1078"
6234 + "default.handlebars->29->1086"
6235 ]
6236 },
6237 {
@@ -6245,7 +6251,7 @@
6251 "zh-chs": "缅甸文",
6252 "zh-cht": "緬甸文",
6253 "xloc": [
6248 - "default.handlebars->29->1083"
6254 + "default.handlebars->29->1091"
6255 ]
6256 },
6257 {
@@ -6266,13 +6272,13 @@
6272 "zh-cht": "CCM",
6273 "xloc": [
6274 "default-mobile.handlebars->9->235",
6269 - "default.handlebars->29->566"
6275 + "default.handlebars->29->567"
6276 ]
6277 },
6278 {
6279 "en": "CCM mode",
6280 "xloc": [
6275 - "default.handlebars->29->1395"
6281 + "default.handlebars->29->1403"
6282 ]
6283 },
6284 {
@@ -6293,8 +6299,8 @@
6299 "zh-cht": "CIRA",
6300 "xloc": [
6301 "default-mobile.handlebars->9->204",
6296 - "default.handlebars->29->216",
6297 - "default.handlebars->29->425"
6302 + "default.handlebars->29->217",
6303 + "default.handlebars->29->426"
6304 ]
6305 },
6306 {
@@ -6314,7 +6320,7 @@
6320 "zh-chs": "CIRA服务器",
6321 "zh-cht": "CIRA伺服器",
6322 "xloc": [
6317 - "default.handlebars->29->2128"
6323 + "default.handlebars->29->2136"
6324 ]
6325 },
6326 {
@@ -6334,7 +6340,7 @@
6340 "zh-chs": "CIRA服务器命令",
6341 "zh-cht": "CIRA伺服器指令",
6342 "xloc": [
6337 - "default.handlebars->29->2129"
6343 + "default.handlebars->29->2137"
6344 ]
6345 },
6346 {
@@ -6342,7 +6348,7 @@
6348 "fr": "Configuration CIRA",
6349 "nl": "CIRA setup",
6350 "xloc": [
6345 - "default.handlebars->29->1403"
6351 + "default.handlebars->29->1411"
6352 ]
6353 },
6354 {
@@ -6363,7 +6369,7 @@
6369 "zh-cht": "CPU",
6370 "xloc": [
6371 "default-mobile.handlebars->9->388",
6366 - "default.handlebars->29->998"
6372 + "default.handlebars->29->1006"
6373 ]
6374 },
6375 {
@@ -6383,7 +6389,7 @@
6389 "zh-chs": "CPU负载",
6390 "zh-cht": "CPU負載",
6391 "xloc": [
6386 - "default.handlebars->29->2089"
6392 + "default.handlebars->29->2097"
6393 ]
6394 },
6395 {
@@ -6403,7 +6409,7 @@
6409 "zh-chs": "最近15分钟的CPU负载",
6410 "zh-cht": "最近15分鐘的CPU負載",
6411 "xloc": [
6406 - "default.handlebars->29->2092"
6412 + "default.handlebars->29->2100"
6413 ]
6414 },
6415 {
@@ -6423,7 +6429,7 @@
6429 "zh-chs": "最近5分钟的CPU负载",
6430 "zh-cht": "最近5分鐘的CPU負載",
6431 "xloc": [
6426 - "default.handlebars->29->2091"
6432 + "default.handlebars->29->2099"
6433 ]
6434 },
6435 {
@@ -6443,7 +6449,7 @@
6449 "zh-chs": "最近一分钟的CPU负载",
6450 "zh-cht": "最近一分鐘的CPU負載",
6451 "xloc": [
6446 - "default.handlebars->29->2090"
6452 + "default.handlebars->29->2098"
6453 ]
6454 },
6455 {
@@ -6463,8 +6469,8 @@
6469 "zh-chs": "CR+LF",
6470 "zh-cht": "CR+LF",
6471 "xloc": [
6466 - "default.handlebars->29->872",
6467 - "default.handlebars->29->881",
6472 + "default.handlebars->29->880",
6473 + "default.handlebars->29->889",
6474 "default.handlebars->container->column_l->p12->termTable->1->1->6->1->1->terminalSettingsButtons"
6475 ]
6476 },
@@ -6485,7 +6491,7 @@
6491 "zh-chs": "CSV",
6492 "zh-cht": "CSV",
6493 "xloc": [
6488 - "default.handlebars->29->1707"
6494 + "default.handlebars->29->1715"
6495 ]
6496 },
6497 {
@@ -6505,9 +6511,9 @@
6511 "zh-chs": "CSV格式",
6512 "zh-cht": "CSV格式",
6513 "xloc": [
6508 - "default.handlebars->29->1711",
6509 - "default.handlebars->29->1776",
6510 - "default.handlebars->29->482"
6514 + "default.handlebars->29->1719",
6515 + "default.handlebars->29->1784",
6516 + "default.handlebars->29->483"
6517 ]
6518 },
6519 {
@@ -6535,7 +6541,7 @@
6541 "zh-chs": "呼叫错误",
6542 "zh-cht": "呼叫錯誤",
6543 "xloc": [
6538 - "default.handlebars->29->2141"
6544 + "default.handlebars->29->2149"
6545 ]
6546 },
6547 {
@@ -6557,7 +6563,7 @@
6563 "xloc": [
6564 "default-mobile.handlebars->9->82",
6565 "default-mobile.handlebars->dialog->idx_dlgButtonBar",
6560 - "default.handlebars->29->1313",
6566 + "default.handlebars->29->1321",
6567 "default.handlebars->container->dialog->idx_dlgButtonBar",
6568 "desktop.handlebars->p11->dialog->idx_dlgButtonBar",
6569 "login-mobile.handlebars->dialog->idx_dlgButtonBar",
@@ -6587,9 +6593,9 @@
6593 "default-mobile.handlebars->9->393",
6594 "default-mobile.handlebars->9->398",
6595 "default-mobile.handlebars->9->400",
6590 - "default.handlebars->29->1003",
6591 - "default.handlebars->29->1008",
6592 - "default.handlebars->29->1010"
6596 + "default.handlebars->29->1011",
6597 + "default.handlebars->29->1016",
6598 + "default.handlebars->29->1018"
6599 ]
6600 },
6601 {
@@ -6610,7 +6616,7 @@
6616 "zh-cht": "容量/速度",
6617 "xloc": [
6618 "default-mobile.handlebars->9->391",
6613 - "default.handlebars->29->1001"
6619 + "default.handlebars->29->1009"
6620 ]
6621 },
6622 {
@@ -6630,7 +6636,7 @@
6636 "zh-chs": "加泰罗尼亚文",
6637 "zh-cht": "加泰羅尼亞文",
6638 "xloc": [
6633 - "default.handlebars->29->1084"
6639 + "default.handlebars->29->1092"
6640 ]
6641 },
6642 {
@@ -6650,7 +6656,7 @@
6656 "zh-chs": "在这里为中心显示地图",
6657 "zh-cht": "在這裡為中心顯示地圖",
6658 "xloc": [
6653 - "default.handlebars->29->528"
6659 + "default.handlebars->29->529"
6660 ]
6661 },
6662 {
@@ -6670,7 +6676,7 @@
6676 "zh-chs": "查莫罗",
6677 "zh-cht": "查莫羅",
6678 "xloc": [
6673 - "default.handlebars->29->1085"
6679 + "default.handlebars->29->1093"
6680 ]
6681 },
6682 {
@@ -6712,7 +6718,7 @@
6718 "zh-chs": "更改{0}的电邮",
6719 "zh-cht": "更改{0}的電郵",
6720 "xloc": [
6715 - "default.handlebars->29->1982"
6721 + "default.handlebars->29->1990"
6722 ]
6723 },
6724 {
@@ -6732,9 +6738,9 @@
6738 "zh-chs": "更改组",
6739 "zh-cht": "更改群",
6740 "xloc": [
6735 - "default.handlebars->29->628",
6736 - "default.handlebars->29->786",
6737 - "default.handlebars->29->787"
6741 + "default.handlebars->29->629",
6742 + "default.handlebars->29->794",
6743 + "default.handlebars->29->795"
6744 ]
6745 },
6746 {
@@ -6755,8 +6761,8 @@
6761 "zh-cht": "更改密碼",
6762 "xloc": [
6763 "default-mobile.handlebars->9->90",
6758 - "default.handlebars->29->1280",
6759 - "default.handlebars->29->1969"
6764 + "default.handlebars->29->1288",
6765 + "default.handlebars->29->1977"
6766 ]
6767 },
6768 {
@@ -6776,7 +6782,7 @@
6782 "zh-chs": "更改{0}的密码",
6783 "zh-cht": "更改{0}的密碼",
6784 "xloc": [
6779 - "default.handlebars->29->1989"
6785 + "default.handlebars->29->1997"
6786 ]
6787 },
6788 {
@@ -6796,7 +6802,7 @@
6802 "zh-chs": "更改{0}的真实名称",
6803 "zh-cht": "更改{0}的真實名稱",
6804 "xloc": [
6799 - "default.handlebars->29->1977"
6805 + "default.handlebars->29->1985"
6806 ]
6807 },
6808 {
@@ -6878,7 +6884,7 @@
6884 "zh-chs": "更改该用户的密码",
6885 "zh-cht": "更改該用戶的密碼",
6886 "xloc": [
6881 - "default.handlebars->29->1968"
6887 + "default.handlebars->29->1976"
6888 ]
6889 },
6890 {
@@ -6918,7 +6924,7 @@
6924 "zh-chs": "在此处更改您的帐户电邮地址。",
6925 "zh-cht": "在此處更改你的帳戶電郵地址。",
6926 "xloc": [
6921 - "default.handlebars->29->1267"
6927 + "default.handlebars->29->1275"
6928 ]
6929 },
6930 {
@@ -6938,7 +6944,7 @@
6944 "zh-chs": "在下面的框中两次输入旧密码和新密码,以更改帐户密码。",
6945 "zh-cht": "在下面的框中兩次輸入舊密碼和新密碼,以更改帳戶密碼。",
6946 "xloc": [
6941 - "default.handlebars->29->1273"
6947 + "default.handlebars->29->1281"
6948 ]
6949 },
6950 {
@@ -6958,7 +6964,7 @@
6964 "zh-chs": "更改帐户凭据",
6965 "zh-cht": "帳戶憑證已更改",
6966 "xloc": [
6961 - "default.handlebars->29->1666"
6967 + "default.handlebars->29->1674"
6968 ]
6969 },
6970 {
@@ -6978,7 +6984,7 @@
6984 "zh-chs": "{1}组中的设备{0}已更改:{2}",
6985 "zh-cht": "{1}組中的設備{0}已更改:{2}",
6986 "xloc": [
6981 - "default.handlebars->29->1650"
6987 + "default.handlebars->29->1658"
6988 ]
6989 },
6990 {
@@ -6998,7 +7004,7 @@
7004 "zh-chs": "语言从{1}更改为{2}",
7005 "zh-cht": "語言從{1}更改為{2}",
7006 "xloc": [
7001 - "default.handlebars->29->1594"
7007 + "default.handlebars->29->1602"
7008 ]
7009 },
7010 {
@@ -7018,8 +7024,8 @@
7024 "zh-chs": "已更改{0}的用户设备权限",
7025 "zh-cht": "已更改{0}的用戶設備權限",
7026 "xloc": [
7021 - "default.handlebars->29->1652",
7022 - "default.handlebars->29->1673"
7027 + "default.handlebars->29->1660",
7028 + "default.handlebars->29->1681"
7029 ]
7030 },
7031 {
@@ -7039,7 +7045,7 @@
7045 "zh-chs": "更改语言将需要刷新页面。",
7046 "zh-cht": "更改語言將需要刷新頁面。",
7047 "xloc": [
7042 - "default.handlebars->29->1252"
7048 + "default.handlebars->29->1260"
7049 ]
7050 },
7051 {
@@ -7059,9 +7065,9 @@
7065 "zh-chs": "聊天",
7066 "zh-cht": "聊天",
7067 "xloc": [
7062 - "default.handlebars->29->1728",
7063 - "default.handlebars->29->686",
7064 - "default.handlebars->29->707"
7068 + "default.handlebars->29->1736",
7069 + "default.handlebars->29->691",
7070 + "default.handlebars->29->712"
7071 ]
7072 },
7073 {
@@ -7083,8 +7089,8 @@
7089 "xloc": [
7090 "default-mobile.handlebars->9->437",
7091 "default-mobile.handlebars->9->457",
7086 - "default.handlebars->29->1464",
7087 - "default.handlebars->29->1500"
7092 + "default.handlebars->29->1472",
7093 + "default.handlebars->29->1508"
7094 ]
7095 },
7096 {
@@ -7124,7 +7130,7 @@
7130 "zh-chs": "车臣",
7131 "zh-cht": "車臣",
7132 "xloc": [
7127 - "default.handlebars->29->1086"
7133 + "default.handlebars->29->1094"
7134 ]
7135 },
7136 {
@@ -7224,8 +7230,8 @@
7230 "zh-chs": "检查...",
7231 "zh-cht": "檢查...",
7232 "xloc": [
7227 - "default.handlebars->29->1052",
7228 - "default.handlebars->29->2135"
7233 + "default.handlebars->29->1060",
7234 + "default.handlebars->29->2143"
7235 ]
7236 },
7237 {
@@ -7245,7 +7251,7 @@
7251 "zh-chs": "中文",
7252 "zh-cht": "中文",
7253 "xloc": [
7248 - "default.handlebars->29->1087"
7254 + "default.handlebars->29->1095"
7255 ]
7256 },
7257 {
@@ -7265,7 +7271,7 @@
7271 "zh-chs": "中文(香港)",
7272 "zh-cht": "中文(香港)",
7273 "xloc": [
7268 - "default.handlebars->29->1088"
7274 + "default.handlebars->29->1096"
7275 ]
7276 },
7277 {
@@ -7285,7 +7291,7 @@
7291 "zh-chs": "中文(中国)",
7292 "zh-cht": "中文(中國)",
7293 "xloc": [
7288 - "default.handlebars->29->1089"
7294 + "default.handlebars->29->1097"
7295 ]
7296 },
7297 {
@@ -7305,7 +7311,7 @@
7311 "zh-chs": "简体中文",
7312 "zh-cht": "簡體中文",
7313 "xloc": [
7308 - "default.handlebars->29->1249"
7314 + "default.handlebars->29->1257"
7315 ]
7316 },
7317 {
@@ -7325,7 +7331,7 @@
7331 "zh-chs": "中文(新加坡)",
7332 "zh-cht": "中文(新加坡)",
7333 "xloc": [
7328 - "default.handlebars->29->1090"
7334 + "default.handlebars->29->1098"
7335 ]
7336 },
7337 {
@@ -7345,7 +7351,7 @@
7351 "zh-chs": "中文(台湾)",
7352 "zh-cht": "中文(台灣)",
7353 "xloc": [
7348 - "default.handlebars->29->1091"
7354 + "default.handlebars->29->1099"
7355 ]
7356 },
7357 {
@@ -7365,7 +7371,7 @@
7371 "zh-chs": "繁体中文",
7372 "zh-cht": "繁體中文",
7373 "xloc": [
7368 - "default.handlebars->29->1250"
7374 + "default.handlebars->29->1258"
7375 ]
7376 },
7377 {
@@ -7406,7 +7412,7 @@
7412 "zh-chs": "楚瓦什",
7413 "zh-cht": "楚瓦什",
7414 "xloc": [
7409 - "default.handlebars->29->1092"
7415 + "default.handlebars->29->1100"
7416 ]
7417 },
7418 {
@@ -7449,11 +7455,11 @@
7455 "default-mobile.handlebars->9->328",
7456 "default-mobile.handlebars->9->330",
7457 "default-mobile.handlebars->9->59",
7452 - "default.handlebars->29->1588",
7453 - "default.handlebars->29->917",
7454 - "default.handlebars->29->919",
7455 - "default.handlebars->29->921",
7456 - "default.handlebars->29->923",
7458 + "default.handlebars->29->1596",
7459 + "default.handlebars->29->925",
7460 + "default.handlebars->29->927",
7461 + "default.handlebars->29->929",
7462 + "default.handlebars->29->931",
7463 "default.handlebars->container->column_l->p15->consoleTable->1->6->1->1->1->0->7",
7464 "default.handlebars->container->column_l->p41->3->1",
7465 "messenger.handlebars->xbottom"
@@ -7496,7 +7502,7 @@
7502 "zh-chs": "全部清除",
7503 "zh-cht": "全部清除",
7504 "xloc": [
7499 - "default.handlebars->29->2062"
7505 + "default.handlebars->29->2070"
7506 ]
7507 },
7508 {
@@ -7505,7 +7511,7 @@
7511 "nl": "Wis zoekfilter",
7512 "xloc": [
7513 "default-mobile.handlebars->9->154",
7508 - "default.handlebars->29->228"
7514 + "default.handlebars->29->229"
7515 ]
7516 },
7517 {
@@ -7525,7 +7531,7 @@
7531 "zh-chs": "清除核心",
7532 "zh-cht": "清除核心",
7533 "xloc": [
7528 - "default.handlebars->29->1024"
7534 + "default.handlebars->29->1032"
7535 ]
7536 },
7537 {
@@ -7565,7 +7571,7 @@
7571 "zh-chs": "清除此通知",
7572 "zh-cht": "清除此通知",
7573 "xloc": [
7568 - "default.handlebars->29->2061"
7574 + "default.handlebars->29->2069"
7575 ]
7576 },
7577 {
@@ -7625,8 +7631,8 @@
7631 "zh-chs": "单击此处编辑设备组名称",
7632 "zh-cht": "單擊此處編輯裝置群名稱",
7633 "xloc": [
7628 - "default.handlebars->29->1324",
7629 - "default.handlebars->29->1539"
7634 + "default.handlebars->29->1332",
7635 + "default.handlebars->29->1547"
7636 ]
7637 },
7638 {
@@ -7646,7 +7652,7 @@
7652 "zh-chs": "单击此处编辑服务器端设备名称",
7653 "zh-cht": "單擊此處編輯伺服器端裝置名稱",
7654 "xloc": [
7649 - "default.handlebars->29->544"
7655 + "default.handlebars->29->545"
7656 ]
7657 },
7658 {
@@ -7666,7 +7672,7 @@
7672 "zh-chs": "单击此处编辑用户组名称",
7673 "zh-cht": "單擊此處編輯用戶群名稱",
7674 "xloc": [
7669 - "default.handlebars->29->1845"
7675 + "default.handlebars->29->1853"
7676 ]
7677 },
7678 {
@@ -7727,7 +7733,7 @@
7733 "zh-cht": "單擊確定將驗證電郵發送到:",
7734 "xloc": [
7735 "default-mobile.handlebars->9->75",
7730 - "default.handlebars->29->1264"
7736 + "default.handlebars->29->1272"
7737 ]
7738 },
7739 {
@@ -7768,7 +7774,7 @@
7774 "zh-cht": "客戶端控制模式(CCM)",
7775 "xloc": [
7776 "default-mobile.handlebars->9->369",
7771 - "default.handlebars->29->979"
7777 + "default.handlebars->29->987"
7778 ]
7779 },
7780 {
@@ -7788,7 +7794,7 @@
7794 "zh-chs": "客户编号",
7795 "zh-cht": "客戶編號",
7796 "xloc": [
7791 - "default.handlebars->29->1306"
7797 + "default.handlebars->29->1314"
7798 ]
7799 },
7800 {
@@ -7808,7 +7814,7 @@
7814 "zh-chs": "客户端启动的远程访问",
7815 "zh-cht": "客戶端啟動的遠程訪問",
7816 "xloc": [
7811 - "default.handlebars->29->1402"
7817 + "default.handlebars->29->1410"
7818 ]
7819 },
7820 {
@@ -7828,7 +7834,7 @@
7834 "zh-chs": "客户机密",
7835 "zh-cht": "客戶機密",
7836 "xloc": [
7831 - "default.handlebars->29->1307"
7837 + "default.handlebars->29->1315"
7838 ]
7839 },
7840 {
@@ -7872,8 +7878,8 @@
7878 "default-mobile.handlebars->9->57",
7879 "default.handlebars->29->137",
7880 "default.handlebars->29->145",
7875 - "default.handlebars->29->863",
7876 - "default.handlebars->29->894"
7881 + "default.handlebars->29->871",
7882 + "default.handlebars->29->902"
7883 ]
7884 },
7885 {
@@ -7893,7 +7899,7 @@
7899 "zh-chs": "封闭式桌面多路复用会话,{0}秒",
7900 "zh-cht": "封閉式桌面多路復用會話,{0}秒",
7901 "xloc": [
7896 - "default.handlebars->29->1599"
7902 + "default.handlebars->29->1607"
7903 ]
7904 },
7905 {
@@ -7913,7 +7919,7 @@
7919 "zh-chs": "码",
7920 "zh-cht": "碼",
7921 "xloc": [
7916 - "default.handlebars->29->204"
7922 + "default.handlebars->29->205"
7923 ]
7924 },
7925 {
@@ -7971,7 +7977,7 @@
7977 "fr": "Commande",
7978 "nl": "Opdracht",
7979 "xloc": [
7974 - "default.handlebars->29->396"
7980 + "default.handlebars->29->397"
7981 ]
7982 },
7983 {
@@ -7980,9 +7986,9 @@
7986 "nl": "Opdrachten",
7987 "xloc": [
7988 "default-mobile.handlebars->9->459",
7983 - "default.handlebars->29->1502",
7984 - "default.handlebars->29->688",
7985 - "default.handlebars->29->709"
7989 + "default.handlebars->29->1510",
7990 + "default.handlebars->29->693",
7991 + "default.handlebars->29->714"
7992 ]
7993 },
7994 {
@@ -8002,8 +8008,8 @@
8008 "zh-chs": "通用设备组",
8009 "zh-cht": "通用裝置群",
8010 "xloc": [
8005 - "default.handlebars->29->1876",
8006 - "default.handlebars->29->1994"
8011 + "default.handlebars->29->1884",
8012 + "default.handlebars->29->2002"
8013 ]
8014 },
8015 {
@@ -8023,8 +8029,8 @@
8029 "zh-chs": "通用设备",
8030 "zh-cht": "通用裝置",
8031 "xloc": [
8026 - "default.handlebars->29->1882",
8027 - "default.handlebars->29->2006"
8032 + "default.handlebars->29->1890",
8033 + "default.handlebars->29->2014"
8034 ]
8035 },
8036 {
@@ -8044,7 +8050,7 @@
8050 "zh-chs": "压缩档案...",
8051 "zh-cht": "壓縮檔案...",
8052 "xloc": [
8047 - "default.handlebars->29->889"
8053 + "default.handlebars->29->897"
8054 ]
8055 },
8056 {
@@ -8066,14 +8072,14 @@
8072 "xloc": [
8073 "default-mobile.handlebars->9->288",
8074 "default-mobile.handlebars->9->417",
8069 - "default.handlebars->29->1413",
8070 - "default.handlebars->29->1756",
8071 - "default.handlebars->29->1835",
8072 - "default.handlebars->29->1896",
8073 - "default.handlebars->29->1992",
8074 - "default.handlebars->29->452",
8075 - "default.handlebars->29->781",
8076 - "default.handlebars->29->790"
8075 + "default.handlebars->29->1421",
8076 + "default.handlebars->29->1764",
8077 + "default.handlebars->29->1843",
8078 + "default.handlebars->29->1904",
8079 + "default.handlebars->29->2000",
8080 + "default.handlebars->29->453",
8081 + "default.handlebars->29->789",
8082 + "default.handlebars->29->798"
8083 ]
8084 },
8085 {
@@ -8094,7 +8100,7 @@
8100 "zh-cht": "確認將1個副本複製到此位置?",
8101 "xloc": [
8102 "default-mobile.handlebars->9->319",
8097 - "default.handlebars->29->912"
8103 + "default.handlebars->29->920"
8104 ]
8105 },
8106 {
@@ -8114,7 +8120,7 @@
8120 "zh-chs": "确认{0}个条目的复制到此位置?",
8121 "zh-cht": "確認{0}個條目的複製到此位置?",
8122 "xloc": [
8117 - "default.handlebars->29->911"
8123 + "default.handlebars->29->919"
8124 ]
8125 },
8126 {
@@ -8154,7 +8160,7 @@
8160 "zh-chs": "确认删除选定的帐户?",
8161 "zh-cht": "確認刪除所選帳戶?",
8162 "xloc": [
8157 - "default.handlebars->29->1755"
8163 + "default.handlebars->29->1763"
8164 ]
8165 },
8166 {
@@ -8174,7 +8180,7 @@
8180 "zh-chs": "确认删除选定的设备?",
8181 "zh-cht": "確認刪除所選裝置?",
8182 "xloc": [
8177 - "default.handlebars->29->451"
8183 + "default.handlebars->29->452"
8184 ]
8185 },
8186 {
@@ -8194,7 +8200,7 @@
8200 "zh-chs": "确认删除选定的用户组?",
8201 "zh-cht": "確認刪除所選用戶群?",
8202 "xloc": [
8197 - "default.handlebars->29->1834"
8203 + "default.handlebars->29->1842"
8204 ]
8205 },
8206 {
@@ -8214,7 +8220,7 @@
8220 "zh-chs": "确认删除用户{0}?",
8221 "zh-cht": "確認刪除用戶{0}?",
8222 "xloc": [
8217 - "default.handlebars->29->1991"
8223 + "default.handlebars->29->1999"
8224 ]
8225 },
8226 {
@@ -8234,7 +8240,7 @@
8240 "zh-chs": "确认删除用户“ {0} ”的成员身份?",
8241 "zh-cht": "確認刪除用戶“ {0} ”的成員身份?",
8242 "xloc": [
8237 - "default.handlebars->29->1899"
8243 + "default.handlebars->29->1907"
8244 ]
8245 },
8246 {
@@ -8254,7 +8260,7 @@
8260 "zh-chs": "确认删除用户组“ {0} ”的成员身份?",
8261 "zh-cht": "確認刪除用戶群“ {0} ”的成員身份?",
8262 "xloc": [
8257 - "default.handlebars->29->2023"
8263 + "default.handlebars->29->2031"
8264 ]
8265 },
8266 {
@@ -8275,7 +8281,7 @@
8281 "zh-cht": "確認將1個條目移動到此位置?",
8282 "xloc": [
8283 "default-mobile.handlebars->9->321",
8278 - "default.handlebars->29->914"
8284 + "default.handlebars->29->922"
8285 ]
8286 },
8287 {
@@ -8295,7 +8301,7 @@
8301 "zh-chs": "确认将{0}个条目移到此位置?",
8302 "zh-cht": "確認將{0}個條目移到該位置?",
8303 "xloc": [
8298 - "default.handlebars->29->913"
8304 + "default.handlebars->29->921"
8305 ]
8306 },
8307 {
@@ -8335,7 +8341,7 @@
8341 "zh-chs": "确认覆盖?",
8342 "zh-cht": "確認覆蓋?",
8343 "xloc": [
8338 - "default.handlebars->29->1582"
8344 + "default.handlebars->29->1590"
8345 ]
8346 },
8347 {
@@ -8355,8 +8361,8 @@
8361 "zh-chs": "确认删除设备“ {0} ”的访问权限?",
8362 "zh-cht": "確認刪除裝置“ {0} ”的訪問權限?",
8363 "xloc": [
8358 - "default.handlebars->29->1889",
8359 - "default.handlebars->29->2014"
8364 + "default.handlebars->29->1897",
8365 + "default.handlebars->29->2022"
8366 ]
8367 },
8368 {
@@ -8376,8 +8382,8 @@
8382 "zh-chs": "确认删除设备组“ {0} ”的访问权限?",
8383 "zh-cht": "確認刪除裝置群“ {0} ”的訪問權限?",
8384 "xloc": [
8379 - "default.handlebars->29->1891",
8380 - "default.handlebars->29->2027"
8385 + "default.handlebars->29->1899",
8386 + "default.handlebars->29->2035"
8387 ]
8388 },
8389 {
@@ -8397,7 +8403,7 @@
8403 "zh-chs": "确认删除用户“ {0} ”的访问权限?",
8404 "zh-cht": "確認刪除用戶“ {0} ”的訪問權限?",
8405 "xloc": [
8400 - "default.handlebars->29->2016"
8406 + "default.handlebars->29->2024"
8407 ]
8408 },
8409 {
@@ -8417,7 +8423,7 @@
8423 "zh-chs": "确认删除用户组“ {0} ”的访问权限?",
8424 "zh-cht": "確認刪除用戶群“ {0} ”的訪問權限?",
8425 "xloc": [
8420 - "default.handlebars->29->2019"
8426 + "default.handlebars->29->2027"
8427 ]
8428 },
8429 {
@@ -8437,8 +8443,8 @@
8443 "zh-chs": "确认删除访问权限?",
8444 "zh-cht": "確認刪除訪問權限?",
8445 "xloc": [
8440 - "default.handlebars->29->2017",
8441 - "default.handlebars->29->2020"
8446 + "default.handlebars->29->2025",
8447 + "default.handlebars->29->2028"
8448 ]
8449 },
8450 {
@@ -8459,7 +8465,7 @@
8465 "zh-cht": "確認刪除身份驗證軟體兩步登入?",
8466 "xloc": [
8467 "default-mobile.handlebars->9->74",
8462 - "default.handlebars->29->1042"
8468 + "default.handlebars->29->1050"
8469 ]
8470 },
8471 {
@@ -8484,7 +8490,7 @@
8490 "fr": "Confirmez-vous l'arrêt du partage \\\"{0}\\\"?",
8491 "nl": "Bevestig de verwijdering van apparaatdeling \\\"{0}\\\"?",
8492 "xloc": [
8487 - "default.handlebars->29->2012"
8493 + "default.handlebars->29->2020"
8494 ]
8495 },
8496 {
@@ -8538,7 +8544,7 @@
8544 "zh-chs": "确认删除用户“ {0} ”的权限?",
8545 "zh-cht": "確認刪除用戶“ {0} ”的權限?",
8546 "xloc": [
8541 - "default.handlebars->29->1511"
8547 + "default.handlebars->29->1519"
8548 ]
8549 },
8550 {
@@ -8558,7 +8564,7 @@
8564 "zh-chs": "确认删除用户组“ {0} ”的权限?",
8565 "zh-cht": "確認刪除用戶群“ {0} ”的權限?",
8566 "xloc": [
8561 - "default.handlebars->29->1513"
8567 + "default.handlebars->29->1521"
8568 ]
8569 },
8570 {
@@ -8616,7 +8622,7 @@
8622 "zh-cht": "將{1}入口{2}中的{0}限製到此位置?",
8623 "xloc": [
8624 "default-mobile.handlebars->9->127",
8619 - "default.handlebars->29->1583"
8625 + "default.handlebars->29->1591"
8626 ]
8627 },
8628 {
@@ -8639,8 +8645,8 @@
8645 "default-mobile.handlebars->9->301",
8646 "default-mobile.handlebars->container->page_content->column_l->p10->p10desktop->deskarea1->1->3",
8647 "default-mobile.handlebars->container->page_content->column_l->p10->p10files->p13toolbar->1->0->1->3",
8642 - "default.handlebars->29->1352",
8643 - "default.handlebars->29->884",
8648 + "default.handlebars->29->1360",
8649 + "default.handlebars->29->892",
8650 "default.handlebars->container->column_l->p11->deskarea0->deskarea1->3->connectbutton1span",
8651 "default.handlebars->container->column_l->p12->termTable->1->1->0->1->3->connectbutton2span",
8652 "default.handlebars->container->column_l->p13->p13toolbar->1->0->1->3",
@@ -8666,7 +8672,7 @@
8672 "zh-chs": "全部连接",
8673 "zh-cht": "全部連接",
8674 "xloc": [
8669 - "default.handlebars->29->271",
8675 + "default.handlebars->29->272",
8676 "default.handlebars->container->column_l->p1->devListToolbarSpan->1->0->kvmListToolbar"
8677 ]
8678 },
@@ -8687,7 +8693,7 @@
8693 "zh-chs": "连接到服务器",
8694 "zh-cht": "連接到伺服器",
8695 "xloc": [
8690 - "default.handlebars->29->1406"
8696 + "default.handlebars->29->1414"
8697 ]
8698 },
8699 {
@@ -8808,7 +8814,7 @@
8814 "zh-chs": "已连接的英特尔&reg;AMT",
8815 "zh-cht": "已連接的Intel&reg; AMT",
8816 "xloc": [
8811 - "default.handlebars->29->2080"
8817 + "default.handlebars->29->2088"
8818 ]
8819 },
8820 {
@@ -8828,7 +8834,7 @@
8834 "zh-chs": "已连接的用户",
8835 "zh-cht": "已连接的用户",
8836 "xloc": [
8831 - "default.handlebars->29->2085"
8837 + "default.handlebars->29->2093"
8838 ]
8839 },
8840 {
@@ -8849,7 +8855,7 @@
8855 "zh-cht": "現在已連接",
8856 "xloc": [
8857 "default-mobile.handlebars->9->344",
8852 - "default.handlebars->29->944"
8858 + "default.handlebars->29->952"
8859 ]
8860 },
8861 {
@@ -8892,11 +8898,11 @@
8898 "default-mobile.handlebars->9->2",
8899 "default-mobile.handlebars->9->337",
8900 "default-mobile.handlebars->9->37",
8895 - "default.handlebars->29->244",
8896 - "default.handlebars->29->247",
8897 - "default.handlebars->29->274",
8901 + "default.handlebars->29->245",
8902 + "default.handlebars->29->248",
8903 + "default.handlebars->29->275",
8904 "default.handlebars->29->9",
8899 - "default.handlebars->29->935",
8905 + "default.handlebars->29->943",
8906 "desktop.handlebars->3->2",
8907 "xterm.handlebars->9->2"
8908 ]
@@ -8918,7 +8924,7 @@
8924 "zh-chs": "连接数量",
8925 "zh-cht": "連接數量",
8926 "xloc": [
8921 - "default.handlebars->29->2099"
8927 + "default.handlebars->29->2107"
8928 ]
8929 },
8930 {
@@ -8938,7 +8944,7 @@
8944 "zh-chs": "连接转发器",
8945 "zh-cht": "連接轉發器",
8946 "xloc": [
8941 - "default.handlebars->29->2127"
8947 + "default.handlebars->29->2135"
8948 ]
8949 },
8950 {
@@ -8999,9 +9005,9 @@
9005 "zh-cht": "連接性",
9006 "xloc": [
9007 "default-mobile.handlebars->9->255",
9002 - "default.handlebars->29->1546",
9003 - "default.handlebars->29->235",
9004 - "default.handlebars->29->613",
9008 + "default.handlebars->29->1554",
9009 + "default.handlebars->29->236",
9010 + "default.handlebars->29->614",
9011 "default.handlebars->container->column_l->p21->3->1->meshConnChartDiv->1"
9012 ]
9013 },
@@ -9022,8 +9028,8 @@
9028 "zh-chs": "控制台",
9029 "zh-cht": "控制台",
9030 "xloc": [
9025 - "default.handlebars->29->681",
9026 - "default.handlebars->29->702",
9031 + "default.handlebars->29->686",
9032 + "default.handlebars->29->707",
9033 "default.handlebars->container->topbar->1->1->MainSubMenuSpan->MainSubMenu->1->0->MainDevConsole",
9034 "default.handlebars->container->topbar->1->1->ServerSubMenuSpan->ServerSubMenu->1->0->ServerConsole",
9035 "default.handlebars->contextMenu->cxconsole"
@@ -9046,7 +9052,7 @@
9052 "zh-chs": "控制台 -",
9053 "zh-cht": "控制台 -",
9054 "xloc": [
9049 - "default.handlebars->29->545"
9055 + "default.handlebars->29->546"
9056 ]
9057 },
9058 {
@@ -9066,8 +9072,8 @@
9072 "zh-chs": "控制",
9073 "zh-cht": "控制",
9074 "xloc": [
9069 - "default.handlebars->29->680",
9070 - "default.handlebars->29->701",
9075 + "default.handlebars->29->685",
9076 + "default.handlebars->29->706",
9077 "messenger.handlebars->13->1"
9078 ]
9079 },
@@ -9088,7 +9094,7 @@
9094 "zh-chs": "Cookie编码器",
9095 "zh-cht": "Cookie編碼器",
9096 "xloc": [
9091 - "default.handlebars->29->2113"
9097 + "default.handlebars->29->2121"
9098 ]
9099 },
9100 {
@@ -9153,7 +9159,7 @@
9159 "zh-chs": "将Windows 32位代理URL复制到剪贴板",
9160 "zh-cht": "將Windows 32位代理URL複製到剪貼板",
9161 "xloc": [
9156 - "default.handlebars->29->371"
9162 + "default.handlebars->29->372"
9163 ]
9164 },
9165 {
@@ -9173,7 +9179,7 @@
9179 "zh-chs": "将Windows 64位代理URL复制到剪贴板",
9180 "zh-cht": "將Windows 64位代理URL複製到剪貼板",
9181 "xloc": [
9176 - "default.handlebars->29->375"
9182 + "default.handlebars->29->376"
9183 ]
9184 },
9185 {
@@ -9224,8 +9230,8 @@
9230 "zh-chs": "将代理URL复制到剪贴板",
9231 "zh-cht": "將代理URL複製到剪貼板",
9232 "xloc": [
9227 - "default.handlebars->29->395",
9228 - "default.handlebars->29->397"
9233 + "default.handlebars->29->396",
9234 + "default.handlebars->29->398"
9235 ]
9236 },
9237 {
@@ -9245,10 +9251,10 @@
9251 "zh-chs": "复制连结到剪贴板",
9252 "zh-cht": "複製連結到剪貼板",
9253 "xloc": [
9248 - "default.handlebars->29->1551",
9249 - "default.handlebars->29->1570",
9250 - "default.handlebars->29->196",
9251 - "default.handlebars->29->353"
9254 + "default.handlebars->29->1559",
9255 + "default.handlebars->29->1578",
9256 + "default.handlebars->29->197",
9257 + "default.handlebars->29->354"
9258 ]
9259 },
9260 {
@@ -9268,7 +9274,7 @@
9274 "zh-chs": "将macOS代理URL复制到剪贴板",
9275 "zh-cht": "將macOS代理URL複製到剪貼板",
9276 "xloc": [
9271 - "default.handlebars->29->383"
9277 + "default.handlebars->29->384"
9278 ]
9279 },
9280 {
@@ -9349,7 +9355,7 @@
9355 "zh-chs": "复制:“{0}”到“{1}”",
9356 "zh-cht": "複製:“{0}”到“{1}”",
9357 "xloc": [
9352 - "default.handlebars->29->1642"
9358 + "default.handlebars->29->1650"
9359 ]
9360 },
9361 {
@@ -9495,7 +9501,7 @@
9501 "zh-chs": "核心服务器",
9502 "zh-cht": "核心伺服器",
9503 "xloc": [
9498 - "default.handlebars->29->2112"
9504 + "default.handlebars->29->2120"
9505 ]
9506 },
9507 {
@@ -9515,7 +9521,7 @@
9521 "zh-chs": "科西嘉文",
9522 "zh-cht": "科西嘉文",
9523 "xloc": [
9518 - "default.handlebars->29->1093"
9524 + "default.handlebars->29->1101"
9525 ]
9526 },
9527 {
@@ -9535,7 +9541,7 @@
9541 "zh-chs": "创建帐号",
9542 "zh-cht": "創建帳號",
9543 "xloc": [
9538 - "default.handlebars->29->1803",
9544 + "default.handlebars->29->1811",
9545 "login-mobile.handlebars->container->page_content->column_l->1->1->0->1->createpanel->1->1->9->1->12->1->1",
9546 "login.handlebars->container->column_l->centralTable->1->0->logincell->createpanel->1->9->1->12->1->1",
9547 "login2.handlebars->centralTable->1->0->logincell->createpanel->1->9->1->12->1->1"
@@ -9578,7 +9584,7 @@
9584 "zh-chs": "创建用户组",
9585 "zh-cht": "創建用戶群",
9586 "xloc": [
9581 - "default.handlebars->29->1842"
9587 + "default.handlebars->29->1850"
9588 ]
9589 },
9590 {
@@ -9598,7 +9604,7 @@
9604 "zh-chs": "创建连结以与访客共享此设备",
9605 "zh-cht": "創建鏈結以與訪客共享此裝置",
9606 "xloc": [
9601 - "default.handlebars->29->626"
9607 + "default.handlebars->29->627"
9608 ]
9609 },
9610 {
@@ -9618,7 +9624,7 @@
9624 "zh-chs": "使用以下选项创建一个新的设备组。",
9625 "zh-cht": "使用以下選項創建一個新的裝置群。",
9626 "xloc": [
9621 - "default.handlebars->29->1287"
9627 + "default.handlebars->29->1295"
9628 ]
9629 },
9630 {
@@ -9638,7 +9644,7 @@
9644 "zh-chs": "创建一个新的设备组。",
9645 "zh-cht": "創建一個新的裝置群。",
9646 "xloc": [
9641 - "default.handlebars->29->237"
9647 + "default.handlebars->29->238"
9648 ]
9649 },
9650 {
@@ -9646,7 +9652,7 @@
9652 "nl": "Map aanmaken als deze niet bestaat?",
9653 "fr": "Créer le répertoire si il n'existe pas ?",
9654 "xloc": [
9649 - "default.handlebars->29->478"
9655 + "default.handlebars->29->479"
9656 ]
9657 },
9658 {
@@ -9666,7 +9672,7 @@
9672 "zh-chs": "创建文件夹:“{0}”",
9673 "zh-cht": "創建文件夾:“{0}”",
9674 "xloc": [
9669 - "default.handlebars->29->1635"
9675 + "default.handlebars->29->1643"
9676 ]
9677 },
9678 {
@@ -9686,7 +9692,7 @@
9692 "zh-chs": "通过导入以下格式的JSON档案一次创建多个帐户:",
9693 "zh-cht": "通過導入以下格式的JSON檔案一次創建多個帳戶:",
9694 "xloc": [
9689 - "default.handlebars->29->1767"
9695 + "default.handlebars->29->1775"
9696 ]
9697 },
9698 {
@@ -9728,17 +9734,20 @@
9734 "zh-chs": "创建的设备组:{0}",
9735 "zh-cht": "創建的設備組:{0}",
9736 "xloc": [
9731 - "default.handlebars->29->1646"
9737 + "default.handlebars->29->1654"
9738 ]
9739 },
9740 {
9735 - "en": "Creates a link that allows a guest without an account to remote desktop into this device for a limited time.",
9736 - "nl": "Creëert een link waarmee een gast zonder account voor een beperkte tijd naar een extern bureaublad op dit apparaat kan gaan.",
9737 - "fr": "Autoriser un invité à se connecter au bureau de cet appareil pour un temps limité.",
9741 + "en": "Creates a link that allows a guest without an account to remote control this device for a limited time.",
9742 "xloc": [
9739 - "default.handlebars->29->720"
9743 + "default.handlebars->29->725"
9744 ]
9745 },
9746 + {
9747 + "en": "Creates a link that allows a guest without an account to remote desktop into this device for a limited time.",
9748 + "nl": "Creëert een link waarmee een gast zonder account voor een beperkte tijd naar een extern bureaublad op dit apparaat kan gaan.",
9749 + "fr": "Autoriser un invité à se connecter au bureau de cet appareil pour un temps limité."
9750 + },
9751 {
9752 "cs": "Vytvoří odkaz, který umožňuje hostovi bez účtu vzdálenou plochu do tohoto zařízení po dobu až 1 hodiny.",
9753 "de": "Erstellt einen Link, über den ein Gast ohne Konto bis zu 1 Stunde lang Remotedesktop auf dieses Gerät übertragen kann.",
@@ -9773,7 +9782,7 @@
9782 "zh-chs": "创建",
9783 "zh-cht": "創建",
9784 "xloc": [
9776 - "default.handlebars->29->1928"
9785 + "default.handlebars->29->1936"
9786 ]
9787 },
9788 {
@@ -9793,7 +9802,7 @@
9802 "zh-chs": "创建时间",
9803 "zh-cht": "創作時間",
9804 "xloc": [
9796 - "default.handlebars->29->1334"
9805 + "default.handlebars->29->1342"
9806 ]
9807 },
9808 {
@@ -9835,8 +9844,8 @@
9844 "zh-chs": "创建者",
9845 "zh-cht": "創作者",
9846 "xloc": [
9838 - "default.handlebars->29->1332",
9839 - "default.handlebars->29->1333"
9847 + "default.handlebars->29->1340",
9848 + "default.handlebars->29->1341"
9849 ]
9850 },
9851 {
@@ -9856,7 +9865,7 @@
9865 "zh-chs": "证书",
9866 "zh-cht": "證書",
9867 "xloc": [
9859 - "default.handlebars->29->1304"
9868 + "default.handlebars->29->1312"
9869 ]
9870 },
9871 {
@@ -9876,7 +9885,7 @@
9885 "zh-chs": "克里语",
9886 "zh-cht": "克里語",
9887 "xloc": [
9879 - "default.handlebars->29->1094"
9888 + "default.handlebars->29->1102"
9889 ]
9890 },
9891 {
@@ -9896,7 +9905,7 @@
9905 "zh-chs": "克罗地亚文",
9906 "zh-cht": "克羅地亞文",
9907 "xloc": [
9899 - "default.handlebars->29->1095"
9908 + "default.handlebars->29->1103"
9909 ]
9910 },
9911 {
@@ -10083,7 +10092,7 @@
10092 "zh-chs": "捷克文",
10093 "zh-cht": "捷克文",
10094 "xloc": [
10086 - "default.handlebars->29->1096"
10095 + "default.handlebars->29->1104"
10096 ]
10097 },
10098 {
@@ -10123,7 +10132,7 @@
10132 "zh-chs": "丹麦文",
10133 "zh-cht": "丹麥文",
10134 "xloc": [
10126 - "default.handlebars->29->1097"
10135 + "default.handlebars->29->1105"
10136 ]
10137 },
10138 {
@@ -10143,7 +10152,7 @@
10152 "zh-chs": "数据通道",
10153 "zh-cht": "數據通道",
10154 "xloc": [
10146 - "default.handlebars->29->833",
10155 + "default.handlebars->29->841",
10156 "desktop.handlebars->3->11"
10157 ]
10158 },
@@ -10164,7 +10173,7 @@
10173 "zh-chs": "日期和时间",
10174 "zh-cht": "日期和時間",
10175 "xloc": [
10167 - "default.handlebars->29->1255"
10176 + "default.handlebars->29->1263"
10177 ]
10178 },
10179 {
@@ -10185,7 +10194,7 @@
10194 "zh-cht": "天",
10195 "xloc": [
10196 "default-mobile.handlebars->9->278",
10188 - "default.handlebars->29->765"
10197 + "default.handlebars->29->773"
10198 ]
10199 },
10200 {
@@ -10193,13 +10202,13 @@
10202 "fr": "Désactivé",
10203 "nl": "Deactiveren",
10204 "xloc": [
10196 - "default.handlebars->29->1385"
10205 + "default.handlebars->29->1393"
10206 ]
10207 },
10208 {
10209 "en": "Deactivate CCM if setup",
10210 "xloc": [
10202 - "default.handlebars->29->1397"
10211 + "default.handlebars->29->1405"
10212 ]
10213 },
10214 {
@@ -10237,7 +10246,7 @@
10246 "zh-cht": "沉睡",
10247 "xloc": [
10248 "default-mobile.handlebars->9->192",
10240 - "default.handlebars->29->408"
10249 + "default.handlebars->29->409"
10250 ]
10251 },
10252 {
@@ -10257,10 +10266,10 @@
10266 "zh-chs": "默认",
10267 "zh-cht": "默認",
10268 "xloc": [
10260 - "default.handlebars->29->1790",
10261 - "default.handlebars->29->1838",
10262 - "default.handlebars->29->1849",
10263 - "default.handlebars->29->1917"
10269 + "default.handlebars->29->1798",
10270 + "default.handlebars->29->1846",
10271 + "default.handlebars->29->1857",
10272 + "default.handlebars->29->1925"
10273 ]
10274 },
10275 {
@@ -10284,9 +10293,9 @@
10293 "default-mobile.handlebars->9->311",
10294 "default-mobile.handlebars->container->page_content->column_l->p10->p10files->p13toolbar->1->2->1->1",
10295 "default-mobile.handlebars->container->page_content->column_l->p5->p5myfiles->p5toolbar->1->0->1->1",
10287 - "default.handlebars->29->1577",
10288 - "default.handlebars->29->515",
10289 - "default.handlebars->29->903",
10296 + "default.handlebars->29->1585",
10297 + "default.handlebars->29->516",
10298 + "default.handlebars->29->911",
10299 "default.handlebars->container->column_l->p13->p13toolbar->1->2->1->3",
10300 "default.handlebars->container->column_l->p5->p5toolbar->1->0->p5filehead->3",
10301 "default.handlebars->container->dialog->idx_dlgButtonBar->5",
@@ -10314,7 +10323,7 @@
10323 "zh-cht": "刪除帳戶",
10324 "xloc": [
10325 "default-mobile.handlebars->9->84",
10317 - "default.handlebars->29->1272"
10326 + "default.handlebars->29->1280"
10327 ]
10328 },
10329 {
@@ -10334,7 +10343,7 @@
10343 "zh-chs": "删除帐户",
10344 "zh-cht": "刪除帳戶",
10345 "xloc": [
10337 - "default.handlebars->29->1757"
10346 + "default.handlebars->29->1765"
10347 ]
10348 },
10349 {
@@ -10355,7 +10364,7 @@
10364 "zh-cht": "刪除裝置",
10365 "xloc": [
10366 "default-mobile.handlebars->9->260",
10358 - "default.handlebars->29->630"
10367 + "default.handlebars->29->631"
10368 ]
10369 },
10370 {
@@ -10377,8 +10386,8 @@
10386 "xloc": [
10387 "default-mobile.handlebars->9->415",
10388 "default-mobile.handlebars->9->418",
10380 - "default.handlebars->29->1381",
10381 - "default.handlebars->29->1414"
10389 + "default.handlebars->29->1389",
10390 + "default.handlebars->29->1422"
10391 ]
10392 },
10393 {
@@ -10399,7 +10408,7 @@
10408 "zh-cht": "刪除節點",
10409 "xloc": [
10410 "default-mobile.handlebars->9->286",
10402 - "default.handlebars->29->791"
10411 + "default.handlebars->29->799"
10412 ]
10413 },
10414 {
@@ -10419,7 +10428,7 @@
10428 "zh-chs": "删除节点",
10429 "zh-cht": "刪除節點",
10430 "xloc": [
10422 - "default.handlebars->29->453"
10431 + "default.handlebars->29->454"
10432 ]
10433 },
10434 {
@@ -10439,7 +10448,7 @@
10448 "zh-chs": "删除用户",
10449 "zh-cht": "刪除用戶",
10450 "xloc": [
10442 - "default.handlebars->29->1967"
10451 + "default.handlebars->29->1975"
10452 ]
10453 },
10454 {
@@ -10459,8 +10468,8 @@
10468 "zh-chs": "删除用户群组",
10469 "zh-cht": "刪除用戶群組",
10470 "xloc": [
10462 - "default.handlebars->29->1887",
10463 - "default.handlebars->29->1897"
10471 + "default.handlebars->29->1895",
10472 + "default.handlebars->29->1905"
10473 ]
10474 },
10475 {
@@ -10480,7 +10489,7 @@
10489 "zh-chs": "删除用户群组",
10490 "zh-cht": "刪除用戶群組",
10491 "xloc": [
10483 - "default.handlebars->29->1836"
10492 + "default.handlebars->29->1844"
10493 ]
10494 },
10495 {
@@ -10500,7 +10509,7 @@
10509 "zh-chs": "删除用户{0}",
10510 "zh-cht": "刪除用戶{0}",
10511 "xloc": [
10503 - "default.handlebars->29->1990"
10512 + "default.handlebars->29->1998"
10513 ]
10514 },
10515 {
@@ -10521,7 +10530,7 @@
10530 "zh-cht": "刪除帳戶",
10531 "xloc": [
10532 "default-mobile.handlebars->container->page_content->column_l->p3->p3info->1->p3AccountActions->p2AccountActions->3->9->0",
10524 - "default.handlebars->29->1753",
10533 + "default.handlebars->29->1761",
10534 "default.handlebars->container->column_l->p2->p2info->p2AccountActions->3->p2AccountPassActions->7"
10535 ]
10536 },
@@ -10542,7 +10551,7 @@
10551 "zh-chs": "删除设备",
10552 "zh-cht": "刪除裝置",
10553 "xloc": [
10545 - "default.handlebars->29->446"
10554 + "default.handlebars->29->447"
10555 ]
10556 },
10557 {
@@ -10562,7 +10571,7 @@
10571 "zh-chs": "删除群组",
10572 "zh-cht": "刪除群組",
10573 "xloc": [
10565 - "default.handlebars->29->1832"
10574 + "default.handlebars->29->1840"
10575 ]
10576 },
10577 {
@@ -10582,7 +10591,7 @@
10591 "zh-chs": "删除项目?",
10592 "zh-cht": "刪除項目?",
10593 "xloc": [
10585 - "default.handlebars->29->516"
10594 + "default.handlebars->29->517"
10595 ]
10596 },
10597 {
@@ -10602,7 +10611,7 @@
10611 "zh-chs": "递归删除:“{0}”,{1}个元素已删除",
10612 "zh-cht": "遞歸刪除:“{0}”,{1}個元素已刪除",
10613 "xloc": [
10605 - "default.handlebars->29->1637"
10614 + "default.handlebars->29->1645"
10615 ]
10616 },
10617 {
@@ -10624,8 +10633,8 @@
10633 "xloc": [
10634 "default-mobile.handlebars->9->124",
10635 "default-mobile.handlebars->9->313",
10627 - "default.handlebars->29->1579",
10628 - "default.handlebars->29->905"
10636 + "default.handlebars->29->1587",
10637 + "default.handlebars->29->913"
10638 ]
10639 },
10640 {
@@ -10645,7 +10654,7 @@
10654 "zh-chs": "删除用户群组{0}?",
10655 "zh-cht": "刪除用戶群組{0}?",
10656 "xloc": [
10648 - "default.handlebars->29->1895"
10657 + "default.handlebars->29->1903"
10658 ]
10659 },
10660 {
@@ -10667,8 +10676,8 @@
10676 "xloc": [
10677 "default-mobile.handlebars->9->123",
10678 "default-mobile.handlebars->9->312",
10670 - "default.handlebars->29->1578",
10671 - "default.handlebars->29->904"
10679 + "default.handlebars->29->1586",
10680 + "default.handlebars->29->912"
10681 ]
10682 },
10683 {
@@ -10708,7 +10717,7 @@
10717 "zh-chs": "删除:“{0}”",
10718 "zh-cht": "刪除:“{0}”",
10719 "xloc": [
10711 - "default.handlebars->29->1636"
10720 + "default.handlebars->29->1644"
10721 ]
10722 },
10723 {
@@ -10728,7 +10737,7 @@
10737 "zh-chs": "删除:“{0}”,{1}个元素已删除",
10738 "zh-cht": "刪除:“{0}”,已刪除{1}個元素",
10739 "xloc": [
10731 - "default.handlebars->29->1638"
10740 + "default.handlebars->29->1646"
10741 ]
10742 },
10743 {
@@ -10748,7 +10757,7 @@
10757 "zh-chs": "被拒绝",
10758 "zh-cht": "被拒絕",
10759 "xloc": [
10751 - "default.handlebars->29->829",
10760 + "default.handlebars->29->837",
10761 "desktop.handlebars->3->7"
10762 ]
10763 },
@@ -10845,19 +10854,19 @@
10854 "default-mobile.handlebars->9->350",
10855 "default-mobile.handlebars->9->407",
10856 "default-mobile.handlebars->9->420",
10848 - "default.handlebars->29->1292",
10849 - "default.handlebars->29->1329",
10850 - "default.handlebars->29->1416",
10851 - "default.handlebars->29->1841",
10852 - "default.handlebars->29->1851",
10853 - "default.handlebars->29->1852",
10854 - "default.handlebars->29->1893",
10855 - "default.handlebars->29->556",
10857 + "default.handlebars->29->1300",
10858 + "default.handlebars->29->1337",
10859 + "default.handlebars->29->1424",
10860 + "default.handlebars->29->1849",
10861 + "default.handlebars->29->1859",
10862 + "default.handlebars->29->1860",
10863 + "default.handlebars->29->1901",
10864 "default.handlebars->29->557",
10865 + "default.handlebars->29->558",
10866 "default.handlebars->29->77",
10858 - "default.handlebars->29->824",
10859 - "default.handlebars->29->950",
10860 - "default.handlebars->29->960",
10867 + "default.handlebars->29->832",
10868 + "default.handlebars->29->958",
10869 + "default.handlebars->29->968",
10870 "default.handlebars->container->column_l->p42->p42tbl->1->0->3"
10871 ]
10872 },
@@ -10896,10 +10905,12 @@
10905 "zh-cht": "桌面",
10906 "xloc": [
10907 "default-mobile.handlebars->9->267",
10899 - "default.handlebars->29->1422",
10900 - "default.handlebars->29->2039",
10901 - "default.handlebars->29->521",
10902 - "default.handlebars->29->869",
10908 + "default.handlebars->29->1430",
10909 + "default.handlebars->29->2047",
10910 + "default.handlebars->29->522",
10911 + "default.handlebars->29->676",
10912 + "default.handlebars->29->728",
10913 + "default.handlebars->29->877",
10914 "default.handlebars->container->topbar->1->1->MainSubMenuSpan->MainSubMenu->1->0->MainDevDesktop",
10915 "default.handlebars->contextMenu->cxdesktop",
10916 "desktop.handlebars->3->23"
@@ -10942,10 +10953,10 @@
10953 "zh-chs": "桌面通知",
10954 "zh-cht": "桌面通知",
10955 "xloc": [
10945 - "default.handlebars->29->1343",
10946 - "default.handlebars->29->1856",
10947 - "default.handlebars->29->1943",
10948 - "default.handlebars->29->594"
10956 + "default.handlebars->29->1351",
10957 + "default.handlebars->29->1864",
10958 + "default.handlebars->29->1951",
10959 + "default.handlebars->29->595"
10960 ]
10961 },
10962 {
@@ -10965,10 +10976,10 @@
10976 "zh-chs": "桌面提示",
10977 "zh-cht": "桌面提示",
10978 "xloc": [
10968 - "default.handlebars->29->1342",
10969 - "default.handlebars->29->1855",
10970 - "default.handlebars->29->1942",
10971 - "default.handlebars->29->593"
10979 + "default.handlebars->29->1350",
10980 + "default.handlebars->29->1863",
10981 + "default.handlebars->29->1950",
10982 + "default.handlebars->29->594"
10983 ]
10984 },
10985 {
@@ -10988,10 +10999,10 @@
10999 "zh-chs": "桌面提示+工具栏",
11000 "zh-cht": "桌面提示+工具欄",
11001 "xloc": [
10991 - "default.handlebars->29->1340",
10992 - "default.handlebars->29->1853",
10993 - "default.handlebars->29->1940",
10994 - "default.handlebars->29->591"
11002 + "default.handlebars->29->1348",
11003 + "default.handlebars->29->1861",
11004 + "default.handlebars->29->1948",
11005 + "default.handlebars->29->592"
11006 ]
11007 },
11008 {
@@ -11041,10 +11052,10 @@
11052 "zh-chs": "桌面工具栏",
11053 "zh-cht": "桌面工具欄",
11054 "xloc": [
11044 - "default.handlebars->29->1341",
11045 - "default.handlebars->29->1854",
11046 - "default.handlebars->29->1941",
11047 - "default.handlebars->29->592"
11055 + "default.handlebars->29->1349",
11056 + "default.handlebars->29->1862",
11057 + "default.handlebars->29->1949",
11058 + "default.handlebars->29->593"
11059 ]
11060 },
11061 {
@@ -11064,7 +11075,7 @@
11075 "zh-chs": "桌面时段",
11076 "zh-cht": "桌面時段",
11077 "xloc": [
11067 - "default.handlebars->29->868"
11078 + "default.handlebars->29->876"
11079 ]
11080 },
11081 {
@@ -11147,9 +11158,9 @@
11158 "zh-chs": "设备",
11159 "zh-cht": "裝置",
11160 "xloc": [
11150 - "default.handlebars->29->1445",
11161 + "default.handlebars->29->1453",
11162 "default.handlebars->29->186",
11152 - "default.handlebars->29->2009",
11163 + "default.handlebars->29->2017",
11164 "default.handlebars->container->column_l->p1->devListToolbarSpan->1->0->9->devListToolbarSort->sortselect->5"
11165 ]
11166 },
@@ -11171,7 +11182,7 @@
11182 "zh-cht": "裝置指令",
11183 "xloc": [
11184 "default-mobile.handlebars->9->277",
11174 - "default.handlebars->29->756"
11185 + "default.handlebars->29->764"
11186 ]
11187 },
11188 {
@@ -11199,14 +11210,14 @@
11210 "zh-chs": "设备组",
11211 "zh-cht": "裝置群",
11212 "xloc": [
11202 - "default.handlebars->29->1440",
11203 - "default.handlebars->29->1443",
11204 - "default.handlebars->29->1444",
11205 - "default.handlebars->29->1704",
11206 - "default.handlebars->29->1879",
11207 - "default.handlebars->29->1885",
11208 - "default.handlebars->29->1997",
11209 - "default.handlebars->29->2048"
11213 + "default.handlebars->29->1448",
11214 + "default.handlebars->29->1451",
11215 + "default.handlebars->29->1452",
11216 + "default.handlebars->29->1712",
11217 + "default.handlebars->29->1887",
11218 + "default.handlebars->29->1893",
11219 + "default.handlebars->29->2005",
11220 + "default.handlebars->29->2056"
11221 ]
11222 },
11223 {
@@ -11227,7 +11238,7 @@
11238 "zh-cht": "裝置群用戶",
11239 "xloc": [
11240 "default-mobile.handlebars->9->466",
11230 - "default.handlebars->29->1509"
11241 + "default.handlebars->29->1517"
11242 ]
11243 },
11244 {
@@ -11248,11 +11259,11 @@
11259 "zh-cht": "裝置群",
11260 "xloc": [
11261 "default-mobile.handlebars->container->page_content->column_l->p3->p3info->1->3",
11251 - "default.handlebars->29->1720",
11252 - "default.handlebars->29->1826",
11253 - "default.handlebars->29->1866",
11254 - "default.handlebars->29->1937",
11255 - "default.handlebars->29->2083",
11262 + "default.handlebars->29->1728",
11263 + "default.handlebars->29->1834",
11264 + "default.handlebars->29->1874",
11265 + "default.handlebars->29->1945",
11266 + "default.handlebars->29->2091",
11267 "default.handlebars->container->column_l->p2->p2info->7"
11268 ]
11269 },
@@ -11273,7 +11284,7 @@
11284 "zh-chs": "设备信息导出",
11285 "zh-cht": "裝置訊息輸出",
11286 "xloc": [
11276 - "default.handlebars->29->486"
11287 + "default.handlebars->29->487"
11288 ]
11289 },
11290 {
@@ -11293,7 +11304,7 @@
11304 "zh-chs": "设备位置",
11305 "zh-cht": "裝置位置",
11306 "xloc": [
11296 - "default.handlebars->29->792"
11307 + "default.handlebars->29->800"
11308 ]
11309 },
11310 {
@@ -11313,7 +11324,7 @@
11324 "zh-chs": "设备消息",
11325 "zh-cht": "裝置訊息",
11326 "xloc": [
11316 - "default.handlebars->29->717"
11327 + "default.handlebars->29->722"
11328 ]
11329 },
11330 {
@@ -11334,9 +11345,9 @@
11345 "zh-cht": "裝置名稱",
11346 "xloc": [
11347 "default-mobile.handlebars->9->290",
11337 - "default.handlebars->29->2047",
11338 - "default.handlebars->29->288",
11339 - "default.handlebars->29->822",
11348 + "default.handlebars->29->2055",
11349 + "default.handlebars->29->289",
11350 + "default.handlebars->29->830",
11351 "player.handlebars->3->9"
11352 ]
11353 },
@@ -11357,16 +11368,19 @@
11368 "zh-chs": "设备通知",
11369 "zh-cht": "裝置通知",
11370 "xloc": [
11360 - "default.handlebars->29->474",
11361 - "default.handlebars->29->719"
11371 + "default.handlebars->29->475",
11372 + "default.handlebars->29->724"
11373 ]
11374 },
11375 + {
11376 + "en": "Device Sharing"
11377 + },
11378 {
11379 "en": "Device Sharing Link",
11380 "fr": "Lien de partage de l'appareil",
11381 "nl": "Apparaat deel Link",
11382 "xloc": [
11369 - "default.handlebars->29->671"
11383 + "default.handlebars->29->672"
11384 ]
11385 },
11386 {
@@ -11406,8 +11420,8 @@
11420 "zh-chs": "设备连接。",
11421 "zh-cht": "裝置連接。",
11422 "xloc": [
11409 - "default.handlebars->29->1260",
11410 - "default.handlebars->29->1530"
11423 + "default.handlebars->29->1268",
11424 + "default.handlebars->29->1538"
11425 ]
11426 },
11427 {
@@ -11427,8 +11441,8 @@
11441 "zh-chs": "设备断开连接。",
11442 "zh-cht": "裝置斷開連接。",
11443 "xloc": [
11430 - "default.handlebars->29->1261",
11431 - "default.handlebars->29->1531"
11444 + "default.handlebars->29->1269",
11445 + "default.handlebars->29->1539"
11446 ]
11447 },
11448 {
@@ -11448,7 +11462,7 @@
11462 "zh-chs": "创建的设备组:{0}",
11463 "zh-cht": "設備組已創建:{0}",
11464 "xloc": [
11451 - "default.handlebars->29->1667"
11465 + "default.handlebars->29->1675"
11466 ]
11467 },
11468 {
@@ -11468,7 +11482,7 @@
11482 "zh-chs": "设备组已删除:{0}",
11483 "zh-cht": "設備組已刪除:{0}",
11484 "xloc": [
11471 - "default.handlebars->29->1668"
11485 + "default.handlebars->29->1676"
11486 ]
11487 },
11488 {
@@ -11488,7 +11502,7 @@
11502 "zh-chs": "设备组成员身份已更改:{0}",
11503 "zh-cht": "設備組成員身份已更改:{0}",
11504 "xloc": [
11491 - "default.handlebars->29->1669"
11505 + "default.handlebars->29->1677"
11506 ]
11507 },
11508 {
@@ -11508,7 +11522,7 @@
11522 "zh-chs": "其他设备组管理员可以查看和更改设备组注释。",
11523 "zh-cht": "其他裝置群管理員可以查看和更改裝置群註釋。",
11524 "xloc": [
11511 - "default.handlebars->29->714"
11525 + "default.handlebars->29->719"
11526 ]
11527 },
11528 {
@@ -11528,7 +11542,7 @@
11542 "zh-chs": "设备组通知已更改",
11543 "zh-cht": "設備組通知已更改",
11544 "xloc": [
11531 - "default.handlebars->29->1664"
11545 + "default.handlebars->29->1672"
11546 ]
11547 },
11548 {
@@ -11548,7 +11562,7 @@
11562 "zh-chs": "未删除的设备组:{0}",
11563 "zh-cht": "未刪除的設備組:{0}",
11564 "xloc": [
11551 - "default.handlebars->29->1647"
11565 + "default.handlebars->29->1655"
11566 ]
11567 },
11568 {
@@ -11570,8 +11584,8 @@
11584 "xloc": [
11585 "default-mobile.handlebars->9->160",
11586 "default-mobile.handlebars->9->216",
11573 - "default.handlebars->29->212",
11574 - "default.handlebars->29->542"
11587 + "default.handlebars->29->213",
11588 + "default.handlebars->29->543"
11589 ]
11590 },
11591 {
@@ -11591,7 +11605,7 @@
11605 "zh-chs": "检测到设备,但无法获得电源状态。",
11606 "zh-cht": "檢測到裝置,但無法獲得電源狀態。",
11607 "xloc": [
11594 - "default.handlebars->29->413"
11608 + "default.handlebars->29->414"
11609 ]
11610 },
11611 {
@@ -11612,7 +11626,7 @@
11626 "zh-cht": "裝置正在休眠(S4)",
11627 "xloc": [
11628 "default-mobile.handlebars->9->200",
11615 - "default.handlebars->29->419"
11629 + "default.handlebars->29->420"
11630 ]
11631 },
11632 {
@@ -11633,7 +11647,7 @@
11647 "zh-cht": "裝置處於深度睡眠狀態(S3)",
11648 "xloc": [
11649 "default-mobile.handlebars->9->199",
11636 - "default.handlebars->29->418"
11650 + "default.handlebars->29->419"
11651 ]
11652 },
11653 {
@@ -11653,7 +11667,7 @@
11667 "zh-chs": "设备处于深度睡眠状态(S3)。",
11668 "zh-cht": "裝置處於深度睡眠狀態(S3)。",
11669 "xloc": [
11656 - "default.handlebars->29->407"
11670 + "default.handlebars->29->408"
11671 ]
11672 },
11673 {
@@ -11673,7 +11687,7 @@
11687 "zh-chs": "设备处于休眠状态(S4)。",
11688 "zh-cht": "裝置處於休眠狀態(S4)。",
11689 "xloc": [
11676 - "default.handlebars->29->409"
11690 + "default.handlebars->29->410"
11691 ]
11692 },
11693 {
@@ -11693,7 +11707,7 @@
11707 "zh-chs": "设备处于关机状态(S5)。",
11708 "zh-cht": "裝置處於關機狀態(S5)。",
11709 "xloc": [
11696 - "default.handlebars->29->411"
11710 + "default.handlebars->29->412"
11711 ]
11712 },
11713 {
@@ -11714,7 +11728,7 @@
11728 "zh-cht": "裝置處於睡眠狀態(S1)",
11729 "xloc": [
11730 "default-mobile.handlebars->9->197",
11717 - "default.handlebars->29->416"
11731 + "default.handlebars->29->417"
11732 ]
11733 },
11734 {
@@ -11734,7 +11748,7 @@
11748 "zh-chs": "设备处于睡眠状态(S1)。",
11749 "zh-cht": "裝置處於睡眠狀態(S1)。",
11750 "xloc": [
11737 - "default.handlebars->29->403"
11751 + "default.handlebars->29->404"
11752 ]
11753 },
11754 {
@@ -11755,7 +11769,7 @@
11769 "zh-cht": "裝置處於睡眠狀態(S2)",
11770 "xloc": [
11771 "default-mobile.handlebars->9->198",
11758 - "default.handlebars->29->417"
11772 + "default.handlebars->29->418"
11773 ]
11774 },
11775 {
@@ -11775,7 +11789,7 @@
11789 "zh-chs": "设备处于睡眠状态(S2)。",
11790 "zh-cht": "裝置處於睡眠狀態(S2)。",
11791 "xloc": [
11778 - "default.handlebars->29->405"
11792 + "default.handlebars->29->406"
11793 ]
11794 },
11795 {
@@ -11796,7 +11810,7 @@
11810 "zh-cht": "裝置處於軟關機狀態(S5)",
11811 "xloc": [
11812 "default-mobile.handlebars->9->201",
11799 - "default.handlebars->29->420"
11813 + "default.handlebars->29->421"
11814 ]
11815 },
11816 {
@@ -11818,8 +11832,8 @@
11832 "xloc": [
11833 "default-mobile.handlebars->9->159",
11834 "default-mobile.handlebars->9->215",
11821 - "default.handlebars->29->211",
11822 - "default.handlebars->29->541"
11835 + "default.handlebars->29->212",
11836 + "default.handlebars->29->542"
11837 ]
11838 },
11839 {
@@ -11840,7 +11854,7 @@
11854 "zh-cht": "裝置已連接電源",
11855 "xloc": [
11856 "default-mobile.handlebars->9->196",
11843 - "default.handlebars->29->415"
11857 + "default.handlebars->29->416"
11858 ]
11859 },
11860 {
@@ -11860,7 +11874,7 @@
11874 "zh-chs": "设备已连接电源。",
11875 "zh-cht": "裝置已連接電源。",
11876 "xloc": [
11863 - "default.handlebars->29->401"
11877 + "default.handlebars->29->402"
11878 ]
11879 },
11880 {
@@ -11881,7 +11895,7 @@
11895 "zh-cht": "裝置存在,但無法確定電源狀態",
11896 "xloc": [
11897 "default-mobile.handlebars->9->202",
11884 - "default.handlebars->29->421"
11898 + "default.handlebars->29->422"
11899 ]
11900 },
11901 {
@@ -11901,7 +11915,7 @@
11915 "zh-chs": "设备名称",
11916 "zh-cht": "裝置名稱",
11917 "xloc": [
11904 - "default.handlebars->29->533"
11918 + "default.handlebars->29->534"
11919 ]
11920 },
11921 {
@@ -11921,7 +11935,7 @@
11935 "zh-chs": "设备通知",
11936 "zh-cht": "設備通知",
11937 "xloc": [
11924 - "default.handlebars->29->443"
11938 + "default.handlebars->29->444"
11939 ]
11940 },
11941 {
@@ -11941,7 +11955,7 @@
11955 "zh-chs": "设备请求激活Intel(R)AMT ACM,FQDN:{0}",
11956 "zh-cht": "設備請求激活Intel(R)AMT ACM,FQDN:{0}",
11957 "xloc": [
11944 - "default.handlebars->29->1649"
11958 + "default.handlebars->29->1657"
11959 ]
11960 },
11961 {
@@ -11978,8 +11992,8 @@
11992 "zh-chs": "设备",
11993 "zh-cht": "裝置",
11994 "xloc": [
11981 - "default.handlebars->29->1827",
11982 - "default.handlebars->29->1867"
11995 + "default.handlebars->29->1835",
11996 + "default.handlebars->29->1875"
11997 ]
11998 },
11999 {
@@ -11999,7 +12013,7 @@
12013 "zh-chs": "已禁用",
12014 "zh-cht": "已禁用",
12015 "xloc": [
12002 - "default.handlebars->29->587"
12016 + "default.handlebars->29->588"
12017 ]
12018 },
12019 {
@@ -12019,7 +12033,7 @@
12033 "zh-chs": "禁用的电子邮件两因素身份验证",
12034 "zh-cht": "禁用的電子郵件兩因素身份驗證",
12035 "xloc": [
12022 - "default.handlebars->29->1680"
12036 + "default.handlebars->29->1688"
12037 ]
12038 },
12039 {
@@ -12041,8 +12055,8 @@
12055 "xloc": [
12056 "default-mobile.handlebars->9->302",
12057 "default-mobile.handlebars->container->page_content->column_l->p10->p10desktop->deskarea1->1->3",
12044 - "default.handlebars->29->1353",
12045 - "default.handlebars->29->885",
12058 + "default.handlebars->29->1361",
12059 + "default.handlebars->29->893",
12060 "default.handlebars->container->column_l->p11->deskarea0->deskarea1->3->disconnectbutton1span",
12061 "default.handlebars->container->column_l->p12->termTable->1->1->0->1->3->disconnectbutton2span",
12062 "desktop.handlebars->p11->deskarea0->deskarea1->3->disconnectbutton1span",
@@ -12089,10 +12103,10 @@
12103 "default-mobile.handlebars->9->1",
12104 "default-mobile.handlebars->container->page_content->column_l->p10->p10desktop->deskarea1->1->3->deskstatus",
12105 "default-mobile.handlebars->container->page_content->column_l->p10->p10files->p13toolbar->1->0->1->3->p13Status",
12092 - "default.handlebars->29->223",
12093 - "default.handlebars->29->243",
12094 - "default.handlebars->29->246",
12095 - "default.handlebars->29->273",
12106 + "default.handlebars->29->224",
12107 + "default.handlebars->29->244",
12108 + "default.handlebars->29->247",
12109 + "default.handlebars->29->274",
12110 "default.handlebars->29->8",
12111 "default.handlebars->container->column_l->p11->deskarea0->deskarea1->3->deskstatus",
12112 "default.handlebars->container->column_l->p12->termTable->1->1->0->1->3->termstatus",
@@ -12119,7 +12133,7 @@
12133 "zh-chs": "在远程设备上显示一个消息框。",
12134 "zh-cht": "在遠程裝置上顯示一個訊息框。",
12135 "xloc": [
12122 - "default.handlebars->29->718"
12136 + "default.handlebars->29->723"
12137 ]
12138 },
12139 {
@@ -12159,7 +12173,7 @@
12173 "zh-chs": "在远程设备上显示短信",
12174 "zh-cht": "在遠程裝置上顯示短信",
12175 "xloc": [
12162 - "default.handlebars->29->624"
12176 + "default.handlebars->29->625"
12177 ]
12178 },
12179 {
@@ -12179,7 +12193,7 @@
12193 "zh-chs": "显示设备组名称",
12194 "zh-cht": "顯示裝置群名稱",
12195 "xloc": [
12182 - "default.handlebars->29->1259"
12196 + "default.handlebars->29->1267"
12197 ]
12198 },
12199 {
@@ -12199,7 +12213,7 @@
12213 "zh-chs": "显示名称",
12214 "zh-cht": "顯示名稱",
12215 "xloc": [
12202 - "default.handlebars->29->854"
12216 + "default.handlebars->29->862"
12217 ]
12218 },
12219 {
@@ -12219,7 +12233,7 @@
12233 "zh-chs": "显示公共连结",
12234 "zh-cht": "顯示公共鏈結",
12235 "xloc": [
12222 - "default.handlebars->29->1550"
12236 + "default.handlebars->29->1558"
12237 ]
12238 },
12239 {
@@ -12239,7 +12253,7 @@
12253 "zh-chs": "显示消息框,标题= “{0}”,消息= “{1}”",
12254 "zh-cht": "顯示消息框,標題= “{0}”,消息= “{1}”",
12255 "xloc": [
12242 - "default.handlebars->29->1609"
12256 + "default.handlebars->29->1617"
12257 ]
12258 },
12259 {
@@ -12259,7 +12273,7 @@
12273 "zh-chs": "显示吐司消息,标题= “{0}”,消息= “{1}”",
12274 "zh-cht": "顯示吐司消息,標題= “{0}”,消息= “{1}”",
12275 "xloc": [
12262 - "default.handlebars->29->1617"
12276 + "default.handlebars->29->1625"
12277 ]
12278 },
12279 {
@@ -12279,8 +12293,8 @@
12293 "zh-chs": "什么都不做",
12294 "zh-cht": "什麼都不做",
12295 "xloc": [
12282 - "default.handlebars->29->1400",
12283 - "default.handlebars->29->1404"
12296 + "default.handlebars->29->1408",
12297 + "default.handlebars->29->1412"
12298 ]
12299 },
12300 {
@@ -12300,10 +12314,10 @@
12314 "zh-chs": "域",
12315 "zh-cht": "域",
12316 "xloc": [
12303 - "default.handlebars->29->1791",
12304 - "default.handlebars->29->1839",
12305 - "default.handlebars->29->1848",
12306 - "default.handlebars->29->1916",
12317 + "default.handlebars->29->1799",
12318 + "default.handlebars->29->1847",
12319 + "default.handlebars->29->1856",
12320 + "default.handlebars->29->1924",
12321 "mstsc.handlebars->main->1->3->1->2->1->0",
12322 "mstsc.handlebars->main->1->3->1->2->3"
12323 ]
@@ -12311,7 +12325,7 @@
12325 {
12326 "en": "Don't change, keep CCM if setup",
12327 "xloc": [
12314 - "default.handlebars->29->1396"
12328 + "default.handlebars->29->1404"
12329 ]
12330 },
12331 {
@@ -12348,7 +12362,7 @@
12362 "zh-chs": "不要连接到服务器",
12363 "zh-cht": "不要連接到伺服器",
12364 "xloc": [
12351 - "default.handlebars->29->1405"
12365 + "default.handlebars->29->1413"
12366 ]
12367 },
12368 {
@@ -12468,7 +12482,7 @@
12482 "zh-cht": "下載檔案",
12483 "xloc": [
12484 "default-mobile.handlebars->9->332",
12471 - "default.handlebars->29->924"
12485 + "default.handlebars->29->932"
12486 ]
12487 },
12488 {
@@ -12488,7 +12502,7 @@
12502 "zh-chs": "下载MeshCentral Router,一个TCP端口映射工具。",
12503 "zh-cht": "下載MeshCentral Router,一個TCP端口映射工具。",
12504 "xloc": [
12491 - "default.handlebars->29->241"
12505 + "default.handlebars->29->242"
12506 ]
12507 },
12508 {
@@ -12508,7 +12522,7 @@
12522 "zh-chs": "下载MeshCmd",
12523 "zh-cht": "下載MeshCmd",
12524 "xloc": [
12511 - "default.handlebars->29->814"
12525 + "default.handlebars->29->822"
12526 ]
12527 },
12528 {
@@ -12528,7 +12542,7 @@
12542 "zh-chs": "下载MeshCmd,这是一个多功能的指令执行工具。",
12543 "zh-cht": "下載MeshCmd,這是一個多功能的指令執行工具。",
12544 "xloc": [
12531 - "default.handlebars->29->239"
12545 + "default.handlebars->29->240"
12546 ]
12547 },
12548 {
@@ -12568,7 +12582,7 @@
12582 "zh-chs": "下载报告",
12583 "zh-cht": "下載報告",
12584 "xloc": [
12571 - "default.handlebars->29->1709",
12585 + "default.handlebars->29->1717",
12586 "default.handlebars->container->column_l->p3->3->1->0->3"
12587 ]
12588 },
@@ -12589,7 +12603,7 @@
12603 "zh-chs": "下载带有指令档案的“ meshcmd”,以通过此服务器将网络讯息发送到该设备。紧记编辑meshaction.txt并添加您的帐户密码或进行任何必要的更改。",
12604 "zh-cht": "下載帶有指令檔案的“ meshcmd”,以通過此服務器將網絡讯息發送到該裝置。緊記編輯meshaction.txt並新增你的帳戶密碼或進行任何必要的更改。",
12605 "xloc": [
12592 - "default.handlebars->29->807"
12606 + "default.handlebars->29->815"
12607 ]
12608 },
12609 {
@@ -12669,7 +12683,7 @@
12683 "zh-chs": "下载电源事件",
12684 "zh-cht": "下載電源事件",
12685 "xloc": [
12672 - "default.handlebars->29->766"
12686 + "default.handlebars->29->774"
12687 ]
12688 },
12689 {
@@ -12749,7 +12763,7 @@
12763 "zh-chs": "使用以下一种档案格式下载设备列表。",
12764 "zh-cht": "使用以下一種檔案格式下載裝置列表。",
12765 "xloc": [
12752 - "default.handlebars->29->481"
12766 + "default.handlebars->29->482"
12767 ]
12768 },
12769 {
@@ -12769,7 +12783,7 @@
12783 "zh-chs": "使用以下一种档案格式下载事件列表。",
12784 "zh-cht": "使用以下一種檔案格式下載事件列表。",
12785 "xloc": [
12772 - "default.handlebars->29->1710"
12786 + "default.handlebars->29->1718"
12787 ]
12788 },
12789 {
@@ -12789,7 +12803,7 @@
12803 "zh-chs": "使用以下一种档案格式下载用户列表。",
12804 "zh-cht": "使用以下一種檔案格式下載用戶列表。",
12805 "xloc": [
12792 - "default.handlebars->29->1775"
12806 + "default.handlebars->29->1783"
12807 ]
12808 },
12809 {
@@ -12870,7 +12884,7 @@
12884 "zh-chs": "下载:“{0}”",
12885 "zh-cht": "下載:“{0}”",
12886 "xloc": [
12873 - "default.handlebars->29->1640"
12887 + "default.handlebars->29->1648"
12888 ]
12889 },
12890 {
@@ -12910,7 +12924,7 @@
12924 "zh-chs": "代理重复",
12925 "zh-cht": "代理重複",
12926 "xloc": [
12913 - "default.handlebars->29->2079"
12927 + "default.handlebars->29->2087"
12928 ]
12929 },
12930 {
@@ -12950,7 +12964,7 @@
12964 "zh-chs": "复制用户组",
12965 "zh-cht": "複製用戶群",
12966 "xloc": [
12953 - "default.handlebars->29->1843"
12967 + "default.handlebars->29->1851"
12968 ]
12969 },
12970 {
@@ -12987,8 +13001,8 @@
13001 "zh-chs": "持续时间",
13002 "zh-cht": "持續時間",
13003 "xloc": [
12990 - "default.handlebars->29->2033",
12991 - "default.handlebars->29->2053",
13004 + "default.handlebars->29->2041",
13005 + "default.handlebars->29->2061",
13006 "player.handlebars->3->2"
13007 ]
13008 },
@@ -13026,7 +13040,7 @@
13040 "zh-chs": "荷兰文(比利时)",
13041 "zh-cht": "荷蘭文(比利時)",
13042 "xloc": [
13029 - "default.handlebars->29->1099"
13043 + "default.handlebars->29->1107"
13044 ]
13045 },
13046 {
@@ -13046,7 +13060,7 @@
13060 "zh-chs": "荷兰文(标准)",
13061 "zh-cht": "荷蘭文(標準)",
13062 "xloc": [
13049 - "default.handlebars->29->1098"
13063 + "default.handlebars->29->1106"
13064 ]
13065 },
13066 {
@@ -13066,8 +13080,8 @@
13080 "zh-chs": "电邮“ {0} ”已在其他帐户上使用。更改电邮地址,然后重试。",
13081 "zh-cht": "電郵“ {0} ”已在其他帳戶上使用。更改電郵地址,然後重試。",
13082 "xloc": [
13069 - "message.handlebars->3->8",
13070 - "message2.handlebars->5->8"
13083 + "message.handlebars->3->9",
13084 + "message2.handlebars->5->9"
13085 ]
13086 },
13087 {
@@ -13087,8 +13101,8 @@
13101 "zh-chs": "用户“ {1} ”的电邮“ {0} ”已通过验证。",
13102 "zh-cht": "用戶“ {1} ”的電郵“ {0} ”已通過驗證。",
13103 "xloc": [
13090 - "message.handlebars->3->7",
13091 - "message2.handlebars->5->7"
13104 + "message.handlebars->3->8",
13105 + "message2.handlebars->5->8"
13106 ]
13107 },
13108 {
@@ -13108,8 +13122,8 @@
13122 "zh-chs": "未验证用户“ {1} ”的电邮“ {0} ”。",
13123 "zh-cht": "未驗證用戶“ {1} ”的電郵“ {0} ”。",
13124 "xloc": [
13111 - "message.handlebars->3->10",
13112 - "message2.handlebars->5->10"
13125 + "message.handlebars->3->11",
13126 + "message2.handlebars->5->11"
13127 ]
13128 },
13129 {
@@ -13166,8 +13180,8 @@
13180 "zh-chs": "错误:无效的帐户检查,验证网址仅在30分钟内有效。",
13181 "zh-cht": "錯誤:無效的帳戶檢查,驗證網址僅在30分鐘內有效。",
13182 "xloc": [
13169 - "message.handlebars->3->14",
13170 - "message2.handlebars->5->14"
13183 + "message.handlebars->3->15",
13184 + "message2.handlebars->5->15"
13185 ]
13186 },
13187 {
@@ -13187,8 +13201,8 @@
13201 "zh-chs": "错误:无效的帐户检查。",
13202 "zh-cht": "錯誤:無效的帳戶檢查。",
13203 "xloc": [
13190 - "message.handlebars->3->13",
13191 - "message2.handlebars->5->13"
13204 + "message.handlebars->3->14",
13205 + "message2.handlebars->5->14"
13206 ]
13207 },
13208 {
@@ -13208,8 +13222,8 @@
13222 "zh-chs": "错误:无效的域。",
13223 "zh-cht": "錯誤:無效的域。",
13224 "xloc": [
13211 - "message.handlebars->3->4",
13212 - "message2.handlebars->5->4"
13225 + "message.handlebars->3->5",
13226 + "message2.handlebars->5->5"
13227 ]
13228 },
13229 {
@@ -13229,8 +13243,8 @@
13243 "zh-chs": "错误:用户“ {1} ”的电邮“ {0} ”无效。",
13244 "zh-cht": "錯誤:用戶“ {1} ”的電郵“ {0} ”無效。",
13245 "xloc": [
13232 - "message.handlebars->3->6",
13233 - "message2.handlebars->5->6"
13246 + "message.handlebars->3->7",
13247 + "message2.handlebars->5->7"
13248 ]
13249 },
13250 {
@@ -13250,8 +13264,8 @@
13264 "zh-chs": "错误:无效的用户名“ {0} ”。",
13265 "zh-cht": "錯誤:無效的用戶名“ {0} ”。",
13266 "xloc": [
13253 - "message.handlebars->3->5",
13254 - "message2.handlebars->5->5"
13267 + "message.handlebars->3->6",
13268 + "message2.handlebars->5->6"
13269 ]
13270 },
13271 {
@@ -13335,7 +13349,7 @@
13349 "zh-cht": "編輯裝置",
13350 "xloc": [
13351 "default-mobile.handlebars->9->295",
13338 - "default.handlebars->29->827"
13352 + "default.handlebars->29->835"
13353 ]
13354 },
13355 {
@@ -13358,10 +13372,10 @@
13372 "default-mobile.handlebars->9->421",
13373 "default-mobile.handlebars->9->423",
13374 "default-mobile.handlebars->9->443",
13361 - "default.handlebars->29->1417",
13362 - "default.handlebars->29->1449",
13363 - "default.handlebars->29->1473",
13364 - "default.handlebars->29->1485"
13375 + "default.handlebars->29->1425",
13376 + "default.handlebars->29->1457",
13377 + "default.handlebars->29->1481",
13378 + "default.handlebars->29->1493"
13379 ]
13380 },
13381 {
@@ -13381,7 +13395,7 @@
13395 "zh-chs": "编辑设备组功能",
13396 "zh-cht": "編輯裝置群功能",
13397 "xloc": [
13384 - "default.handlebars->29->1435"
13398 + "default.handlebars->29->1443"
13399 ]
13400 },
13401 {
@@ -13401,8 +13415,8 @@
13415 "zh-chs": "编辑设备组权限",
13416 "zh-cht": "編輯裝置群權限",
13417 "xloc": [
13404 - "default.handlebars->29->1470",
13405 - "default.handlebars->29->1482"
13418 + "default.handlebars->29->1478",
13419 + "default.handlebars->29->1490"
13420 ]
13421 },
13422 {
@@ -13422,7 +13436,7 @@
13436 "zh-chs": "编辑设备组用户同意",
13437 "zh-cht": "編輯裝置群用戶同意",
13438 "xloc": [
13425 - "default.handlebars->29->1418"
13439 + "default.handlebars->29->1426"
13440 ]
13441 },
13442 {
@@ -13443,7 +13457,7 @@
13457 "zh-cht": "編輯裝置筆記",
13458 "xloc": [
13459 "default-mobile.handlebars->9->435",
13446 - "default.handlebars->29->1462"
13460 + "default.handlebars->29->1470"
13461 ]
13462 },
13463 {
@@ -13463,8 +13477,8 @@
13477 "zh-chs": "编辑设备权限",
13478 "zh-cht": "編輯裝置權限",
13479 "xloc": [
13466 - "default.handlebars->29->1475",
13467 - "default.handlebars->29->1477"
13480 + "default.handlebars->29->1483",
13481 + "default.handlebars->29->1485"
13482 ]
13483 },
13484 {
@@ -13484,7 +13498,7 @@
13498 "zh-chs": "编辑设备标签",
13499 "zh-cht": "編輯裝置標籤",
13500 "xloc": [
13487 - "default.handlebars->29->469"
13501 + "default.handlebars->29->470"
13502 ]
13503 },
13504 {
@@ -13504,7 +13518,7 @@
13518 "zh-chs": "编辑设备用户同意",
13519 "zh-cht": "編輯裝置用戶同意",
13520 "xloc": [
13507 - "default.handlebars->29->1420"
13521 + "default.handlebars->29->1428"
13522 ]
13523 },
13524 {
@@ -13524,7 +13538,7 @@
13538 "zh-chs": "编辑群组",
13539 "zh-cht": "編輯群組",
13540 "xloc": [
13527 - "default.handlebars->29->692"
13541 + "default.handlebars->29->697"
13542 ]
13543 },
13544 {
@@ -13548,10 +13562,10 @@
13562 "default-mobile.handlebars->9->242",
13563 "default-mobile.handlebars->9->245",
13564 "default-mobile.handlebars->9->285",
13551 - "default.handlebars->29->571",
13552 - "default.handlebars->29->574",
13553 - "default.handlebars->29->577",
13554 - "default.handlebars->29->773"
13565 + "default.handlebars->29->572",
13566 + "default.handlebars->29->575",
13567 + "default.handlebars->29->578",
13568 + "default.handlebars->29->781"
13569 ]
13570 },
13571 {
@@ -13572,7 +13586,7 @@
13586 "zh-cht": "編輯筆記",
13587 "xloc": [
13588 "default-mobile.handlebars->9->450",
13575 - "default.handlebars->29->1492"
13589 + "default.handlebars->29->1500"
13590 ]
13591 },
13592 {
@@ -13592,7 +13606,7 @@
13606 "zh-chs": "编辑用户同意",
13607 "zh-cht": "編輯用戶同意",
13608 "xloc": [
13595 - "default.handlebars->29->1419"
13609 + "default.handlebars->29->1427"
13610 ]
13611 },
13612 {
@@ -13612,7 +13626,7 @@
13626 "zh-chs": "编辑用户设备组权限",
13627 "zh-cht": "編輯用戶裝置群權限",
13628 "xloc": [
13615 - "default.handlebars->29->1483"
13629 + "default.handlebars->29->1491"
13630 ]
13631 },
13632 {
@@ -13632,7 +13646,7 @@
13646 "zh-chs": "编辑用户设备权限",
13647 "zh-cht": "編輯用戶裝置權限",
13648 "xloc": [
13635 - "default.handlebars->29->1478"
13649 + "default.handlebars->29->1486"
13650 ]
13651 },
13652 {
@@ -13652,7 +13666,7 @@
13666 "zh-chs": "编辑用户组",
13667 "zh-cht": "編輯用戶群",
13668 "xloc": [
13655 - "default.handlebars->29->1894"
13669 + "default.handlebars->29->1902"
13670 ]
13671 },
13672 {
@@ -13672,14 +13686,14 @@
13686 "zh-chs": "编辑用户组设备权限",
13687 "zh-cht": "編輯用戶群裝置權限",
13688 "xloc": [
13675 - "default.handlebars->29->1480"
13689 + "default.handlebars->29->1488"
13690 ]
13691 },
13692 {
13693 "en": "Edit User Group User Consent",
13694 "nl": "Bewerk groepsgebruikerstoestemming",
13695 "xloc": [
13682 - "default.handlebars->29->1421"
13696 + "default.handlebars->29->1429"
13697 ]
13698 },
13699 {
@@ -13720,7 +13734,7 @@
13734 "zh-chs": "编辑标签",
13735 "zh-cht": "編輯標籤",
13736 "xloc": [
13723 - "default.handlebars->29->444"
13737 + "default.handlebars->29->445"
13738 ]
13739 },
13740 {
@@ -13741,12 +13755,12 @@
13755 "zh-cht": "電郵",
13756 "xloc": [
13757 "default-mobile.handlebars->9->78",
13744 - "default.handlebars->29->1793",
13745 - "default.handlebars->29->1920",
13746 - "default.handlebars->29->1922",
13747 - "default.handlebars->29->1962",
13748 - "default.handlebars->29->1978",
13749 - "default.handlebars->29->320",
13758 + "default.handlebars->29->1801",
13759 + "default.handlebars->29->1928",
13760 + "default.handlebars->29->1930",
13761 + "default.handlebars->29->1970",
13762 + "default.handlebars->29->1986",
13763 + "default.handlebars->29->321",
13764 "login-mobile.handlebars->5->42",
13765 "login-mobile.handlebars->container->page_content->column_l->1->1->0->1->tokenpanel->1->7->1->4->1->3",
13766 "login.handlebars->5->44",
@@ -13778,7 +13792,7 @@
13792 "zh-cht": "電郵地址變更",
13793 "xloc": [
13794 "default-mobile.handlebars->9->79",
13781 - "default.handlebars->29->1268"
13795 + "default.handlebars->29->1276"
13796 ]
13797 },
13798 {
@@ -13799,7 +13813,7 @@
13813 "zh-cht": "電郵認證",
13814 "xloc": [
13815 "default-mobile.handlebars->9->68",
13802 - "default.handlebars->29->1036"
13816 + "default.handlebars->29->1044"
13817 ]
13818 },
13819 {
@@ -13859,7 +13873,7 @@
13873 "zh-cht": "電郵驗證",
13874 "xloc": [
13875 "default-mobile.handlebars->9->77",
13862 - "default.handlebars->29->1266"
13876 + "default.handlebars->29->1274"
13877 ]
13878 },
13879 {
@@ -13879,7 +13893,7 @@
13893 "zh-chs": "电邮邀请",
13894 "zh-cht": "電郵邀請",
13895 "xloc": [
13882 - "default.handlebars->29->317"
13896 + "default.handlebars->29->318"
13897 ]
13898 },
13899 {
@@ -13899,7 +13913,7 @@
13913 "zh-chs": "电邮未验证",
13914 "zh-cht": "電郵未驗證",
13915 "xloc": [
13902 - "default.handlebars->29->1739"
13916 + "default.handlebars->29->1747"
13917 ]
13918 },
13919 {
@@ -13907,8 +13921,8 @@
13921 "nl": "Email is geverifieerd",
13922 "fr": "Email vérifié",
13923 "xloc": [
13910 - "default.handlebars->29->1740",
13911 - "default.handlebars->29->1914"
13924 + "default.handlebars->29->1748",
13925 + "default.handlebars->29->1922"
13926 ]
13927 },
13928 {
@@ -13928,7 +13942,7 @@
13942 "zh-chs": "电邮已验证。",
13943 "zh-cht": "電郵已驗證。",
13944 "xloc": [
13931 - "default.handlebars->29->1799"
13945 + "default.handlebars->29->1807"
13946 ]
13947 },
13948 {
@@ -13948,7 +13962,7 @@
13962 "zh-chs": "电邮未验证",
13963 "zh-cht": "電郵未驗證",
13964 "xloc": [
13951 - "default.handlebars->29->1915"
13965 + "default.handlebars->29->1923"
13966 ]
13967 },
13968 {
@@ -14012,7 +14026,7 @@
14026 "zh-chs": "已通过电邮验证,并且需要重置密码。",
14027 "zh-cht": "已通過電郵驗證,並且需要重置密碼。",
14028 "xloc": [
14015 - "default.handlebars->29->1800"
14029 + "default.handlebars->29->1808"
14030 ]
14031 },
14032 {
@@ -14032,7 +14046,7 @@
14046 "zh-chs": "电邮/短信流量",
14047 "zh-cht": "電郵/短信流量",
14048 "xloc": [
14035 - "default.handlebars->29->2121"
14049 + "default.handlebars->29->2129"
14050 ]
14051 },
14052 {
@@ -14078,7 +14092,7 @@
14092 "zh-chs": "启用邀请代码",
14093 "zh-cht": "啟用邀請代碼",
14094 "xloc": [
14081 - "default.handlebars->29->1515"
14095 + "default.handlebars->29->1523"
14096 ]
14097 },
14098 {
@@ -14119,7 +14133,7 @@
14133 "zh-cht": "啟用電郵二因子鑑別。",
14134 "xloc": [
14135 "default-mobile.handlebars->9->70",
14122 - "default.handlebars->29->1038"
14136 + "default.handlebars->29->1046"
14137 ]
14138 },
14139 {
@@ -14159,7 +14173,7 @@
14173 "zh-chs": "已启用",
14174 "zh-cht": "已啟用",
14175 "xloc": [
14162 - "default.handlebars->29->2055"
14176 + "default.handlebars->29->2063"
14177 ]
14178 },
14179 {
@@ -14179,7 +14193,7 @@
14193 "zh-chs": "启用电子邮件两因素身份验证",
14194 "zh-cht": "啟用電子郵件兩因素身份驗證",
14195 "xloc": [
14182 - "default.handlebars->29->1679"
14196 + "default.handlebars->29->1687"
14197 ]
14198 },
14199 {
@@ -14219,7 +14233,7 @@
14233 "zh-chs": "时间结束",
14234 "zh-cht": "時間結束",
14235 "xloc": [
14222 - "default.handlebars->29->2052"
14236 + "default.handlebars->29->2060"
14237 ]
14238 },
14239 {
@@ -14239,7 +14253,7 @@
14253 "zh-chs": "从{1}到{2},{3}秒结束了桌面会话“{0}”",
14254 "zh-cht": "從{1}到{2},{3}秒結束了桌面會話“{0}”",
14255 "xloc": [
14242 - "default.handlebars->29->1602"
14256 + "default.handlebars->29->1610"
14257 ]
14258 },
14259 {
@@ -14259,7 +14273,7 @@
14273 "zh-chs": "从{1}到{2},{3}秒结束了文件管理会话“{0}”",
14274 "zh-cht": "從{1}到{2},{3}秒結束了文件管理會話“{0}”",
14275 "xloc": [
14262 - "default.handlebars->29->1603"
14276 + "default.handlebars->29->1611"
14277 ]
14278 },
14279 {
@@ -14279,7 +14293,7 @@
14293 "zh-chs": "从{1}到{2},{3}秒结束了中继会话“{0}”",
14294 "zh-cht": "從{1}到{2},{3}秒結束了中繼會話“{0}”",
14295 "xloc": [
14282 - "default.handlebars->29->1600"
14296 + "default.handlebars->29->1608"
14297 ]
14298 },
14299 {
@@ -14299,7 +14313,7 @@
14313 "zh-chs": "从{1}到{2},{3}秒结束了终端会话“{0}”",
14314 "zh-cht": "從{1}到{2},{3}秒結束了終端會話“{0}”",
14315 "xloc": [
14302 - "default.handlebars->29->1601"
14316 + "default.handlebars->29->1609"
14317 ]
14318 },
14319 {
@@ -14319,7 +14333,7 @@
14333 "zh-chs": "英文",
14334 "zh-cht": "英文",
14335 "xloc": [
14322 - "default.handlebars->29->1100"
14336 + "default.handlebars->29->1108"
14337 ]
14338 },
14339 {
@@ -14339,7 +14353,7 @@
14353 "zh-chs": "英文(澳洲)",
14354 "zh-cht": "英文(澳洲)",
14355 "xloc": [
14342 - "default.handlebars->29->1101"
14356 + "default.handlebars->29->1109"
14357 ]
14358 },
14359 {
@@ -14359,7 +14373,7 @@
14373 "zh-chs": "英文(伯利茲)",
14374 "zh-cht": "英文(伯利茲)",
14375 "xloc": [
14362 - "default.handlebars->29->1102"
14376 + "default.handlebars->29->1110"
14377 ]
14378 },
14379 {
@@ -14379,7 +14393,7 @@
14393 "zh-chs": "英文(加拿大)",
14394 "zh-cht": "英文(加拿大)",
14395 "xloc": [
14382 - "default.handlebars->29->1103"
14396 + "default.handlebars->29->1111"
14397 ]
14398 },
14399 {
@@ -14399,7 +14413,7 @@
14413 "zh-chs": "英文(爱尔兰)",
14414 "zh-cht": "英文(愛爾蘭)",
14415 "xloc": [
14402 - "default.handlebars->29->1104"
14416 + "default.handlebars->29->1112"
14417 ]
14418 },
14419 {
@@ -14419,7 +14433,7 @@
14433 "zh-chs": "英文(牙买加)",
14434 "zh-cht": "英文(牙買加)",
14435 "xloc": [
14422 - "default.handlebars->29->1105"
14436 + "default.handlebars->29->1113"
14437 ]
14438 },
14439 {
@@ -14439,7 +14453,7 @@
14453 "zh-chs": "英文(纽西兰)",
14454 "zh-cht": "英文(紐西蘭)",
14455 "xloc": [
14442 - "default.handlebars->29->1106"
14456 + "default.handlebars->29->1114"
14457 ]
14458 },
14459 {
@@ -14459,7 +14473,7 @@
14473 "zh-chs": "英文(菲律宾)",
14474 "zh-cht": "英文(菲律賓)",
14475 "xloc": [
14462 - "default.handlebars->29->1107"
14476 + "default.handlebars->29->1115"
14477 ]
14478 },
14479 {
@@ -14479,7 +14493,7 @@
14493 "zh-chs": "英语(南非)",
14494 "zh-cht": "英語(南非)",
14495 "xloc": [
14482 - "default.handlebars->29->1108"
14496 + "default.handlebars->29->1116"
14497 ]
14498 },
14499 {
@@ -14499,7 +14513,7 @@
14513 "zh-chs": "英文(特立尼达和多巴哥)",
14514 "zh-cht": "英文(特立尼達和多巴哥)",
14515 "xloc": [
14502 - "default.handlebars->29->1109"
14516 + "default.handlebars->29->1117"
14517 ]
14518 },
14519 {
@@ -14519,7 +14533,7 @@
14533 "zh-chs": "英文(英国)",
14534 "zh-cht": "英文(英國)",
14535 "xloc": [
14522 - "default.handlebars->29->1110"
14536 + "default.handlebars->29->1118"
14537 ]
14538 },
14539 {
@@ -14539,7 +14553,7 @@
14553 "zh-chs": "美国英文",
14554 "zh-cht": "美國英語",
14555 "xloc": [
14542 - "default.handlebars->29->1111"
14556 + "default.handlebars->29->1119"
14557 ]
14558 },
14559 {
@@ -14559,7 +14573,7 @@
14573 "zh-chs": "英文(津巴布韦)",
14574 "zh-cht": "英文(津巴布韋)",
14575 "xloc": [
14562 - "default.handlebars->29->1112"
14576 + "default.handlebars->29->1120"
14577 ]
14578 },
14579 {
@@ -14579,9 +14593,9 @@
14593 "zh-chs": "输入",
14594 "zh-cht": "輸入",
14595 "xloc": [
14582 - "default.handlebars->29->1294",
14583 - "default.handlebars->29->1295",
14584 - "default.handlebars->29->897"
14596 + "default.handlebars->29->1302",
14597 + "default.handlebars->29->1303",
14598 + "default.handlebars->29->905"
14599 ]
14600 },
14601 {
@@ -14601,7 +14615,7 @@
14615 "zh-chs": "输入管理领域名称的逗号分隔列表。",
14616 "zh-cht": "輸入管理領域名稱的逗號分隔列表。",
14617 "xloc": [
14604 - "default.handlebars->29->1804"
14618 + "default.handlebars->29->1812"
14619 ]
14620 },
14621 {
@@ -14621,7 +14635,7 @@
14635 "zh-chs": "输入IP地址范围以扫描英特尔AMT设备。",
14636 "zh-cht": "輸入IP地址範圍以掃描Intel&reg; AMT裝置。",
14637 "xloc": [
14624 - "default.handlebars->29->308"
14638 + "default.handlebars->29->309"
14639 ]
14640 },
14641 {
@@ -14649,7 +14663,7 @@
14663 "nl": "Voer tekst in en klik op OK om deze op afstand te typen. Zorg ervoor dat u de externe cursor op de juiste positie plaatst voordat u verder gaat.",
14664 "fr": "Saisissez le texte puis cliquez sur OK pour le taper à distance. Vérifiez préalablement que le curseur distant est positionné correctement.",
14665 "xloc": [
14652 - "default.handlebars->29->848"
14666 + "default.handlebars->29->856"
14667 ]
14668 },
14669 {
@@ -14711,7 +14725,7 @@
14725 "zh-chs": "输入支持SMS的电话号码。验证后,该号码可用于登录验证和其他通知。",
14726 "zh-cht": "輸入支持SMS的電話號碼。驗證後,該號碼可用於登入驗證和其他通知。",
14727 "xloc": [
14714 - "default.handlebars->29->1033"
14728 + "default.handlebars->29->1041"
14729 ]
14730 },
14731 {
@@ -14771,7 +14785,7 @@
14785 "zh-chs": "世界文",
14786 "zh-cht": "世界語",
14787 "xloc": [
14774 - "default.handlebars->29->1113"
14788 + "default.handlebars->29->1121"
14789 ]
14790 },
14791 {
@@ -14791,7 +14805,7 @@
14805 "zh-chs": "爱沙尼亚文",
14806 "zh-cht": "愛沙尼亞語",
14807 "xloc": [
14794 - "default.handlebars->29->1114"
14808 + "default.handlebars->29->1122"
14809 ]
14810 },
14811 {
@@ -14811,7 +14825,7 @@
14825 "zh-chs": "事件详情",
14826 "zh-cht": "事件詳情",
14827 "xloc": [
14814 - "default.handlebars->29->937"
14828 + "default.handlebars->29->945"
14829 ]
14830 },
14831 {
@@ -14831,7 +14845,7 @@
14845 "zh-chs": "事件列表输出",
14846 "zh-cht": "事件列表輸出",
14847 "xloc": [
14834 - "default.handlebars->29->1715"
14848 + "default.handlebars->29->1723"
14849 ]
14850 },
14851 {
@@ -14925,7 +14939,7 @@
14939 "zh-cht": "到期時間",
14940 "xloc": [
14941 "default.handlebars->29->189",
14928 - "default.handlebars->29->740"
14942 + "default.handlebars->29->748"
14943 ]
14944 },
14945 {
@@ -14972,7 +14986,7 @@
14986 "zh-chs": "输出设备信息",
14987 "zh-cht": "輸出裝置訊息",
14988 "xloc": [
14975 - "default.handlebars->29->449"
14989 + "default.handlebars->29->450"
14990 ]
14991 },
14992 {
@@ -14992,7 +15006,7 @@
15006 "zh-chs": "扩充式ASCII",
15007 "zh-cht": "擴充式ASCII",
15008 "xloc": [
14995 - "default.handlebars->29->876"
15009 + "default.handlebars->29->884"
15010 ]
15011 },
15012 {
@@ -15032,7 +15046,7 @@
15046 "zh-chs": "外部",
15047 "zh-cht": "外部",
15048 "xloc": [
15035 - "default.handlebars->29->2106"
15049 + "default.handlebars->29->2114"
15050 ]
15051 },
15052 {
@@ -15072,7 +15086,7 @@
15086 "zh-chs": "FYRO马其顿语",
15087 "zh-cht": "FYRO馬其頓語",
15088 "xloc": [
15075 - "default.handlebars->29->1164"
15089 + "default.handlebars->29->1172"
15090 ]
15091 },
15092 {
@@ -15092,7 +15106,7 @@
15106 "zh-chs": "法罗语",
15107 "zh-cht": "法羅語",
15108 "xloc": [
15095 - "default.handlebars->29->1115"
15109 + "default.handlebars->29->1123"
15110 ]
15111 },
15112 {
@@ -15132,7 +15146,7 @@
15146 "zh-chs": "本地用户拒绝后无法启动远程桌面",
15147 "zh-cht": "本地用戶拒絕後無法啟動遠程桌面",
15148 "xloc": [
15135 - "default.handlebars->29->1625"
15149 + "default.handlebars->29->1633"
15150 ]
15151 },
15152 {
@@ -15152,7 +15166,7 @@
15166 "zh-chs": "本地用户拒绝后无法启动远程文件",
15167 "zh-cht": "本地用戶拒絕後無法啟動遠程文件",
15168 "xloc": [
15155 - "default.handlebars->29->1632"
15169 + "default.handlebars->29->1640"
15170 ]
15171 },
15172 {
@@ -15172,7 +15186,7 @@
15186 "zh-chs": "无法启动远程终端接合{0}({1})",
15187 "zh-cht": "無法啟動遠程終端接合{0}({1})",
15188 "xloc": [
15175 - "default.handlebars->29->830",
15189 + "default.handlebars->29->838",
15190 "desktop.handlebars->3->8"
15191 ]
15192 },
@@ -15193,7 +15207,7 @@
15207 "zh-chs": "波斯文(波斯文)",
15208 "zh-cht": "波斯語(波斯語)",
15209 "xloc": [
15196 - "default.handlebars->29->1116"
15210 + "default.handlebars->29->1124"
15211 ]
15212 },
15213 {
@@ -15235,7 +15249,7 @@
15249 "zh-chs": "功能",
15250 "zh-cht": "功能",
15251 "xloc": [
15238 - "default.handlebars->29->1339"
15252 + "default.handlebars->29->1347"
15253 ]
15254 },
15255 {
@@ -15255,7 +15269,7 @@
15269 "zh-chs": "斐济",
15270 "zh-cht": "斐濟",
15271 "xloc": [
15258 - "default.handlebars->29->1117"
15272 + "default.handlebars->29->1125"
15273 ]
15274 },
15275 {
@@ -15296,8 +15310,8 @@
15310 "zh-cht": "檔案編輯器",
15311 "xloc": [
15312 "default-mobile.handlebars->9->316",
15299 - "default.handlebars->29->513",
15300 - "default.handlebars->29->908"
15313 + "default.handlebars->29->514",
15314 + "default.handlebars->29->916"
15315 ]
15316 },
15317 {
@@ -15321,8 +15335,8 @@
15335 "zh-chs": "档案操作",
15336 "zh-cht": "檔案操作",
15337 "xloc": [
15324 - "default.handlebars->29->888",
15325 - "default.handlebars->29->890"
15338 + "default.handlebars->29->896",
15339 + "default.handlebars->29->898"
15340 ]
15341 },
15342 {
@@ -15362,7 +15376,7 @@
15376 "zh-chs": "文件系统驱动",
15377 "zh-cht": "FileSystemDriver",
15378 "xloc": [
15365 - "default.handlebars->29->857"
15379 + "default.handlebars->29->865"
15380 ]
15381 },
15382 {
@@ -15384,9 +15398,9 @@
15398 "xloc": [
15399 "default-mobile.handlebars->9->171",
15400 "default-mobile.handlebars->9->268",
15387 - "default.handlebars->29->1429",
15388 - "default.handlebars->29->2040",
15389 - "default.handlebars->29->259",
15401 + "default.handlebars->29->1437",
15402 + "default.handlebars->29->2048",
15403 + "default.handlebars->29->260",
15404 "default.handlebars->container->topbar->1->1->MainSubMenuSpan->MainSubMenu->1->0->MainDevFiles",
15405 "default.handlebars->contextMenu->cxfiles"
15406 ]
@@ -15428,10 +15442,10 @@
15442 "zh-chs": "档案通知",
15443 "zh-cht": "檔案通知",
15444 "xloc": [
15431 - "default.handlebars->29->1347",
15432 - "default.handlebars->29->1860",
15433 - "default.handlebars->29->1947",
15434 - "default.handlebars->29->598"
15445 + "default.handlebars->29->1355",
15446 + "default.handlebars->29->1868",
15447 + "default.handlebars->29->1955",
15448 + "default.handlebars->29->599"
15449 ]
15450 },
15451 {
@@ -15451,10 +15465,10 @@
15465 "zh-chs": "档案提示",
15466 "zh-cht": "檔案提示",
15467 "xloc": [
15454 - "default.handlebars->29->1346",
15455 - "default.handlebars->29->1859",
15456 - "default.handlebars->29->1946",
15457 - "default.handlebars->29->597"
15468 + "default.handlebars->29->1354",
15469 + "default.handlebars->29->1867",
15470 + "default.handlebars->29->1954",
15471 + "default.handlebars->29->598"
15472 ]
15473 },
15474 {
@@ -15475,7 +15489,7 @@
15489 "zh-cht": "過濾",
15490 "xloc": [
15491 "default-mobile.handlebars->container->page_content->column_l->p2->xdevicesBar->1",
15478 - "default.handlebars->29->893",
15492 + "default.handlebars->29->901",
15493 "default.handlebars->container->column_l->p1->devListToolbarSpan->1->0->devListToolbar",
15494 "default.handlebars->container->column_l->p1->devListToolbarSpan->1->0->kvmListToolbar",
15495 "default.handlebars->container->column_l->p4->3->1->0->3->3"
@@ -15494,7 +15508,7 @@
15508 "nl": "Zoek bestanden",
15509 "fr": "Recherche des fichiers",
15510 "xloc": [
15497 - "default.handlebars->29->896"
15511 + "default.handlebars->29->904"
15512 ]

This file is too large to show in full.

views/default.handlebars
+11 -22
@@ -3107,7 +3107,7 @@
3107 if (message.consent & 64) { y.push("Privacy bar"); }
3108 if (y.length == 0) { y.push("None"); }
3109 x += addHtmlValue("User Consent", y.join(', '));
3110 - x += '<div id=agentInvitationLinkDiv style="text-align:center;font-size:large;margin:16px"><a href="' + message.url + '" id=agentInvitationLink rel="noreferrer noopener" target="_blank" style=cursor:pointer>' + "Remote Desktop Link" + '</a> <img src=images/link4.png height=10 width=10 title="' + "Copy link to clipboard" + '" style=cursor:pointer onclick=d2CopyInviteToClip()></div></div>';
3110 + x += '<div id=agentInvitationLinkDiv style="text-align:center;font-size:large;margin:16px"><a href="' + message.url + '" id=agentInvitationLink rel="noreferrer noopener" target="_blank" style=cursor:pointer>' + ((message.p == 1)?"Remote Terminal Link":"Remote Desktop Link") + '</a> <img src=images/link4.png height=10 width=10 title="' + "Copy link to clipboard" + '" style=cursor:pointer onclick=d2CopyInviteToClip()></div></div>';
3111 setDialogMode(2, "Share Device", 1, null, x);
3112 break;
3113 }
@@ -6042,15 +6042,14 @@
6042 for (var i = 0; i < deviceShares.length; i++) {
6043 var dshare = deviceShares[i];
6044 var trash = '<a href="' + dshare.url + '" rel="noreferrer noopener" target=_blank title="' + "Device Sharing Link" + '" style=cursor:pointer><img src=images/link2.png border=0 height=10 width=10></a> <a href=# onclick=\'return p30removeDeviceSharing(event,"' + encodeURIComponentEx(currentNode._id) + '","' + encodeURIComponentEx(dshare.publicid) + '","' + encodeURIComponentEx(dshare.guestName) + '")\' title="' + "Remove device sharing" + '" style=cursor:pointer><img src=images/trash.png border=0 height=10 width=10></a>';
6045 - var details = printFlexDateTime(new Date(dshare.startTime)) + ' to ' + printFlexDateTime(new Date(dshare.expireTime));
6046 - if (dshare.consent) { if ((dshare.consent & 8) != 0) { details += ', Prompt for consent'; } }
6045 + var details = format("{0}, {1} to {2}", ((dshare.p == 1)?"Terminal":"Desktop"), printFlexDateTime(new Date(dshare.startTime)), printFlexDateTime(new Date(dshare.expireTime)));
6046 + if (dshare.consent) { if (((dshare.consent & 8) != 0) || ((dshare.consent & 16) != 0)) { details += ", Prompt for consent"; } }
6047 x += '<tr ' + (((++count % 2) == 0) ? 'style=background-color:#DDD' : '') + '><td style=width:30%><div class=m' + 2 + '></div><div>&nbsp;' + dshare.guestName + '<div></div></div></td><td style=width:70%><div style=float:right>' + trash + '</div><div>' + details + '</div></td></tr>';
6048 }
6049 x += '</tbody></table>';
6050 }
6051 QH('p10html4', x);
6052
6053 -
6053 // Change the URL
6054 var urlviewmode = '';
6055 if (((features & 0x10000000) == 0) && (xxcurrentView >= 10) && (xxcurrentView <= 19) && (currentNode != null)) {
@@ -6208,24 +6207,11 @@
6207 meshserver.send({ action: 'toast', nodeids: [ currentNode._id ], title: decodeURIComponent('{{{extitle}}}'), msg: Q('d2devToast').value });
6208 }
6209
6211 - /*
6210 function showShareDevice() {
6211 if (xxdialogMode) return;
6214 - var y = '', x = "Creates a link that allows a guest without an account to remote desktop into this device for up to 1 hour." + '<br /><br />';
6215 - x += addHtmlValue("Guest Name", '<input id=d2inviteName style=width:250px maxlength=128 type=text onkeyup=showShareDeviceValidate() />');
6216 - var options = { 1 : "1 minute", 5 : "5 minutes", 10 : "10 minutes", 15 : "15 minutes", 30 : "30 minutes", 45 : "45 minutes", 60 : "60 minutes", 120 : "2 hours", 240 : "4 hours", 480 : "8 hours", 720 : "12 hours", 960 : "16 hours", 1440 : "24 hours", 2880 : "2 days", 5760 : "4 days" }
6217 - for (var i in options) { if (serverinfo.maxGuestSessionSharingTime >= i) { y += '<option value=' + i + '>' + options[i] + '</option>'; } }
6218 - x += addHtmlValue("Expire Time", '<select id=d2inviteExpire style=float:right;width:250px>' + y + '</select>');
6219 - x += addHtmlValue("User Consent", '<select id=d2userConsent style=float:right;width:250px><option value=73>' + "Prompt for consent" + '</option><option value=65>' + "Notify Only" + '</option></select>');
6220 - setDialogMode(2, "Share Device", 3, showShareDeviceEx, x);
6221 - showShareDeviceValidate();
6222 - }
6223 - */
6224 -
6225 - function showShareDevice() {
6226 - if (xxdialogMode) return;
6227 - var y = '', x = "Creates a link that allows a guest without an account to remote desktop into this device for a limited time." + '<br /><br />';
6212 + var y = '', x = "Creates a link that allows a guest without an account to remote control this device for a limited time." + '<br /><br />';
6213 x += addHtmlValue("Guest Name", '<input id=d2inviteName style=width:250px maxlength=128 type=text onkeyup=showShareDeviceValidate() />');
6214 + x += addHtmlValue("Type", '<select id=d2shareType style=float:right;width:250px onchange=showShareDeviceValidate()><option value=2>' + "Desktop" + '</option><option value=1>' + "Terminal" + '</option></select>');
6215 var options = { 1 : "1 minute", 5 : "5 minutes", 10 : "10 minutes", 15 : "15 minutes", 30 : "30 minutes", 45 : "45 minutes", 60 : "60 minutes", 120 : "2 hours", 240 : "4 hours", 480 : "8 hours", 720 : "12 hours", 960 : "16 hours", 1440 : "24 hours", 2880 : "2 days", 5760 : "4 days" }
6216 for (var i in options) { y += '<option value=' + i + '>' + options[i] + '</option>'; }
6217 x += addHtmlValue("Validity", '<select id=d2timeRange style=float:right;width:250px onchange=showShareDeviceValidate()><option value=0>' + "Starting now" + '</option><option value=1>' + "Time range" + '</option></select>');
@@ -6234,7 +6220,7 @@
6220 x += '</div><div id=d2moderange style=display:none>';
6221 x += addHtmlValue("Time Range", '<input id=d2timeRangeSelector style=float:right;width:250px class=flatpickr type="text" placeholder="Select Date & Time.." data-id="altinput">');
6222 x += '</div>';
6237 - x += addHtmlValue("User Consent", '<select id=d2userConsent style=float:right;width:250px><option value=73>' + "Prompt for consent" + '</option><option value=65>' + "Notify Only" + '</option></select>');
6223 + x += addHtmlValue("User Consent", '<select id=d2userConsent style=float:right;width:250px><option value=1>' + "Prompt for consent" + '</option><option value=0>' + "Notify Only" + '</option></select>');
6224 setDialogMode(2, "Share Device", 3, showShareDeviceEx, x);
6225 showShareDeviceValidate();
6226 var tomorrow = new Date();
@@ -6253,10 +6239,13 @@
6239 QE('idx_dlgOkButton', ok);
6240 }
6241 function showShareDeviceEx(b, tag) {
6242 + var consent = 0;
6243 + if (Q('d2shareType').value == 1) { if (Q('d2userConsent').value == 1) { consent = 18; } else { consent = 2; } } // Terminal Consent: 2 = Notify, 16 = Prompt
6244 + if (Q('d2shareType').value == 2) { if (Q('d2userConsent').value == 1) { consent = 73; } else { consent = 65; } } // Desktop Consent: 1 = Notify, 8 = Prompt, 64 = Privacy bar
6245 if (Q('d2timeRange').value == 0) {
6257 - meshserver.send({ action: 'createDeviceShareLink', nodeid: currentNode._id, guestname: Q('d2inviteName').value.trim(), expire: parseInt(Q('d2inviteExpire').value), consent: parseInt(Q('d2userConsent').value) });
6246 + meshserver.send({ action: 'createDeviceShareLink', nodeid: currentNode._id, guestname: Q('d2inviteName').value.trim(), p: parseInt(Q('d2shareType').value), expire: parseInt(Q('d2inviteExpire').value), consent: consent });
6247 } else {
6259 - meshserver.send({ action: 'createDeviceShareLink', nodeid: currentNode._id, guestname: Q('d2inviteName').value.trim(), start: Math.floor(tag.selectedDates[0].getTime() / 1000), end: Math.floor(tag.selectedDates[1].getTime() / 1000), consent: parseInt(Q('d2userConsent').value) });
6248 + meshserver.send({ action: 'createDeviceShareLink', nodeid: currentNode._id, guestname: Q('d2inviteName').value.trim(), p: parseInt(Q('d2shareType').value), start: Math.floor(tag.selectedDates[0].getTime() / 1000), end: Math.floor(tag.selectedDates[1].getTime() / 1000), consent: consent });
6249 }
6250 }
6251
views/desktop.handlebars
+1 -2
@@ -397,8 +397,7 @@
397 desktop.contype = 2;
398 } else if ((contype == null) || (contype == 1) || (contype == 3)) {
399 // Setup the Mesh Agent remote desktop
400 - var meshserver = null;
401 - desktop = CreateAgentRedirect(meshserver, CreateAgentRemoteDesktop('Desk'), serverPublicNamePort, authCookie, null, domainUrl);
400 + desktop = CreateAgentRedirect(null, CreateAgentRemoteDesktop('Desk'), serverPublicNamePort, authCookie, null, domainUrl);
401 desktop.m.mouseCursorActive(true);
402 desktop.debugmode = debugmode;
403 desktop.m.debugmode = debugmode;
views/message.handlebars
+1
@@ -54,6 +54,7 @@
54 if (titleid == 1) { title = "Account Verification"; }
55 if (titleid == 2) { title = "Desktop Sharing"; }
56 if (titleid == 3) { title = "Server Under Maintenance"; }
57 + if (titleid == 4) { title = "Terminal Sharing"; }
58 QH('topTitle', Q('topTitle').innerText + ' - ' + title);
59 QH('mainTitle', title);
60
views/message2.handlebars
+1
@@ -55,6 +55,7 @@
55 if (titleid == 1) { title = "Account Verification"; }
56 if (titleid == 2) { title = "Desktop Sharing"; }
57 if (titleid == 3) { title = "Server Under Maintenance"; }
58 + if (titleid == 4) { title = "Terminal Sharing"; }
59 QH('topTitle', Q('topTitle').innerText + ' - ' + title);
60 QH('mainTitle', title);
61
views/terminal.handlebars new
+454
@@ -0,0 +1,454 @@
1 +<!DOCTYPE html>
2 +<html lang="en" dir="ltr" xmlns="http://www.w3.org/1999/xhtml">
3 +<head>
4 + <meta http-equiv="X-UA-Compatible" content="IE=edge" />
5 + <meta content="text/html;charset=utf-8" http-equiv="Content-Type" />
6 + <meta name="viewport" content="user-scalable=1.0,initial-scale=1.0,minimum-scale=1.0,maximum-scale=1.0" />
7 + <meta name="apple-mobile-web-app-capable" content="yes" />
8 + <meta name="format-detection" content="telephone=no" />
9 + <meta name="robots" content="noindex,nofollow">
10 + <link type="text/css" href="styles/style.css" media="screen" rel="stylesheet" title="CSS" />
11 + <link type="text/css" href="styles/xterm.css" media="screen" rel="stylesheet" title="CSS" />
12 + <link rel="apple-touch-icon" href="/favicon-303x303.png" />
13 + <script type="text/javascript" src="scripts/common-0.0.1{{min}}.js"></script>
14 + <script type="text/javascript" src="scripts/amt-redir-ws-0.1.0{{{min}}}.js"></script>
15 + <script type="text/javascript" src="scripts/amt-wsman-ws-0.2.0{{{min}}}.js"></script>
16 + <script type="text/javascript" src="scripts/agent-redir-ws-0.1.1{{{min}}}.js"></script>
17 + <script type="text/javascript" src="scripts/agent-redir-rtc-0.1.0{{{min}}}.js"></script>
18 + <script type="text/javascript" src="scripts/amt-terminal-0.0.2{{min}}.js"></script>
19 + <script type="text/javascript" src="scripts/xterm{{{min}}}.js"></script>
20 + <script type="text/javascript" src="scripts/xterm-addon-fit{{{min}}}.js"></script>
21 + <script keeplink=1 type="text/javascript" src="scripts/filesaver.min.js"></script>
22 + <title>{{{title}}}</title>
23 +</head>
24 +<body style="overflow:hidden;background-color:black">
25 + <div id=p12 style="overflow:hidden">
26 + <div id="p12warning" onclick=showFeaturesDlg()>
27 + <div class="icon2"></div>
28 + <div class="warningbox">Intel&reg; AMT Redirection port or KVM feature is disabled<span id="p12warninga">, click here to enable it.</span></div>
29 + </div>
30 + <div id="p12warning2" onclick=showPowerActionDlg()>
31 + <div class="icon2"></div>
32 + <div class="warningbox">Remote computer is not powered on, click here to issue a power command.</div>
33 + </div>
34 + <div class="areaHead" style="position:absolute;top:0;left:0;right:0;height:24px">
35 + <div class="toright2">
36 + <div id="p11power" style="margin-top:3px;margin-right:4px"></div>
37 + <div id="termRecordIcon" class='deskareaicon' title="Server is recording this session" style="display:none;background-color:red;width:12px;height:12px;border-radius:6px;margin-top:5px;margin-left:5px"></div>
38 + <div id="terminalCustomUiButtons" style="float:left"></div>
39 + </div>
40 + <div>
41 + <div id="idx_termFullBtn2" onclick=deskToggleFull(event)>&nbsp;&#x2716;</div>
42 + <span id="connectbutton2span"><input type="button" id="connectbutton2" cmenu="termConnectButton" value="Connect" onclick=connectTerminal(event,1) onkeypress="return false" onkeydown="return false" disabled="disabled" /></span>
43 + <span id="disconnectbutton2span">&nbsp;<input type="button" id="disconnectbutton2" value="Disconnect" onclick=connectTerminal(event,0) onkeypress="return false" onkeydown="return false" /></span>
44 + &nbsp;<span id="termstatus">Disconnected</span><span id="termtitle"></span>
45 + </div>
46 + </div>
47 + <div id="termarea3xdiv" style="position:absolute;top:28px;bottom:28px;left:0;right:0"></div>
48 + <div class="areaFoot" style="position:absolute;bottom:0;left:0;right:0;height:24px">
49 + <div class="toright2">
50 + <span id="TermLatency" title="Terminal Session Latency"></span>
51 + <span id="TermTimer" title="Session time"></span>&nbsp;
52 + <span id="terminalSettingsButtons" style="display:none">
53 + <input id="id_tcrbutton" type="button" onkeypress="return false" onkeydown="return false" class="bottombutton" value="CR+LF" title="Toggle what the return key will send" onclick="termToggleCr()" />
54 + <input id="id_tfxkeysbutton" type="button" onkeypress="return false" onkeydown="return false" class="bottombutton" value="Intel (F10 = ESC+[OM)" title="Toggle F1 to F10 keys emulation type" onclick="termToggleFx()" />
55 + <input id="id_ttypebutton" type="button" onkeypress="return false" onkeydown="return false" class="bottombutton" value="Extended Ascii" title="Toggle terminal emulation type" onclick="termToggleType()" />
56 + </span>
57 + <span id="terminalSizeDropDown" style="display:none">
58 + <select id="termSizeList" onkeypress="return false"><option value="1">80x25</option><option value="2">100x30</option></select>
59 + </span>
60 + <span id="specialKeyDropDown">
61 + <select id="specialkeylist" onkeypress="return false"></select>
62 + <input id="specialkeylistinput" type="button" onkeypress="return false" class="bottombutton" value="Send" title="Send the selected special key" onclick="sendSpecialKey()" />
63 + </span>
64 + </div>
65 + <div>
66 + &nbsp;
67 + <input type=button onkeypress="return false" onkeydown="return false" class="bottombutton" id="ctrlcbutton" value="Ctl-C" onclick="termSendKey(3,'ctrlcbutton')" />
68 + <input type=button onkeypress="return false" onkeydown="return false" class="bottombutton" id="ctrlxbutton" value="Ctl-X" onclick="termSendKey(24,'ctrlxbutton')" />
69 + <input type=button onkeypress="return false" onkeydown="return false" class="bottombutton" id="escbutton" value="ESC" onclick="termSendKey(27,'escbutton')" />
70 + <input type=button onkeypress="return false" onkeydown="return false" class="bottombutton" id="bsbutton" value="Backspace" onclick="termSendKey(8,'bsbutton')" style="display:none" />
71 + <input type=button onkeypress="return false" onkeydown="return false" class="bottombutton" id="pastebutton" value="Paste" title="Paste text into the terminal" onclick="showTermPasteDialog()" style="display:none" />
72 + </div>
73 + </div>
74 + <div id=p12TermConsoleMsg style="display:none;cursor:pointer;position:absolute;left:30px;top:45px;color:yellow;background-color:rgba(0,0,0,0.6);padding:10px;border-radius:5px" onclick=p12clearConsoleMsg()></div>
75 + <div id=dialog class="noselect" style="display:none">
76 + <div id=dialogHeader>
77 + <div tabindex=0 id=id_dialogclose onclick=setDialogMode() onkeypress="if (event.key == 'Enter') setDialogMode()">&#x2716;</div>
78 + <div id=id_dialogtitle></div>
79 + </div>
80 + <div id=dialogBody>
81 + <div id=dialog1>
82 + <div id=id_dialogMessage style=""></div>
83 + </div>
84 + <div id=dialog2 style="">
85 + <div id=id_dialogOptions></div>
86 + </div>
87 + </div>
88 + <div id="idx_dlgButtonBar">
89 + <input id="idx_dlgCancelButton" type="button" value="Cancel" style="" onclick="dialogclose(0)">
90 + <input id="idx_dlgOkButton" type="button" value="OK" style="" onclick="dialogclose(1)">
91 + <div><input id="idx_dlgDeleteButton" type="button" value="Delete" style="display:none" onclick="dialogclose(2)"></div>
92 + </div>
93 + </div>
94 + </div>
95 + <script>
96 + var sessionActivity = null;
97 + var desktop = null;
98 + var agentPresent = true;
99 + var intelAmtPresent = false;
100 + var p11DeskConsoleMsgTimer = null;
101 + var serverPublicNamePort = '{{{serverDnsName}}}:{{{serverPublicPort}}}';
102 + var domain = '{{{domain}}}';
103 + var domainUrl = '{{{domainurl}}}';
104 + var authCookie = '{{{authCookie}}}';
105 + var urlargs = parseUriArgs();
106 + var debugmode = urlargs.debug;
107 + var attemptWebRTC = false;
108 + var updateSessionTimer = null;
109 + var StatusStrs = ["Disconnected", "Connecting...", "Setup...", "Connected", "Intel&reg; AMT Connected"];
110 + var webPageFullScreen = false;
111 + var terminal = null;
112 + var p12TermConsoleMsgTimer = null;
113 + var xterm = null;
114 + var xtermfit = null;
115 + var xtermResizeTimer = null;
116 + var expire = '{{{expire}}}';
117 + if (expire != '') { QH('p11power', printFlexDateTime(new Date(parseInt(expire)))); }
118 +
119 + function start() {
120 + //window.onresize = deskAdjust;
121 + //document.onkeypress = ondockeypress;
122 + //document.onkeydown = ondockeydown;
123 + //document.onkeyup = ondockeyup;
124 + updateTerminalButtons();
125 +
126 + window.onresize = function () { if (xtermfit != null) { xtermfit.fit(); } }
127 +
128 + // Terminal special keys
129 + var x = '';
130 + for (var c = 1; c < 27; c++) x += '<option value=\'' + c + '\'>' + "Ctrl" + '-' + String.fromCharCode(64 + c) + ' (' + c + ')</option>';
131 + QH('specialkeylist', x);
132 + }
133 +
134 +
135 +
136 + var terminalNode;
137 + function setupTerminal() {
138 + // Setup the terminal
139 + if ((terminalNode != currentNode) && (terminal != null)) { terminal.Stop(); terminal = null; }
140 + terminalNode = currentNode;
141 + updateTerminalButtons();
142 + }
143 +
144 + // Show and enable the right buttons
145 + function updateTerminalButtons() {
146 + var termState = ((terminal != null) && (terminal.state != 0));
147 +
148 + // Show the right buttons
149 + QV('disconnectbutton2span', termState == true);
150 + QV('connectbutton2span', termState == false);
151 + //QV('terminalSizeDropDown', termState == false);
152 +
153 + // Enable buttons
154 + QE('connectbutton2', true);
155 +
156 + // Key buttons
157 + QE('ctrlcbutton', termState);
158 + QE('ctrlxbutton', termState);
159 + QE('escbutton', termState);
160 + QE('bsbutton', termState);
161 + QE('pastebutton', termState);
162 + QE('specialkeylist', termState);
163 + QE('specialkeylistinput', termState);
164 +
165 + // Terminal settings
166 + QV('terminalSettingsButtons', (terminal) && (terminal.contype == 2));
167 + if (terminal) {
168 + Q('id_ttypebutton').value = terminalEmulations[terminal.m.terminalEmulation];
169 + Q('id_tfxkeysbutton').value = fxEmulations[terminal.m.fxEmulation];
170 + Q('id_tcrbutton').value = (terminal.m.lineFeed == '\r\n') ? "CR+LF" : "LF";
171 + }
172 +
173 + // Display extra buttons on legacy terminal
174 + var xtermActive = true;
175 + QV('termarea3xdiv', xtermActive);
176 + QV('bsbutton', !xtermActive);
177 + QV('pastebutton', !xtermActive);
178 + QV('devListToolbarViewIcons2', xtermActive);
179 + QE('termSizeList', terminal == null);
180 + }
181 +
182 + // Called when the terminal state changes
183 + function onTerminalStateChange(xterminal, state) {
184 + var xstate = state;
185 + if ((xstate == 3) && (xterminal.contype == 2)) { xstate++; }
186 + var str = StatusStrs[xstate];
187 + if (terminal.webRtcActive == true) { str += ", WebRTC"; }
188 + QH('termstatus', str);
189 + switch (state) {
190 + case 0:
191 + // Disconnected, clear the terminal
192 + QH('termtitle', '');
193 + QV('termRecordIcon', false);
194 + if (xterm == null) {
195 + xterminal.m.TermResetScreen();
196 + xterminal.m.TermDraw();
197 + } else {
198 + xterm.dispose();
199 + xterm = xtermfit = null;
200 + }
201 + if (terminal != null) { terminal.Stop(); terminal = null; }
202 + break;
203 + case 3:
204 + if (xterminal && (xterminal.serverIsRecording == true)) { QV('termRecordIcon', true); }
205 + terminal.startTime = new Date();
206 + if (updateSessionTimer == null) { updateSessionTimer = setInterval(updateSessionTime, 1000); }
207 + if (xterm != null) { xterm.focus(); }
208 + break;
209 + default:
210 + //console.log('Unhandled onTerminalStateChange state', state);
211 + break;
212 + }
213 + updateTerminalButtons();
214 + }
215 +
216 + function updateSessionTime() {
217 + // Terminal
218 + var latencyStr = '', seconds = 0;
219 + if (terminal && terminal.startTime) {
220 + if (terminal.latency && (terminal.latency.current >= 0)) { latencyStr = format('{0} ms, ', terminal.latency.current); }
221 + seconds = Math.floor((new Date() - terminal.startTime) / 1000);
222 + QH('TermTimer', latencyStr + zeroPad(Math.floor(seconds / 3600), 2) + ':' + zeroPad((Math.floor(seconds / 60) % 60), 2) + ':' + zeroPad((seconds % 60), 2));
223 + } else {
224 + QH('TermTimer', '');
225 + }
226 +
227 + if (terminal == null) { clearInterval(updateSessionTimer); updateSessionTimer = null; }
228 + }
229 +
230 + // DEBUG
231 + var autoConnectTerminalTimer = null;
232 + function autoConnectTerminal(e) { if (autoConnectTerminalTimer == null) { autoConnectTerminalTimer = setInterval(connectTerminal, 100); } else { clearInterval(autoConnectTerminalTimer); autoConnectTerminalTimer = null; } }
233 +
234 + // Handles a tunnel to a remote shell
235 + function CreateRemoteTunnel(onTunnelUpdate, options) {
236 + var obj = { protocol: 1 };
237 + if ((options != null) && (typeof options.protocol == 'number')) { obj.protocol = options.protocol; }
238 + obj.onTunnelUpdate = onTunnelUpdate;
239 + obj.xxStateChange = function (state) { }
240 + obj.ProcessBinaryData = function (data) { obj.onTunnelUpdate(data); }
241 + obj.ProcessData = function (data) { obj.onTunnelUpdate(data); }
242 + obj.terminalEmulation = 1;
243 + obj.fxEmulation = 0;
244 + obj.lineFeed = '\r\n';
245 + return obj;
246 + }
247 +
248 + function tunnelUpdate(data) { if (typeof data == 'string') { xterm.writeUtf8(data); } else { xterm.writeUtf8(new Uint8Array(data)); } }
249 +
250 + // Send the new terminal size to the agent
251 + function xTermSendResize() {
252 + xtermResizeTimer = null;
253 + if ((xterm != null) && (terminal != null) && (terminal.sendCtrlMsg != null)) { terminal.sendCtrlMsg(JSON.stringify({ ctrlChannel: '102938', type: 'termsize', cols: xterm.cols, rows: xterm.rows })); }
254 + }
255 +
256 + // Used to translate incoming agent console messages
257 + var agentConsoleMessages = ['', "Waiting for user to grant access...", "Denied", "Failed to start remote terminal session, {0} ({1})", "Timeout", "Received invalid network data"];
258 + function formatAgentConsoleMessage(msg, msgid, msgargs) {
259 + var r;
260 + if (msgargs == null) { msgargs = []; }
261 + while (msgargs.length < 3) { msgargs.push(''); } // We need to call the format function in a way that works with older browsers and minifier, can't use apply() or ...
262 + if (msgid && (msgid < agentConsoleMessages.length)) { r = EscapeHtml(format(agentConsoleMessages[msgid], (msgargs[0]), (msgargs[1]), (msgargs[2]))); } else { r = EscapeHtml(msg); }
263 + return r.split('\n').join('<br />') + '<br /><br />';
264 + }
265 +
266 + function connectTerminal(e, contype, options) {
267 + p12clearConsoleMsg();
268 + if (!terminal) {
269 + // Terminal setup
270 + var termoptions = { protocol: ((options != null) && (typeof options.protocol == 'number')) ? options.protocol : 1 };
271 + if (options && options.requireLogin) { termoptions.requireLogin = true; }
272 + /*
273 + if ([1, 2, 3, 4, 21, 22].indexOf(currentNode.agent.id) == -1) {
274 + if (Q('termSizeList').value == 1) { termoptions.cols = 80; termoptions.rows = 25; termoptions.xterm = true; }
275 + else if (Q('termSizeList').value == 2) { termoptions.cols = 100; termoptions.rows = 30; termoptions.xterm = true; }
276 + else if (Q('termSizeList').value == 3) {
277 + // TODO: Try to improve terminal auto-size.
278 + termoptions.cols = Math.floor((Q('column_l').clientWidth - 60) / 10);
279 + termoptions.rows = Math.floor((Q('column_l').clientHeight - 120) / 20);
280 + termoptions.xterm = true;
281 + }
282 + }
283 + */
284 +
285 + // If shift is pressed
286 + if ((e && (e.shiftKey == true))) {
287 + if (currentNode.agent.id > 4) {
288 + if (termoptions.protocol == 1) { termoptions.protocol = 7; } // Switch to user shell
289 + } else {
290 + if (termoptions.protocol == 1) { termoptions.protocol = 6; } // Switch to Powershell
291 + }
292 + }
293 +
294 + // Setup a mesh agent xterm terminal
295 + QV('termarea3xdiv', true);
296 +
297 + // Setup the terminal with auto-fit
298 + if (xterm != null) { xterm.dispose(); }
299 + xtermfit = new FitAddon.FitAddon();
300 + xterm = new Terminal();
301 + if (xtermfit) { xterm.loadAddon(xtermfit); }
302 + xterm.open(Q('termarea3xdiv')); // termarea3x
303 + xterm.onData(function (data) { if (terminal != null) { terminal.sendText(data); } })
304 + if (xtermfit) { xtermfit.fit(); }
305 + xterm.onTitleChange(function (title) { QH('termtitle', ' - ' + EscapeHtml(title)); });
306 + xterm.onResize(function (size) {
307 + // Despam resize
308 + if (xtermResizeTimer) clearTimeout(xtermResizeTimer);
309 + xtermResizeTimer = setTimeout(xTermSendResize, 200);
310 + });
311 +
312 + // Setup a terminal tunnel to the agent
313 + terminal = CreateAgentRedirect(null, CreateRemoteTunnel(tunnelUpdate, options), serverPublicNamePort, authCookie, null, domainUrl);
314 + terminal.debugmode = debugmode;
315 + terminal.m.debugmode = debugmode;
316 + terminal.options = { cols: xterm.cols, rows: xterm.rows };
317 + if (options && options.requireLogin) { terminal.options.requireLogin = true; }
318 + terminal.Start(null);
319 + terminal.onStateChanged = onTerminalStateChange;
320 + terminal.contype = 1;
321 + terminal.attemptWebRTC = false; // Never do WebRTC on terminal, because of a race condition we can't do it.
322 + terminal.onConsoleMessageChange = function (server, msg) {
323 + if (terminal.consoleMessage) {
324 + Q('p12TermConsoleMsg').innerHTML += formatAgentConsoleMessage(terminal.consoleMessage, terminal.consoleMessageId, terminal.consoleMessageArgs);
325 + QV('p12TermConsoleMsg', true);
326 + if (p12TermConsoleMsgTimer != null) { clearTimeout(p12TermConsoleMsgTimer); }
327 + if (terminal.consoleMessageTimeout) { p12TermConsoleMsgTimer = setTimeout(p12clearConsoleMsg, terminal.consoleMessageTimeout * 1000); }
328 + } else {
329 + p12clearConsoleMsg();
330 + }
331 + };
332 + } else {
333 + terminal.Stop();
334 + terminal = null;
335 + }
336 + Q('connectbutton2').blur(); // Deselect the connect button so the button does not get key presses.
337 + }
338 +
339 + var terminalEmulations = ["UTF8 Terminal", "Extended ASCII", "Intel ASCII"];
340 + function termToggleType() {
341 + if (!terminal || xxdialogMode) return;
342 + terminal.m.terminalEmulation = (terminal.m.terminalEmulation + 1) % 3;
343 + Q('id_ttypebutton').value = terminalEmulations[terminal.m.terminalEmulation];
344 + Q('id_ttypebutton').blur(); // Deselect the connect button so the button does not get key presses.
345 + }
346 +
347 + var fxEmulations = ["Intel (F10 = ESC+[OM)", "Alternate (F10 = ESC+0)", "VT100+ (F10 = ESC+[OY)"];
348 + function termToggleFx() {
349 + if (!terminal || xxdialogMode) return;
350 + terminal.m.fxEmulation = (terminal.m.fxEmulation + 1) % 3;
351 + Q('id_tfxkeysbutton').value = fxEmulations[terminal.m.fxEmulation];
352 + Q('id_tfxkeysbutton').blur(); // Deselect the connect button so the button does not get key presses.
353 + }
354 +
355 + function termToggleCr() {
356 + if (!terminal || xxdialogMode) return;
357 + if (terminal.m.lineFeed == '\n') { terminal.m.lineFeed = '\r\n'; } else { terminal.m.lineFeed = '\n'; }
358 + Q('id_tcrbutton').value = (terminal.m.lineFeed == '\r\n') ? "CR+LF" : "LF";
359 + }
360 +
361 + function termSendKey(key, id) {
362 + if (!terminal || xxdialogMode) return;
363 + if (xterm != null) {
364 + if (terminal.sendText) {
365 + // MeshAgent
366 + terminal.sendText(String.fromCharCode(key));
367 + } else {
368 + // CIRA
369 + terminal.send(String.fromCharCode(key));
370 + }
371 + xterm.focus();
372 + } else if (terminal != null) {
373 + terminal.m.TermSendKey(key);
374 + Q(id).blur(); // Deselect the connect button so the button does not get key presses.
375 + }
376 + }
377 +
378 + function showTermPasteDialog() {
379 + if (!terminal || xxdialogMode) return;
380 + Q('pastebutton').blur();
381 + setDialogMode(2, "Paste", 3, showTermPasteDialogEx, '<textarea id=d2pasteText style="width:100%;height:184px;resize:none"></textarea>');
382 + Q('d2pasteText').focus();
383 + }
384 +
385 + function showTermPasteDialogEx() {
386 + if (!terminal) return;
387 + terminal.m.TermSendKeys(Q('d2pasteText').value);
388 + }
389 +
390 + // Send special key
391 + function sendSpecialKey() {
392 + if (xterm != null) {
393 + terminal.sendText(String.fromCharCode(Q('specialkeylist').value));
394 + xterm.focus();
395 + } else if (terminal != null) {
396 + terminal.m.TermSendKey(Q('specialkeylist').value);
397 + Q('specialkeylist').blur();
398 + Q('specialkeylistinput').blur();
399 + }
400 + }
401 +
402 + function p12clearConsoleMsg() { QH('p12TermConsoleMsg', ''); QV('p12TermConsoleMsg', false); if (p12TermConsoleMsgTimer) { clearTimeout(p12TermConsoleMsgTimer); p12TermConsoleMsgTimer = null; } }
403 +
404 + //
405 + // POPUP DIALOG
406 + //
407 +
408 + // null = Hidden, 1 = Generic Message
409 + var xxdialogMode;
410 + var xxdialogFunc;
411 + var xxdialogButtons;
412 + var xxdialogTag;
413 + var xxcurrentView = -1;
414 +
415 + // Display a dialog box
416 + // Parameters: Dialog Mode (0 = none), Dialog Title, Buttons (1 = OK, 2 = Cancel, 3 = OK & Cancel), Call back function(0 = Cancel, 1 = OK), Dialog Content (Mode 2 only)
417 + function setDialogMode(x, y, b, f, c, tag) {
418 + xxdialogMode = x;
419 + xxdialogFunc = f;
420 + xxdialogButtons = b;
421 + xxdialogTag = tag;
422 + QE('idx_dlgOkButton', true);
423 + QV('idx_dlgOkButton', b & 1);
424 + QV('idx_dlgCancelButton', b & 2);
425 + QV('id_dialogclose', (b & 2) || (b & 8));
426 + QV('idx_dlgDeleteButton', b & 4);
427 + QV('idx_dlgButtonBar', b & 7);
428 + if (y) QH('id_dialogtitle', y);
429 + for (var i = 1; i < 8; i++) { QV('dialog' + i, i == x); } // Edit this line when more dialogs are added
430 + QV('dialog', x);
431 + if (c) { if (x == 2) { QH('id_dialogOptions', c); } else { QH('id_dialogMessage', c); } }
432 + }
433 +
434 + function dialogclose(x) {
435 + var f = xxdialogFunc, b = xxdialogButtons, t = xxdialogTag;
436 + setDialogMode();
437 + if (((b & 8) || x) && f) f(x, t);
438 + }
439 +
440 + function messagebox(t, m) { setSessionActivity(); QH('id_dialogMessage', m); setDialogMode(1, t, 1); }
441 + function statusbox(t, m) { setSessionActivity(); QH('id_dialogMessage', m); setDialogMode(1, t); }
442 + function haltEvent(e) { if (e.preventDefault) e.preventDefault(); if (e.stopPropagation) e.stopPropagation(); return false; }
443 + function pad2(num) { var s = '00' + num; return s.substr(s.length - 2); }
444 + function format(format) { var args = Array.prototype.slice.call(arguments, 1); return format.replace(/{(\d+)}/g, function (match, number) { return typeof args[number] != 'undefined' ? args[number] : match; }); };
445 + function setSessionActivity() { sessionActivity = Date.now(); /*QH('idleTimeoutNotify', '');*/ }
446 + function printDate(d) { return d.toLocaleDateString(urlargs.locale); }
447 + function printTime(d) { return d.toLocaleTimeString(urlargs.locale); }
448 + function printDateTime(d) { return d.toLocaleString(urlargs.locale); }
449 + function printFlexDateTime(d) { if (printDate(new Date()) == printDate(d)) { return format("Expires at {0}", printTime(d)); } else { return format("Expires {0}", printDateTime(d)); } }
450 +
451 + start();
452 + </script>
453 +</body>
454 +</html>
\ No newline at end of file
webserver.js
+41 -2
@@ -2971,7 +2971,7 @@ module.exports.CreateWebServer = function (parent, db, args, certificates) {
2971
2972 // Check the inbound desktop sharing cookie
2973 var c = obj.parent.decodeCookie(req.query.c, obj.parent.invitationLinkEncryptionKey, 60); // 60 minute timeout
2974 - if ((c == null) || (c.a !== 5) || (typeof c.uid != 'string') || (typeof c.nid != 'string') || (typeof c.gn != 'string') || (typeof c.cf != 'number') || (typeof c.start != 'number') || (typeof c.expire != 'number') || (typeof c.pid != 'string')) { res.sendStatus(404); return; }
2974 + if ((c == null) || (c.a !== 5) || ((c.p !== 2) && (c.p != null)) || (typeof c.uid != 'string') || (typeof c.nid != 'string') || (typeof c.gn != 'string') || (typeof c.cf != 'number') || (typeof c.start != 'number') || (typeof c.expire != 'number') || (typeof c.pid != 'string')) { res.sendStatus(404); return; }
2975
2976 // Check the expired time, expire message.
2977 if (c.expire <= Date.now()) { render(req, res, getRenderPage((domain.sitestyle == 2) ? 'message2' : 'message', req, domain), getRenderArgs({ titleid: 2, msgid: 12, domainurl: encodeURIComponent(domain.url).replace(/'/g, '%27') }, req, domain)); return; }
@@ -2991,7 +2991,7 @@ module.exports.CreateWebServer = function (parent, db, args, certificates) {
2991
2992 // Looks good, let's create the outbound session cookies.
2993 // Consent flags are 1 = Notify, 8 = Prompt, 64 = Privacy Bar.
2994 - const authCookie = obj.parent.encodeCookie({ userid: c.uid, domainid: domain.id, nid: c.nid, ip: req.clientIp, gn: c.gn, cf: 65 | c.cf, r: 8, expire: c.expire, pid: c.pid }, obj.parent.loginCookieEncryptionKey);
2994 + const authCookie = obj.parent.encodeCookie({ userid: c.uid, domainid: domain.id, nid: c.nid, ip: req.clientIp, p: 2, gn: c.gn, cf: 65 | c.cf, r: 8, expire: c.expire, pid: c.pid }, obj.parent.loginCookieEncryptionKey);
2995
2996 // Lets respond by sending out the desktop viewer.
2997 var httpsPort = ((obj.args.aliasport == null) ? obj.args.port : obj.args.aliasport); // Use HTTPS alias port is specified
@@ -3001,6 +3001,44 @@ module.exports.CreateWebServer = function (parent, db, args, certificates) {
3001 });
3002 }
3003
3004 + // Serve the guest terminal page
3005 + function handleTerminalRequest(req, res) {
3006 + const domain = getDomain(req, res);
3007 + if (domain == null) { return; }
3008 + if (req.query.c == null) { res.sendStatus(404); return; }
3009 +
3010 + // Check the inbound desktop sharing cookie
3011 + var c = obj.parent.decodeCookie(req.query.c, obj.parent.invitationLinkEncryptionKey, 60); // 60 minute timeout
3012 + if ((c == null) || (c.a !== 5) || (c.p !== 1) || (typeof c.uid != 'string') || (typeof c.nid != 'string') || (typeof c.gn != 'string') || (typeof c.cf != 'number') || (typeof c.start != 'number') || (typeof c.expire != 'number') || (typeof c.pid != 'string')) { res.sendStatus(404); return; }
3013 +
3014 + // Check the expired time, expire message.
3015 + if (c.expire <= Date.now()) { render(req, res, getRenderPage((domain.sitestyle == 2) ? 'message2' : 'message', req, domain), getRenderArgs({ titleid: 4, msgid: 12, domainurl: encodeURIComponent(domain.url).replace(/'/g, '%27') }, req, domain)); return; }
3016 +
3017 + // Check the public id
3018 + obj.db.GetAllTypeNodeFiltered([c.nid], domain.id, 'deviceshare', null, function (err, docs) {
3019 + // Check if any desktop sharing links are present, expire message.
3020 + if ((err != null) || (docs.length == 0)) { render(req, res, getRenderPage((domain.sitestyle == 2) ? 'message2' : 'message', req, domain), getRenderArgs({ titleid: 4, msgid: 12, domainurl: encodeURIComponent(domain.url).replace(/'/g, '%27') }, req, domain)); return; }
3021 +
3022 + // Search for the device share public identifier, expire message.
3023 + var found = false;
3024 + for (var i = 0; i < docs.length; i++) { if (docs[i].publicid == c.pid) { found = true; } }
3025 + if (found == false) { render(req, res, getRenderPage((domain.sitestyle == 2) ? 'message2' : 'message', req, domain), getRenderArgs({ titleid: 4, msgid: 12, domainurl: encodeURIComponent(domain.url).replace(/'/g, '%27') }, req, domain)); return; }
3026 +
3027 + // Check the start time, not yet valid message.
3028 + if ((c.start > Date.now()) || (c.start > c.expire)) { render(req, res, getRenderPage((domain.sitestyle == 2) ? 'message2' : 'message', req, domain), getRenderArgs({ titleid: 4, msgid: 11, domainurl: encodeURIComponent(domain.url).replace(/'/g, '%27') }, req, domain)); return; }
3029 +
3030 + // Looks good, let's create the outbound session cookies.
3031 + // Consent flags are 2 = Notify, 16 = Prompt
3032 + const authCookie = obj.parent.encodeCookie({ userid: c.uid, domainid: domain.id, nid: c.nid, ip: req.clientIp, p: 1, gn: c.gn, cf: 2 | c.cf, r: 8, expire: c.expire, pid: c.pid }, obj.parent.loginCookieEncryptionKey);
3033 +
3034 + // Lets respond by sending out the desktop viewer.
3035 + var httpsPort = ((obj.args.aliasport == null) ? obj.args.port : obj.args.aliasport); // Use HTTPS alias port is specified
3036 + parent.debug('web', 'handleTerminalRequest: Sending guest terminal page for \"' + c.uid + '\", guest \"' + c.gn + '\".');
3037 + res.set({ 'Cache-Control': 'no-store' });
3038 + render(req, res, getRenderPage('terminal', req, domain), getRenderArgs({ authCookie: authCookie, authRelayCookie: '', domainurl: encodeURIComponent(domain.url).replace(/'/g, '%27'), nodeid: c.nid, serverDnsName: obj.getWebServerName(domain), serverRedirPort: args.redirport, serverPublicPort: httpsPort, expire: c.expire }, req, domain));
3039 + });
3040 + }
3041 +
3042 // Handle domain redirection
3043 obj.handleDomainRedirect = function (req, res) {
3044 const domain = checkUserIpAddress(req, res);
@@ -4975,6 +5013,7 @@ module.exports.CreateWebServer = function (parent, db, args, certificates) {
5013 obj.app.get(url + 'player.htm', handlePlayerRequest);
5014 obj.app.get(url + 'player', handlePlayerRequest);
5015 obj.app.get(url + 'desktop', handleDesktopRequest);
5016 + obj.app.get(url + 'terminal', handleTerminalRequest);
5017 obj.app.ws(url + 'amtactivate', handleAmtActivateWebSocket);
5018 obj.app.ws(url + 'agenttransfer.ashx', handleAgentFileTransfer); // Setup agent to/from server file transfer handler
5019 obj.app.ws(url + 'meshrelay.ashx', function (ws, req) {