<!doctypehtml><html lang=es dir=ltr xmlns=http://www.w3.org/1999/xhtml><meta charset=utf-8><meta http-equiv=X-UA-Compatible content="IE=edge"><meta content="text/html; charset=utf-8"http-equiv=Content-Type><meta name=viewport content="user-scalable=1,initial-scale=1,minimum-scale=1,maximum-scale=1"><meta name=format-detection content="telephone=no"><meta name=robots content=noindex,nofollow><link rel=manifest href={{{domainurl}}}manifest.json><link rel="shortcut icon"href={{{domainurl}}}favicon.ico><link rel=icon type=image/png sizes=16x16 href={{{domainurl}}}favicon-16x16.png><link rel=icon type=image/png sizes=32x32 href={{{domainurl}}}favicon-32x32.png><link rel=apple-touch-icon href=/favicon-303x303.png><link type=text/css href=styles/xterm.css media=screen rel=stylesheet title=CSS><body id=body onload='"undefined"!=typeof startup&&startup()'style="overflow-y:hidden;margin:0;padding:0;border:0;font-size:13px;font-family:\'Trebuchet MS\',Arial,Helvetica,sans-serif">{{{customCSSTags}}}<meta name=apple-mobile-web-app-capable content=yes><meta name=apple-mobile-web-app-status-bar-style content=#ffffff><meta name=apple-mobile-web-app-title content={{{title}}}><script src=scripts/common-0.0.1{{{min}}}.js></script><script src=scripts/meshcentral{{{min}}}.js></script><script src=scripts/agent-redir-ws-0.1.1{{{min}}}.js></script><script src=scripts/agent-desktop-0.0.2{{{min}}}.js></script><script src=scripts/amt-0.2.0{{{min}}}.js></script><script src=scripts/amt-redir-ws-0.1.0{{{min}}}.js></script><script src=scripts/amt-desktop-0.0.2{{{min}}}.js></script><script src=scripts/xterm{{{min}}}.js></script><script src=scripts/xterm-addon-fit{{{min}}}.js></script><script src=scripts/xterm-addon-image{{{min}}}.js></script><script src=scripts/zlib{{{min}}}.js></script><script src=scripts/zlib-inflate{{{min}}}.js></script><script src=scripts/zlib-adler32{{{min}}}.js></script><script src=scripts/zlib-crc32{{{min}}}.js></script><script keeplink=1 src=scripts/filesaver.min.js></script>{{{customJSTags}}}<meta name=msapplication-TileColor content=#00aba9><meta name=theme-color content=#ffffff><title>{{{title}}}</title><style>body{background-color:#fff}.night body{background-color:#000}#MxMESH{color:#000}.night #MxMESH{color:#d3d3d3}.textOverGray{color:#000}#dialog{z-index:1000;background-color:#eee;box-shadow:0 0 15px #666;font-family:Arial,Helvetica,sans-serif;border-radius:5px;position:fixed;top:90px;width:300px}.night #dialog{color:#000;background-color:#aaa}:focus{outline:0}a{color:#036;text-decoration:underline}.night a{color:#99f}#footer a{color:#fff;text-decoration:underline}#footer a:hover{text-decoration:none}.night #footer{color:gray}.i1{background:url(../images/icons50.png) 0 0;background-image:image-set(url(../images/icons50.png) 1x,url(../images/icons100.png) 2x);height:50px;width:50px;border:none}.i2{background:url(../images/icons50.png) -50px 0;background-image:image-set(url(../images/icons50.png) 1x,url(../images/icons100.png) 2x);height:50px;width:50px;border:none}.i3{background:url(../images/icons50.png) -100px 0;background-image:image-set(url(../images/icons50.png) 1x,url(../images/icons100.png) 2x);height:50px;width:50px;border:none}.i4{background:url(../images/icons50.png) -150px 0;background-image:image-set(url(../images/icons50.png) 1x,url(../images/icons100.png) 2x);height:50px;width:50px;border:none}.i5{background:url(../images/icons50.png) -200px 0;background-image:image-set(url(../images/icons50.png) 1x,url(../images/icons100.png) 2x);height:50px;width:50px;border:none}.i6{background:url(../images/icons50.png) -250px 0;background-image:image-set(url(../images/icons50.png) 1x,url(../images/icons100.png) 2x);height:50px;width:50px;border:none}.i7{background:url(../images/icons50.png) -300px 0;background-image:image-set(url(../images/icons50.png) 1x,url(../images/icons100.png) 2x);height:50px;width:50px;border:none}.i8{background:url(../images/icons50.png) -350px 0;background-image:image-set(url(../images/icons50.png) 1x,url(../images/icons100.png) 2x);height:50px;width:50px;border:none}.m0{background:url(../images/images16.png) -32px 0;height:16px;width:16px;border:none;float:left}.m1{background:url(../images/images16.png) -16px 0;height:16px;width:16px;border:none;float:left}.m2{background:url(../images/images16.png) -96px 0;height:16px;width:16px;border:none;float:left}.m3{background:url(../images/images16.png) -112px 0;height:16px;width:16px;border:none;float:left}.m4{background:url(../images/images16.png) -128px 0;height:16px;width:16px;border:none;float:left}.NotifyIconSmall1{width:24px;height:24px;background:url(../images/notify24.png) 0 0;background-image:image-set(url(../images/notify24.png) 1x,url(../images/notify48.png) 2x)}.NotifyIconSmall2{width:24px;height:24px;background:url(../images/notify24.png) -24px 0;background-image:image-set(url(../images/notify24.png) 1x,url(../images/notify48.png) 2x)}.NotifyIconSmall3{width:24px;height:24px;background:url(../images/notify24.png) -48px 0;background-image:image-set(url(../images/notify24.png) 1x,url(../images/notify48.png) 2x)}.NotifyIconSmall4{width:24px;height:24px;background:url(../images/notify24.png) -72px 0;background-image:image-set(url(../images/notify24.png) 1x,url(../images/notify48.png) 2x)}.NotifyIconSmall5{width:24px;height:24px;background:url(../images/notify24.png) -96px 0;background-image:image-set(url(../images/notify24.png) 1x,url(../images/notify48.png) 2x)}.NotifyIconSmall6{width:24px;height:24px;background:url(../images/notify24.png) -120px 0;background-image:image-set(url(../images/notify24.png) 1x,url(../images/notify48.png) 2x)}.NotifyIconSmall7{width:24px;height:24px;background:url(../images/notify24.png) -144px 0;background-image:image-set(url(../images/notify24.png) 1x,url(../images/notify48.png) 2x)}.NotifyIconSmall8{width:24px;height:24px;background:url(../images/notify24.png) -168px 0;background-image:image-set(url(../images/notify24.png) 1x,url(../images/notify48.png) 2x)}.NotifyIconSmall9{width:24px;height:24px;background:url(../images/notify24.png) -192px 0;background-image:image-set(url(../images/notify24.png) 1x,url(../images/notify48.png) 2x)}.gray{filter:gray;-webkit-filter:grayscale(100%) opacity(60%)}.DevSt{padding-left:5px;border-bottom-style:solid;border-bottom-width:1px;border-bottom-color:#ddd}.noselect{-webkit-touch-callout:none;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.fileIcon1{background:url(data:image/gif;base64,R0lGODlhEAAQAJEDAPb49Y2Sj9LT2f///yH5BAEAAAMALAAAAAAQABAAAAImnI+py+1vhJwyUYAzHTL4D3qdlJWaIFJqmKod607sDKIiDUP63hQAOw==);height:16px;width:16px;cursor:pointer;border:none;float:left;margin-top:1px}.fileIcon2{background:url(data:image/gif;base64,R0lGODlhEAAQAJEDAM2xV/Xur+XPgP///yH5BAEAAAMALAAAAAAQABAAAAJD3ISZIGHWUGihznesYDYATFVM+D2hJ4lgN1olxALAtAlmPCJvuMmJd6PJckDYwicrHhTD5o7plJmg0Uc0asNMkphHAQA7);height:16px;width:16px;cursor:pointer;border:none;float:left;margin-top:1px}.fileIcon3{background:url(data:image/gif;base64,R0lGODlhEAAQAJEDAPb19IGBgbq6uv///yH5BAEAAAMALAAAAAAQABAAAAIy3ISpxgcPH2ouQgFEw1YmxnUXKEaaEZZnVWZk66JwzKpvuwZzwOgwb/C1gIOA8Yg8DgoAOw==);height:16px;width:16px;cursor:pointer;border:none;float:left;margin-top:1px}.fileIcon4{background:url(../images/meshicon16.png);height:16px;width:16px;cursor:pointer;border:none;float:left;margin-top:1px}.filelist{-moz-user-select:none;-khtml-user-select:none;-webkit-user-select:none;-o-user-select:none;cursor:default;-khtml-user-drag:element;clear:both}.deviceNotifyDot{position:absolute;right:10px;top:0;height:16px}.deviceNotifyDotSub{text-align:center;color:#fff;width:16px;background-color:#00f;padding:2px;border-radius:10px;box-shadow:2px 2px 10px #000;cursor:pointer;margin-left:3px;float:left}.deviceNotifyDotSub:hover{background-color:#44f}.deviceNotifySmallDot{position:absolute;right:10px;top:0;height:10px}.deviceNotifySmallDotSub{text-align:center;color:#fff;width:10px;padding:2px;background-color:#00f;border-radius:10px;box-shadow:2px 2px 10px #000;cursor:pointer;margin-left:2px;float:left}.deviceNotifySmallDotSub:hover{background-color:#44f}.deviceNotifyLargeDot{position:absolute;right:10px;top:10px;height:40px}.deviceNotifyLargeDotSub{text-align:center;width:35px;height:35px;color:#fff;padding:2px;background-color:#00f;border-radius:20px;box-shadow:2px 2px 10px #000;cursor:pointer;margin-left:4px;font-size:30px;float:left}.deviceNotifyLargeDotSub:hover{background-color:#44f}.style10{background-color:#c9c9c9;color:#000}.night .style10{background-color:#888}.deviceBatteryLarge{position:absolute;right:10px;top:0;width:28px;height:48px;border:none;box-shadow:none}.deviceBatteryLarge1{background:url(../images/batteries48.png) 0 0}.deviceBatteryLarge2{background:url(../images/batteries48.png) -28px 0}.deviceBatteryLarge3{background:url(../images/batteries48.png) -56px 0}.deviceBatteryLarge4{background:url(../images/batteries48.png) -84px 0}.deviceBatteryLarge5{background:url(../images/batteries48.png) -112px 0}.deviceBatteryLarge6{background:url(../images/batteries48.png) -140px 0}.deviceBatteryLarge7{background:url(../images/batteries48.png) -168px 0}.deviceBatteryLarge8{background:url(../images/batteries48.png) -196px 0}.deviceBatteryLarge9{background:url(../images/batteries48.png) -224px 0}.deviceBatteryLarge10{background:url(../images/batteries48.png) -252px 0}.deviceBatteryLarge11{background:url(../images/batteries48.png) -280px 0}.deviceBatterySmall{position:absolute;left:6px;top:22px;width:14px;height:24px;border:none;box-shadow:none}.deviceBatterySmall1{background:url(../images/batteries24.png) 0 0}.deviceBatterySmall2{background:url(../images/batteries24.png) -14px 0}.deviceBatterySmall3{background:url(../images/batteries24.png) -28px 0}.deviceBatterySmall4{background:url(../images/batteries24.png) -42px 0}.deviceBatterySmall5{background:url(../images/batteries24.png) -56px 0}.deviceBatterySmall6{background:url(../images/batteries24.png) -70px 0}.deviceBatterySmall7{background:url(../images/batteries24.png) -84px 0}.deviceBatterySmall8{background:url(../images/batteries24.png) -98px 0}.deviceBatterySmall9{background:url(../images/batteries24.png) -112px 0}.deviceBatterySmall10{background:url(../images/batteries24.png) -126px 0}.deviceBatterySmall11{background:url(../images/batteries24.png) -140px 0}.meshList{width:auto;height:40px;background-color:#d3d3d3;margin-top:5px;margin-bottom:5px;margin-left:60px;padding-top:5px;padding-bottom:5px;border-radius:8px 0 0 8px}.night .meshList{background-color:gray}.devList1{height:50px;cursor:pointer;position:relative;margin-top:5px;margin-bottom:5px}.devList2{float:left;margin-left:4px}.devList3{width:auto;height:40px;background-color:#d3d3d3;margin-left:60px;padding-top:5px;padding-bottom:5px;border-radius:8px 0 0 8px}.night .devList3{background-color:gray}.devList4{padding-left:12px;padding-top:2px;color:#000}.devList5{padding-left:12px;padding-top:3px;color:#444}.night .devList5{color:#000}.deskButton{box-shadow:0 0 10px #000;border-radius:20px;position:absolute;right:10px;top:10px;cursor:pointer;background-color:#aaa;z-index:1000}.menuButton{box-shadow:0 0 10px #000;border-radius:10px;display:inline-block;width:120px;background-color:#aaa;text-align:center;padding:8px;cursor:pointer;margin:10px;z-index:1000}#notificationCount{min-width:28px;font-size:20px;background-color:orange;text-align:center;cursor:pointer;color:#000}.notifiyBox{font-size:16px;position:absolute;z-index:1000;top:60px;right:76px;width:300px;text-align:left;background-color:#f0eccd;border:4px solid #666;-webkit-border-radius:10px;-moz-border-radius:10px;border-radius:10px;-webkit-box-shadow:2px 2px 4px #888;-moz-box-shadow:2px 2px 4px #888;box-shadow:2px 2px 4px #888;max-height:200px}.night .notifiyBox{color:#000}.notifiyBox:before{content:' ';position:absolute;width:0;height:0;right:5px;top:-30px;border:15px solid;border-color:transparent #666 #666 transparent}.notifiyBox:after{content:' ';position:absolute;width:0;height:0;right:7px;top:-24px;border:12px solid;border-color:transparent #f0eccd #f0eccd transparent}#p15statetext{padding:4px;height:15px}#p15agentConsole{background:#000;margin:0;padding:0;color:#d3d3d3;width:100%;position:relative}#p15coreName{padding:4px;display:inline-block}#p15agentConsoleText{position:absolute;margin:0;padding:0;top:0;bottom:0;left:0;right:0;overflow-y:scroll;overflow-x:auto}.areaHead{padding-top:2px;padding-bottom:2px;background:silver}.night .areaHead{color:#ccc;background:#333}.areaFoot{padding-top:2px;padding-bottom:2px;background:silver}.night .areaFoot{color:#ccc;background:#333}.toright2{float:right;text-align:right}#consoleTable{width:100%;height:100%;padding:0;margin-top:0}.night #consoleTable{color:#000}.menucurve{background-color:#fff;width:10px;height:10px;border-radius:10px 0 0 0;border-right:1px solid #fff;border-bottom:1px solid #fff}.night .menucurve{background-color:#000;border-right:1px solid #000;border-bottom:1px solid #000}#termTable{width:100%;padding:0;margin-top:0}.fulldesk #termTable{position:absolute;top:0;bottom:0;left:0;right:0}#termarea3x{background:#000;text-align:center;height:400px;position:relative}.viewSelector10{margin-left:2px;margin-top:2px;background:url(../images/views.png) -476px 0;height:28px;width:28px}.viewSelector11{margin-left:2px;margin-top:2px;background:url(../images/views.png) -504px 0;height:28px;width:28px}.tagSpan{background-color:#d3d3d3;padding:3px;border-radius:5px}.night .tagSpan{color:#000}#d2serveraction,#d3serveraction{width:100%;background-color:#d3d9d6;text-align:left;padding:3px}#d2serverfiles,#d3serverfiles{width:100%;height:150px;background-color:#fff;padding:2px;border:1px solid gray;overflow-y:scroll}</style><div id=container><div id=notifiyBox class=notifiyBox style=display:none></div><div id=mastheadx></div><div id=masthead style="background:url(logo.png) 0 0;background-size:341px 50px;background-color:#036;background-repeat:no-repeat;height:50px;width:100%;overflow:hidden"><div style="width:calc(100% - 50px);overflow:hidden"><div style=float:left;height:66px;color:#c8c8c8;padding-left:10px;padding-top:6px onclick=go(2)><strong><font style="font-size:36px;font-family:Arial,Helvetica,sans-serif;text-shadow:1px 1px 2px #000">{{{title1}}}</font></strong></div><div style=float:left;height:66px;color:#c8c8c8;padding-left:5px;padding-top:10px><strong><font style="font-size:12px;font-family:Arial,Helvetica,sans-serif;text-shadow:1px 1px 2px #000">{{{title2}}}</font></strong></div></div><div id=devViewPageState class=noselect style=position:absolute;right:160px;top:10px;height:30px;line-height:30px;color:#c8c8c8;font-size:16px;display:none></div><img id=devViewPageButton2 class=noselect style=position:absolute;right:130px;top:10px;cursor:pointer;display:none onclick=onDeviceViewPageChange(2) src=/images/left-30.png width=20 height=30> <img id=devViewPageButton3 class=noselect style=position:absolute;right:100px;top:10px;cursor:pointer;display:none onclick=onDeviceViewPageChange(3) src=/images/right-30.png width=20 height=30><div id=notificationCount onclick=clickNotificationIcon() class=unselectable style=position:absolute;right:50px;top:0;font-size:28px;width:50px;height:50px;cursor:pointer;display:none title="Haz clic para ver las notificaciones actuales"><div id=notificationCount2 style=padding-top:8px>0</div></div><img id=topMenuIcon class=noselect style=position:absolute;right:0;top:10px;color:#c8c8c8;font-size:44px;margin-right:8px;cursor:pointer;display:none onclick=topMenu() src=/images/3bars-30.png width=30 height=30></div><div id=page_content style=position:absolute;bottom:32px;top:50px;width:100%><div id=column_l style=width:100%;padding:0;position:absolute;bottom:0;top:0><div id=p0 style=display:none;width:100%;height:100%><div style=display:flex;align-items:center;width:100%;height:100%><div id=p0message style=text-align:center;width:100%><span id=p0span>Servidor desconectado</span>,<href onclick=reload() style=cursor:pointer><u>haz clic para reconectar</u></href>.</div></div></div><div id=p1 style=display:none;width:100%;height:100%><div style=display:flex;align-items:center;width:100%;height:100%><div id=p1message style=text-align:center;width:100%></div></div></div><div id=p2 style=display:none;position:absolute;top:0;left:0;right:0;bottom:0><div id=xdevices style=position:absolute;overflow-y:auto;top:0;left:0;right:0;bottom:34px onscroll=onDevicesScroll() ontouchstart=onDeviceTouch(!0) ontouchend=onDeviceTouch(!1)></div><div id=xdevicesBar style=position:absolute;overflow-y:auto;height:34px;left:0;right:0;bottom:0;background-color:#aaa;color:#000><div style=margin:4px><span style=width:20px;display:inline-block;text-align:center;cursor:pointer;font-size:16px onclick=clearSearchInput()><b>X</b></span> <input id=SearchInput autocomplete=off type=search placeholder=Filtrar onchange=onDeviceSearchChanged(event) onclick=onDeviceSearchChanged(event) onkeyup=onDeviceSearchChanged(event) style=padding:2px;margin:0;height:20px;background-color:#fff>&nbsp; <label class=noselect><input type=checkbox id=RealNameCheckBox onclick=onRealNameCheckBox()>Nombre del Sistema Operativo</label> <label class=noselect><input type=checkbox id=OnlineCheckBox onclick=onOnlineCheckBox(event)>En línea</label></div></div></div><div id=p3 style=display:none;position:absolute;bottom:0;top:0;width:100%><table cellspacing=0 style=margin:0;padding:0;border-spacing:0;border:0><tr style=padding:0><td style=padding:0;color:#c8c8c8;text-align:center;cursor:pointer width=60px valign=top onclick=goBack()><div style=padding:0;background-color:#036;width:10px;height:10px;float:right;border:0><div class=menucurve></div></div><div style="padding:0;font-size:25px;background-color:#036;width:50px;border-radius:0 0 10px 0;height:36px">◀</div><td><div style=margin-left:5px><strong style=font-size:large><span id=p3userName></span></strong><br></div></table><div id=p3info style=overflow-y:auto;position:absolute;top:55px;bottom:0;width:100%><img id=p2AccountImage alt=""width=128 height=128 onclick=account_manageImage(0) src=images/user-256.png style="position:absolute;right:8px;top:7px;border-radius:8px;box-shadow:0 0 7px #000"><div style=margin-left:8px><div id=p3AccountActions><div id=p2AccountSecurity style=display:none><p><strong>Seguridad de la Cuenta</strong><div style=margin-left:9px;margin-bottom:8px><div id=managePhoneNumber1 style=margin-top:5px;display:none><a onclick=account_managePhone() style=cursor:pointer>Administrar número de teléfono</a> <span id=authPhoneNumberCheck><strong>✓</strong></span></div><div id=manageEmail2FA style=margin-top:5px;display:none><a onclick=account_manageAuthEmail() style=cursor:pointer>Administrar autenticación por correo electrónico</a> <span id=authEmailSetupCheck><strong>✓</strong></span></div><div style=margin-top:5px><a href=# onclick=account_showLocalizationSettings()>Opciones de Hora e Idioma</a></div><div id=manageAuthApp style=margin-top:5px;display:none><a onclick=account_manageAuthApp() style=cursor:pointer>Administrar la aplicación de autenticación</a> <span id=authAppSetupCheck><strong>✓</strong></span></div><div id=manageOtp style=margin-top:5px;display:none><a onclick=account_manageOtp(0) style=cursor:pointer>Administrar códigos de respaldo</a> <span id=authCodesSetupCheck><strong>✓</strong></span></div></div></div><div id=p2AccountActions style=display:none><p><strong>Acciones de la Cuenta</strong><div style=margin-left:9px;margin-bottom:8px><div style=margin-top:5px><span id=viewPreviousLogins><a onclick="return account_viewPreviousLogins()"style=cursor:pointer>Ver inicios de sesión anteriores</a></span></div><div style=margin-top:5px><span id=managePhoneNumber2 style=display:none><a onclick=account_managePhone() style=cursor:pointer>Administrar número de teléfono</a></span></div><div style=margin-top:5px><span id=verifyEmailId style=display:none><a onclick=account_showVerifyEmail() style=cursor:pointer>Verificar correo electrónico</a></span></div><span id=p2AccountPassActions><div style=margin-top:5px><span id=changeEmailId style=display:none><a onclick=account_showChangeEmail() style=cursor:pointer>Cambiar dirección de correo electrónico</a></span></div><div style=margin-top:5px><a onclick=account_showChangePassword() style=cursor:pointer>Cambiar contraseña</a><span id=p2nextPasswordUpdateTime></span></div><div style=margin-top:5px><a onclick=account_showDeleteAccount() style=cursor:pointer>Eliminar cuenta</a></div></span><div style=margin-top:5px id=setDarkModeLink><a onclick=toggleNightMode() style=cursor:pointer>Establecer modo oscuro</a></div><div style=margin-top:5px><a onclick=showNotes(!1) style=cursor:pointer>Notas personales</a></div></div><br style=clear:both></div></div><strong>Grupos de Dispositivos</strong> <span id=p3createMeshLink1>( <a onclick=account_createMesh() style=cursor:pointer><img src=images/icon-addnew.png width=12 height=12 border=0> Nuevo</a> )</span><br><br><div id=p3meshes></div><div id=p3noMeshFound style=margin-left:9px;display:none>No hay grupos de dispositivos.<span id=p3createMeshLink2> <a onclick=account_createMesh() style=cursor:pointer><strong>¡Comienza aquí!</strong></a></span></div><br style=clear:both></div></div></div><div id=p5 style=display:none><table cellspacing=0 style=margin:0;padding:0;border-spacing:0;border:0><tr style=padding:0><td style=padding:0;color:#c8c8c8;text-align:center;cursor:pointer width=60px valign=top onclick=goBack()><div style=padding:0;background-color:#036;width:10px;height:10px;float:right;border:0><div class=menucurve></div></div><div style="padding:0;font-size:25px;background-color:#036;width:50px;border-radius:0 0 10px 0;height:36px">◀</div><td><img src=/images/user-50.png width=50 height=50><td><div style=margin-left:5px><strong style=font-size:large>Mis Archivos</strong><br></div></table><div id=p5myfiles style=position:absolute;top:55px;bottom:0;width:100%><table id=p5toolbar style=width:100%;height:78px cellpadding=0 cellspacing=0><tr><td style=width:100%;background-color:#d3d9d6;text-align:left;padding:4px valign=bottom><div style=width:100%;text-align:center><input type=button style="width:calc(100%/5 - 5px)"id=p5FolderUp disabled onclick=p5folderup() value=Subir> <input type=button style="width:calc(100%/5 - 5px)"id=p5SelectAllButton disabled onclick=p5selectallfile() value="Seleccionar Todos"onkeypress=return!1 onkeydown=return!1> <input type=button style="width:calc(100%/5 - 5px)"id=p5RenameFileButton disabled value=Renombrar onclick=p5renamefile() onkeypress=return!1 onkeydown=return!1> <input type=button style="width:calc(100%/5 - 5px)"id=p5DeleteFileButton disabled value=Eliminar onclick=p5deletefile() onkeypress=return!1 onkeydown=return!1> <input type=button style="width:calc(100%/5 - 5px)"id=p5NewFolderButton disabled value=Carpeta onclick=p5createfolder() onkeypress=return!1 onkeydown=return!1></div><div style=width:100%;text-align:center><input type=button style="width:calc(100%/5 - 5px)"id=p5UploadButton disabled value="Subir Archivo"onclick=p5uploadFile() onkeypress=return!1 onkeydown=return!1> <input type=button style="width:calc(100%/5 - 5px)"id=p5CutButton disabled value=Cortar onclick=p5copyFile(1) onkeypress=return!1 onkeydown=return!1> <input type=button style="width:calc(100%/5 - 5px)"id=p5CopyButton disabled value=Copiar onclick=p5copyFile(0) onkeypress=return!1 onkeydown=return!1> <input type=button style="width:calc(100%/5 - 5px)"id=p5PasteButton disabled value=Pegar onclick=p5pasteFile() onkeypress=return!1 onkeydown=return!1> <input type=button style="width:calc(100%/5 - 5px)"id=p5RefreshButton value=Actualizar onclick=p5refreshFiles() onkeypress=return!1 onkeydown=return!1></div><tr><td style=background-color:#e4e9e7;height:28px><table style=width:100%><tr><td id=p5currentpath style=overflow:hidden;padding-left:4px;padding-top:2px;color:#000><td style=text-align:right;padding-right:4px><select id=p5sortdropdown onchange=updateFiles()><option value=1 selected>Orden: ascendente, por nombre<option value=2>Orden: ascendente, por tamaño<option value=3>Orden: ascendente, por fecha<option value=4>Orden: Descendente, por nombre<option value=5>Orden: Descendente, por tamaño<option value=6>Orden: Descendente, por fecha</select></table></table><div id=p5filetable style="width:100%;height:calc(100% - 102px);overflow:auto;-webkit-user-select:none"><span id=p5files></span></div><table id=p5toolbarBottom style=width:100%;height:22px;position:absolute;bottom:0;background-color:#d3d9d6 cellpadding=0 cellspacing=0><tr><td style=text-align:left;padding:3px>&nbsp;<span id=p5bottomstatus></span><td id=p5rightOfButtons style=text-align:right;padding:3px></table></div></div><div id=p10 style=display:none;position:absolute;bottom:0;top:0;width:100%;overflow:hidden><table id=p10deskTopTable cellspacing=0 style=margin:0;padding:0;border-spacing:0;border:0;position:absolute;top:0><tr style=padding:0><td style=padding:0;color:#c8c8c8;text-align:center;cursor:pointer width=60px valign=top onclick=goBack()><div style=padding:0;background-color:#036;width:10px;height:10px;float:right;border:0><div class=menucurve></div></div><div style="padding:0;font-size:25px;background-color:#036;width:50px;border-radius:0 0 10px 0;height:36px">◀</div><td><a id=MainComputerImage style=cursor:pointer onclick=p10showiconselector()></a><td><div style=margin-left:5px><strong><span id=p10deviceName></span></strong><br><span id=MainComputerState></span></div></table><div id=p10dialog style="z-index:1000;background-color:#eee;box-shadow:0 0 15px #666;font-family:Arial,Helvetica,sans-serif;border-radius:5px;position:fixed;top:30px;width:300px;left:30px;display:none"><div style="width:100%;background-color:#036;color:#fff;border-radius:5px 5px 0 0"><div style=padding:5px>Personalización de atajos de teclado</div><div style=width:100%;margin:6px></div></div><div style=margin-right:16px;margin-left:8px><div id=p10dialog2 style=margin:auto;margin:3px></div></div><div style=width:100%;padding:2px;text-align:center><input type=button value="Restore Default Keyboard Shortcuts"onclick=restoreDeskCustomizeKey()></div><div style=padding:10px;margin-bottom:20px><input type=button value=OK style=float:right;width:80px onclick=deskCustomizeKeysEx()></div></div><div id=p10general style=overflow-y:scroll;position:absolute;top:55px;bottom:0;width:100%><div class=deviceNotifyLargeDot><img id=p10deviceStar class=deviceNotifyLargeDotSub src=images/icon-star-notify-40.png width=35 height=35><div id=p10deviceMsg onclick=showDeviceMessages(null,null,event) class=deviceNotifyLargeDotSub></div><img id=p10deviceNotify onclick=showDeviceSessions() class=deviceNotifyLargeDotSub src=images/icon-relay-notify-40.png width=35 height=35> <img id=p10deviceHelp onclick=showDeviceHelpRequests(null,null,event) class=deviceNotifyLargeDotSub src=images/icon-help-notify-40.png width=35 height=35></div><div id=p10deviceBattery class="deviceBatteryLarge deviceBatteryLarge1"></div><div id=p10html style=margin-left:8px;margin-right:8px></div><div id=p10html2></div><div id=p10html3 style=margin-left:8px></div></div><img id=deskkeybutton1 src=images/mobile-desk-exit.png class=deskButton style=top:10px;display:none onclick=exitButton()> <img id=deskkeybutton3a src=images/mobile-desk-menu-open.png class=deskButton style=top:60px;display:none onclick=toggleMenu(!1)> <img id=deskkeybutton3b src=images/mobile-desk-menu-close.png class=deskButton style=top:60px;display:none onclick=toggleMenu(!0)> <img id=deskkeybutton4a src=images/mobile-desk-mouse-left.png class=deskButton style=top:110px;display:none onclick=deskChangeMouseButton(0)> <img id=deskkeybutton4b src=images/mobile-desk-mouse-right.png class=deskButton style=top:110px;display:none onclick=deskChangeMouseButton(1)> <img id=deskkeybutton5a src=images/mobile-desk-scale-out.png class=deskButton style=top:160px;display:none onclick=deskChangeFullscreenZoom()> <img id=deskkeybutton5b src=images/mobile-desk-scale-in.png class=deskButton style=top:160px;display:none onclick=deskChangeFullscreenZoom()> <img id=deskkeybutton2a src=images/mobile-desk-keyboard-open.png class=deskButton style=top:210px;display:none onclick=toggleKeyboard()> <img id=deskkeybutton2b src=images/mobile-desk-keyboard-close.png class=deskButton style=top:210px;display:none onclick=toggleKeyboard()><div style=position:absolute;top:0;left:0;z-index:200;opacity:0;width:1px;height:1px><input id=softKeyboard autocapitalize=off autocomplete=off inputmode=text spellcheck=false style=z-index:200;opacity:0;width:1px;height:1px onfocus=keyboardFocusChange() onblur=keyboardFocusChange()></div><div id=deskButtonMenu style=display:none;position:absolute;top:10px;left:10px;right:55px;bottom:10px;z-index:1000></div><div id=p10desktop style=overflow:hidden;position:absolute;top:55px;bottom:0;width:100%;display:none><div id=deskarea1 style=position:absolute;top:0;width:100%;height:32px><div style=padding-top:2px;padding-bottom:2px;background:silver;height:32px><div style=float:right;text-align:right><span id=p14power></span>&nbsp; <input type=button id=deskFullScreen value="Pantalla completa"onclick=deskToggleFull(event) onkeypress=return!1 onkeydown=return!1 disabled style=height:28px;margin-right:3px></div><div style=margin-left:3px><input type=button id=connectbutton1 value=Conectar onclick=connectDesktop(event,3) onkeypress=return!1 onkeydown=return!1 disabled style=height:28px> <input type=button id=connectbutton1h value="Conectar al HW"onclick=connectDesktop(event,2) onkeypress=return!1 onkeydown=return!1 disabled style=height:28px> <input type=button id=disconnectbutton1 value=Desconectar onclick=connectDesktop(event,0) onkeypress=return!1 onkeydown=return!1 style=height:28px> <span id=deskstatus style=color:#000>Desconectado</span></div></div></div><div id=deskarea3 style="position:absolute;top:32px;width:100%;height:calc(100% - 64px);background-color:#000;text-align:center"><div id=DeskParent style=height:100%><canvas id=Desk width=640 height=200 style=width:100%;-ms-touch-action:none;margin-left:0 oncontextmenu=return!1 onmousedown=dmousedown(event) onmouseup=dmouseup(event) onmousemove=dmousemove(event) onmousewheel=dmousewheel(event)></canvas></div><div id=p11DeskConsoleMsg style=display:none;cursor:pointer;position:absolute;left:30px;top:17px;color:#ff0;background-color:rgba(0,0,0,.6);padding:10px;border-radius:5px;text-align:left onclick=p11clearConsoleMsg()></div><div id=p11DeskSessionSelector style=display:none;position:absolute;left:30px;top:17px;right:30px;bottom:17px;overflow-y:auto></div></div><div id=deskarea4 style=position:absolute;bottom:0;width:100%;height:32px><div style=padding-top:2px;padding-bottom:2px;background:silver><div style=float:right;text-align:right;padding-right:2px><span id=DeskLockButton><img src=images/icon-lock.png onclick=deviceLockFunction() height=16 width=16 style=padding-top:5px;cursor:pointer></span><span id=DeskChatButton><img src=images/icon-chat.png onclick=deviceChat(event) height=16 width=16 style=padding-top:5px;cursor:pointer></span>&nbsp; <span id=DeskToastButton><img src=images/icon-notify.png onclick=deviceToastFunction() height=16 width=16 style=padding-top:5px;cursor:pointer></span>&nbsp; <span id=DeskOpenWebButton><img src=images/icon-url2.png onclick=deviceUrlFunction() height=16 width=16 style=padding-top:5px;cursor:pointer></span>&nbsp; <span id=DeskRunButton><img src=images/icon-play.png onclick=runDeviceCmd() height=16 width=16 style=padding-top:5px;cursor:pointer></span></div><div><input id=deskActionsBtn type=button style=margin-left:3px;height:28px onkeypress=return!1 onkeydown=return!1 value=Acciones onclick=deviceActionFunction()> <input type=button value=Opciones onkeypress=return!1 onkeydown=return!1 onclick=showDesktopSettings() style=height:28px> <input type=button onkeypress=return!1 onkeydown=return!1 value="Acciones de Encendido..."onclick=showPowerActionDlg() style=display:none;height:28px> <input type=button id=DeskScreens value=Pantallas onkeypress=return!1 onkeydown=return!1 onclick=deskSelectScreens() style=display:none;height:28px> <label><span id=DeskControlSpan style=display:none><input id=DeskControl type=checkbox onkeypress=return!1 onkeydown=return!1>Controlar mouse y teclado de forma remota</span></label></div></div></div></div><div id=termButtonMenu style=display:none;position:absolute;top:10px;left:10px;right:55px;bottom:10px;z-index:1000></div><div id=p10terminal style=overflow:hidden;position:absolute;top:55px;bottom:0;width:100%;display:none;background-color:#333><div id=termTable style=position:absolute;top:0;bottom:0;left:0;right:0><div id=termarea1><div class=areaHead style=line-height:24px><div class=toright2><input type=button id=termFullScreen value="Pantalla completa"onclick=deskToggleFull(event) onkeypress=return!1 onkeydown=return!1 disabled style=height:28px;margin-right:3px><div id=terminalCustomUpperRight style=float:left;margin-right:6px></div></div><div><span id=connectbutton2span style=margin-left:3px><input type=button id=connectbutton2 value=Conectar style=height:28px onclick=connectTerminal(event,1) onkeypress=return!1 onkeydown=return!1 disabled></span><span id=connectbutton2sspan style=margin-right:4px><input type=button id=connectbutton2s value="Conexión SSH"style=height:28px onclick=connectTerminal(event,3) onkeypress=return!1 onkeydown=return!1 disabled></span><span id=disconnectbutton2span style=margin-left:3px><input type=button id=disconnectbutton2 value=Desconectar style=height:28px onclick=connectTerminal(event,0) onkeypress=return!1 onkeydown=return!1></span><span id=termstatus style=line-height:22px>Desconectado</span><span id=termtitle></span></div></div></div><div id=termarea3 style="width:100%;height:calc(100% - 60px)"cellpadding=0 cellspacing=0><div id=termarea3x style=width:100%;height:100%><div style=width:100%;height:100%;text-align:left id=termarea3xdiv></div></div></div><div id=termarea4 style=position:relative;height:32px><div class=areaFoot><div class=toright2></div><div style=height:28px><input id=termActionsBtn style=margin-left:3px;height:28px type=button title="Realizar acciones de energía en el dispositivo"onkeypress=return!1 onkeydown=return!1 value=Acciones onclick=deviceActionFunction()> <input id=ctrlcbutton style=margin-left:3px;height:28px type=button onkeypress=return!1 onkeydown=return!1 value=Ctl-C onclick='termSendKey(3,"ctrlcbutton")'> <input id=ctrlxbutton style=margin-left:3px;height:28px type=button onkeypress=return!1 onkeydown=return!1 value=Ctl-X onclick='termSendKey(24,"ctrlxbutton")'> <input id=escbutton style=margin-left:3px;height:28px type=button onkeypress=return!1 onkeydown=return!1 value=ESC onclick='termSendKey(27,"escbutton")'></div></div></div><div id=p12TermConsoleMsg style=display:none;cursor:pointer;position:absolute;left:30px;top:45px;color:#ff0;background-color:rgba(0,0,0,.6);padding:10px;border-radius:5px onclick=p12clearConsoleMsg()></div></div></div><div id=p10files style=position:absolute;top:55px;bottom:0;width:100%;display:none><table id=p13toolbar style=width:100%;height:111px cellpadding=0 cellspacing=0><tr><td style="background-color:silver;border-bottom:2px solid #000;padding:2px;line-height:24px"><div style=float:right;text-align:right><input id=filesActionsBtn type=button onkeypress=return!1 onkeydown=return!1 value=Acciones onclick=deviceActionFunction() style=margin-right:2px><div id=filesCustomUpperRight style=float:left;margin-right:6px></div></div><div style=margin-left:2px><input id=p13AutoConnect value=AutoConectar onclick=autoConnectFiles(event) onkeypress=return!1 onkeydown=return!1 type=button style=display:none> <input id=p13Connect value=Conectar onclick=connectFiles(event,1) onkeypress=return!1 onkeydown=return!1 type=button> <input id=p13Connects value="Conexión SFTP"onclick=connectFiles(event,2) onkeypress=return!1 onkeydown=return!1 type=button> <input id=p13Disconnect value=Desconectar onclick=connectFiles(event) onkeypress=return!1 onkeydown=return!1 type=button> <span class=textOverGray id=p13Status>Desconectado</span></div><tr><td style=width:100%;background-color:#d3d9d6;text-align:left;padding:4px valign=bottom><div style=width:100%;text-align:center><input type=button style="width:calc(100%/5 - 5px)"id=p13FolderUp disabled onclick=p13folderup() value=Subir> <input type=button style="width:calc(100%/5 - 5px)"id=p13SelectAllButton disabled onclick=p13selectallfile() value="Seleccionar Todos"onkeypress=return!1 onkeydown=return!1> <input type=button style="width:calc(100%/5 - 5px)"id=p13RenameFileButton disabled value=Renombrar onclick=p13renamefile() onkeypress=return!1 onkeydown=return!1> <input type=button style="width:calc(100%/5 - 5px)"id=p13DeleteFileButton disabled value=Eliminar onclick=p13deletefile() onkeypress=return!1 onkeydown=return!1> <input type=button style="width:calc(100%/5 - 5px)"id=p13NewFolderButton disabled value=Carpeta onclick=p13createfolder() onkeypress=return!1 onkeydown=return!1></div><div style=width:100%;text-align:center><input type=button style="width:calc(100%/5 - 5px)"id=p13UploadButton disabled value="Subir Archivo"onclick=p13uploadFile() onkeypress=return!1 onkeydown=return!1> <input type=button style="width:calc(100%/5 - 5px)"id=p13CutButton disabled value=Cortar onclick=p13copyFile(1) onkeypress=return!1 onkeydown=return!1> <input type=button style="width:calc(100%/5 - 5px)"id=p13CopyButton disabled value=Copiar onclick=p13copyFile(0) onkeypress=return!1 onkeydown=return!1> <input type=button style="width:calc(100%/5 - 5px)"id=p13PasteButton disabled value=Pegar onclick=p13pasteFile() onkeypress=return!1 onkeydown=return!1> <input type=button style="width:calc(100%/5 - 5px)"id=p13RefreshButton disabled value=Actualizar onclick=p13folderup(9999) onkeypress=return!1 onkeydown=return!1></div><tr><td style=background-color:#e4e9e7;height:28px><table style=width:100%><tr><td id=p13currentpath style=overflow:hidden;padding-left:4px;padding-top:2px;color:#000><td style=text-align:right;padding-right:4px><select id=p13sortdropdown onchange=p13updateFiles()><option value=1 selected>Orden: ascendente, por nombre<option value=2>Orden: ascendente, por tamaño<option value=3>Orden: ascendente, por fecha<option value=4>Orden: Descendente, por nombre<option value=5>Orden: Descendente, por tamaño<option value=6>Orden: Descendente, por fecha</select></table></table><div id=p13FilesConsoleMsg style=display:none;cursor:pointer;position:absolute;left:30px;top:165px;color:#ff0;background-color:rgba(0,0,0,.6);padding:10px;border-radius:5px onclick=p13clearConsoleMsg()></div><div id=p13filetable style="width:100%;height:calc(100% - 133px);overflow:auto;-webkit-user-select:none"><span id=p13files></span></div><table id=p13toolbarBottom style=width:100%;height:22px;position:absolute;bottom:0 cellpadding=0 cellspacing=0><tr><td style=text-align:left;padding:3px;text-align:center;background-color:#d3d9d6;color:#000>&nbsp;<span id=p13bottomstatus></span></table></div><div id=p10details style=overflow-y:scroll;position:absolute;top:55px;bottom:0;width:100%><div id=p10detailshtml style=margin-left:-3px></div></div><div id=p10console style=overflow:hidden;position:absolute;top:55px;bottom:0;width:100%><table id=consoleTable cellpadding=0 cellspacing=0><tr style=height:28px><td class=areaHead><div class=toright2><div id=p15coreName></div><input type=button id=p15uploadCore value="Acción del Agente"onclick=p15uploadCore(event)></div><div id=p15statetext></div><tr><td id=p15agentConsole style=position:relative><pre id=p15agentConsoleText></pre><tr style=height:28px><td class=areaFoot><table style=width:100%><tr><td style=width:99%><input id=p15consoleText style=width:100%;box-sizing:border-box onkeyup=p15consoleSend(event)><td id=p15outputselecttd><select id=p15outputselect onchange=setupConsole()><option id=p15outputselect1 value=1>Agente<option id=p15outputselect3 value=3>Empujar<option id=p15outputselect2 value=2>MQTT</select><td style=width:1%><input id=id_p15consoleClear type=button class=bottombutton value=Eliminar onclick=p15consoleClear()></table></table></div></div><div id=p20 style=display:none;position:absolute;bottom:0;top:0;width:100%><table cellspacing=0 style=margin:0;padding:0;border-spacing:0;border:0;position:absolute;top:0><tr style=padding:0><td style=padding:0;color:#c8c8c8;text-align:center;cursor:pointer width=60px valign=top onclick=goBack()><div style=padding:0;background-color:#036;width:10px;height:10px;float:right;border:0><div class=menucurve></div></div><div style="padding:0;font-size:25px;background-color:#036;width:50px;border-radius:0 0 10px 0;height:36px">◀</div><td onclick=p20editmesh(1)><img src=/images/meshicon50.png width=50 height=50><td onclick=p20editmesh(1)><div style=margin-left:5px><strong style=font-size:large><span id=p20meshName></span></strong><br></div></table><div style=overflow-y:auto;position:absolute;top:55px;bottom:0;left:0;right:0><div id=p20info style=margin-left:8px;margin-right:8px></div></div></div></div></div><div id=footer style=height:32px;width:100%;text-align:center;background-color:#113962;position:absolute;bottom:0><table id=footerMenu cellpadding=0 cellspacing=0 style=height:32px;width:100%;color:#fff;cursor:pointer;table-layout:fixed></table></div></div><div id=dialog style=display:none><div style="width:100%;background-color:#036;color:#fff;border-radius:5px 5px 0 0"><div id=id_dialogclose style=float:right;padding:5px;cursor:pointer onclick=setDialogMode()><b>X</b></div><div id=id_dialogtitle style=padding:5px></div><div style=width:100%;margin:6px></div></div><div style=margin-right:16px;margin-left:8px><div id=dialog1 style=margin:auto;text-align:center;margin:3px><div id=id_dialogMessage style=padding:10px></div></div><div id=dialog2 style=margin:auto;margin:3px><div id=id_dialogOptions></div></div><div id=dialog3 style=margin:auto;margin:3px><select id=deskkeys style=width:100%><option value=10>Ctrl+Alt+Del<option value=11>Tab<option value=5>Win<option value=0>Win+Abajo<option value=1>Win+Arriba<option value=2>Win+L<option value=3>Win+M<option value=4>Shift+Win+M<option value=6>Win+R<option value=7>Alt-F4<option value=8>Ctrl-W<option value=9>Alt-Tab<option value=12>Shift-F10</select></div><div id=dialog4 style=margin:auto;margin:3px><div id=d3upload><div>Selección de Archivo</div><select id=d3uploadMode onchange=d3modechange()><option value=1>Carga local de archivos<option value=2>Seleccionar un archivo del servidor</select></div><div id=d3localmode style=display:none><div>Cargar Archivo</div><form id=d3localmodeform method=post enctype=multipart/form-data action=uploadfile.ashx target=fileUploadFrame><input id=d3auth name=auth style=display:none> <input id=d3filter name=filter style=display:none> <input id=d3attrib name=attrib style=display:none> <input type=file id=d3localFile name=files onchange=d3setActions()> <input type=submit id=d3submit style=display:none></form></div><div id=d3servermode><div id=d3serveraction valign=bottom><input type=button id=p3FolderUp disabled onclick=d3folderup() value=Subir>&nbsp;<span id=p3CurrentFolder></span></div><div id=d3serverfiles></div></div></div><div id=dialog7 style=margin:auto;margin:3px><div id=d7meshkvm><h4 style="width:100%;border-bottom:1px solid gray">Escritorio Remoto del Agente</h4><table style=width:100%><tr><td>Calidad<td style=width:100px><select id=d7bitmapquality style=float:right;width:200px dir=rtl></select><tr><td>Escala<td style=width:100px><select id=d7bitmapscaling style=float:right;width:200px dir=rtl><option selected value=1024>100%<option value=896>87.5%<option value=768>75%<option value=640>62.5%<option value=512>50%<option value=384>37.5%<option value=256>25%<option value=128>12.5%</select><tr><td>Velocidad<td style=width:100px><select id=d7framelimiter style=float:right;width:200px dir=rtl><option selected value=50>Rápido<option value=100>Medio<option value=400>Lento<option value=1000>Muy lento</select><tr><td>Codificación<td style=width:100px><select id=d7encoding style=float:right;width:200px dir=rtl><option value=1>JPEG<option value=2>PNG<option value=3>TIFF<option selected value=4>WEBP</select><tr><td><td><label style=display:block id=d7deskAutoLockLabel><input type=checkbox id=d7deskAutoLock>Bloquear al desconectar</label></table></div><div id=d7amtkvm><h4 style="width:100%;border-bottom:1px solid gray">Intel® AMT Hardware KVM</h4><table style=width:100%><tr><td>Codificación<td style=width:100px><select id=d7desktopmode style=float:right;width:200px><option value=1>RLE8, Más Rápido<option value=2>RLE16, Recomendado<option value=3>RAW8, Lento<option value=4>RAW16, Muy Lento</select></table></div></div></div><div id=idx_dlgButtonBar style=padding:10px;margin-bottom:20px><input id=idx_dlgCancelButton type=button value=Cancelar style=float:right;width:80px;margin-left:5px onclick=dialogclose(0)> <input id=idx_dlgOkButton type=button value=OK style=float:right;width:80px onclick=dialogclose(1)><div><input id=idx_dlgDeleteButton type=button value=Eliminar style=display:none onclick=dialogclose(2)></div></div></div><div id=topMenu style="z-index:1000;background-color:#eee;box-shadow:0 0 15px #666;font-family:Arial,Helvetica,sans-serif;border-radius:0 0 5px 5px;position:fixed;top:50px;right:5px;width:170px;display:none"><div style="padding:12px;border-top:1px solid gray;color:#000;cursor:pointer"onclick=topMenu(2)>Mis Archivos</div><div style="padding:12px;border-top:1px solid gray;color:#000;cursor:pointer"onclick=topMenu(1)>Mi Cuenta</div><div id=logoutMenuOption><a id=logoutMenuOptionRef href=/logout><div style="padding:12px;border-top:1px solid gray;color:#000;cursor:pointer">Cerrar sesión</div></a></div></div><audio id=chimes><source src=sounds/chimes.mp3 type=audio/mp3></audio><iframe name=fileUploadFrame style=display:none></iframe><script>"use strict";var random="{{{randomlength}}}",webState="{{{webstate}}}";for(var i in""!=webState&&(webState=JSON.parse(decodeURIComponent(webState))),webState)try{localStorage.setItem(i,webState[i])}catch(e){}if(webState&&!webState.loctag)try{localStorage.removeItem("loctag")}catch(e){}var urlargs=parseUriArgs();null!=urlargs.key&&(urlargs.key=""+urlargs.key),urlargs.key&&0==isAlphaNumeric(urlargs.key)&&delete urlargs.key,urlargs.locale&&0==isAlphaNumeric(urlargs.locale)&&delete urlargs.locale,delete urlargs.user,delete urlargs.pass,delete urlargs.viewmode,delete urlargs.gotonode,delete urlargs.gotodevicename,delete urlargs.gotodevicername,delete urlargs.gotodeviceip,delete urlargs.gotomesh,delete urlargs.panel;var args=parseUriArgs();args.key&&0==isAlphaNumeric(args.key)&&delete args.key,args.locale&&0==isAlphaNumeric(args.locale)&&delete args.locale;var debugLevel=parseInt("{{{debuglevel}}}"),features=parseInt("{{{features}}}"),features2=parseInt("{{{features2}}}"),features3=parseInt("{{{features3}}}"),sessionTime=parseInt("{{{sessiontime}}}"),sessionRefreshTimer=null,domain="{{{domain}}}",domainUrl="{{{domainurl}}}",authCookie="{{{authCookie}}}",authRelayCookie="{{{authRelayCookie}}}",logoutControls=JSON.parse(decodeURIComponent("{{{logoutControls}}}")),authCookieRenewTimer=null,webRelayPort=parseInt("{{{webRelayPort}}}"),hidePowerTimeline="{{{hidePowerTimeline}}}",webRelayDns="{{{webRelayDns}}}",meshserver=null,xdr=null,usergroups=null,stars={},serverinfo=null,nodes=[],meshes={},filetree={},userinfo=null,users=(serverinfo=null,null),nodeShortIdent=0,serverPublicNamePort="{{{serverDnsName}}}:{{{serverPublicPort}}}",debugmode=!1,attemptWebRTC=!!(128&features),webrtcconfiguration="{{{webrtcconfig}}}";if(""==webrtcconfiguration)webrtcconfiguration=null;else try{webrtcconfiguration=JSON.parse(decodeURIComponent(webrtcconfiguration))}catch(e){console.log('Invalid WebRTC config: "'+webrtcconfiguration+'".'),webrtcconfiguration=null}var files,terminal,StatusStrs=["Desconectado","Conectando....","Configurar...","Conectado","Intel&reg; AMT Conectado"],agentsStr=["Desconocido","Consola Windows 32bits","Consola Windows 64bits","Servicio Windows 32bits","Servicio Windows 64bits","Linux 32bit","Linux 64bit","MIPS","XENx86","Android","Linux ARM","macOS x86-32bit","Android x86","PogoPlug ARM","Android","Linux Poky x86-32bit","macOS x86-64bit","ChromeOS","Linux Poky x86-64bit","Linux NoKVM x86-32bit","Linux NoKVM x86-64bit","Consola MinCore de Windows","Servicio MinCore de Windows","NodeJS","ARM-Linaro","ARMv6l / ARMv7l","ARMv8 64bits","ARMv6l / ARMv7l / Sin KVM","MIPS24KC (OpenWRT)","Procesadores Apple","FreeBSD x86-64","Desconocido","Linux ARM 64 bit","Alpine Linux x86 64 Bit (MUSL)","Asistente (Windows)","Armada370 - ARM32 / HF (libc / 2.26)","OpenWRT x86-64","OpenBSD x86-64","Desconocido","Desconocido","MIPSEL24KC (OpenWRT)","ARMADA/CORTEX-A53/MUSL (OpenWRT)","Consola Windows ARM 64bit","Servicio Windows ARM 64bit","ARMVIRT32 (OpenWRT)","RISC-V x86-64"],domainStates=["Ninguno","Azure AD","On-Premises AD","Hybrid AD","Microsoft Account"],passRequirements="{{{passRequirements}}}";""!=passRequirements&&(passRequirements=JSON.parse(decodeURIComponent(passRequirements)));var deskPinchZoom,sessionActivity=Date.now(),deskKeyboardShortcuts=[],nightMode=setNightMode(),xterm=null,xtermfit=null,xtermimage=null,xtermResizeTimer=null,devicePagingState=null,p11DeskConsoleMsgTimer=null,p12TermConsoleMsgTimer=null,p13FilesConsoleMsgTimer=null,webpSupport=!1;function startup(){if(!(32&features)){var e=null;try{e=top.location.toString().toLowerCase()}catch(e){}if(top!=self&&(null==e||0==top.active))return void(top.location=self.location)}if(!args.locale){var t=getstore("loctag",0);null!=t&&"*"!=t&&(args.locale=t)}window.onresize=center,center(),QV("changeEmailId",!(2097152&features)),QH("p1message","Conectando...."),go(1),document.onkeypress=ondeskkeypress,document.onkeydown=ondeskkeydown,document.onkeyup=ondeskkeyup,document.onclick=function(e){999==xxdialogMode&&"topMenuIcon"!=e.target.id&&(QV("topMenu",!1),xxdialogMode=0)},(meshserver=MeshServerCreateControl(domainUrl)).onStateChanged=onStateChanged,meshserver.onMessage=onMessage,meshserver.trace=args.trace,meshserver.Start();try{stars=JSON.parse(getstore("stars","{}"))}catch(e){}logoutControls&&logoutControls.logoutUrl&&(Q("logoutMenuOptionRef").href=logoutControls.logoutUrl);var o=localStorage.getItem("desktopsettings");null!=o&&(desktopsettings=JSON.parse(o)),applyDesktopSettings(),null!=args.webrtc&&(attemptWebRTC=1==args.webrtc),sessionTime>=10&&(sessionRefreshTimer=setTimeout(refreshCookieSession,Math.round(6e4*sessionTime*.8))),QV("setDarkModeLink",!(3145728&features2)),deskKeyboardShortcuts=[];var n=getstore("deskKeyShortcuts","0x0A002E,0x100000,0x100028,0x100026,0x10004C,0x10004D,0x11004D,0x100052,0x020073,0x080057,0x020009,0x100025,0x100027").split(",");for(var i in n)deskKeyboardShortcuts.push(parseInt(n[i]));updateDeskShortcutKeys(),updateTermShortcutKeys()}function refreshCookieSession(){var e=null;try{e=new XDomainRequest}catch(e){}e||(e=new XMLHttpRequest),e.open("GET",window.location.origin+domainUrl+"refresh.ashx"),e.timeout=15e3,e.onload=function(){sessionRefreshTimer=setTimeout(refreshCookieSession,Math.round(6e4*sessionTime*.8))},e.onerror=e.ontimeout=function(){sessionRefreshTimer=null},e.send()}function onStateChanged(e,t,o,n){if(0==t){if(setDialogMode(0),go(0),deleteAllNotifications(),"noauth"==n)return void QH("p0span","No se puede realizar la autenticación");2==o?setTimeout(serverPoll,5e3):QH("p0span","No se puede conectar al web socket"),null!=authCookieRenewTimer&&(clearInterval(authCookieRenewTimer),authCookieRenewTimer=null),devicePagingState=null,updateDevicePageState()}else 2==t&&(meshserver.send({action:"usergroups"}),meshserver.send({action:"meshes"}),meshserver.send({action:"nodes",skip:null==devicePagingState?0:devicePagingState.skip}),meshserver.send({action:"files"}),authCookieRenewTimer=setInterval(function(){meshserver.send({action:"authcookie"})},18e5));QV("topMenuIcon",2==t)}function serverPoll(){xdr=null;try{xdr=new XDomainRequest}catch(e){}xdr||(xdr=new XMLHttpRequest),xdr.open("HEAD",window.location.href),xdr.timeout=15e3,xdr.onload=function(){xdr.status<500?reload():setTimeout(serverPoll,1e4)},xdr.onerror=xdr.ontimeout=function(){setTimeout(serverPoll,1e4)},xdr.send()}function updateSelf(){var e=!!(256&features2);if(userinfo&&(e=4294967295!=userinfo.siteadmin&&!!(1024&userinfo.siteadmin)||!!(256&features2)),QV("p3AccountActions",!(4&features)&&0==serverinfo.domainauth&&0==e),QV("logoutMenuOption",!(4&features)&&0==serverinfo.domainauth),QV("p2AccountSecurity",!(4&features||0!=serverinfo.domainauth||!(4096&features)||0!=e)),QV("p2AccountImage",!e),QV("verifyEmailId",!0!==userinfo.emailVerified&&null!=userinfo.email&&1==serverinfo.emailcheck),QV("manageAuthApp",1!=serverinfo.lock2factor&&4096&features&&(1==userinfo.otpsecret||!(131072&features2))),QV("manageOtp",1!=serverinfo.lock2factor&&!(262144&features2)&&4096&features&&(1==userinfo.otpsecret||userinfo.otphkeys>0)),QV("authPhoneNumberCheck",null!=userinfo.phone),QV("authEmailSetupCheck",1==userinfo.otpekey&&null!=userinfo.email&&1==userinfo.emailVerified),QV("authAppSetupCheck",1==userinfo.otpsecret),QV("authCodesSetupCheck",userinfo.otpkeys>0),QV("p2AccountActions",!(4&features)&&0==serverinfo.domainauth&&null!=userinfo),QV("p2AccountPassActions",!(4&features)&&0==serverinfo.domainauth&&null!=userinfo&&0==userinfo._id.split("/")[2].startsWith("~")),QV("p3createMeshLink1",!1),QV("p3createMeshLink2",!1),null!=userinfo.flags&&1&userinfo.flags?(null==userinfo.accountImageRnd&&(userinfo.accountImageRnd=Math.floor(9999999999*Math.random())),Q("p2AccountImage").src="userimage.ashx?rnd="+userinfo.accountImageRnd):Q("p2AccountImage").src="images/user-256.png","number"==typeof userinfo.passchange)if(-1==userinfo.passchange)QH("p2nextPasswordUpdateTime"," - Reiniciar en el proximo inicio de sesión.");else if(null!=passRequirements&&"number"==typeof passRequirements.reset){var t=userinfo.passchange+86400*passRequirements.reset-Math.floor(Date.now()/1e3);if(t<0)QH("p2nextPasswordUpdateTime"," - Reiniciar en el proximo inicio de sesión.");else if(t<3600){var o=Math.floor(t/60);QH("p2nextPasswordUpdateTime",format(1==o?" - Reiniciar en 1 minuto.":" - Reiniciar en {0} minutos.",o))}else if(t<86400){var n=Math.floor(t/3600);QH("p2nextPasswordUpdateTime",format(1==n?" - Reiniciar en 1 hora.":" - Reiniciar en {0} horas.",n))}else{var i=Math.floor(t/86400);QH("p2nextPasswordUpdateTime",format(1==n?" - Reiniciar en 1 dia.":" - Reiniciar en {0} dias.",i))}}}function setSessionActivity(){sessionActivity=Date.now()}function checkIdleSessionTimeout(){Date.now()-sessionActivity>serverinfo.timeout&&(null!=desktop&&(desktop.Stop(),desktopNode=desktop=null),null!=terminal&&(terminal.Stop(),terminal=null),null!=files&&(files.Stop(),files=null),serverinfo.logoutonidlesessiontimeout&&(urlargs.key?window.location.href="logout?key="+urlargs.key:window.location.href="logout"))}function onMessage(e,t){switch(t.action){case"serverinfo":if((serverinfo=t.serverinfo).timeout&&(setInterval(checkIdleSessionTimeout,1e4),checkIdleSessionTimeout()),null!=userinfo&&updateSelf(),null!=serverinfo.certExpire){var o=Math.floor((serverinfo.certExpire-Date.now())/864e5);o>=0&&o<20&&addNotification({text:format("El certificado vence en {0} día (s)",o)})}QV("manageEmail2FA",8388608&features&&1!=serverinfo.lock2factor),QV("managePhoneNumber1",33554432&features&&67108864&features&&1!=serverinfo.lock2factor),QV("managePhoneNumber2",33554432&features&&!(67108864&features)&&1!=serverinfo.lock2factor);break;case"authcookie":authCookie=t.cookie,authRelayCookie=t.rcookie;break;case"userinfo":userinfo=t.userinfo,QH("p3userName",userinfo.name),null!=serverinfo&&updateSelf();break;case"users":for(var n in users={},t.users)users[t.users[n]._id]=t.users[n];null!=currentUser&&(currentUser=users[currentUser._id]),updateUsers();break;case"wssessioncount":wssessions=t.wssessions,updateUsers();break;case"meshes":for(var n in meshes={},t.meshes)meshes[t.meshes[n]._id]=t.meshes[n];null!=currentMesh&&(currentMesh=meshes[currentMesh._id]),updateMeshes(),mainUpdate(4);break;case"usergroups":var i=0;if(Array.isArray(t.ugroups)){for(var a in usergroups={},t.ugroups)i++,usergroups[t.ugroups[a]._id]=t.ugroups[a];0==i&&(usergroups=null)}else{for(var a in usergroups=t.ugroups,t.ugroups)i++;0==i&&(usergroups=null)}break;case"files":filetree=setupBackPointers(t.filetree),updateFiles();break;case"nodes":for(var n in nodes=[],t.nodes)for(var s in t.nodes[n])t.nodes[n][s].namel=t.nodes[n][s].name.toLowerCase(),t.nodes[n][s].rname?t.nodes[n][s].rnamel=t.nodes[n][s].rname.toLowerCase():t.nodes[n][s].rnamel=t.nodes[n][s].namel,t.nodes[n][s].meshnamel=meshes[n]?meshes[n].name.toLowerCase():"*",t.nodes[n][s].meshid=n,t.nodes[n][s].state=t.nodes[n][s].state?t.nodes[n][s].state:0,t.nodes[n][s].desc=t.nodes[n][s].desc,t.nodes[n][s].icon||(t.nodes[n][s].icon=1),t.nodes[n][s].ident=++nodeShortIdent,nodes.push(t.nodes[n][s]);null!=currentNode&&0==IsNodeViewable(currentNode)&&(currentNode=null,go(2)),null!=currentNode&&(null!=(currentNode=getNodeFromId(currentNode._id))?gotoDevice(currentNode._id,xxcurrentView,!0):go(2)),devicePagingState=null==t.totalcount?null:{total:t.totalcount,skip:t.skip,limit:t.limit},updateDevicePageState(),mainUpdate(4),0==xxcurrentView&&go(parseInt("{{viewmode}}")),gotoDevice("{{currentNode}}",parseInt("{{viewmode}}"));break;case"powertimeline":if(t.nodeid!=powerTimelineReq)break;for(var a in powerTimelineNode=t.nodeid,powerTimeline=t.timeline,powerTimelineUpdate=Date.now()+3e5,powerTimeline)a%2==1&&(powerTimeline[a]=1e3*powerTimeline[a]);currentNode._id==t.nodeid&&drawDeviceTimeline();break;case"getsysinfo":if(t.nodeid!=powerTimelineReq)break;!0===t.noinfo?updateDeviceDetails(getNodeFromId(t.nodeid)):(t.hardware.time=t.time,updateDeviceDetails(getNodeFromId(t.nodeid),t.hardware));break;case"lastconnect":null!=(x=getNodeFromId(t.nodeid))&&(x.lastconnect=t.time,x.lastaddr=t.addr);break;case"msg":if(null!=t.nodeid){var r=-1;if(null!=nodes)for(var a in nodes)if(nodes[a]._id==t.nodeid){r=a;break}if(-1!=r)if("console"==t.type)p15consoleReceive(nodes[r],t.value,t.source);else if("notify"==t.type){if(!(8&(s=getstore("notifications",0)))&&null!=t.amtMessage)break;s={text:t.value,title:t.title,icon:t.icon,titleid:t.titleid,msgid:t.msgid,args:t.args};null!=t.id&&(s.id=t.id),null!=t.nodeid&&(s.nodeid=t.nodeid),null!=t.tag&&(s.tag=t.tag),null!=t.url&&(s.url=t.url),null!=t.username&&(s.username=t.username),"number"==typeof t.maxtime&&(s.maxtime=t.maxtime),addNotification(s)}else if("userSessions"==t.type&&null!=currentNode&&currentNode._id==t.nodeid&&null==desktop){var l=[];if(null!=t.data)for(var a in t.data)"Active"!=t.data[a].State&&"Console"!=t.data[a].StationName&&3!=debugmode||l.push(t.data[a]);if(0==l.length)connectDesktop(null,1,null,t.tag);else if(1==l.length)connectDesktop(null,1,l[0].SessionId,t.tag);else{var d="",c="{{{userSessionsSort}}}";for(var a in l.sort(function(e,t){return e[c]?t[c]?e[c]<t[c]?-1:e[c]>t[c]?1:0:1:-1}),l)d+='<div style="text-align:left;cursor:pointer;background-color:gray;margin:5px;padding:5px;border-radius:5px" onclick=connectDesktop(event,1,'+l[a].SessionId+","+t.tag+")>"+l[a].State+", "+l[a].StationName,l[a].Username&&(l[a].Domain?d+=" - "+l[a].Domain+"/"+l[a].Username:d+=" - "+l[a].Username),d+="</div>";QH("p11DeskSessionSelector",d),QV("p11DeskSessionSelector",!0)}}}else if("notify"==t.type){s={text:t.value,title:t.title,icon:t.icon,titleid:t.titleid,msgid:t.msgid,args:t.args};null!=t.id&&(s.id=t.id),null!=t.tag&&(s.tag=t.tag),null!=t.url&&(s.url=t.url),null!=t.username&&(s.username=t.username),"number"==typeof t.maxtime&&(s.maxtime=t.maxtime),addNotification(s)}break;case"getnetworkinfo":if(currentNode._id!=t.nodeid)return;updateDeviceDetails(getNodeFromId(t.nodeid),null,t);break;case"getNotes":if((s=Q("d2devNotes"))&&t.id==decodeURIComponent(s.attributes.noteid.value))t.notes?QH("d2devNotes",decodeURIComponent(t.notes)):QH("d2devNotes",""),0==("true"==s.attributes.ro.value)&&(s.removeAttribute("readonly"),QE("idx_dlgOkButton",!0),QV("idx_dlgOkButton",!0),focusTextBox("d2devNotes"));break;case"otpauth-request":if(2==xxdialogMode&&"otpauth-request"==xxdialogTag)if(null!=t.err){var u=["","2FA está bloqueado","Los códigos de respaldo están bloqueados","Token de inicio de sesión en uso","OTP 2FA no permitido","La cuenta esta bloqueada","No se puede cargar OTPLIB"];t.err>0&&t.err<u.length?QH("d2optinfo",u[t.err]):QH("d2optinfo",format("Error n.º {0}",t.err))}else{var p=t.secret;52==p.length?p=p.split(/(.............)/).filter(Boolean).join(" "):32==p.length&&(p=(p=p.split(/(....)/).filter(Boolean).join(" ")).substring(0,20)+"<br/>"+p.substring(20)),QH("d2optinfo",format('Instalar <a href="https://play.google.com/store/apps/details?id=com.google.android.apps.authenticator2" rel="noreferrer noopener" target=_blank>Google Authenticator</a> o una aplicación compatible, usa <a href="{0}" rel="noreferrer noopener" target=_blank> este enlace</a> o ingresa el secreto a continuación. Luego, ingresa el token actual de 6 dígitos para activar el inicio de sesión en 2 pasos.',t.url)+'<br /><br /><div style=width:100%;text-align:center><tt id=d2optsecret secret="'+t.secret+'" style=font-size:15px>'+p+'</tt><br /><br />Token: <input type=text autocomplete="one-time-code" inputmode="numeric" pattern="[0-9]*" onkeypress="return (event.keyCode == 8) || (event.charCode >= 48 && event.charCode <= 57)" onkeyup=account_addOtpCheck(event) onkeydown=account_addOtpCheck() maxlength=6 id=d2otpauthinput type=text></div>'),QV("idx_dlgOkButton",!0),QE("idx_dlgOkButton",!1),Q("d2otpauthinput").focus()}break;case"otpauth-setup":if(xxdialogMode)return;setDialogMode(2,"Aplicación de Autenticación",1,null,t.success?"<b style=color:green>Activación de la Aplicación de Autenticación exitosa.</b> Ahora necesitarás un token válido para iniciar sesión nuevamente.":"<b style=color:red>La activación de inicio de sesión en 2 pasos falló.</b> Borra el secreto de la aplicación e intenta nuevamente. Sólo tienes unos minutos para ingresar el código adecuado.");break;case"otpauth-clear":if(xxdialogMode)return;setDialogMode(2,"Aplicación de Autenticación",1,null,t.success?"<b>Aplicación de Autenticación eliminada.</b> Puedes reactivar esta función en cualquier momento.":"<b style=color:red>La eliminación de activación de inicio de sesión en 2 pasos falló.</b> Intentar nuevamente.");break;case"otpauth-getpasswords":if(xxdialogMode)return;d="Los tokens únicos se pueden usar como autenticación secundaria. Genera un conjunto, imprímelos y guárdalos en un lugar seguro.";if(d+="<div style='border-radius:6px;border: 2px dashed #888;width:100%;margin-top:8px'><div style='padding:8px;font-family:Arial, Helvetica, sans-serif;font-size:20px;font-weight:bold'><table style=width:100%;text-align:center>",t.passwords){var m=0;for(var a in t.passwords){++m%2&&(d+="<tr>");for(var g=""+t.passwords[a].p;g.length<8;)g="0"+g;!0===t.passwords[a].u?d+="<td>"+g.substring(0,4)+"&nbsp;"+g.substring(4):d+="<td><strike style=color:#BBB>"+g.substring(0,4)+"&nbsp;"+g.substring(4)}}else d+="<tr><td>No hay Tokens Activos";d+="</table></div></div><br />",d+="<div><input type=button value='Cerrar' onclick=setDialogMode(0) style=float:right></input>",d+="<input type=button value='Nuevos Tokens' onclick='account_manageOtp(1);'></input>",null!=t.passwords&&(d+="<input type=button value='Eliminar' onclick='account_manageOtp(2);'></input>"),setDialogMode(2,"Administrar Códigos de Respaldo",8,null,d+="</div><br />","otpauth-manage");break;case"verifyPhone":if(xxdialogMode&&"verifyPhone"!=xxdialogTag)return;d='<table><tr><td><img src="images/phone80.png" style=padding:8px>';d+="<td>Check your phone and enter the verification code.",setDialogMode(2,"Notificaciones Telefónicas",3,account_managePhoneConfirm,d+='<br /><br /><div style=width:100%;text-align:center>Código de verificación: <input type=tel pattern="[0-9]" inputmode="number" maxlength=6 id=d2phoneCodeInput onKeyUp=account_managePhoneCodeValidate() onkeypress="if (event.key==\'Enter\') account_managePhoneCodeValidate(1)"></div></table>',t.cookie),Q("d2phoneCodeInput").focus(),account_managePhoneCodeValidate();break;case"previousLogins":if(2==xxdialogMode&&"previousLogins"==xxdialogTag){d="";var f="BBB";if(0==t.events.length)d+="No previous login.";else{for(var a in d+="<div style=max-height:260px;overflow-y:scroll;overflow-x:hidden>",t.events){107==(n=t.events[a].m)?(n="Inicio de sesión válido",f="BBD1BB",""):108==n?(n="2FA no válido",f="DD9DC3","x"):109==n?(n="Cuenta bloqueada",f="E1BBBB","x"):110==n&&(n="Contraseña no válida",f="E1BBBB","x"),d+="<div style=width:260px;background-color:#"+f+";border-radius:6px;margin-bottom:4px;padding:4px><div><b>"+EscapeHtml(n)+"</b><br />"+printDateTime(new Date(t.events[a].t))+"</div><div style=font-size:x-small>"+EscapeHtml(t.events[a].a.join(", "))+"</div></div></tr>"}d+="</div>"}setDialogMode(2,"Inicios de Sesión Anteriores",1,null,d)}break;case"event":if(t.event.noact)break;switch(t.event.action){case"serverinfochange":null!=t.event.lock2factor&&(serverinfo.lock2factor=t.event.lock2factor,updateSelf());break;case"userWebState":if(null!=localStorage){var h=JSON.parse(t.event.state);for(var a in h)localStorage.setItem(a,h[a]);if(null!=h.stars&&(stars=JSON.parse(h.stars)),null!=h.loctag&&h.loctag!=oldLoctag?(null!=h.loctag?args.locale=h.loctag:delete args.locale,mainUpdate(132)):null!=h.stars&&(mainUpdate(4),"*"==Q("SearchInput").value&&onSearchInputChanged()),currentNode&&refreshDevice(currentNode._id),null!=h.deskKeyShortcuts){deskKeyboardShortcuts=[];var v=h.deskKeyShortcuts.split(",");for(var a in v)deskKeyboardShortcuts.push(parseInt(v[a]));updateDeskShortcutKeys()}}break;case"accountchange":if("object"!=typeof t.event.account||null==t.event.account)return void console.log(t.event);if(userinfo.name==t.event.account.name){t.event.account.siteadmin&&t.event.account.siteadmin,userinfo.siteadmin&&userinfo.siteadmin;(t.event.account.quota!=userinfo.quota||!(8&userinfo.siteadmin)&&8&t.event.account.siteadmin)&&meshserver.send({action:"files"}),userinfo=t.event.account,updateSelf(),t.event.nodeListChange==userinfo._id&&meshserver.send({action:"nodes",skip:null==devicePagingState?0:devicePagingState.skip})}break;case"createusergroup":case"usergroupchange":null==usergroups&&(usergroups={});var k=usergroups[t.event.ugrpid];null==k?usergroups[t.event.ugrpid]={_id:t.event.ugrpid,name:t.event.name,desc:t.event.desc,domain:t.event.domain,links:t.event.links}:(k.name=t.event.name,k.desc=t.event.desc,k.links=t.event.links,k.flags=t.event.flags),meshserver.send({action:"meshes"}),meshserver.send({action:"nodes",skip:null==devicePagingState?0:devicePagingState.skip});break;case"deleteusergroup":if(null!=usergroups&&null!=usergroups[t.event.ugrpid]){delete usergroups[t.event.ugrpid];f=0;for(var a in usergroups)f++;0==f&&(usergroups=null)}break;case"createmesh":null!=meshes[t.event.meshid]||!userinfo.manageAllDeviceGroups&&null==t.event.mesh.links[userinfo._id]||(meshes[t.event.meshid]=t.event.mesh,mainUpdate(132),meshserver.send({action:"files"}));break;case"meshchange":if(null==meshes[t.event.meshid]){var y=!1;for(var a in null!=t.event.links[userinfo._id]&&(y=!0),null!=userinfo.links[t.event.meshid]&&(y=!0),userinfo.links)a.startsWith("ugrp/")&&null!=t.event.links[a]&&(y=!0);y&&(meshes[t.event.meshid]={_id:t.event.meshid,name:t.event.name,mtype:t.event.mtype,desc:t.event.desc,links:t.event.links,relayid:t.event.relayid},meshserver.send({action:"nodes",skip:null==devicePagingState?0:devicePagingState.skip}))}else{if(meshes[t.event.meshid].name!=t.event.name)for(var a in meshes[t.event.meshid].name=t.event.name,nodes)nodes[a].meshid==t.event.meshid&&(nodes[a].meshnamel=t.event.name.toLowerCase());if(meshes[t.event.meshid].desc=t.event.desc,meshes[t.event.meshid].links=t.event.links,null!=t.event.relayid&&(meshes[t.event.meshid].relayid=t.event.relayid),0==IsMeshViewable(t.event.meshid)){20==xxcurrentView&&currentMesh==meshes[t.event.meshid]&&go(2),delete meshes[t.event.meshid];var b=[];for(var a in nodes)(nodes[a].meshid!=t.event.meshid||null!=userinfo.links&&null!=userinfo.links[nodes[a]._id])&&b.push(nodes[a]);nodes=b,xxcurrentView>=10&&xxcurrentView<20&&currentNode&&!IsNodeViewable(currentNode)&&(setDialogMode(0),go(2),currentNode=null)}}mainUpdate(132),meshserver.send({action:"files"}),20==xxcurrentView&&currentMesh._id==t.event.meshid&&p20updateMesh();break;case"deletemesh":meshes[t.event.meshid]&&(delete meshes[t.event.meshid],updateMeshes(),meshserver.send({action:"files"}));b=[];for(var a in nodes)nodes[a].meshid!=t.event.meshid&&b.push(nodes[a]);nodes=b,mainUpdate(4),xxcurrentView>=20&&xxcurrentView<30&&currentMesh._id==t.event.meshid&&(setDialogMode(0),go(2)),xxcurrentView>=10&&xxcurrentView<20&&currentNode&&!IsNodeViewable(currentNode)&&(setDialogMode(0),go(2));break;case"addnode":var x=t.event.node;if(!meshes[x.meshid])break;if(null!=getNodeFromId(x._id))break;x.namel=x.name.toLowerCase(),x.rname?x.rnamel=x.rname.toLowerCase():x.rnamel=x.namel,x.meshnamel=meshes[x.meshid]?meshes[x.meshid].name.toLowerCase():"*",x.state=0,x.icon||(x.icon=1),x.ident=++nodeShortIdent,nodes.push(x),mainUpdate(4);break;case"removenode":r=-1;for(var a in nodes)if(nodes[a]._id==t.event.nodeid){r=a;break}if(-1!=r){x=nodes[r];currentNode==x&&(xxcurrentView>=10&&xxcurrentView<20&&(setDialogMode(0),go(2)),currentNode=null),nodes.splice(r,1),mainUpdate(4)}break;case"changenode":r=-1;for(var a in nodes)if(nodes[a]._id==t.event.nodeid){r=a;break}if(-1!=r)(x=nodes[r]).name=t.event.node.name,x.rname=t.event.node.rname,x.lusers=t.event.node.lusers,x.users=t.event.node.users,x.host=t.event.node.host,x.desc=t.event.node.desc,x.publicip=t.event.node.publicip,x.iploc=t.event.node.iploc,x.wifiloc=t.event.node.wifiloc,x.gpsloc=t.event.node.gpsloc,x.tags=t.event.node.tags,x.ssh=t.event.node.ssh,x.rdp=t.event.node.rdp,x.userloc=t.event.node.userloc,x.rdpport=t.event.node.rdpport,x.rfbport=t.event.node.rfbport,x.sshport=t.event.node.sshport,x.httpport=t.event.node.httpport,x.httpsport=t.event.node.httpsport,x.consent=t.event.node.consent,x.pmt=t.event.node.pmt,null!=t.event.node.agent&&(null==x.agent&&(x.agent={}),null!=t.event.node.agent.ver&&(x.agent.ver=t.event.node.agent.ver),null!=t.event.node.agent.id&&(x.agent.id=t.event.node.agent.id),null!=t.event.node.agent.caps&&(x.agent.caps=t.event.node.agent.caps),null!=t.event.node.agent.root&&(x.agent.root=t.event.node.agent.root),null!=t.event.node.agent.core?x.agent.core=t.event.node.agent.core:x.agent.core&&delete x.agent.core,x.agent.tag=t.event.node.agent.tag),null!=t.event.node.intelamt&&(null==x.intelamt&&(x.intelamt={}),null!=t.event.node.intelamt.state&&(x.intelamt.state=t.event.node.intelamt.state),null!=t.event.node.intelamt.host&&(x.intelamt.user=t.event.node.intelamt.host),null!=t.event.node.intelamt.user&&(x.intelamt.user=t.event.node.intelamt.user),null!=t.event.node.intelamt.tls&&(x.intelamt.tls=t.event.node.intelamt.tls),null!=t.event.node.intelamt.ver&&(x.intelamt.ver=t.event.node.intelamt.ver),null!=t.event.node.intelamt.tag&&(x.intelamt.tag=t.event.node.intelamt.tag),null!=t.event.node.intelamt.uuid&&(x.intelamt.uuid=t.event.node.intelamt.uuid),null!=t.event.node.intelamt.realm&&(x.intelamt.realm=t.event.node.intelamt.realm),null!=t.event.node.intelamt.flags&&(x.intelamt.flags=t.event.node.intelamt.flags),null!=t.event.node.intelamt.warn?x.intelamt.warn=t.event.node.intelamt.warn:delete x.intelamt.warn),null!=t.event.node.av&&(x.av=t.event.node.av),null!=t.event.node.wsc&&(x.wsc=t.event.node.wsc),null!=t.event.node.defender&&(x.defender=t.event.node.defender),x.namel=x.name.toLowerCase(),x.rname?x.rnamel=x.rname.toLowerCase():x.rnamel=x.namel,t.event.node.icon&&(x.icon=t.event.node.icon),null!=t.event.node.lastbootuptime&&(x.lastbootuptime=t.event.node.lastbootuptime),null!=t.event.node.idletime&&(x.idletime=t.event.node.idletime),refreshDevice(x._id),updateDeviceViewDevice(x),currentNode==x&&updateDeviceDetails();break;case"nodemeshchange":r=-1;for(var a in nodes)if(nodes[a]._id==t.event.nodeid){r=a;break}if(-1!=r){x=nodes[r];null!=meshes[t.event.newMeshId]||null!=userinfo.links&&null!=userinfo.links[x._id]?(x.meshid=t.event.newMeshId,x.meshnamel=meshes[t.event.newMeshId]?meshes[t.event.newMeshId].name.toLowerCase():"*"):(xxcurrentView>=10&&xxcurrentView<20&&currentNode&&!IsNodeViewable(currentNode)&&(setDialogMode(0),go(2),currentNode=null),nodes.splice(r,1)),mainUpdate(4),refreshDevice(t.event.nodeid)}else{x=t.event.node;if(!meshes[x.meshid])break;x.namel=x.name.toLowerCase(),x.rname?x.rnamel=x.rname.toLowerCase():x.rnamel=x.namel,x.meshnamel=meshes[x.meshid]?meshes[x.meshid].name.toLowerCase():"*",x.state=0,x.icon||(x.icon=1),x.ident=++nodeShortIdent,nodes.push(x),mainUpdate(4)}break;case"nodeconnect":r=-1;for(var a in nodes)if(nodes[a]._id==t.event.nodeid){r=a;break}if(-1!=r)(x=nodes[r]).conn=t.event.conn,x.pwr=t.event.pwr,1&x.conn||delete x.sessions,refreshDevice(x._id),updateDeviceViewDevice(x);break;case"login":null!=users&&users["user/"+domain+"/"+t.event.username.toLowerCase()]&&(users["user/"+domain+"/"+t.event.username.toLowerCase()].login=t.event.time);break;case"notify":s={text:t.event.value,title:t.event.title,icon:t.event.icon,titleid:t.titleid,msgid:t.msgid,args:t.args};null!=t.id&&(s.id=t.id),null!=t.event.tag&&(s.tag=t.event.tag),"number"==typeof t.maxtime&&(s.maxtime=t.maxtime),addNotification(s);break;case"sysinfohash":null!=currentNode&&t.event.nodeid==powerTimelineReq&&meshserver.send({action:"getsysinfo",nodeid:t.event.nodeid});break;case"ifchange":null!=currentNode&&currentNode._id==t.event.nodeid&&meshserver.send({action:"getnetworkinfo",nodeid:currentNode._id});break;case"devicesessions":if(null==(x=getNodeFromId(t.event.nodeid)))break;if(x.sessions=t.event.sessions,null!=x.sessions){for(var a in x.sessions)0==Object.keys(x.sessions[a]).length&&delete x.sessions[a];0==Object.keys(x.sessions).length&&delete x.sessions}refreshDevice(t.event.nodeid),updateDeviceViewDevice(x),xxdialogTag=="SESSIONS-"+t.event.nodeid&&showDeviceSessions(t.event.nodeid,!0),xxdialogTag=="HELPREQ-"+t.event.nodeid&&showDeviceHelpRequests(t.event.nodeid,!0)}break;case"getcookie":if("novnc"==t.tag){var w=window.location.origin+domainUrl+"novnc/vnc.html?ws=wss%3A%2F%2F"+window.location.host+encodeURIComponentEx(domainUrl)+(t.localRelay?"local":"mesh")+"relay.ashx%3Fauth%3D"+t.cookie+"&show_dot=1"+(urlargs.key?"&key="+urlargs.key:"")+"&l={{{lang}}}";null!=(x=getNodeFromId(t.nodeid))&&(w+="&name="+encodeURIComponentEx(x.name)),safeNewWindow(w,"mcnovnc/"+t.nodeid)}else if("mstsc"==t.tag){var S=window.location.origin+domainUrl+"mstsc.html?ws="+t.cookie+(urlargs.key?"&key="+urlargs.key:"");null!=(x=getNodeFromId(t.nodeid))&&(S+="&name="+encodeURIComponentEx(x.name)),t.localRelay&&(S+="&local=1"),safeNewWindow(S,"mcmstsc/"+t.nodeid)}else if("ssh"==t.tag){var C=window.location.origin+domainUrl+"ssh.html?ws="+t.cookie+(urlargs.key?"&key="+urlargs.key:"");null!=(x=getNodeFromId(t.nodeid))&&(C+="&name="+encodeURIComponentEx(x.name)),t.localRelay&&(C+="&local=1"),safeNewWindow(C,"mcssh/"+t.nodeid)}}}check_webp_feature("lossy",function(e,t){webpSupport=t,t||(d7encoding.options[1].disabled=!0,d7encoding.value=1)});var updateNaggleTimer=null,updateNaggleFlags=0;function mainUpdate(e){updateNaggleFlags|=e,null==updateNaggleTimer&&(updateNaggleTimer=setTimeout(function(){1&updateNaggleFlags&&onSearchInputChanged(),4&updateNaggleFlags&&(updateDevices(),updateDeviceDetails()),128&updateNaggleFlags&&updateMeshes(),updateNaggleTimer=null,updateNaggleFlags=0,gotoStartViewPage()},150))}function gotoStartViewPage(){var e=parseInt("{{viewmode}}");if(!(xxcurrentView>1)){if(""!="{{currentNode}}".toLowerCase()){if(null==getNodeFromId("{{currentNode}}"))return;gotoDevice("{{currentNode}}",e)}else if(null!=args.gotonode){if(96==args.gotonode.length&&(args.gotonode=btoa(hex2rstr(args.gotonode)).split("+").join("@").split("/").join("$")),null==getNodeFromId("node/"+domain+"/"+args.gotonode))return;args.panel&&(currentDevicePanel=parseInt(args.panel)),gotoDevice("node/"+domain+"/"+args.gotonode,e)}else if(null!=args.gotodevicename){var t=null;if(null!=nodes)for(var o in nodes)nodes[o].name==args.gotodevicename&&(t=nodes[o]._id);t&&(gotoDevice(t,e),go(e))}else if(null!=args.gotodevicername){t=null;if(null!=nodes)for(var o in nodes)nodes[o].rname==args.gotodevicername&&(t=nodes[o]._id);t&&(gotoDevice(t,e),goBackStack.push(1))}else if(null!=args.gotodeviceip){t=null;if(null!=nodes)for(var o in nodes)nodes[o].ip==args.gotodeviceip&&(t=nodes[o]._id);t&&(gotoDevice(t,e),go(e))}else if(null!=args.gotomesh){if(null==meshes["mesh/"+domain+"/"+args.gotomesh])return;gotoMesh("mesh/"+domain+"/"+args.gotomesh),go(e)}else isNaN(e)?(setDialogMode(0),go(1)):go(e);delete args.gotonode,delete args.gotomesh,delete args.panel,xxcurrentView<2&&go(2)}}function topMenu(e){null!=xxdialogMode&&0!=xxdialogMode&&999!=xxdialogMode||(void 0===e?1==("none"==QS("topMenu").display)?0!=xxdialogMode&&null!=xxdialogMode||(QV("topMenu",!0),xxdialogMode=999):(QV("topMenu",!1),xxdialogMode=0):(QV("topMenu",!1),xxdialogMode=0,1==e&&3!=xxcurrentView&&goForward("account"),2==e&&5!=xxcurrentView&&goForward("files")))}var backStack=[];function goBack(){xxdialogMode||(backStack.length>0&&backStack.pop(),goStack())}function goForward(e){xxdialogMode||(backStack.push(e),goStack())}function goStack(){if(0!=backStack.length){var e=backStack[backStack.length-1],t=e.split("/")[0];if("node"==t&&(setupDeviceMenu(0),gotoDevice(e)),"mesh"==t&&gotoMesh(e),"account"==t&&go(3),"devices"==t&&go(2),"files"==t){if(262144&features&&!(1==userinfo.otpsecret||userinfo.otphkeys>0||userinfo.otpkeys>0||userinfo.otpduo>0||userinfo.otpdev>0||8388608&features&&1==userinfo.otpekey))return void setDialogMode(2,"Seguridad de la Cuenta",1,null,'Unable to access this feature until two-factor authentication is enabled. This is required for extra security. Go to the "My Account" and look at the "Account Security" section.');go(5)}}else go(2)}function updateFooterMenu(e){for(;null!=e&&e.length<3;)e.push({n:""});var t="",o="";if(null!=e)for(var n in e)t+='<td style="cursor:pointer'+(""==o?"":";border-left:solid 1px white")+'" onclick="'+e[n].f+'">'+e[n].n,o=e[n].n;QH("footerMenu","<tr>"+t)}function account_viewPreviousLogins(){xxdialogMode||(setDialogMode(2,"Inicios de Sesión Anteriores",1,null,"Cargando...","previousLogins"),meshserver.send({action:"previousLogins"}))}function account_manageImage(e){if(!xxdialogMode){var t=0==e?userinfo:currentUser;setDialogMode(2,"Administrar Imagen de Cuenta",7,account_manageImageEx2,'<input id=p2file type=file style=width:100% accept="image/*" onchange=account_manageImageEx()><div style=width:100%><canvas id=p2canvas width=256 height=256 style="width:256px;height:256px;margin-left:12px;margin-top:8px;border-radius:16px;box-shadow: 0px 0px 15px #000" onclick=account_canvasClick() /></div>',t._id);var o=Q("p2canvas").getContext("2d");null==t.accountImageRnd&&(t.accountImageRnd=Math.floor(9999999999*Math.random()));var n="";1==e&&(n="&id="+t._id.split("/")[2]);var i=new Image;i.onload=function(){o.clearRect(0,0,256,256),o.drawImage(i,0,0)},i.src=null!=t.flags&&1&t.flags?"userimage.ashx?rnd="+t.accountImageRnd+n:"images/user-256.png",QE("idx_dlgDeleteButton",null!=t.flags&&1&t.flags),QE("idx_dlgOkButton",!1)}}function account_canvasClick(){Q("p2file").click()}function account_manageImageEx(){var e=Q("p2file").files[0],t=new Image;t.onload=function(){var e=0,o=0,n=Math.min(t.width,t.height);t.width>n&&(e=(t.width-n)/2),t.height>n&&(o=(t.height-n)/2);var i=Q("p2canvas").getContext("2d");i.imageSmoothingEnabled=!0,i.webkitImageSmoothingEnabled=!0,i.mozImageSmoothingEnabled=!0,i.clearRect(0,0,256,256),i.drawImage(t,e,o,n,n,0,0,256,256),QE("idx_dlgOkButton",!0)},t.src=URL.createObjectURL(e)}function account_manageImageEx2(e,t){meshserver.send({action:"updateUserImage",userid:t,image:2==e?0:Q("p2canvas").toDataURL("image/jpeg",.8)})}function toggleNightMode(){if(!xxdialogMode){var e=getstore("nightMode","0"),t="<input type=radio id=night0 name=nightmoderadio value=0 "+(0==e?"checked":"")+"><label for=night0>Predeterminado del navegador</label><br>";t+="<input type=radio id=night2 name=nightmoderadio value=2 "+(2==e?"checked":"")+"><label for=night2>Modo de luz</label><br>",setDialogMode(2,"Modo Nocturno",3,toggleNightModeEx,t+="<input type=radio id=night1 name=nightmoderadio value=1 "+(1==e?"checked":"")+"><label for=night1>Modo Oscuro</label><br>"),QV("uiMenu",!1)}}function toggleNightModeEx(){var e="0";Q("night1").checked&&(e="1"),Q("night2").checked&&(e="2"),putstore("nightMode",e),setNightMode()}function setNightMode(){var e=getstore("nightMode","0");return nightMode=!1,1048576&features2&&(e="1"),2097152&features2&&(e="2"),"1"==e?nightMode=!0:"0"==e&&window.matchMedia&&(nightMode=window.matchMedia("(prefers-color-scheme: dark)").matches),nightMode?(QC("body").add("night"),QS("body")["background-color"]="#000",QS("body").color="lightgray"):(QC("body").remove("night"),QS("body")["background-color"]="#FFF",QS("body").color="black"),nightMode}function account_managePhone(){var e;!xxdialogMode&&33554432&features&&(null!=userinfo.phone?(e='<table style=width:100%><tr><td style=width:56px><img src="images/phone80.png" style=padding:8px>',e+="<td style=text-align:center><div style=padding:6px>Número de teléfono verificado</div><div style=font-size:20px>"+userinfo.phone+"</div>",setDialogMode(2,"Notificaciones Telefónicas",3,account_managePhoneRemove,e+="<div style=margin:10px><label><input id=d2delPhone type=checkbox onclick=account_managePhoneRemoveValidate() />Remover número de teléfono</label></div>"),account_managePhoneRemoveValidate()):(e='<table style=width:100%><tr><td style=width:56px><img src="images/phone80.png" style=padding:8px>',e+="<td>Enter your SMS capable phone number. Once verified, the number may be used for login verification and other notifications.",setDialogMode(2,"Notificaciones Telefónicas",3,account_managePhoneAdd,e+='<br /><br /><div style=width:100%;text-align:center>Número de teléfono: <input type=tel pattern="[0-9]" autocomplete="tel" inputmode="tel" maxlength=18 id=d2phoneinput onKeyUp=account_managePhoneValidate() onkeypress="if (event.key==\'Enter\') account_managePhoneValidate(1)"></div></table>',"verifyPhone"),Q("d2phoneinput").focus(),account_managePhoneValidate()))}function isPhoneNumber(e){return e.match(/^\(?([0-9]{3,4})\)?[-. ]?([0-9]{3})[-. ]?([0-9]{4})$/)}function account_managePhoneValidate(e){var t=isPhoneNumber(Q("d2phoneinput").value);QE("idx_dlgOkButton",t),1==e&&t&&dialogclose(1)}function account_managePhoneCodeValidate(e){var t=6==Q("d2phoneCodeInput").value.length&&Q("d2phoneCodeInput").value.match(/[0-9]/);QE("idx_dlgOkButton",t),1==e&&t&&dialogclose(1)}function account_managePhoneConfirm(e,t){meshserver.send({action:"confirmPhone",code:Q("d2phoneCodeInput").value,cookie:t})}function account_managePhoneAdd(){0!=isPhoneNumber(Q("d2phoneinput").value)&&(QE("d2phoneinput",!1),meshserver.send({action:"verifyPhone",phone:Q("d2phoneinput").value}))}function account_managePhoneRemove(){Q("d2delPhone").checked&&meshserver.send({action:"removePhone"})}function account_managePhoneRemoveValidate(){QE("idx_dlgOkButton",Q("d2delPhone").checked)}function account_manageAuthEmail(){if(!xxdialogMode&&8388608&features){var e=1==userinfo.otpekey&&null!=userinfo.email&&1==userinfo.emailVerified;setDialogMode(2,"Autenticación de Correo Electrónico",1,function(){e!=Q("email2facheck").checked&&meshserver.send({action:"otpemail",enabled:Q("email2facheck").checked})},"Cuando esté habilitado, en cada inicio de sesión, se le dará la opción de recibir un token de inicio de sesión en su cuenta de correo electrónico para mayor seguridad.<br /><br /><label><input id=email2facheck type=checkbox "+(e?"checked":"")+"/>Habilitar autenticación de dos factores por correo electrónico.</label>")}}var d3filetreelinkpath,loclist={af:"Afrikaans",sq:"Albanés",ar:"Árabe (estándar)","ar-dz":"Árabe (Algeria)","ar-bh":"Árabe (Bahrain)","ar-eg":"Arabe (Egipto)","ar-iq":"Arabe (Irak)","ar-jo":"Árabe (Jordania)","ar-kw":"Árabe (Kuwait)","ar-lb":"Árabe (Líbano)","ar-ly":"Árabe (Libia)","ar-ma":"Árabe (Marruecos)","ar-om":"Árabe (Omán)","ar-qa":"Árabe (Qatar)","ar-sa":"Árabe (Arabia Saudita)","ar-sy":"Árabe (Siria)","ar-tn":"Árabe (Túnez)","ar-ae":"Árabe (U.A.E.)","ar-ye":"Árabe (Yemen)",an:"Aragonés",hy:"Armenio",as:"Asamés",ast:"Asturiano",az:"Azerbaiyano",eu:"Vasco",bg:"Búlgaro",be:"Bielorruso",bn:"Bengalí",bs:"Bosnio",br:"Bretón",my:"Birmano",ca:"Catalan",ch:"Chamorro",ce:"Checheno",zh:"Chino","zh-hk":"Chino (Hong Kong)","zh-cn":"Chino (PRC)","zh-sg":"Chino (Singapur)","zh-tw":"Chino (Taiwán)",cv:"Chuvash",co:"Corso",cr:"Cree",hr:"Croata",cs:"Checo",da:"Danés",nl:"Holandés (estándar)","nl-be":"Holandés (belga)",en:"Inglés","en-au":"Inglés (Australia)","en-bz":"Inglés (belice)","en-ca":"Inglés (Canadá)","en-ie":"Inglés (Irlanda)","en-jm":"Inglés (Jamaica)","en-nz":"Inglés (Nueva Zelanda)","en-ph":"Inglés (Filipinas)","en-za":"Inglés (Sudáfrica)","en-tt":"Inglés (Trinidad y Tobago)","en-gb":"Inglés (Reino Unido)","en-us":"Inglés (Estados Unidos)","en-zw":"Inglés (Zimbabwe)",eo:"Esperanto",et:"Estonio",fo:"Faeroese",fa:"Farsi (Persa)",fj:"Fiyiano",fi:"Finlandés",fr:"Francés (estándar)","fr-be":"Francés (Bélgica)","fr-ca":"Francés (Canadá)","fr-fr":"Francés (Francia)","fr-lu":"Francés (Luxemburgo)","fr-mc":"Francés (Mónaco)","fr-ch":"Francés (Suiza)",fy:"Friso",fur:"Friuliano",gd:"Gaélico (Escocés)","gd-ie":"Gaélico (Irlandés)",gl:"Gallego",ka:"Georgiano",de:"Alemán (Estándar)","de-at":"Alemán (Austria)","de-de":"Alemán (Alemania)","de-li":"Alemán (Liechtenstein)","de-lu":"Alemán (Luxemburgo)","de-ch":"Alemán (Suiza)",el:"Griego",gu:"Gujarati",ht:"Haitiano",he:"Hebreo",hi:"Hindi",hu:"Hungaro",is:"Islandés",id:"Indonesio",iu:"Inuktitut",ga:"Irlandesa",it:"Italiano (estándar)","it-ch":"Italiano (Suiza)",ja:"Japones",kn:"Kannada",ks:"Cachemira",kk:"Kazajo",km:"Jemer",ky:"Kirghiz",tlh:"Klingon",ko:"Coreano","ko-kp":"Coreano (Corea del Norte)","ko-kr":"Coreano (Corea del Sur)",la:"Latin",lv:"Letona",lt:"Lituano",lb:"Luxemburgués",mk:"Macedonio Macedonia",ms:"Malayo",ml:"Malayalam",mt:"Maltés",mi:"Maori",mr:"Marathi",mo:"Moldavo",nv:"Navajo",ng:"Ndonga",ne:"Nepali",no:"Noruego",nb:"Noruego (Bokmal)",nn:"Noruego (Nynorsk)",oc:"Occitano",or:"Oriya",om:"Oromo","fa-ir":"Persa / Irán",pl:"Polaco",pt:"Portugues","pt-br":"Portugues (Brazil)",pa:"Punjabi","pa-in":"Punjabi (India)","pa-pk":"Punjabi (Pakistan)",qu:"Quechua",rm:"Retorrománico",ro:"Rumano","ro-mo":"Rumano (Moldavia)",ru:"Ruso","ru-mo":"Ruso (Moldavia)",sz:"Sami (Lapona)",sg:"Sango",sa:"Sánscrito",sc:"Sardo",sd:"Sindhi",si:"Cingalés",sr:"Serbio",sk:"Eslovaco",sl:"Esloveno",so:"Somani",sb:"Sorbio",es:"Español","es-ar":"Español (Argentina)","es-bo":"Español (Bolivia)","es-cl":"Español (Chile)","es-co":"Español (Colombia)","es-cr":"Español (Costa Rica)","es-do":"Español (República Dominicana)","es-ec":"Español (Ecuador)","es-sv":"Español (El Salvador)","es-gt":"Español (Guatemala)","es-hn":"Español (Honduras)","es-mx":"Español (Mexico)","es-ni":"Español (Nicaragua)","es-pa":"Español (Panama)","es-py":"Español (Paraguay)","es-pe":"Español (Peru)","es-pr":"Español (Puerto Rico)","es-es":"Español (España)","es-uy":"Español (Uruguay)","es-ve":"Español (Venezuela)",sx:"Sutu",sw:"Swahili",sv:"Sueco","sv-fi":"Sueco (Finlandia)","sv-sv":"Sueco (Suecia)",ta:"Tamil",tt:"Tatar",te:"Teluga",th:"Tailandés",tig:"Tigre",ts:"Tsonga",tn:"Tswana",tr:"Turco",tk:"Turcomanos",uk:"Ucraniano",hsb:"Sorbio superior",ur:"Urdu",ve:"Venda",vi:"Vietnamita",vo:"Volapük",wa:"Valón",cy:"Galés",xh:"Xhosa",ji:"Yiddish",zu:"Zulu"},loclistex={"zh-chs":"Chino (simplificado)","zh-cht":"Chino tradicional)"};function account_showLocalizationSettings(){if(xxdialogMode)return!1;var e=getstore("loctag",0),t="",o='<select id=d2locselect style=width:180px><option value="*">Valor del navegador del usuario</option>';for(var n in loclist)o+='<option value="'+n+'"'+(e==n?" selected":"")+">"+n+" - "+loclist[n]+"</option>";if(o+="</select>",serverinfo.languages&&serverinfo.languages.length>0){t+="Cambiar el idioma requerirá una actualización de la página.<br /><br />";var i='<select id=d2langselect style=width:180px><option value="*">Valor del navegador del usuario</option>';for(var n in serverinfo.languages){var a=serverinfo.languages[n];i+='<option value="'+a+'"'+(userinfo.lang==a?" selected":"")+">"+a+" - "+(loclist[a]?loclist[a]:loclistex[a])+"</option>"}t+=addHtmlValue("Idioma",i+="</select>")}return t+=addHtmlValue("Fecha & Hora",o),4294967295==userinfo.siteadmin&&""==domain&&(t+='<br /><a rel="noreferrer noopener" target="_blank" href="translator.htm">Ayuda a traducir MeshCentral</a>'),setDialogMode(2,"Opciones de Hora e Idioma",3,account_showLocalizationSettingsEx,t),!1}function account_showLocalizationSettingsEx(){var e=Q("d2langselect").value;"*"==e&&null==userinfo.lang&&(e=userinfo.lang),e!=userinfo.lang&&meshserver.send({action:"changelang",lang:e});var t=getstore("loctag",0),o=Q("d2locselect").value;t!=o&&("*"!=o?args.locale=o:delete args.locale,putstore("loctag",args.locale),mainUpdate(4294967295))}function account_manageAuthApp(){!xxdialogMode&&4096&features&&(1==userinfo.otpsecret?account_removeOtp():account_addOtp())}function account_addOtp(){!xxdialogMode&&1!=userinfo.otpsecret&&4096&features&&(setDialogMode(2,"Aplicación de Autenticación",2,function(){meshserver.send({action:"otpauth-setup",secret:Q("d2optsecret").attributes.secret.value,token:Q("d2otpauthinput").value})},"<div id=d2optinfo>Cargando...</div>","otpauth-request"),meshserver.send({action:"otpauth-request"}))}function account_addOtpCheck(e){var t=6==Q("d2otpauthinput").value.length;QE("idx_dlgOkButton",t),e&&13==e.keyCode&&t&&dialogclose(1)}function account_removeOtp(){!xxdialogMode&&1==userinfo.otpsecret&&4096&features&&setDialogMode(2,"Aplicación de Autenticación",3,function(){meshserver.send({action:"otpauth-clear"})},"¿Confirmar la eliminación del inicio de sesión usando autenticación de 2 pasos?")}function account_manageOtp(e){2==xxdialogMode&&"otpauth-manage"==xxdialogTag&&dialogclose(0),xxdialogMode||!(4096&features)||1!=userinfo.otpsecret&&userinfo.otphkeys<1||meshserver.send({action:"otpauth-getpasswords",subaction:e})}function account_showVerifyEmail(){xxdialogMode||1==userinfo.emailVerified||1!=serverinfo.emailcheck||setDialogMode(2,"Verificación de Correo Electrónico",3,account_showVerifyEmailEx,"Haz clic en Aceptar para enviar un correo de verificación a:<br /><div style=padding:8px><b>"+EscapeHtml(userinfo.email)+"</b></div>Espera unos minutos para recibir la verificación.")}function account_showVerifyEmailEx(){meshserver.send({action:"verifyemail",email:userinfo.email})}function account_showChangeEmail(){xxdialogMode||(setDialogMode(2,"Cambio de Dirección de Correo Electrónico",3,account_changeEmail,addHtmlValue("Correo electrónico","<input id=dp3email style=width:170px maxlength=256 onchange=account_validateEmail() onkeyup=account_validateEmail(event) />")),null!=userinfo.email&&(Q("dp3email").value=userinfo.email),account_validateEmail(),Q("dp3email").focus())}function account_validateEmail(e,t){QE("idx_dlgOkButton",validateEmail(Q("dp3email").value)&&Q("dp3email").value!=userinfo.email),null!=e&&13==e.keyCode&&dialogclose(1)}function account_changeEmail(){meshserver.send({action:"changeemail",email:Q("dp3email").value})}function account_showDeleteAccount(){if(!xxdialogMode){var e="<form method=post><table style=margin-left:10px><input type=hidden name=action value=deleteaccount /><input type=hidden name=authcookie value="+authCookie+" /><tr>";e+="<td align=right>Contraseña:</td><td><input id=apassword1 type=password name=apassword1 autocomplete=off onchange=account_validateDeleteAccount() onkeyup=account_validateDeleteAccount() /></td>",e+="</tr><tr><td align=right>Contraseña:</td><td><input id=apassword2 type=password name=apassword2 autocomplete=off onchange=account_validateDeleteAccount() onkeyup=account_validateDeleteAccount() /></td>",e+="</tr></table><div style=padding:10px;margin-bottom:4px>",e+='<input id=account_dlgCancelButton type=button value="Cancelar" style=float:right;width:80px;margin-left:5px onclick=dialogclose(0)>',e+='<input id=account_dlgOkButton type=submit value="OK" style="float:right;width:80px" onclick=dialogclose(1)>',setDialogMode(2,"Eliminar Cuenta",0,null,e+="</div><br /></form>"),account_validateDeleteAccount(),Q("apassword1").focus()}}function account_showChangePassword(){if(xxdialogMode)return!1;var e="<table style=margin-left:10px>";if(e+="<tr><td align=right>"+nobreak("Contraseña anterior:")+"</td><td><input id=apassword0 type=password name=apassword0 autocomplete=off onchange=account_validateNewPassword() onkeyup=account_validateNewPassword() onkeydown=account_validateNewPassword() /> <b></b></td></tr>",e+="<tr><td align=right>"+nobreak("Nueva contraseña:")+"</td><td><input id=apassword1 type=password name=apassword1 autocomplete=off onchange=account_validateNewPassword() onkeyup=account_validateNewPassword() onkeydown=account_validateNewPassword() /> <b><span id=dxPassWarn></span></b></td></tr>",e+="<tr><td align=right>"+nobreak("Nueva contraseña:")+"</td><td><input id=apassword2 type=password name=apassword2 autocomplete=off onchange=account_validateNewPassword() onkeyup=account_validateNewPassword() onkeydown=account_validateNewPassword() /></td></tr>",65536&features&&(e+="<tr><td align=right>Pista de la contraseña:</td><td><input id=apasswordhint name=apasswordhint maxlength=250 type=text autocomplete=off onchange=account_validateNewPassword() onkeyup=account_validateNewPassword() onkeydown=account_validateNewPassword() /></td></tr>"),e+="</table>",passRequirements){var t=[],o=0;for(var n in passRequirements)"reset"!=n&&"hint"!=n&&(t.push(n+":"+passRequirements[n]),o++);o>0&&(e+="<br /><span style=font-size:x-small>"+format("Requerimientos: {0}.",t.join(", "))+"</span>")}return setDialogMode(2,"Cambiar Contraseña",3,account_showChangePasswordEx,e+="<br />"),Q("apassword0").focus(),account_validateNewPassword(),!1}function account_showChangePasswordEx(){if(Q("apassword1").value==Q("apassword2").value){var e={action:"changepassword",oldpass:Q("apassword0").value,newpass:Q("apassword1").value};65536&features&&(e.hint=Q("apasswordhint").value),meshserver.send(e)}}function account_createMesh(){if(!xxdialogMode)if(4294967295!=userinfo.siteadmin&&64&userinfo.siteadmin)setDialogMode(2,"Nuevo Grupo de Dispositivos",1,null,"Esta cuenta no tiene los permisos para crear un nuevo grupo de dispositivos.");else if(!0===userinfo.emailVerified||1!=serverinfo.emailcheck||4294967295==userinfo.siteadmin)if(!(262144&features)||1==userinfo.otpsecret||userinfo.otphkeys>0||userinfo.otpkeys>0||userinfo.otpduo>0||userinfo.otpdev>0||8388608&features&&1==userinfo.otpekey){var e=addHtmlValue("Nombre","<input id=dp3meshname style=width:170px maxlength=64 onchange=account_validateMeshCreate() onkeyup=account_validateMeshCreate() />");e+=addHtmlValue("Tipo","<div style=width:170px;margin:0;padding:0><select id=dp3meshtype style=width:100% onchange=account_validateMeshCreate() ><option value=2>Grupo Agentes de Software</option><option value=1>Sólo Intel&reg; AMT</option></select></div>"),setDialogMode(2,"Crear Grupo de Dispositivos",3,account_createMeshEx,e+=addHtmlValue("Descripción","<div style=width:170px;margin:0;padding:0><textarea id=dp3meshdesc maxlength=1024 style=width:100%;resize:none></textarea></div>")),account_validateMeshCreate(),Q("dp3meshname").focus()}else setDialogMode(2,"Seguridad de la Cuenta",1,null,'No se puede acceder a un dispositivo hasta que se habilite la autenticación de dos factores. Esto es necesario para mayor seguridad. Ve a la pestaña "Mi cuenta" y revisa la sección "Seguridad de la cuenta".');else setDialogMode(2,"Seguridad de la Cuenta",1,null,'No se puede acceder a un dispositivo hasta que se verifique una dirección de correo electrónico. Esto es necesario para la recuperación de contraseña. Ve a la pestaña "Mi cuenta" para cambiar y verificar una dirección de correo electrónico.')}function account_validateMeshCreate(){QE("idx_dlgOkButton",Q("dp3meshname").value.length>0)}function account_createMeshEx(e,t){meshserver.send({action:"createmesh",meshname:Q("dp3meshname").value,meshtype:parseInt(Q("dp3meshtype").value),desc:Q("dp3meshdesc").value})}function account_validateDeleteAccount(){QE("account_dlgOkButton",Q("apassword1").value.length>0&&Q("apassword1").value==Q("apassword2").value)}function account_validateNewPassword(){var e="",t=Q("apassword0").value.length>0&&Q("apassword1").value.length>0&&Q("apassword1").value==Q("apassword2").value&&Q("apassword0").value!=Q("apassword1").value;if(65536&features&&Q("apasswordhint").value==Q("apassword1").value&&(t=!1),""!=Q("apassword1").value)if(null==passRequirements||""==passRequirements){var o=checkPasswordStrength(Q("apassword1").value);e=o>=80?"<span style=color:green>Strong<span>":o>=60?"<span style=color:blue>&#9679;<span>":"<span style=color:red>&#9679;<span>"}else{0==checkPasswordRequirements(Q("apassword1").value,passRequirements)&&(t=!1,e="<span style=color:red>Política<span>")}QH("dxPassWarn",e),QE("idx_dlgOkButton",t)}function checkPasswordStrength(e){var t=0,o={},n=0,i={digits:/\d/.test(e),lower:/[a-z]/.test(e),upper:/[A-Z]/.test(e),nonWords:/\W/.test(e)};if(!e)return 0;for(var a=0;a<e.length;a++)o[e[a]]=(o[e[a]]||0)+1,t+=5/o[e[a]];for(var s in i)n+=1==i[s]?1:0;return parseInt(t+10*(n-1))}function checkPasswordRequirements(e,t){if(null==t||""==t||"object"!=typeof t)return!0;if(t.min&&e.length<t.min)return!1;if(t.max&&e.length>t.max)return!1;for(var o=0,n=0,i=0,a=0,s=0;s<e.length;s++)/\d/.test(e[s])&&o++,/[a-z]/.test(e[s])&&n++,/[A-Z]/.test(e[s])&&i++,/\W/.test(e[s])&&a++;return!(t.numeric&&o<t.numeric)&&(!(t.lower&&n<t.lower)&&(!(t.upper&&i<t.upper)&&!(t.nonalpha&&a<t.nonalpha)))}function updateMeshes(){var e="",t=0;for(i in meshes){t++;var o=GetMeshRights(meshes[i]),n="Permisos Parciales";4294967295==o?n="Administrador Total":0==o&&(n="Sin Permisos"),e+="<div style=cursor:pointer onclick=goForward('"+i+"')>",e+='<div style="float:left;margin-left:4px"><img src="/images/meshicon50.png" width=50 height=50 /></div>',e+="<div class=meshList>",e+="<div><div style=color:black;padding-left:12px;padding-top:2px><b>"+EscapeHtml(meshes[i].name)+"</b></div><div style=padding-left:12px;padding-top:3px;color:black>"+n+"</div></div>",e+="</div></div>"}QH("p3meshes",e),QV("p3noMeshFound",0==t)}function gotoMesh(e){!(262144&features)||1==userinfo.otpsecret||userinfo.otphkeys>0||userinfo.otpkeys>0||userinfo.otpduo>0||userinfo.otpdev>0||8388608&features&&1==userinfo.otpekey?(null==(currentMesh=meshes[e])&&goBack(),p20updateMesh(),go(20)):setDialogMode(2,"Seguridad de la Cuenta",1,null,'Unable to access this feature until two-factor authentication is enabled. This is required for extra security. Go to the "My Account" and look at the "Account Security" section.')}function d3init(){d3fileoptions={dialog:1,filter:"d3filter",files:"d3serverfiles",folderup:"p3FolderUp",currentFolder:"p3CurrentFolder",func:d3setActions},Q("d3localFile").value="",Q("d3localFile").accept=Q("d3filter").value,d3modechange()}function d3modechange(){var e=Q("d3uploadMode").value;QV("d3localmode",1==e),QV("d3servermode",2==e),1==e?d3setActions():d3updatefiles()}var filetreelinkpath,d3filetreelocation=[],d3fileoptions=null;function d3updatefiles(){if(null!=d3fileoptions&&("d3filter"!=d3fileoptions.filter||1!=Q("d3uploadMode").value)){for(var e="",t="",o=filetree,n=1,i="",a=[],s=[],r=document.getElementsByName("fc"),l=0;l<r.length;l++)r[l].checked&&s.push(r[l].value);for(var l in d3filetreelinkpath="",d3filetreelocation){if(null==o.f||null==o.f[d3filetreelocation[l]])break;if(a.push(d3filetreelocation[l]),1==n){var d=d3filetreelocation[l].split("/");window.location.origin+domainUrl+d[0]+"files/"+d[2],d3filetreelocation[l]===userinfo._id?d3filetreelinkpath+="self":d3filetreelinkpath+=d[0]+"/"+d[2]}else""!=d3filetreelinkpath&&(d3filetreelinkpath+="/"+d3filetreelocation[l],n>2&&"/"+d3filetreelocation[l]);i=(o=o.f[d3filetreelocation[l]]).n,n++}d3filetreelocation=a;var c=p5sort_files(o.f),u="";for(var l in d3fileoptions.filter&&(u=Q(d3fileoptions.filter).value),c){var p,m=c[l],g=m.n;if(3!=m.t||""==u||0!=m.nx.toLowerCase().endsWith(u)){p=EscapeHtml(g);var f="";null!=m.s&&(f=getFileSizeStr(m.s));var h="";if(3!=m.t){h='<div class=filelist file=999><span style=float:right title=""></span><span title="'+p+'"><div class=fileIcon'+m.t+' onclick=d3folderset("'+encodeURIComponentEx(m.nx)+'")></div>&nbsp;<a href=# style=cursor:pointer onclick=\'return d3folderset("'+encodeURIComponentEx(m.nx)+"\")'>"+p+"</a></span></div>"}else{var v=p;h='<div class=filelist file=3><input style=float:left name=fcx class=fcb type=checkbox onchange=d3setActions() value="'+m.nx+'">&nbsp;<span style=float:right>'+EscapeHtml(f)+'</span><span title="'+p+'"><div class=fileIcon'+m.t+"></div>"+v+"</span></div>"}m.t<3?e+=h:t+=h}}d3fileoptions.currentFolder&&QH(d3fileoptions.currentFolder,i),QH(d3fileoptions.files,e+t),QE(d3fileoptions.folderup,d3filetreelocation.length>0),d3fileoptions.func&&d3fileoptions.func()}}function d3folderset(e){return d3filetreelocation.push(decodeURIComponent(e)),d3updatefiles(),!1}function d3folderup(e){if(null==e)d3filetreelocation.pop();else for(;d3filetreelocation.length>e;)d3filetreelocation.pop();d3updatefiles()}function d3getFileSel(){for(var e=[],t=document.getElementsByName("fcx"),o=0;o<t.length;o++)t[o].checked&&e.push(t[o].value);return e}function d3setActions(){1==d3fileoptions.dialog?1==Q("d3uploadMode").value?QE("idx_dlgOkButton",Q("d3localFile").value.length>0):QE("idx_dlgOkButton",1==d3getFileSel().length):2==d3fileoptions.dialog&&QE("idx_dlgOkButton",1==d3getFileSel().length)}var sortorder,filetreelocation=[];function p5refreshFiles(){meshserver.send({action:"files"})}function updateFiles(){if(QV("MainMenuMyFiles",!(8&features)),!(8&features)){for(var e,t="",o="",n="<a style=cursor:pointer;color:black onclick=p5folderup(0)>Raíz</a>",i="Root",a=filetree,s=1,r=[],l=filetreelinkpath,d=[],c=document.getElementsByName("fc"),u=0;u<c.length;u++)c[u].checked&&d.push(c[u].value);for(var u in filetreelinkpath="",filetreelocation){if(null==a.f||null==a.f[filetreelocation[u]])break;if(r.push(filetreelocation[u]),i+=" / "+filetreelocation[u],1==s){var p=filetreelocation[u].split("/");e=window.location.origin+domainUrl+p[0]+"files/"+p[2],filetreelinkpath+=filetreelocation[u]}else""!=filetreelinkpath&&(filetreelinkpath+="/"+filetreelocation[u],s>2&&(e+="/"+filetreelocation[u]));a=a.f[filetreelocation[u]],n+=" / <a style=cursor:pointer;color:black onclick=p5folderup("+s+")>"+EscapeHtml(null!=a.n?a.n:filetreelocation[u])+"</a>",s++}filetreelocation=r;var m=i.toLowerCase().startsWith("root / "+userinfo._id+" / public"),g=p5sort_files(a.f);for(var u in g){var f,h=g[u],v=h.n;f=EscapeHtml(v);var k="";null!=h.s&&(k=getFileSizeStr(h.s));var y="";if(h.t<3||4==h.t){var b=1==h.t||4==h.t?p5getQuotabar(h):"";y="<div class=filelist file=999><input file=999 style=float:left name=fc class=fcb type=checkbox onchange=p5setActions() value='"+EscapeHtml(v)+"'>&nbsp;<span style=float:right;padding-right:4px>"+b+'</span><span title="'+f+'"><div class=fileIcon'+h.t+'></div><a style=cursor:pointer onclick=p5folderset("'+encodeURIComponent(h.nx)+'")>'+f+"</a></span></div>"}else{var x=f,w="";m&&(w=" (<a style=cursor:pointer onclick='p5showPublicLink(\""+e+"/"+h.nx+"\")'>Enlace</a>)"),h.s>0&&(x='<a rel="noreferrer noopener" target="_blank" href="downloadfile.ashx?link='+encodeURIComponent(filetreelinkpath+"/"+h.nx)+'">'+f+"</a>"+w),y="<div class=filelist file=3><input file=3 style=float:left name=fc class=fcb type=checkbox onchange=p5setActions() value='"+h.nx+"'>&nbsp;<span style=float:right;padding-right:4px>"+EscapeHtml(k)+'</span><span title="'+f+'"><div class=fileIcon'+h.t+"></div>"+x+"</span></div>"}h.t<3?t+=y:o+=y}if(QH("p5rightOfButtons",p5getQuotabar(a)),QH("p5files",t+o),QH("p5currentpath",n),QE("p5FolderUp",0!=filetreelocation.length),QV("p5PublicShare",m),l==filetreelinkpath){c=document.getElementsByName("fc");for(u=0;u<c.length;u++)c[u].checked=d.indexOf(c[u].value)>=0}p5setActions()}}function getNiceSize(e){return e<=0?"El almacenamiento se excede":e<2048?format("{0}b restantes",e):e<2097152?format("{0}k restantes",Math.round(e/1024)):e<2147483648?format("{0}m restantes",Math.round(e/1024/1024)):format("{0}g restantes",Math.round(e/1024/1024/1024))}function getNetworkSpeed(e){return e<=0?"0 bps":e<1e3?format("{0} bps",e):e<1e6?format("{0} Kbps",Math.round(e/1e3)):e<1e9?format("{0} Mbps",Math.round(e/1e6)):format("{0} Gbps",(e/1e9).toFixed(1))}function p5getQuotabar(e){for(;e.t>1&&4!=e.t;)e=e.parent;return 1!=e.t&&4!=e.t||null==e.maxbytes?"":getNiceSize(e.maxbytes-e.s)+" <progress style=height:10px;width:100px value="+e.s+" max="+e.maxbytes+" />"}function p5showPublicLink(e){setDialogMode(2,"Enlace Público",1,null,'<input type=text style=width:100% value="'+e+'" readonly />')}function p5sort_filename(e,t){return e.ln>t.ln?1*sortorder:e.ln<t.ln?-1*sortorder:0}function p5sort_timestamp(e,t){return e.d>t.d?1*sortorder:e.d<t.d?-1*sortorder:0}function p5sort_bysize(e,t){return e.s==t.s?p5sort_filename(e,t):(e.s-t.s)*sortorder}function p5sort_files(e){var t=[],o=Q("p5sortdropdown").value;for(var n in e)e[n].nx=n,null==e[n].n&&(e[n].n=n),e[n].ln=e[n].n.toLowerCase(),t.push(e[n]);return sortorder=1,o>3&&(sortorder=-1,o-=3),1==o?t.sort(p5sort_filename):2==o?t.sort(p5sort_bysize):3==o&&t.sort(p5sort_timestamp),t}function p5setActions(){var e=getFileSelCount(),t=getFileCount(),o=getFileSelCount(!1);QE("p5DeleteFileButton",e>0&&filetreelocation.length>0),QE("p5NewFolderButton",filetreelocation.length>0),QE("p5UploadButton",filetreelocation.length>0),QE("p5RenameFileButton",1==e&&filetreelocation.length>0),QE("p5SelectAllButton",t>0),Q("p5SelectAllButton").value=e>0?"Ninguno":"Todos",QE("p5CutButton",o>0&&e==o),QE("p5CopyButton",o>0&&e==o),QE("p5PasteButton",null!=p5clipboard&&p5clipboard.length>0&&filetreelocation.length>0)}function getFileSelCount(e){for(var t=0,o=document.getElementsByName("fc"),n=0;n<o.length;n++)!o[n].checked||0==e&&"3"!=o[n].attributes.file.value||t++;return t}function getFileSelDirCount(){for(var e=0,t=document.getElementsByName("fc"),o=0;o<t.length;o++)t[o].checked&&"999"==t[o].attributes.file.value&&e++;return e}function getFileCount(){return document.getElementsByName("fc").length}function p5selectallfile(){for(var e=0==getFileSelCount(),t=document.getElementsByName("fc"),o=0;o<t.length;o++)t[o].checked=e;p5setActions()}function setupBackPointers(e){if(null!=e.f){var t=0,o=0;for(var n in e.f)setupBackPointers(e.f[n]),e.f[n].parent=e,e.f[n].s&&(t+=e.f[n].s),e.f[n].c&&(o+=e.f[n].c),3==e.f[n].t&&o++;e.s=t,e.c=o}return e}function getFileSizeStr(e){return 1==e?"1 byte":format("{0} bytes",e)}function p5folderup(e){if(null==e)filetreelocation.pop();else for(;filetreelocation.length>e;)filetreelocation.pop();return updateFiles(),!1}function p5folderset(e){return filetreelocation.push(decodeURIComponent(e)),updateFiles(),!1}function p5createfolder(){setDialogMode(2,"Nueva Carpeta",3,p5createfolderEx,"<input type=text id=p5renameinput maxlength=64 onkeyup=p5fileNameCheck(event) style=width:100% />"),focusTextBox("p5renameinput"),p5fileNameCheck()}function p5createfolderEx(){meshserver.send({action:"fileoperation",fileop:"createfolder",path:filetreelocation,newfolder:Q("p5renameinput").value})}function p5deletefile(){var e=getFileSelCount(),t=getFileSelDirCount()>0?"<br /><br /><label><input type=checkbox id=p5recdeleteinput>Eliminado recursivo</label><br>":"<input type=checkbox id=p5recdeleteinput style='display:none'>";setDialogMode(2,"Eliminar",3,p5deletefileEx,e>1?format("¿Eliminar {0} elementos seleccionados?",e)+t:"¿Eliminar elemento seleccionado?"+t)}function p5deletefileEx(){for(var e=[],t=document.getElementsByName("fc"),o=0;o<t.length;o++)t[o].checked&&e.push(t[o].value);meshserver.send({action:"fileoperation",fileop:"delete",path:filetreelocation,delfiles:e,rec:Q("p5recdeleteinput").checked})}function p5renamefile(){for(var e,t=document.getElementsByName("fc"),o=0;o<t.length;o++)t[o].checked&&(e=t[o].value);setDialogMode(2,"Renombrar",3,p5renamefileEx,'<input type=text id=p5renameinput maxlength=64 onkeyup=p5fileNameCheck(event) style=width:100% value="'+e+'" />',{action:"fileoperation",fileop:"rename",path:filetreelocation,oldname:e}),focusTextBox("p5renameinput"),p5fileNameCheck()}function p5renamefileEx(e,t){t.newname=Q("p5renameinput").value,meshserver.send(t)}function p5fileNameCheck(e){var t=isFilenameValid(Q("p5renameinput").value);QE("idx_dlgOkButton",t),1==t&&e&&13==e.keyCode&&dialogclose(1)}var isFilenameValid=function(){var e=/^[^\\/:\*\?"<>\|]+$/,t=/^\./,o=/^(nul|prn|con|lpt[0-9]|com[0-9])(\.|$)/i;return function(n){return e.test(n)&&!t.test(n)&&!o.test(n)&&"."!=n[0]}}();function p5uploadFile(){setDialogMode(2,"Cargar Archivo",3,p5uploadFileEx,'<form method=post enctype=multipart/form-data action=uploadfile.ashx target=fileUploadFrame><input type=text name=link style=display:none id=p5uploadpath value="'+encodeURIComponent(filetreelinkpath)+'" /><input type=file name=files id=p5uploadinput style=width:100% multiple=multiple onchange="updateUploadDialogOk(\'p5uploadinput\')" /><input type=hidden name=authCookie value='+authCookie+" /><input type=submit id=p5loginSubmit style=display:none /></form>"),updateUploadDialogOk("p5uploadinput")}function p5uploadFileEx(){Q("p5loginSubmit").click()}function updateUploadDialogOk(e){QE("idx_dlgOkButton",""!=Q(e).value)}var p5clipboard=null,p5clipboardFolder=null,p5clipboardCut=0;function p5copyFile(e){var t=document.getElementsByName("fc");p5clipboard=[],p5clipboardCut=e,p5clipboardFolder=Clone(filetreelocation);for(var o=0;o<t.length;o++)t[o].checked&&"3"==t[o].attributes.file.value&&p5clipboard.push(t[o].value);p5updateClipview()}function p5pasteFile(){var e="";null!=p5clipboard&&p5clipboard.length>0&&(e=format("¿Confirmar {0} de {1} entrada{2} a esta ubicación?",0==p5clipboardCut?"copy":"move",p5clipboard.length,p5clipboard.length>1?"s":"")),setDialogMode(2,"Pegar",3,p5pasteFileEx,e)}function p5pasteFileEx(){meshserver.send({action:"fileoperation",fileop:0==p5clipboardCut?"copy":"move",scpath:p5clipboardFolder,path:filetreelocation,names:p5clipboard}),p5folderup(999),1==p5clipboardCut&&(p5clipboard=null,p5clipboardFolder=null,p5clipboardCut=0,p5updateClipview())}function p5updateClipview(){var e="";null!=p5clipboard&&p5clipboard.length>0&&(e=format("Manteniendo {0} entrada{1} para {2}",p5clipboard.length,p5clipboard.length>1?"s":"",0==p5clipboardCut?"copiar":"mover")+', <a href=# onclick="return p5clearClip()" style=cursor:pointer>Eliminar</a>.'),QH("p5bottomstatus",e),p5setActions()}function p5clearClip(){return p5clipboard=null,p5clipboardFolder=null,p5clipboardCut=0,p5updateClipview(),!1}function p5fileDragDrop(e){if(haltEvent(e),QV("bigfail",!1),QV("bigok",!1),null!=e.dataTransfer&&0!=e.dataTransfer.files.length&&0!=filetreelocation.length)for(var t=[],o=[],n=[],i=[],a=e.dataTransfer.files.length,s=0;s<e.dataTransfer.files.length;s++){var r=new FileReader,l=e.dataTransfer.files[s];t.push(l.name),o.push(l.size),n.push(l.type),r.onload=function(e){i.push(e.target.result),0==--a&&(Q("p5fileDragName").value=t.join("*"),Q("p5fileDragSize").value=o.join("*"),Q("p5fileDragType").value=n.join("*"),Q("p5fileDragData").value=i.join("*"),Q("p5fileDragLink").value=encodeURIComponent(filetreelinkpath),Q("p5loginSubmit2").click())},r.readAsDataURL(l)}}var p5dragtimer=null;function p5fileDragOver(e){haltEvent(e),null!=p5dragtimer&&(clearTimeout(p5dragtimer),p5dragtimer=null);var t=!0;0==filetreelocation.length&&(t=!1),QV("bigok",t),QV("bigfail",!t)}function p5fileDragLeave(e){haltEvent(e),"p5filetable"!=e.target.id?(QV("bigfail",!1),QV("bigok",!1)):p5dragtimer=setTimeout("QV('bigfail',false);QV('bigok',false);p5dragtimer=null;",200)}function onRealNameCheckBox(){putstore("showRealNames",(showRealNames=Q("RealNameCheckBox").checked)?1:0),mainUpdate(5)}function onOnlineCheckBox(e){putstore("onlineOnly",Q("OnlineCheckBox").checked?1:0),onSearchInputChanged()}function updateDevicePageState(){if(null==devicePagingState||devicePagingState.total<=devicePagingState.limit)QV("devViewPageState",!1),QV("devViewPageButton2",!1),QV("devViewPageButton3",!1);else{var e=Math.floor((devicePagingState.skip+devicePagingState.limit)/devicePagingState.limit),t=Math.ceil(devicePagingState.total/devicePagingState.limit);QV("devViewPageState",!0),QV("devViewPageButton2",!0),QV("devViewPageButton3",!0),QH("devViewPageState",e+"/"+t)}}function onDeviceViewPageChange(e){if(null!=devicePagingState){var t=Math.floor((devicePagingState.skip+devicePagingState.limit)/devicePagingState.limit),o=Math.ceil(devicePagingState.total/devicePagingState.limit);switch(e){case 2:t>1&&meshserver.send({action:"nodes",skip:(t-2)*devicePagingState.limit});break;case 3:t<o&&meshserver.send({action:"nodes",skip:t*devicePagingState.limit})}}}function onDeviceSearchChanged(e){setTimeout(function(){onSearchInputChanged()},10)}function clearSearchInput(){Q("SearchInput").value="",Q("OnlineCheckBox").checked=!1,onSearchInputChanged()}function onSearchInputChanged(){var e=Q("SearchInput").value.toLowerCase().trim();putstore("_search",Q("SearchInput").value),QS("SearchInput")["background-color"]=""==e?"#FFFFFF":"#FDFFBE";var t=e.startsWith("!");t&&(e=e.substring(1));var o=Q("SearchInput").value.trim();t&&(o=o.substring(1));var n=null,i=null,a=null,s=null,r=null,l=null,d=null,c=null;if(e.startsWith("user:".toLowerCase())?n=e.substring(5):e.startsWith("u:".toLowerCase())?n=e.substring(2):e.startsWith("ip:".toLowerCase())?i=e.substring(3):e.startsWith("group:".toLowerCase())?a=e.substring(6):e.startsWith("g:".toLowerCase())?a=e.substring(2):e.startsWith("tag:".toLowerCase())?s=o.substring(4):e.startsWith("t:".toLowerCase())?s=o.substring(2):e.startsWith("atag:".toLowerCase())?r=o.substring(5).toLowerCase():e.startsWith("a:".toLowerCase())?r=o.substring(2).toLowerCase():e.startsWith("os:".toLowerCase())?d=o.substring(3).toLowerCase():e.startsWith("amt:".toLowerCase())?c=o.substring(4).toLowerCase():"wsc:ok"==e?l=1:"wsc:noav"==e?l=2:"wsc:noupdate"==e?l=3:"wsc:nofirewall"==e?l=4:"wsc:any"==e&&(l=5),""==e)for(var u in nodes)nodes[u].v=!0;else if(null!=i)for(var u in nodes)nodes[u].v=null!=nodes[u].ip&&nodes[u].ip.indexOf(i)>=0;else if(null!=a)for(var u in nodes)nodes[u].v=meshes[nodes[u].meshid].name.toLowerCase().indexOf(a)>=0;else if(null!=s)for(var u in nodes)nodes[u].v=null==nodes[u].tags&&""==s||null!=nodes[u].tags&&nodes[u].tags.indexOf(s)>=0;else if(null!=r)for(var u in nodes)nodes[u].v=null!=nodes[u].agent&&null==nodes[u].agent.tag&&""==r||null!=nodes[u].agent&&null!=nodes[u].agent.tag&&nodes[u].agent.tag.toLowerCase().indexOf(r)>=0;else if(null!=n){for(var u in nodes)if(nodes[u].v=!1,nodes[u].users&&nodes[u].users.length>0)for(var p in nodes[u].users)nodes[u].users[p].toLowerCase().indexOf(n)>=0&&(nodes[u].v=!0)}else if(null!=d)for(var u in nodes)nodes[u].v=null!=nodes[u].osdesc&&nodes[u].osdesc.toLowerCase().indexOf(d)>=0;else if(null!=c)for(var u in nodes)nodes[u].v=null!=nodes[u].intelamt&&(""==c||nodes[u].intelamt.state==c);else if(null!=l)for(var u in nodes)nodes[u].v=!1,nodes[u].wsc&&(1==l&&"OK"==nodes[u].wsc.antiVirus&&"OK"==nodes[u].wsc.autoUpdate&&"OK"==nodes[u].wsc.firewall?nodes[u].v=!0:(2!=l&&5!=l||"OK"==nodes[u].wsc.antiVirus)&&(3!=l&&5!=l||"OK"==nodes[u].wsc.autoUpdate)&&(4!=l&&5!=l||"OK"==nodes[u].wsc.firewall)||(nodes[u].v=!0));else if("*"==e)for(var u in nodes)nodes[u].v=1==stars[nodes[u]._id];else try{var m=e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&"),g=new RegExp(m);for(var u in nodes)nodes[u].v=32768&features2?268435456&features2?g.test(nodes[u].name.toLowerCase())||g.test(meshes[nodes[u].meshid].name.toLowerCase())||null!=nodes[u].rnamel&&g.test(nodes[u].rnamel.toLowerCase()):g.test(nodes[u].name.toLowerCase())||null!=nodes[u].rnamel&&g.test(nodes[u].rnamel.toLowerCase()):268435456&features2?showRealNames?null!=nodes[u].rnamel&&g.test(nodes[u].rnamel.toLowerCase())||g.test(meshes[nodes[u].meshid].name.toLowerCase()):g.test(nodes[u].name.toLowerCase())||g.test(meshes[nodes[u].meshid].name.toLowerCase()):showRealNames?null!=nodes[u].rnamel&&g.test(nodes[u].rnamel.toLowerCase()):g.test(nodes[u].name.toLowerCase())}catch(e){for(var u in nodes)nodes[u].v=!0}if(t)for(var u in nodes)nodes[u].v=!nodes[u].v;if(Q("OnlineCheckBox").checked)for(var u in nodes)null!=nodes[u].conn&&0!=nodes[u].conn||(nodes[u].v=!1);mainUpdate(4)}var gotKeyPressEvent=!1;function ondeskkeypress(e,t){if(setSessionActivity(),desktop&&!xxdialogMode&&10==xxcurrentView&&1==currentDevicePanel){if(gotKeyPressEvent=!0,Q("softKeyboard").value="",null!=currentNode){var o=GetMeshRights(currentNode.meshid);if(0==!(8192&features2||4294967295!=o&&(!(8&o)||256&o)))return!1;if(1==!(4294967295==o||!(8&o)||256&o||!(4096&o))&&(1==e.altKey||1==e.ctrlKey||e.keyCode<32&&8!=e.keyCode&&13!=e.keyCode||e.keyCode>90))return!1}return desktop.m.handleKeys(e)}if(terminal&&!xxdialogMode&&10==xxcurrentView&&5==currentDevicePanel&&1!==t){if(1==e.altKey)return!0;gotKeyPressEvent=!0,Q("softKeyboard").value="";var n=0;return 0!=e.charCode?n=e.charCode:0!=e.keyCode&&(n=e.keyCode),0!=n&&("sshterminalrelay.ashx"==terminal.urlname?terminal.socket.send("~"+String.fromCharCode(n)):terminal.sendText(String.fromCharCode(n))),!1}}function ondeskkeydown(e,t){if(setSessionActivity(),desktop&&!xxdialogMode&&10==xxcurrentView&&1==currentDevicePanel){if(gotKeyPressEvent=!1,Q("softKeyboard").value="",null!=currentNode){var o=GetMeshRights(currentNode.meshid);if(0==!(8192&features2||4294967295!=o&&(!(8&o)||256&o)))return!1;if(1==!(4294967295==o||!(8&o)||256&o||!(4096&o))&&(1==e.altKey||1==e.ctrlKey||e.keyCode<32&&8!=e.keyCode&&13!=e.keyCode||e.keyCode>90))return!1}return desktop.m.handleKeyDown(e)}if(terminal&&!xxdialogMode&&10==xxcurrentView&&5==currentDevicePanel&&1!==t){if(1==e.altKey)return!0;Q("softKeyboard").value="",gotKeyPressEvent=!1;var n=0;0!=e.charCode?n=e.charCode:0!=e.keyCode&&(n=e.keyCode),8==n?"sshterminalrelay.ashx"==terminal.urlname?terminal.socket.send("~"+String.fromCharCode(n)):terminal.sendText(String.fromCharCode(n)):e.ctrlKey&&n>=64&&n<=95&&("sshterminalrelay.ashx"==terminal.urlname?terminal.socket.send("~"+String.fromCharCode(n-64)):terminal.sendText(String.fromCharCode(n-64)))}}function ondeskkeyup(e,t){if(setSessionActivity(),desktop&&!xxdialogMode&&10==xxcurrentView&&1==currentDevicePanel){var o=Q("softKeyboard").value;if(Q("softKeyboard").value="",null!=currentNode){var n=GetMeshRights(currentNode.meshid);if(0==!(8192&features2||4294967295!=n&&(!(8&n)||256&n)))return!1;if(1==!(4294967295==n||!(8&n)||256&n||!(4096&n))&&(1==e.altKey||1==e.ctrlKey||e.keyCode<32&&8!=e.keyCode&&13!=e.keyCode||e.keyCode>90))return!1}if(!(0==gotKeyPressEvent&&o.length>0&&desktop.m.SendKeyUnicode))return desktop.m.handleKeyUp(e);var i=o[o.length-1].charCodeAt(0);desktop.m.SendKeyUnicode(desktop.m.KeyAction.DOWN,i),desktop.m.SendKeyUnicode(desktop.m.KeyAction.UP,i)}if(terminal&&!xxdialogMode&&10==xxcurrentView&&5==currentDevicePanel&&0==gotKeyPressEvent&&1!==t){if(1==e.altKey)return!0;o=Q("softKeyboard").value;return Q("softKeyboard").value="","sshterminalrelay.ashx"==terminal.urlname?terminal.socket.send("~"+o):o&&terminal.sendText(o),!1}}var deviceHeaderCount,sort=0,deviceHeaderId=0,deviceHeaders={},showRealNames=!1,deviceHeaderTotal=0,deviceHeadersTitles=(deviceHeaders={},{});function updateDevices(){var e="",t=0,o=null,n=0,i={};for(var a in deviceHeaderId=0,deviceHeaderCount={},deviceHeaderTotal=0,deviceHeaders={},deviceHeadersTitles={},0==sort?nodes.sort(meshSort):1==sort?nodes.sort(powerSort):2==sort&&(1==showRealNames?nodes.sort(deviceHostSort):nodes.sort(deviceSort)),nodes)if(0!=nodes[a].v){if(0==sort){if(nodes.sort(meshSort),(meshes[nodes[a].meshid]?nodes[a].meshid:"*")!=o){deviceHeaderSet();var s="";null!=meshes[nodes[a].meshid]&&1==meshes[nodes[a].meshid].mtype&&(s="<span style=color:lightgray>, solo Intel&reg; AMT</span>"),null!=o&&(2==t&&(e+="<td><div style=width:301px></div></td>"),""!=e&&(e+="</tr></table>")),e+="<div class=DevSt style=padding-top:4px><span style=float:right>",meshes[nodes[a].meshid]?(e+='</span><span id=MxMESH style=cursor:pointer onclick=goForward("'+nodes[a].meshid+'")>'+EscapeHtml(meshes[nodes[a].meshid].name)+"</span>"+s+"<span id=DevxHeader"+deviceHeaderId+" style=color:lightgray></span></div>",o=nodes[a].meshid):(e+="</span><span id=MxMESH><i>Dispositivos Individuales</i></span><span id=DevxHeader"+deviceHeaderId+" style=color:lightgray></span></div>",o="*"),i[o]=1,t=0}}else 1==sort?nodes[a].pwr!==o&&(deviceHeaderSet(),null!==o&&(2==t&&(e+="<td><div style=width:301px></div></td>"),""!=e&&(e+="</tr></table>")),e+="<div class=DevSt style=width:100%;padding-top:4px><span>"+PowerStateStr2(nodes[a].pwr)+"</span><span id=DevxHeader"+deviceHeaderId+" style=color:lightgray></span></div>",o=nodes[a].pwr,t=0):2==sort&&null==o&&(o="1");n++,e+="<div name=xxdevice onclick=goForward('"+nodes[a]._id+"') class=devList1 id='"+nodes[a]._id+"'></div>",deviceHeaderTotal++,void 0===deviceHeaderCount[nodes[a].state]?deviceHeaderCount[nodes[a].state]=1:deviceHeaderCount[nodes[a].state]++}if(""==e&&nodes.length>0&&""!=Q("SearchInput").value&&(e='<div style="margin:30px">No hay dispositivos que coincidan con esta búsqueda.</div>'),0==sort&&""==Q("SearchInput").value)for(var a in meshes){var r=meshes[a];null==i[r._id]&&IsMeshViewable(r)&&(""!=o&&""!=e&&(e+="</tr></table>"),e+="<div><div colspan=3 class=DevSt><span style=float:right>",e+='</span><span id=MxMESH style=cursor:pointer onclick=goForward("'+r._id+'")>'+EscapeHtml(r.name)+"</span></div>",1==r.mtype&&(e+="<div style=padding:10px><i>No hay dispositivos Intel&reg; AMT en este grupo"),r.mtype>1&&(e+="<div style=padding:10px><i>No hay dispositivos en este grupo"),e+=".</i></div></div>",o=r._id,n++)}for(var a in 0==n?""!=Q("SearchInput").value||Q("OnlineCheckBox").checked?QH("xdevices",'<div style="margin-top:50px;text-align:center"><span style="font-size:30px">Sin dispositivos</span><br /><br />No hay dispositivos que coincidan con esta búsqueda. <a onclick=clearSearchInput() style=cursor:pointer>Borrar filtro de búsqueda</a></div>'):QH("xdevices",'<div style="margin-top:50px;text-align:center"><span style="font-size:30px">Sin dispositivos</span><br /><br />Usa la versión de escritorio de este sitio web para agregar dispositivos.</div>'):QH("xdevices",e),deviceHeaderSet(),deviceHeaders)QH(a,deviceHeaders[a]);for(var a in deviceHeadersTitles)Q(a).title=deviceHeadersTitles[a];onDevicesScrollEx()}var onDevicesTouchActive=!1,onDevicesScrollnagleTimer=null;function onDevicesScroll(){null==onDevicesScrollnagleTimer&&(onDevicesScrollnagleTimer=setTimeout(onDevicesScrollEx,250))}function onDeviceTouch(e){onDevicesTouchActive!=e&&(onDevicesTouchActive=e,0==e&&onDevicesScrollEx())}function onDevicesScrollEx(){var e=document.getElementsByName("xxdevice");onDevicesScrollnagleTimer=null;for(var t=0;t<e.length;t++){var o=getNodeFromId(e[t].id);if(null==o)break;updateDeviceViewHtml(e[t],o)}}function updateDeviceViewDevice(e){if(null!=e){var t=Q(e._id);null!=t&&""!=t.innerHTML&&updateDeviceViewHtml(t,e)}}function updateDeviceViewHtml(e,t){var o=Q("xdevices").scrollTop-250,n=Q("xdevices").scrollTop+Q("xdevices").clientHeight+250;if(e.offsetTop>=o&&e.offsetTop<n){var i=EscapeHtml(t.name);0==i.length&&(i="<i>Ninguno</i>"),null!=t.rname&&t.rname.length>0&&(i+=" / "+EscapeHtml(t.rname));var a=EscapeHtml(t.name);1==showRealNames&&null!=t.rname&&(a=EscapeHtml(t.rname)),0==a.length&&(a="<i>Ninguno</i>");var s="",r="";if(1==stars[t._id]&&(r+="<img class=deviceNotifyDotSub src=images/icon-star-notify-16.png width=16 height=16>"),null!=t.sessions&&(null!=t.sessions.msg&&(r+='<div style="width:16;height:16" class=deviceNotifyDotSub>'+Object.keys(t.sessions.msg).length+"</div>"),null==t.sessions.kvm&&null==t.sessions.terminal&&null==t.sessions.files&&null==t.sessions.tcp&&null==t.sessions.udp||(r+="<img class=deviceNotifyDotSub src=images/icon-relay-notify.png width=16 height=16>"),null!=t.sessions.help&&(r+="<img class=deviceNotifyDotSub src=images/icon-help-notify-16.png width=16 height=16>"),null!=t.sessions.battery)){var l=t.sessions.battery,d="";"ac"==l.state?d="El dispositivo está enchufado":"dc"==l.state&&(d="El dispositivo funciona con batería");var c="",u=-1;"number"==typeof l.level&&l.level>=0&&l.level<=100&&(c=l.level+"%",(u=Math.floor((l.level+10)/25)+1)>5&&(lvl=5),"ac"==l.state&&(100==l.level?u=11:u+=5)),u>0&&(s+='<div class="deviceBatterySmall deviceBatterySmall'+u+'" title="'+(null!=d?d+", "+c:c)+'"></div>')}""!=r&&(s+="<div class=deviceNotifyDot>"+r+"</div>");var p=t.icon,m=NodeStateStr(t);t.conn&&0!=t.conn||3==t.mtype||(p+=" gray"),e.innerHTML="<div>"+s+'<div class="i'+p+' devList2"></div><div class=devList3><div class=devList4><b>'+a+"</b></div><div class=devList5>"+m+"</div></div></div>"}else e.innerHTML=""}function showDeviceHelpRequests(e,t,o){if(o&&haltEvent(o),xxdialogMode&&!t)return!1;var n=null,i="";if(null==(n=null==e?currentNode:getNodeFromId(e))||null==n.sessions)return setDialogMode(0),!1;if(null!=n.sessions.help)for(var a in n.sessions.help)i+="<div style=margin-bottom:6px><b>"+EscapeHtml(a)+"</b></div><div style=margin-bottom:6px>"+EscapeHtml(n.sessions.help[a])+"</div>";return""!=i?setDialogMode(2,"Solicitudes de Ayuda - "+EscapeHtml(n.name),1,null,i,"HELPREQ-"+n._id):setDialogMode(0),!1}function showDeviceSessions(e,t,o){if(!(!0!==t&&xxdialogMode||null==currentNode)){var n=currentNode,i="";for(var a in n.sessions)if("kvm"==a&&null==n.sessions.multidesk)for(var s in i+="<u>Escritorio Remoto</u>",n.sessions.kvm)if(s.startsWith("user/")){var r="";s!=userinfo._id&&4294967295!=GetNodeRights(n)||(r=' <a href=# onclick=\'return endDeviceSession("kvm", "'+encodeURIComponentEx(n._id)+'", "'+encodeURIComponentEx(s)+'")\' title="Desconectar esta sesión" style=cursor:pointer><img src=images/trash.png border=0 height=10 width=10></a>'),i+=addHtmlValue4(getUserName(s),(1==n.sessions.kvm[s]?"1 sesión":nobreak(format("{0} sesiones",n.sessions.kvm[s])))+r)}else"busy"==s&&(i+=addHtmlValue2("El dispositivo está ocupado",1==n.sessions.kvm[s]?"1 sesión":nobreak(format("{0} sesiones",n.sessions.kvm[s]))));else if("multidesk"==a)for(var s in i+="<u>Escritorio Remoto</u>",n.sessions.multidesk){r="";s!=userinfo._id&&4294967295!=GetNodeRights(n)||(r=' <a href=# onclick=\'return endDeviceSession("multidesk", "'+encodeURIComponentEx(n._id)+'", "'+encodeURIComponentEx(s)+'")\' title="Desconectar esta sesión" style=cursor:pointer><img src=images/trash.png border=0 height=10 width=10></a>'),i+=addHtmlValue4(getUserName(s),(1==n.sessions.multidesk[s]?"1 sesión":nobreak(format("{0} sesiones",n.sessions.multidesk[s])))+r)}else if("terminal"==a)for(var s in i+="<u>Terminal</u>",n.sessions.terminal){r="";s!=userinfo._id&&4294967295!=GetNodeRights(n)||(r=' <a href=# onclick=\'return endDeviceSession("terminal", "'+encodeURIComponentEx(n._id)+'", "'+encodeURIComponentEx(s)+'")\' title="Desconectar esta sesión" style=cursor:pointer><img src=images/trash.png border=0 height=10 width=10></a>'),i+=addHtmlValue4(getUserName(s),(1==n.sessions.terminal[s]?"1 sesión":nobreak(format("{0} sesiones",n.sessions.terminal[s])))+r)}else if("files"==a)for(var s in i+="<u>Archivos</u>",n.sessions.files){r="";s!=userinfo._id&&4294967295!=GetNodeRights(n)||(r=' <a href=# onclick=\'return endDeviceSession("files", "'+encodeURIComponentEx(n._id)+'", "'+encodeURIComponentEx(s)+'")\' title="Desconectar esta sesión" style=cursor:pointer><img src=images/trash.png border=0 height=10 width=10></a>'),i+=addHtmlValue4(getUserName(s),(1==n.sessions.files[s]?"1 sesión":nobreak(format("{0} sesiones",n.sessions.files[s])))+r)}else if("tcp"==a)for(var s in i+="<u>Enrutamiento TCP</u>",n.sessions.tcp){r="";s!=userinfo._id&&4294967295!=GetNodeRights(n)||(r=' <a href=# onclick=\'return endDeviceSession("tcp", "'+encodeURIComponentEx(n._id)+'", "'+encodeURIComponentEx(s)+'")\' title="Desconectar esta sesión" style=cursor:pointer><img src=images/trash.png border=0 height=10 width=10></a>'),i+=addHtmlValue4(getUserName(s),(1==n.sessions.tcp[s]?"1 sesión":nobreak(format("{0} sesiones",n.sessions.tcp[s])))+r)}else if("udp"==a)for(var s in i+="<u>Enrutamiento UDP</u>",n.sessions.udp){r="";s!=userinfo._id&&4294967295!=GetNodeRights(n)||(r=' <a href=# onclick=\'return endDeviceSession("udp", "'+encodeURIComponentEx(n._id)+'", "'+encodeURIComponentEx(s)+'")\' title="Desconectar esta sesión" style=cursor:pointer><img src=images/trash.png border=0 height=10 width=10></a>'),i+=addHtmlValue4(getUserName(s),(1==n.sessions.udp[s]?"1 sesión":nobreak(format("{0} sesiones",n.sessions.udp[s])))+r)}""!=i?setDialogMode(2,"Sesiones - "+EscapeHtml(n.name),1,null,i,"SESSIONS-"+n._id):setDialogMode(0)}}function endDeviceSession(e,t,o){var n=decodeURIComponent(o).split("/"),i=n[0]+"/"+n[1]+"/"+n[2],a=null;4==n.length&&n[3].startsWith("guest:")&&(a=atob(n[3].substring(6))),"multidesk"==e?meshserver.send({action:"endDesktopMultiplex",nodeid:decodeURIComponent(t),xuserid:i,guestname:a,guestname:a}):meshserver.send({action:"msg",type:"endtunnel",nodeid:decodeURIComponent(t),xuserid:i,guestname:a,guestname:a,protocol:e})}function showDeviceMessages(e,t,o){if(o&&haltEvent(o),xxdialogMode&&!t)return!1;var n=null,i="<div style=max-height:200px;width:100%;overflow-y:auto;overflow-x:hidden>",a=0;if(null==(n=null==e?currentNode:getNodeFromId(e))||null==n.sessions||null==n.sessions.msg)return setDialogMode(0),!1;for(var s in n.sessions.msg){var r=s,l=5;"string"==typeof n.sessions.msg[s].msg&&(r=n.sessions.msg[s].msg),"number"==typeof n.sessions.msg[s].icon&&(l=n.sessions.msg[s].icon),(l<1||l>9)&&(l=5),i+="<table style=width:100%><td style=width:24px><div class=NotifyIconSmall"+l+'></div><td><div style="border-radius:5px;background-color:#BBB;width:calc(100% - 18px);padding:8px">'+EscapeHtml(r)+"</div></table>",a++}return i+="</div>",a>0&&setDialogMode(2,"Mensajes del Agente - "+EscapeHtml(n.name),1,null,i,"MESSAGES-"+n._id),!1}var powerStatetable=["","Encendido","Suspender","Suspender","Suspender","Hibernando","Apagar","Presente","Apagado"],powerStateStrings=["","Encendido","Suspendiendo","Suspendiendo","Estado de Reposo","Hibernando","Soft-Off","Presente","Apagado"],powerStateStrings2=["","El dispositivo está encendido","El dispositivo está en estado de suspensión (S1)","El dispositivo está en estado de suspensión (S2)","El dispositivo está en estado de reposo (S3)","El dispositivo está hibernando (S4)","El dispositivo está en estado de apagado (S5)","El dispositivo está presente, pero no se puede determinar el estado de energía","El dispositivo está apagado"],powerColorTable=["#00000000","black","blue","blue","lightblue","blueviolet","darkgreen","lightseagreen","lightseagreen"];function NodeStateStr(e){var t=[];return e.state>0&&e.state<powerStatetable.length&&state.push(powerStatetable[e.state]),e.conn&&(1&e.conn&&t.push("<span>"+(4==e.mtype?"PDU"==e.porttype?"Cambiar":"IP-KVM":"Agente")+"</span>"),2&e.conn?t.push("<span>CIRA</span>"):4&e.conn&&t.push("<span>Intel&reg; AMT</span>"),8&e.conn&&t.push("<span>Relé</span>"),16&e.conn&&t.push("<span>MQTT</span>")),null!=e.pwr&&0!=e.pwr&&t.push(powerStateStrings[e.pwr]),t.join(", ")}function PowerStateStr(e){return e<powerStatetable.length?powerStatetable[e]:""}function PowerStateStr2(e){return 0!=e&&e<powerStatetable.length?powerStatetable[e]:"Desconocido"}function onSortSelectChange(e){sort=document.getElementById("sortselect").selectedIndex,e||putstore("sort",sort),mainUpdate(4)}function deviceHeaderSet(){if(0!=deviceHeaderId){deviceHeaders["DevxHeader"+deviceHeaderId]=", "+deviceHeaderTotal+(1==deviceHeaderTotal?" nodo":" nodos");var e="";for(var t in deviceHeaderCount)e.length>0&&(e+=", "),e+=deviceHeaderCount[t]+" "+PowerStateStr2(t);deviceHeadersTitles["DevxHeader"+deviceHeaderId]=e,deviceHeaderId++,deviceHeaderCount={},deviceHeaderTotal=0}else deviceHeaderId=1}var sortCollator=new Intl.Collator(void 0,{numeric:!0,sensitivity:"base"});function meshSort(e,t){var o=sortCollator.compare(e.meshnamel,t.meshnamel);return 0!=o||0!=(o=sortCollator.compare(e.meshid,t.meshid))?o:1==showRealNames?sortCollator.compare(e.rnamel,t.rnamel):sortCollator.compare(e.namel,t.namel)}function powerSort(e,t){var o=e.pwr?e.pwr:0,n=t.pwr?t.pwr:0;return o>n?-1:o<n?1:o==n?1==showRealNames?sortCollator.compare(e.rnamel,t.rnamel):sortCollator.compare(e.namel,t.namel):void 0}function deviceSort(e,t){return sortCollator.compare(e.namel,t.namel)}function deviceHostSort(e,t){return sortCollator.compare(e.rnamel,t.rnamel)}function refreshDevice(e){currentNode&&currentNode._id==e&&gotoDevice(e,xxcurrentView,!0)}var currentNode,currentDevicePanel=0,powerTimelineNode=null,powerTimelineReq=null,powerTimelineUpdate=null,powerTimeline=null;function getCurrentNode(){return currentNode}function gotoDevice(e,t,o){if(!0===userinfo.emailVerified||1!=serverinfo.emailcheck||4294967295==userinfo.siteadmin)if(!(262144&features)||1==userinfo.otpsecret||userinfo.otphkeys>0||userinfo.otpkeys>0||userinfo.otpduo>0||userinfo.otpdev>0||8388608&features&&1==userinfo.otpekey){var n=getNodeFromId(e);if(null!=n){var i=meshes[n.meshid],a=GetNodeRights(n),s=null==currentNode||currentNode._id!=e;if(!currentNode||currentNode._id!=n._id||1==o){if(currentNode=n,QV("p10deviceNotify",null!=currentNode.sessions&&(null!=n.sessions.kvm||null!=n.sessions.terminal||null!=n.sessions.files||null!=n.sessions.tcp||null!=n.sessions.udp)),QV("p10deviceStar",1==stars[currentNode._id]),QV("p10deviceHelp",null!=currentNode.sessions&&null!=currentNode.sessions.help),null!=currentNode.sessions&&null!=currentNode.sessions.msg?(QV("p10deviceMsg",!0),QH("p10deviceMsg",Object.keys(currentNode.sessions.msg).length)):QV("p10deviceMsg",!1),QV("p10deviceBattery",!1),null!=currentNode.sessions&&null!=currentNode.sessions.battery){var r=currentNode.sessions.battery,l="";"ac"==r.state&&(l="El dispositivo está enchufado"),"dc"==r.state&&(l="El dispositivo funciona con batería");var d="",c=-1;"number"==typeof r.level&&r.level>=0&&r.level<=100&&(d=r.level+"%",(c=Math.floor((r.level+10)/25)+1)>5&&(lvl=5),"ac"==r.state&&(100==r.level?c=11:c+=5)),c>0&&(Q("p10deviceBattery").title=null!=l?l+", "+d:d,QV("p10deviceBattery",!0),Q("p10deviceBattery").className="deviceBatteryLarge deviceBatteryLarge"+c)}else QV("p10deviceBattery",!1);var u=EscapeHtml(n.name);0==u.length&&(u="<i>Ninguno</i>"),4&a&&(u="<span onclick=showEditNodeValueDialog(0) style=cursor:pointer>"+u+"</span>"),QH("p10deviceName",u);var p="<table style=width:100%>";i&&(p+=addDeviceAttribute("<span>Grupo</span>",'<a onclick=goForward("'+n.meshid+'") style=cursor:pointer>'+EscapeHtml(meshes[n.meshid].name)+"</a>")),null!=n.rname&&(p+=addDeviceAttribute("<span>Nombre</span>","<span>"+EscapeHtml(n.rname)+"</span>")),(1&features||4==n.mtype)&&3!=n.mtype||(4&a?n.host?p+=addDeviceAttribute("Nombre de Host","<span onclick=showEditNodeValueDialog(1) style=cursor:pointer>"+EscapeHtml(n.host)+"</span>"):p+=addDeviceAttribute("Nombre de Host","<span onclick=showEditNodeValueDialog(1) style=cursor:pointer><i>Ninguno</i></span>"):p+=addDeviceAttribute("Nombre de Host",EscapeHtml(n.host)));var m=n.desc?EscapeHtml(n.desc):"<i>Ninguno</i>";if(p+=addDeviceAttribute("Descripción",4&a?"<span onclick=showEditNodeValueDialog(2) style=cursor:pointer>"+m+"</span>":m),4==n.mtype&&(null!=n.portnum&&(p+=addDeviceAttribute("Número de puerto",n.portnum)),null!=n.porttype&&(p+=addDeviceAttribute("Tipo de puerto",n.porttype))),null!=n.agent&&null!=n.agent.id&&3==n.mtype)4==n.agent.id&&(p+=addDeviceAttribute("Tipo de dispositivo","Windows")),6==n.agent.id&&(p+=addDeviceAttribute("Tipo de dispositivo","Linux")),29==n.agent.id&&(p+=addDeviceAttribute("Tipo de dispositivo","macOS"));else if(null!=n.agent&&null!=n.agent.id&&null!=n.agent.ver){var g="";g=n.agent.id<=agentsStr.length?agentsStr[n.agent.id]:agentsStr[0],0!=n.agent.ver&&(g+=" v"+n.agent.ver),14==n.agent.id&&(g=n.agent.core),!1===n.agent.root&&1&n.conn&&(g+=", Restringido"),p+=addDeviceAttribute("Agente Mesh",g)}if(null!=n.intelamt){g="";var f={0:nobreak("No Activada (Pre)"),1:nobreak("No Activada (entrada)"),2:nobreak("Activado")};if(null!=n.intelamt.ver&&null==n.intelamt.state?g+="<i>"+nobreak("Estado Desconocido")+"</i>, v"+EscapeHtml(n.intelamt.ver):null==n.intelamt.ver&&2==n.intelamt.state?g+="<i>Activado</i>":null==n.intelamt.ver||null==n.intelamt.state?g+="<i>Versión y Estado Desconocidos</i>":(g+=f[n.intelamt.state],n.intelamt.flags&&(2&n.intelamt.flags?g=" <span>CCM</span>":4&n.intelamt.flags&&(g=" <span>ACM</span>")),g+=", v"+EscapeHtml(n.intelamt.ver)),2==n.intelamt.state){1==n.intelamt.tls&&(g+=', <span title="Intel&reg; AMT está configurado con seguridad de red TLS">TLS</span>');var h=!1;if(null==n.intelamt.user||""==n.intelamt.user)4&a?(g+=', <i style=color:#FF0000;cursor:pointer title="Editar Credenciales de Intel&reg; AMT" onclick=editDeviceAmtSettings("'+n._id+'")>Sin Credenciales</i>',h=!0):g+=", <i style=color:#FF0000>Sin Credenciales</i>";else if(1&features2&&null!=n.intelamt.warn){var v=null;1&n.intelamt.warn&&(v="Credenciales No Válidas"),8&n.intelamt.warn&&(v="Probar Credenciales"),null!=v&&(4&a?(g+=', <i style=color:#FF0000;cursor:pointer title="Editar Credenciales de Intel&reg; AMT" onclick=editDeviceAmtSettings("'+n._id+'")>'+v+"</i>",h=!0):g+=", <i style=color:#FF0000>"+v+"</i>")}4&a&&!(1&features2)&&(h=!0),g+=" ",h&&(g+='<img src=images/link4.png height=10 width=10 title="Editar Credenciales de Intel&reg; AMT" style=cursor:pointer onclick=editDeviceAmtSettings("'+n._id+'")>')}var k="Intel&reg; ME";"number"==typeof n.intelamt.sku&&(8&n.intelamt.sku?k="Intel&reg; AMT":16&n.intelamt.sku&&(k="Intel&reg; SM")),p+=addDeviceAttribute(k,g)}if(null!=n.agent&&null!=n.agent.tag&&"mailto:"!=n.agent.tag){var y=EscapeHtml(n.agent.tag);y.startsWith("mailto:")&&(y='<a href="'+y+'">'+y.substring(7)+"</a>"),p+=addDeviceAttribute("Etiqueta del Agente",y)}var b=n.conn;if(b&&b>1){var x=[];1&n.conn&&x.push("<span>"+(4==n.mtype?"PDU"==n.porttype?"Cambiar":"IP-KVM":"Agente")+"</span>"),2&n.conn?x.push("<span>Intel&reg; AMT CIRA</span>"):4&n.conn&&x.push("<span>Intel&reg; AMT</span>"),8&n.conn&&x.push("<span>Retransmisión del Agente</span>"),16&n.conn&&x.push("<span>MQTT</span>"),p+=addDeviceAttribute("Conectividad",x.join(", "))}var w="<i>Ninguno</i>";if(null!=n.tags)for(var S in w="",n.tags)w+="<span class=tagSpan>"+EscapeHtml(n.tags[S])+"</span> ";if(p+=addDeviceAttribute("Etiquetas",4&a?"<span onclick=showEditNodeValueDialog(3) style=cursor:pointer;color:black>"+w+"</span>":"<span style=line-height:26px;color:black>"+w+"</span>"),null!=n.ssh||null!=n.rdp){var C=[];4&a?(null!=n.ssh&&C.push("<span onclick=showClearSshDialog(3) style=cursor:pointer>"+(1==n.ssh?"SSH-Usuario+Pass":2==n.ssh?"SSH-Usuario+Clave+Pasar":"SSH-Usuario+Clave")+' <img class=hoverButton src="images/link5.png" width=10 height=10 /></span>'),null!=n.rdp&&C.push('<span onclick=showClearRdpDialog(3) style=cursor:pointer>RDP <img class=hoverButton src="images/link5.png" width=10 height=10 /></span>')):(null!=n.ssh&&C.push(1==n.ssh?"SSH-Usuario+Pass":2==n.ssh?"SSH-Usuario+Clave+Pasar":"SSH-Usuario+Clave"),null!=n.rdp&&C.push("RDP")),p+=addDeviceAttribute("Credenciales",C.join(", "))}p+="</table><br />",262220&a&&n.mtype<3&&(p+='<input type=button value="Acciones" onclick=deviceActionFunction() />'),p+='<input type=button value="Notas" onclick=showNotes('+!(128&a)+',"'+encodeURIComponent(n._id)+'") />',4==n.mtype&&1&b&&("PDU"==n.porttype?1==n.pwr?262144&a&&(p+='<input type=button value="Apagar" title="Apagar" onclick=setIpPduState(0) />'):8==n.pwr&&64&a&&(p+='<input type=button value="Encender" title="Encender" onclick=setIpPduState(1) />'):8&a&&(p+='<input type=button value="Control Remoto" title="Control Remoto" onclick=openIpKvmRemoteControl("'+encodeURIComponentEx(n._id)+'") />')),QH("p10html",p),3==n.mtype&&null!=n.agent&&n.agent.id>4&&512&features2&&(n.agent.caps=6),setupTerminal(),setupFiles(),16&a&&setupConsole(),p="<div style=float:right;font-size:x-small;margin-right:10px>",32768&a&&(p+='<a style=cursor:pointer onclick=p10showDeleteNodeDialog("'+n._id+'")>Eliminar Dispositivo</a>'),p+="</div><div style=font-size:x-small>",0!=webRelayPort&&(p+='<a onclick=p10WebRouter("'+n._id+'",1,'+(n.httpport?n.httpport:80)+")>HTTP"+(n.httpport&&80!=n.httpport?"/"+n.httpport:"")+"</a>&nbsp;",p+='<a onclick=p10WebRouter("'+n._id+'",2,'+(n.httpsport?n.httpsport:443)+")>HTTPS"+(n.httpsport&&443!=n.httpsport?"/"+n.httpsport:"")+"</a>&nbsp;"),(1&b||3==n.mtype)&&n.agent&&8&a&&!(536870912&features)&&(p+='<a id=rfbLink onclick=p10rfb("'+n._id+'")>Web-VNC</a>&nbsp;'),(1&b||3==n.mtype)&&n.agent&&8&a&&!(1073741824&features)&&(p+='<a id=mstscLink onclick=p10mstsc("'+n._id+'")>Web-RDP</a>&nbsp;'),512&features2&&(1&b||3==n.mtype)&&n.agent&&8&a&&(p+='<a id=sshLink onclick=p10ssh("'+n._id+'")>Web-SSH</a>&nbsp;'),p+="</div><br>",QH("p10html3",p);var D=PowerStateStr(n.state);1&b&&(D.length>0&&(D+=", "),D+=4==n.mtype?"PDU"==n.porttype?"Cambiar":"IP-KVM":"Agente Mesh"),2&b?(D.length>0&&(D+=", "),D+="Intel&reg; AMT conectado"):4&b&&(D.length>0&&(D+=", "),D+="Intel&reg; AMT detectado"),16&b&&(D.length>0&&(D+=", "),D+="Canal MQTT conectado"),("PDU"==n.porttype||n.pwr>1&&7!=n.pwr)&&(D.length>0&&(D+=", "),D+=powerStateStrings[n.pwr]),QH("MainComputerState","<span style=font-size:12px>"+D+"</span>");var M=n.icon;n.conn&&0!=n.conn||3==n.mtype||(M+=" gray"),QH("MainComputerImage",'<div class="i'+M+'"></div>'),powerTimelineNode!=currentNode._id&&powerTimelineReq!=currentNode._id&&(QH("p10html2",""),powerTimelineReq=currentNode._id,meshserver.send({action:"powertimeline",nodeid:currentNode._id}),meshserver.send({action:"lastconnect",nodeid:currentNode._id}),meshserver.send({action:"getsysinfo",nodeid:currentNode._id}),meshserver.send({action:"getnetworkinfo",nodeid:currentNode._id}),QH("p10detailshtml","")),s&&(p11clearConsoleMsg(),p13clearConsoleMsg()),QV("p11DeskSessionSelector",!1),QH("p11DeskSessionSelector","")}setupDesktop(),t||(t=10),go(t),10==xxcurrentView&&setupDeviceMenu()}else goBack()}else setDialogMode(2,"Seguridad de la Cuenta",1,null,'No se puede acceder a un dispositivo hasta que se habilite la autenticación de dos factores. Esto es necesario para mayor seguridad. Ve a la pestaña "Mi cuenta" y revisa la sección "Seguridad de la cuenta".');else setDialogMode(2,"Seguridad de la Cuenta",1,null,'No se puede acceder a un dispositivo hasta que se verifique una dirección de correo electrónico. Esto es necesario para la recuperación de contraseña. Ve a la pestaña "Mi cuenta" para cambiar y verificar una dirección de correo electrónico.')}function setIpPduState(e){0==e?setDialogMode(2,"Operación de energía",3,function(){meshserver.send({action:"poweraction",nodeids:[currentNode._id],actiontype:2})},"¿Apagar?"):setDialogMode(2,"Operación de energía",3,function(){meshserver.send({action:"wakedevices",nodeids:[currentNode._id]})},"¿Realizar encendido?")}function openIpKvmRemoteControl(e){if(!xxdialogMode){var t=decodeURIComponent(e).split("/")[2];safeNewWindow("/ipkvm.ashx/"+t+"/","ipkvm:"+t)}}function deviceToastFunction(){xxdialogMode||setDialogMode(2,"Device Toast",3,deviceToastFunctionEx,"<textarea id=d2devToast style=width:100%;height:80px;resize:none;overflow-y:scroll></textarea>")}function deviceToastFunctionEx(){meshserver.send({action:"toast",nodeids:[currentNode._id],title:"MeshCentral",msg:Q("d2devToast").value})}function setupDeviceMenu(e,t){var o=GetNodeRights(currentNode);null!=e&&(currentDevicePanel=e),QV("p10general",0==currentDevicePanel),QV("p10desktop",1==currentDevicePanel),QV("p10files",2==currentDevicePanel),QV("p10details",3==currentDevicePanel),QV("p10console",4==currentDevicePanel),QV("p10terminal",5==currentDevicePanel);var n=[];0!=currentDevicePanel&&n.push({n:"General",f:"setupDeviceMenu(0)"}),1==currentDevicePanel||null==currentNode||!(8&o||256&o)||4294967295!=o&&65536&o||!(null==currentNode.agent&&currentNode.intelamt&&("number"!=typeof currentNode.intelamt.sku||8&currentNode.intelamt.sku)||currentNode.agent&&1&currentNode.agent.caps)||n.push({n:"Escritorio",f:"setupDeviceMenu(1)"}),5==currentDevicePanel||null==currentNode||!(8&o||256&o)||4294967295!=o&&512&o||!(null==currentNode.agent&&currentNode.intelamt&&("number"!=typeof currentNode.intelamt.sku||8&currentNode.intelamt.sku)||currentNode.agent&&2&currentNode.agent.caps)||n.push({n:"Terminal",f:"setupDeviceMenu(5)"}),2!=currentDevicePanel&&null!=currentNode&&8&o&&(4294967295==o||!(1024&o))&&1!=currentNode.mtype&&currentNode.agent&&4&currentNode.agent.caps&&n.push({n:"Archivos",f:"setupDeviceMenu(2)"}),3!=currentDevicePanel&&null!=currentNode&&currentNode.mtype<3&&1048576&o&&n.push({n:"Detalles",f:"setupDeviceMenu(3)"}),4!=currentDevicePanel&&null!=currentNode&&16&o&&2==currentNode.mtype&&n.push({n:"Consola",f:"setupDeviceMenu(4)"}),updateFooterMenu(n),updateCurrentUrl(),1==currentDevicePanel&&deskAdjust()}function deviceActionFunction(){if(!xxdialogMode){var e=GetNodeRights(currentNode),t=0,o="Selecciona una operación para realizar en este dispositivo.<br /><br />",n="<select id=d2deviceop style=float:right;width:170px onchange=deviceActionFunctionValidate()>",i="";null!=currentNode.agent&&14==currentNode.agent.id?1&currentNode.conn&&8&e&&(t++,n+="<option value=400>Destello</option>",n+="<option value=401>Vibrar</option>",i+="<div id=d2devicetimediv>"+addHtmlValue("Tiempo","<select id=d2devicetime style=float:right;width:170px><option value=1000>1 segundo</option><option value=5000>5 segundos</option><option value=10000>10 segundos</option></select>")+"</div>"):(64&e&&(t++,n+="<option value=100>Despertar</option>"),0!=currentNode.conn&&262144&e&&(t++,n+="<option value=4>Suspender</option><option value=3>Reiniciar</option><option value=2>Apagar</option>"),null!=currentNode.intelamt&&2==currentNode.intelamt.state&&6&currentNode.conn&&262144&e&&(t++,n+="<option value=310>Restablecimiento de Intel&reg; AMT</option>",n+="<option value=308>Apagado de Intel&reg; AMT</option>"),null!=currentNode.intelamt&&2==currentNode.intelamt.state&&6&currentNode.conn&&64&e&&(t++,n+="<option value=302>Encendido de Intel&reg; AMT</option>")),o+=addHtmlValue("Operación",n+="</select>"),0==t&&(o="Actualmente no hay acciones disponibles para este dispositivo."),setDialogMode(2,"Acción del Dispositivo",0==t?2:3,deviceActionFunctionEx,o+i),t>0&&deviceActionFunctionValidate()}}function deviceActionFunctionValidate(){var e=Q("d2deviceop").value;try{QV("d2devicetimediv",400==e||401==e)}catch(e){}}function deviceActionFunctionEx(){var e=Q("d2deviceop").value;100==e?meshserver.send({action:"wakedevices",nodeids:[currentNode._id]}):103==e||104==e||106==e||107==e||(302==e?setDialogMode(2,"Operación de energía Intel&reg; AMT",3,function(){meshserver.send({action:"poweraction",nodeids:[currentNode._id],actiontype:parseInt(e)})},"¿Realizar el encendido de Intel&reg; AMT?"):308==e?setDialogMode(2,"Operación de energía Intel&reg; AMT",3,function(){meshserver.send({action:"poweraction",nodeids:[currentNode._id],actiontype:parseInt(e)})},"Perform Intel&reg; AMT power off?<br><br><b>NOTE: If there is an active AMT session, then power off command will be rejected, so you must disconnect from the AMT session first!</b>"):310==e?setDialogMode(2,"Operación de energía Intel&reg; AMT",3,function(){meshserver.send({action:"poweraction",nodeids:[currentNode._id],actiontype:parseInt(e)})},"¿Realizar reinicio de Intel&reg; AMT?"):400==e||401==e?meshserver.send({action:"poweraction",nodeids:[currentNode._id],actiontype:parseInt(e),time:parseInt(Q("d2devicetime").value)}):meshserver.send({action:"poweraction",nodeids:[currentNode._id],actiontype:parseInt(e)}))}function showNotes(e,t){if(!xxdialogMode){null==t&&(t=encodeURIComponentEx("p"+userinfo._id));var o="<textarea id=d2devNotes ro="+e+" noteid="+t+" readonly style=background-color:#fcf3cf;width:100%;height:200px;resize:none;overflow-y:scroll></textarea>";t.startsWith("node%2F%2F")&&(o+="<span style=font-size:10px>Las notas del grupo de dispositivos pueden ser vistas y modificadas por otros administradores de grupos de dispositivos.<span>"),setDialogMode(2,"Notas",3,showNotesEx,o,t),meshserver.send({action:"getNotes",id:decodeURIComponent(t)})}}function showNotesEx(e,t){meshserver.send({action:"setNotes",id:decodeURIComponent(t),notes:encodeURIComponentEx(Q("d2devNotes").value)})}function deviceLockFunction(){null==xxdialogMode&&0!=xxdialogMode||null==desktop||1!=desktop.contype||setDialogMode(2,"Bloquear Escritorio",3,function(){null!=desktop&&1==desktop.contype&&desktop.sendCtrlMsg('{"ctrlChannel":"102938","type":"lock"}')},"¿Bloquear el escritorio del usuario?")}function deviceChat(e){xxdialogMode||setDialogMode(2,"Acción del Dispositivo",3,function(){var t="/messenger?id=meshmessenger/"+encodeURIComponentEx(currentNode._id)+"/"+encodeURIComponentEx(userinfo._id)+"&title="+currentNode.name;""!=serverinfo.domainsuffix&&(t="/"+serverinfo.domainsuffix+t),null!=authCookie&&""!=authCookie&&(t+="&auth="+authCookie),e&&1==e.shiftKey?safeNewWindow(t,"meshmessenger:"+currentNode._id):safeNewWindow(t,"meshmessenger:"+currentNode._id,"directories=no,titlebar=no,toolbar=no,location=no,status=no,menubar=no,scrollbars=no,resizable=no,width=400,height=560"),meshserver.send({action:"meshmessenger",nodeid:decodeURIComponent(currentNode._id)})},"¿Iniciar sesión de chat?")}function deviceUrlFunction(){xxdialogMode||(setDialogMode(2,"Abrir Página en Dispositivo",3,deviceUrlFunctionEx,'<input id=d2devurl placeholder="http://server.com" style=width:100%;overflow-y:scroll onkeyup=deviceUrlFunctionValidate() onchange=deviceUrlFunctionValidate()></input>'),Q("d2devurl").focus(),deviceUrlFunctionValidate())}function deviceUrlFunctionValidate(){var e=Q("d2devurl").value.toLowerCase();QE("idx_dlgOkButton",e.startsWith("http://")&&e.length>7||e.startsWith("https://")&&e.length>8)}function deviceUrlFunctionEx(){meshserver.send({action:"msg",type:"openUrl",nodeid:currentNode._id,url:Q("d2devurl").value})}function runDeviceCmd(e){xxdialogMode||d2runCommandDialog({nodeids:[e?decodeURIComponent(e):currentNode._id]})}function d2runCommandDialog(e){var t=!1,o=!1,n=!1;for(var i in e.nodeids){var a=getNodeFromId(e.nodeids[i]);a.agent&&(24&~GetNodeRights(a)||(n=!0),isWindowsNode(a)?t=!0:o=!0)}if(1==t||1==o||1==n){var s={type:1,runAs:0,source:1,cmd:""};try{s=JSON.parse(getstore("runopt",s))}catch(e){}if(e.selectedFile){var r=e.selectedFile.name.toLowerCase();console.log("filename",r),r.endsWith(".bat")&&(s.type=1),r.endsWith(".ps1")&&(s.type=2),r.endsWith(".sh")&&(s.type=3),r.endsWith(".agentconsole")&&(s.type=4)}var l="";e.title&&(l+=e.title+"<br />"),l+="<select id=d2cmdtype onclick=d2runCommandValidate() style=width:100%;margin-bottom:4px;margin-top:4px>",1==t&&(l+="<option value=1"+(1==s.type?" selected":"")+">Línea de Comandos de Windows</option><option value=2"+(2==s.type?" selected":"")+">Windows PowerShell</option>"),1==o&&(l+="<option value=3"+(3==s.type?" selected":"")+">Shell de comandos Linux/BSD/macOS</option>"),1==n&&(l+="<option value=4"+(4==s.type?" selected":"")+">Consola de Agente</option>"),l+="</select>",l+="<select id=d2cmduser style=width:100%;margin-bottom:4px><option value=0"+(0==s.runAs?" selected":"")+">Ejecutar como agente</option><option value=1"+(1==s.runAs?" selected":"")+">Ejecutar como usuario, agente si no hay usuario</option><option value=2"+(2==s.runAs?" selected":"")+">Debe ejecutarse como usuario</option></select>",null==e.selectedFile&&(l+="<select id=d2cmdsource onclick=d2runCommandValidate() style=width:100%;margin-bottom:4px><option value=0"+(0==s.source?" selected":"")+">Comandos desde caja de texto</option><option value=1"+(1==s.source?" selected":"")+">Comandos desde un archivo</option>",8&userinfo.siteadmin&&(l+="<option value=2"+(2==s.source?" selected":"")+">Comandos desde un archivo en el servidor</option>"),l+="</select><textarea id=d2runcmd onkeyup=d2runCommandValidate() style=background-color:#fcf3cf;width:100%;height:200px;resize:none;overflow-y:scroll>"+(s.cmd?EscapeHtml(decodeURIComponent(s.cmd)):"")+"</textarea>",l+="<div id=d2runfile style=display:none><input id=d2runfileex type=file onchange=d2runCommandValidate() id=d2localFile name=files onchange=d2runCommandValidate() /></div>",8&userinfo.siteadmin&&(l+='<div id=d2runsfile style=display:none><div id=d2serveraction valign=bottom><input type=button id=p2FolderUp disabled="disabled" onclick=d3folderup() value="Up" />&nbsp;<span id=p2CurrentFolder></span></div><div id=d2serverfiles></div></div>')),setDialogMode(2,"Ejecutar Comandos",3,d2groupActionFunctionRunCommands,l,e),null==e.selectedFile&&(Q("d2runcmd").focus(),8&userinfo.siteadmin&&(d3fileoptions={dialog:2,files:"d2serverfiles",folderup:"p2FolderUp",currentFolder:"p2CurrentFolder",func:null},d3updatefiles())),d2runCommandValidate()}}function d2runCommandValidate(){if(QV("d2cmduser",Q("d2cmdtype").value<4),null==xxdialogTag.selectedFile){QV("d2runcmd",0==Q("d2cmdsource").value),QV("d2runfile",1==Q("d2cmdsource").value),QV("d2runsfile",2==Q("d2cmdsource").value);var e=!1;0==Q("d2cmdsource").value&&Q("d2runcmd").value.length>0&&(e=!0),1==Q("d2cmdsource").value&&1==Q("d2runfileex").files.length&&(e=!0),2==Q("d2cmdsource").value&&(e=!1),QE("idx_dlgOkButton",e)}else QE("idx_dlgOkButton",!0)}function d2groupActionFunctionRunCommands(e,t){var o=3;try{o=parseInt(Q("d2cmdtype").value)}catch(e){}null==t.selectedFile&&putstore("runopt",JSON.stringify({type:o,runAs:parseInt(Q("d2cmduser").value),source:parseInt(Q("d2cmdsource").value),cmd:encodeURIComponent(Q("d2runcmd").value)}));var n={action:"runcommands",nodeids:t.nodeids,type:o,runAsUser:parseInt(Q("d2cmduser").value)};if(t.selectedFile)(i=new FileReader).onload=function(e){n.cmds=e.target.result,meshserver.send(n),t.func&&t.func()},i.readAsText(t.selectedFile);else if(0==Q("d2cmdsource").value)n.cmds=Q("d2runcmd").value,meshserver.send(n),t.func&&t.func();else if(1==Q("d2cmdsource").value){var i;(i=new FileReader).onload=function(e){n.cmds=e.target.result,meshserver.send(n),t.func&&t.func()},i.readAsText(Q("d2runfileex").files[0])}else if(2==Q("d2cmdsource").value){var a=d3getFileSel();if(1!=a.length)return;n.cmdpath=d3filetreelocation.join("/")+"/"+a[0],meshserver.send(n),t.func&&t.func()}}function updateDeviceTimeline(){2==meshserver.State&&null!=powerTimelineNode&&null!=powerTimelineUpdate&&null!=currentNode&&3!=currentNode.mtype&&powerTimelineNode==powerTimelineReq&&currentNode._id==powerTimelineNode&&powerTimelineUpdate<Date.now()&&(powerTimelineUpdate=null,meshserver.send({action:"powertimeline",nodeid:currentNode._id}))}function drawDeviceTimeline(){if(3!=currentNode.mtype&&"true"!==hidePowerTimeline){var e=null,t=Date.now();currentNode._id==powerTimelineNode&&(e=powerTimeline);var o=new Date;o.setHours(0,0,0,0);(o=new Date(o.getTime()-5184e5)).getTime();var n=[];if(null!=e&&e.length>1){n.push([0,e[1],e[0]]);for(var i=e[1],a=2;a<e.length;a+=2){var s=e[a],r=t;e.length>a+1&&(r=e[a+1]),n.push([i,i+r,s]),i+=r}}var l="",d=1,c=new Date,u=Q("masthead").offsetWidth-122;c.setHours(0,0,0,0);for(a=0;a<7;a++){var p="",m=c.getTime(),g=m+864e5;for(var f in n){var h=n[f];if(1==isTimeBlockInside(m,g,h[0],h[1])){var v=Math.max(m,h[0]),k=Math.min(Math.min(g,h[1]),t),y=Math.round((k-v)*u/864e5);y>0&&(p+="<div style=display:table-cell;width:"+y+"px;background-color:"+powerColor(h[2])+";height:16px></div>")}}l+="<tr style="+(d%2==0?"background-color:#DDD":"")+"><td><div>&nbsp;"+printDate(c)+"<div></div></div></td><td><div>"+p+"</div></td></tr>",++d,c=new Date(c.getFullYear(),c.getMonth(),c.getDate()-1)}QH("p10html2",'<table style="color:black;background-color:#EEE;border-color:#AAA;border-width:1px;border-style:solid;border-collapse:collapse;width:calc(100% - 18px);margin:9px" border=0 cellpadding=2 cellspacing=0><tbody><tr style=background-color:#AAAAAA;font-weight:bold><th scope=col style=text-align:center;width:90px>Día</th><th scope=col style=text-align:center>Estado de Energia</th></tr>'+l+"</tbody></table>")}else QH("p10html2","<br />")}function powerColor(e){return e<powerColorTable.length?powerColorTable[e]:"yellow"}function isTimeBlockInside(e,t,o,n){return o<e&&n>t||(o>e&&o<t||n>e&&n<t)}function addDeviceAttribute(e,t){return"<tr><td style=width:100px;color:gray>"+e+"</td><td style=overflow:hidden>"+t+"</td></tr>"}function editDeviceAmtSettings(e,t){if(!xxdialogMode){var o="",n=getNodeFromId(e),i=3;4&GetNodeRights(n)&&(o+=addHtmlValue("Nombre de Usuario",'<input id=dp10username style=width:170px maxlength=32 autocomplete=nope placeholder="admin" onchange=validateDeviceAmtSettings() onkeyup=validateDeviceAmtSettings() />'),o+=addHtmlValue("Contraseña","<input id=dp10password type=password style=width:170px autocomplete=nope maxlength=32 onchange=validateDeviceAmtSettings() onkeyup=validateDeviceAmtSettings() />"),1&features2||(o+=addHtmlValue("Seguridad","<select id=dp10tls style=width:176px><option value=0>Sin Seguridad TLS</option><option value=1>Seguridad TLS requerida</option></select>")),null!=n.intelamt.user&&""!=n.intelamt.user&&(i=7),setDialogMode(2,"Editar Credenciales de Intel&reg; AMT",i,editDeviceAmtSettingsEx,o,{node:n,func:t}),null!=n.intelamt.user&&""!=n.intelamt.user?Q("dp10username").value=n.intelamt.user:Q("dp10username").value="admin",1&features2||(Q("dp10tls").value=n.intelamt.tls),validateDeviceAmtSettings())}}function validateDeviceAmtSettings(){QE("idx_dlgOkButton",passwordcheck(Q("dp10password").value))}function editDeviceAmtSettingsEx(e,t){if(2==e)meshserver.send({action:"changedevice",nodeid:t.node._id,intelamt:{user:"",pass:""}});else{var o=Q("dp10username").value;""==o&&(o="admin");var n=Q("dp10password").value;""==n&&(o="");var i={action:"changedevice",nodeid:t.node._id,intelamt:{user:o,pass:n}};1&features2||(i.intelamt.tls=parseInt(Q("dp10tls").value)),meshserver.send(i),t.func&&setTimeout(t.func,1e3)}}function p10showDeleteNodeDialog(e){xxdialogMode||(setDialogMode(2,"Eliminar Nodo",3,p10showDeleteNodeDialogEx,format("¿Eliminar {0}?",EscapeHtml(currentNode.name))+"<br /><br /><label><input id=p10check type=checkbox onchange=p10validateDeleteNodeDialog() />Confirmar</label>",e),p10validateDeleteNodeDialog())}function p10validateDeleteNodeDialog(){QE("idx_dlgOkButton",Q("p10check").checked)}function p10showDeleteNodeDialogEx(e,t){meshserver.send({action:"removedevices",nodeids:[t]})}function p10WebRouter(e,t,o,n){var i=null,a=getNodeFromId(e);if(3==a.mtype){var s=meshes[a.meshid];s&&s.relayid&&(i=s.relayid,n=a.host)}var r=serverinfo.name;(-1==r.indexOf(".")||2&features)&&(r=window.location.hostname),""!=webRelayDns&&(r=webRelayDns);var l="https://"+r+":"+webRelayPort+"/control-redirect.ashx?n="+e+"&p="+o+"&appid="+t+"&c="+authRelayCookie;return null!=n&&(l+="&addr="+n),null!=i&&(l+="&relayid="+i),safeNewWindow(l,"WebRelay"),!1}function p10rfb(e,t){var o=getNodeFromId(e),n=null,i=meshes[o.meshid];null==t&&(t=null!=o.rfbport?o.rfbport:5900),3==o.mtype&&i&&i.relayid&&(e=i.relayid,n=o.host),meshserver.send({action:"getcookie",nodeid:e,tcpport:t,tcpaddr:n,tag:"novnc",name:i?i.name:null})}function p10mstsc(e,t){var o=getNodeFromId(e),n=meshes[o.meshid];null==t&&(t=null!=o.rdpport?o.rdpport:3389),meshserver.send({action:"getcookie",nodeid:e,tcpport:t,tag:"mstsc",name:n?n.name:null})}function p10ssh(e,t){var o=getNodeFromId(e),n=meshes[o.meshid];null==t&&(t=null!=o.sshport?o.sshport:22),meshserver.send({action:"getcookie",nodeid:e,tcpport:t,tag:"ssh",name:n?n.name:null})}function p10showiconselector(){if(!xxdialogMode&&4&GetNodeRights(currentNode)){setDialogMode(2,"Selección de Icono",0,null,"<table align=center><td style=text-align:center><div style=display:inline-block class=i1 onclick=p10setIcon(1)></div><div style=display:inline-block class=i2 onclick=p10setIcon(2)></div><div style=display:inline-block class=i3 onclick=p10setIcon(3)></div><div style=display:inline-block class=i4 onclick=p10setIcon(4)></div><br /><div style=display:inline-block class=i5 onclick=p10setIcon(5)></div><div style=display:inline-block class=i6 onclick=p10setIcon(6)></div><div style=display:inline-block class=i7 onclick=p10setIcon(7)></div><div style=display:inline-block class=i8 onclick=p10setIcon(8)></div></table>"),QV("id_dialogclose",!0)}}function p10setIcon(e){setDialogMode(0),meshserver.send({action:"changedevice",nodeid:currentNode._id,icon:e})}function showClearSshDialog(){setDialogMode(2,"Editar Dispositivo",3,showClearSshDialogEx,"¿Borrar credenciales SSH?")}function showClearSshDialogEx(e,t){meshserver.send({action:"changedevice",nodeid:currentNode._id,ssh:0})}function showClearRdpDialog(){setDialogMode(2,"Editar Dispositivo",3,showClearRdpDialogEx,"¿Borrar las credenciales RDP?")}function showClearRdpDialogEx(e,t){meshserver.send({action:"changedevice",nodeid:currentNode._id,rdp:0})}var desktop,desktopNode,showEditNodeValueDialog_modes=["Nombre del Dispositivo","Nombre de Host","Descripción","Etiquetas"],showEditNodeValueDialog_modes2=["name","host","desc","tags"],showEditNodeValueDialog_modes3=["","","","Grupo1, Grupo2, Grupo3"];function showEditNodeValueDialog(e){if(!xxdialogMode){var t=addHtmlValue(showEditNodeValueDialog_modes[e],'<input id=dp10devicevalue style=width:170px maxlength=64 placeholder="'+showEditNodeValueDialog_modes3[e]+'" onchange=p10editdevicevalueValidate('+e+",event) onkeyup=p10editdevicevalueValidate("+e+",event) />");if(3==e){var o=[],n="";for(var i in nodes)if(nodes[i].tags)for(var a in nodes[i].tags)-1==o.indexOf(nodes[i].tags[a])&&o.push(nodes[i].tags[a]);if(o.length>0){for(var i in o.sort(),o)n+='<span style=padding:4px;background-color:#BBB;border-radius:3px;cursor:pointer onclick=showEditNodeValueDialogAddTag("'+encodeURIComponentEx(o[i])+'")>'+EscapeHtml(o[i])+"</span> ";t+="<div style=margin-top:8px;width:280px;line-height:26px;max-height:160px;overflow-y:auto>"+n+"</div>"}}setDialogMode(2,"Editar Dispositivo",3,showEditNodeValueDialogEx,t,e);var s=currentNode[showEditNodeValueDialog_modes2[e]];null==s&&(s=""),Array.isArray(s)&&(s=s.join(", ")),Q("dp10devicevalue").value=s,p10editdevicevalueValidate(),Q("dp10devicevalue").focus()}}function showEditNodeValueDialogAddTag(e){var t=Q("dp10devicevalue").value.split(","),o=[];for(var n in t)o.push(t[n].trim());o.indexOf(e)>=0||(Q("dp10devicevalue").value+=(0==Q("dp10devicevalue").value.length?"":", ")+decodeURIComponent(e),setTimeout(function(){Q("dp10devicevalue").selectionStart=Q("dp10devicevalue").selectionEnd=9e4},0),p10editdevicevalueValidate())}function showEditNodeValueDialogEx(e,t){var o={action:"changedevice",nodeid:currentNode._id};o[showEditNodeValueDialog_modes2[t]]=Q("dp10devicevalue").value,meshserver.send(o)}function p10editdevicevalueValidate(e,t){var o=e>1||Q("dp10devicevalue").value.length>0;QE("idx_dlgOkButton",o),null!=t&&1==o&&13==t.keyCode&&dialogclose(1)}var desktopsettings={encoding:2,showfocus:!1,showmouse:!0,showcad:!0,quality:40,scaling:1024,framerate:50,autolock:!1,agentencoding:4};function setupDesktop(){desktopNode!=currentNode&&null!=desktop&&(desktop.Stop(),desktopNode=null,desktop=null),desktopNode==currentNode&&null!=desktop||(desktopNode=currentNode,Q("Desk").addEventListener("DOMMouseScroll",function(e){return dmousewheel(e)}),Q("Desk").addEventListener("mousewheel",function(e){return dmousewheel(e)})),desktopNode=currentNode,updateDesktopButtons(),Q("Desk").toBlob||QV("deskSaveBtn",!1)}function updateDesktopButtons(){meshes[currentNode.meshid];var e=0;null!=desktop&&(e=desktop.State);var t=GetNodeRights(currentNode);QV("disconnectbutton1",0!=e),QE("deskFullScreen",0!=e),QV("connectbutton1",0==e&&(8&t||256&t)&&null!=currentNode.agent&&1&currentNode.agent.caps),QV("connectbutton1h",0==e&&8&t&&null!=currentNode.intelamt&&2==currentNode.intelamt.state&&null!=currentNode.intelamt.ver&&(null==currentNode.intelamt.sku||"number"==typeof currentNode.intelamt.sku&&!!(8&currentNode.intelamt.sku))),QV("d7amtkvm",!(null==currentNode.intelamt||"number"==typeof currentNode.intelamt.sku&&16&currentNode.intelamt.sku||null==currentNode.intelamt.ver&&null!=currentNode.agent||0!=e&&2!=desktop.contype)),QV("d7meshkvm",null!=currentNode.agent&&1&currentNode.agent.caps&&(0==e||1==desktop.contype));var o=!!(1&currentNode.conn);QE("connectbutton1",o);var n=!!(6&currentNode.conn);QE("connectbutton1h",n),QV("DeskToastButton",!!(16384&t)&&currentNode.agent&&currentNode.agent.id<5&&8&t),QV("deskActionsBtn",8&t),Q("DeskControl").checked=!!(8&t),0==o&&QV("DeskTools",!1)}var agentConsoleMessages=["","Esperando a que el usuario otorgue acceso...","Denegado","Error al iniciar sesión de terminal remota, {0} ({1})","Timeout","Se recibieron datos de red inválidos"];function formatAgentConsoleMessage(e,t,o){for(null==o&&(o=[]);o.length<3;)o.push("");return(t&&t<agentConsoleMessages.length?EscapeHtml(format(agentConsoleMessages[t],o[0],o[1],o[2])):EscapeHtml(e)).split("\n").join("<br />")+"<br /><br />"}function connectDesktop(e,t,o,n){if(setSessionActivity(),QV("p11DeskSessionSelector",!1),p11clearConsoleMsg(),null==desktop)if(desktopNode=currentNode,2==t){if(null==desktopNode.intelamt.user||""==desktopNode.intelamt.user)return void editDeviceAmtSettings(desktopNode._id,connectDesktop);(desktop=CreateAmtRedirect(CreateAmtRemoteDesktop("Desk"),authCookie)).debugmode=debugmode,desktop.onStateChanged=onDesktopStateChange,desktop.m.bpp=1==desktopsettings.encoding||3==desktopsettings.encoding?1:2,desktop.m.useZRLE=desktopsettings.encoding<3,desktop.m.showmouse=!0,desktop.m.onScreenSizeChange=function(e,t,o){fullscreen&&(QS("deskarea3").width=t*fullscreenzoom+"px",QS("deskarea3").height=o*fullscreenzoom+"px"),deskAdjust()},4==desktopNode.conn&&null!=desktopNode.intelamt&&1==desktopNode.intelamt.tls?desktop.Start(desktopNode._id,16995,"*","*",1):desktop.Start(desktopNode._id,16994,"*","*",0),desktop.contype=2}else null==t||1==t||3==t&&currentNode.agent.id>4?((desktop=CreateAgentRedirect(meshserver,CreateAgentRemoteDesktop("Desk"),serverPublicNamePort,authCookie,authRelayCookie,domainUrl)).debugmode=debugmode,desktop.m.debugmode=debugmode,desktop.attemptWebRTC=attemptWebRTC,desktop.webrtcconfig=webrtcconfiguration,desktop.options={},null!=o&&(desktop.options.tsid=o),null!=n&&(desktop.options.consent=n),1==desktopsettings.autolock&&(desktop.options.autolock=!0),desktop.onStateChanged=onDesktopStateChange,8192&features2&&(desktop.m.stopInput=!0),desktop.onConsoleMessageChange=function(){desktop.consoleMessage?(Q("p11DeskConsoleMsg").innerHTML+=formatAgentConsoleMessage(desktop.consoleMessage,desktop.consoleMessageId,desktop.consoleMessageArgs),QV("p11DeskConsoleMsg",!0),null!=p11DeskConsoleMsgTimer&&clearTimeout(p11DeskConsoleMsgTimer),desktop.consoleMessageTimeout&&(p11DeskConsoleMsgTimer=setTimeout(p11clearConsoleMsg,1e3*desktop.consoleMessageTimeout))):p11clearConsoleMsg()},desktop.m.ImageType=desktopsettings.agentencoding,desktop.m.CompressionLevel=desktopsettings.quality,desktop.m.ScalingLevel=desktopsettings.scaling,desktop.m.FrameRateTimer=desktopsettings.framerate,desktop.m.onDisplayinfo=deskDisplayInfo,desktop.m.onScreenSizeChange=function(e,t,o){fullscreen&&(QS("deskarea3").width=t*fullscreenzoom+"px",QS("deskarea3").height=o*fullscreenzoom+"px"),deskAdjust()},desktop.Start(desktopNode._id),desktop.contype=1):3==t&&meshserver.send({action:"msg",type:"userSessions",nodeid:currentNode._id,tag:n});else desktop.Stop(),desktopNode=desktop=null}function p11clearConsoleMsg(){QH("p11DeskConsoleMsg",""),QV("p11DeskConsoleMsg",!1),p11DeskConsoleMsgTimer&&(clearTimeout(p11DeskConsoleMsgTimer),p11DeskConsoleMsgTimer=null)}function p12clearConsoleMsg(){QH("p12TermConsoleMsg",""),QV("p12TermConsoleMsg",!1),p12TermConsoleMsgTimer&&(clearTimeout(p12TermConsoleMsgTimer),p12TermConsoleMsgTimer=null)}function p13clearConsoleMsg(){QH("p13FilesConsoleMsg",""),QV("p13FilesConsoleMsg",!1),p13FilesConsoleMsgTimer&&(clearTimeout(p13FilesConsoleMsgTimer),p13FilesConsoleMsgTimer=null)}function p12setConsoleMsg(e,t){e?(Q("p12TermConsoleMsg").innerHTML+=e,QV("p12TermConsoleMsg",!0),null!=p12TermConsoleMsgTimer&&clearTimeout(p12TermConsoleMsgTimer),t&&(p12TermConsoleMsgTimer=setTimeout(p12clearConsoleMsg,t))):p12clearConsoleMsg()}function p13setConsoleMsg(e,t){e?(Q("p13FilesConsoleMsg").innerHTML+=e,QV("p13FilesConsoleMsg",!0),null!=p13FilesConsoleMsgTimer&&clearTimeout(p13FilesConsoleMsgTimer),t&&(p13FilesConsoleMsgTimer=setTimeout(p13clearConsoleMsg,t))):p13clearConsoleMsg()}function onDesktopStateChange(e,t){var o=t;3==o&&2==e.contype&&o++;var n=StatusStrs[o];if(null!=desktop&&1==desktop.webRtcActive&&(n+=", WebRTC"),QH("deskstatus",n),0===t)desktop.Stop(),desktopNode=desktop=null,QV("DeskScreens",!1),1==fullscreen&&deskToggleFull();updateDesktopButtons(),deskAdjust(),setTimeout(deskAdjust,50)}function showDesktopSettings(){xxdialogMode||(applyDesktopSettings(),updateDesktopButtons(),setDialogMode(7,"Opciones de Escritorio Remoto",3,showDesktopSettingsChanged))}function showDesktopSettingsChanged(){desktopsettings.encoding=d7desktopmode.value,desktopsettings.quality=d7bitmapquality.value,desktopsettings.scaling=d7bitmapscaling.value,desktopsettings.framerate=d7framelimiter.value,desktopsettings.autolock=d7deskAutoLock.checked,desktopsettings.agentencoding=d7encoding.value,localStorage.setItem("desktopsettings",JSON.stringify(desktopsettings)),applyDesktopSettings(),desktop&&(1==desktop.contype&&(0!=desktop.State&&desktop.m.SendCompressionLevel(desktopsettings.agentencoding,desktopsettings.quality,desktopsettings.scaling,desktopsettings.framerate),desktop.sendCtrlMsg('{"ctrlChannel":"102938","type":"autolock","value":'+desktopsettings.autolock+"}"),desktop.m.SendRefresh()),2==desktop.contype&&0!=desktop.State&&(desktop.Stop(),setTimeout(function(){connectDesktop(null,2)},50)))}function applyDesktopSettings(){var e="",t=512&features?[100,90,70,50,40,30,20,10,5,1]:[50,40,30,20,10,5,1];for(var o in t)e+="<option value="+t[o]+">"+t[o]+"%</option>";QH("d7bitmapquality",e),d7desktopmode.value=desktopsettings.encoding,d7bitmapquality.value=40,desktopsettings.agentencoding?d7encoding.value=desktopsettings.agentencoding:desktopsettings.agentencoding=4,t.indexOf(parseInt(desktopsettings.quality))>=0&&(d7bitmapquality.value=desktopsettings.quality),d7bitmapscaling.value=desktopsettings.scaling,desktopsettings.framerate&&(d7framelimiter.value=desktopsettings.framerate),null!=desktopsettings.autolock&&(d7deskAutoLock.checked=desktopsettings.autolock)}var keyboardShown=!1,keyboardShownTimer=null,fullScreenMode=!1;function toggleKeyboard(){xxdialogMode||(null!=keyboardShownTimer&&clearTimeout(keyboardShownTimer),keyboardShown?(Q("softKeyboard").blur(),keyboardShown=!1):(Q("softKeyboard").focus(),keyboardShown=!0),QV("deskkeybutton2a",fullscreen&&!keyboardShown),QV("deskkeybutton2b",fullscreen&&keyboardShown))}function keyboardFocusChange(){keyboardShownTimer=setTimeout(function(){keyboardShownTimer=null,keyboardShown=Q("softKeyboard")==document.activeElement,QV("deskkeybutton2a",fullscreen&&!keyboardShown),QV("deskkeybutton2b",fullscreen&&keyboardShown)},10)}function exitButton(){xxdialogMode||(QV("deskButtonMenu",!1),QV("termButtonMenu",!1),deskToggleFull())}function deskMenuButton(e){toggleMenu(!0),deskSendKeys(e)}function updateDeskShortcutKeys(){var e='<div class="menuButton" onclick="deskMenuButton(-1)">Personalizar</div>';for(var t in deskKeyboardShortcuts)e+='<div class="menuButton" onclick="deskMenuButton('+deskKeyboardShortcuts[t]+')">'+keyShortcutTotext(deskKeyboardShortcuts[t])+"</div>";QH("deskButtonMenu",e)}var keyStrings={8:"Retroceso",9:"Tab",13:"Enter",27:"Escape",32:"Espacio",44:"Imprimir Pantalla",45:"Insertar",46:"Del",36:"Casa",35:"Final",32:"Espace",33:"Página Arriba",34:"Página Abajo",37:"Izquierda",38:"Subir",39:"Derecha",40:"Abajo",0:"Ninguno"};function keyShortcutTotext(e){var t=[];return 65536&e&&t.push("Cambiar"),131072&e&&t.push("Alt"),524288&e&&t.push("Ctrl"),1048576&e&&t.push("Win"),(e&=65535)>=112&&e<=123?t.push("F"+(e-111)):0!=e&&keyStrings[e]?t.push(keyStrings[e]):0!=e&&t.push(String.fromCharCode(e)),t.join(" + ")}function deskCustomizeKeys(){if(!xxdialogMode){var e='<div id=d2shortcuts style="width:100%;height:180px;padding:4px;overflow-y:auto;border:1px solid gray"></div><div style=width:100%;padding:5px>';for(var t in e+="<label><input id=d1kshift type=checkbox /> Cambiar</label><label> <input id=d1kalt type=checkbox /> Alt</label><label> <input id=d1kctrl type=checkbox /> Ctrl</label> <input id=d1kwin type=checkbox /> Win</label>",e+=" <select id=d2keySelect>",keyStrings)e+="<option value="+t+">"+keyStrings[t]+"</option>";for(t=1;t<=12;t++)e+="<option value="+(t+111)+">F"+t+"</option>";for(t=0;t<10;t++)e+="<option value="+(t+48)+">"+t+"</option>";for(t=0;t<26;t++)e+="<option value="+(t+65)+">"+String.fromCharCode(t+65)+"</option>";e+="</select> <input type=button value=Agregar onclick=addDeskCustomizeKey() /></div>",QH("p10dialog2",e),xxdialogMode=2,QV("p10dialog",!0),deskUpdateShortcutList()}}function deskCustomizeKeysEx(){QV("p10dialog",!1),xxdialogMode=0,putstore("deskKeyShortcuts",deskKeyboardShortcuts.join(",")),updateDeskShortcutKeys()}function restoreDeskCustomizeKey(){deskKeyboardShortcuts=[],putstore("deskKeyShortcuts",null);var e=getstore("deskKeyShortcuts","0x0A002E,0x100000,0x100028,0x100026,0x10004C,0x10004D,0x11004D,0x100052,0x020073,0x080057,0x020009,0x100025,0x100027").split(",");for(var t in e)""!=e[t]&&deskKeyboardShortcuts.push(parseInt(e[t]));updateDeskShortcutKeys(),deskUpdateShortcutList()}function deskUpdateShortcutList(){var e="";for(var t in deskKeyboardShortcuts){var o=keyShortcutTotext(deskKeyboardShortcuts[t]),n="";t!=deskKeyboardShortcuts.length-1&&(n+='<img width=8 height=8 style=float:right;cursor:pointer;padding:3px src="images/c2.png" onclick=deskCustomizeKeyDown('+deskKeyboardShortcuts[t]+")>"),0!=t&&(n+='<img width=8 height=8 style=float:right;cursor:pointer;padding:3px src="images/c3.png" onclick=deskCustomizeKeyUp('+deskKeyboardShortcuts[t]+")>"),e+='<div style="width:100%;background-color:#AAA;border-radius:4px;margin-bottom:4px;padding:4px;text-align:left;box-sizing:border-box" value='+deskKeyboardShortcuts[t]+">"+o+'<img width=10 height=10 style=float:right;cursor:pointer;padding:2px;margin-left:8px src="images/trash.png" onclick=removeDeskCustomizeKey('+deskKeyboardShortcuts[t]+")>"+n+"</div>"}""==e&&(e="<i>No se han definido atajos de teclado</i>"),QH("d2shortcuts",e)}function deskCustomizeKeyDown(e){var t=deskKeyboardShortcuts.indexOf(e),o=deskKeyboardShortcuts[t+1];deskKeyboardShortcuts[t+1]=deskKeyboardShortcuts[t],deskKeyboardShortcuts[t]=o,deskUpdateShortcutList()}function deskCustomizeKeyUp(e){var t=deskKeyboardShortcuts.indexOf(e),o=deskKeyboardShortcuts[t];deskKeyboardShortcuts[t]=deskKeyboardShortcuts[t-1],deskKeyboardShortcuts[t-1]=o,deskUpdateShortcutList()}function removeDeskCustomizeKey(e){var t=[];for(var o in deskKeyboardShortcuts)deskKeyboardShortcuts[o]!=e&&t.push(deskKeyboardShortcuts[o]);deskKeyboardShortcuts=t,deskUpdateShortcutList()}function addDeskCustomizeKey(){var e=parseInt(Q("d2keySelect").value);Q("d1kshift").checked&&(e|=65536),Q("d1kalt").checked&&(e|=131072),Q("d1kctrl").checked&&(e|=524288),Q("d1kwin").checked&&(e|=1048576),e>0&&-1==deskKeyboardShortcuts.indexOf(e)&&(deskKeyboardShortcuts.push(e),deskUpdateShortcutList())}function deskSendKeys(e){if(!xxdialogMode&&null!=desktop&&3==desktop.State)if(-1!=e)if(655406!=e){var t=(16711680&e)>>16,o=65535&e,n=[],i=[],a={8:65288,9:65289,13:65293,27:65307,45:65379,46:65535,36:65360,35:65367,33:65365,34:65366,37:65361,38:65362,39:65363,40:65364,112:65470,113:65471,114:65472,115:65473,116:65474,117:65475,118:65476,119:65477,120:65478,121:65479,122:65480,123:65481};if(2==desktop.contype){1&t&&(n.push([65505,1]),i.push([65505,0])),2&t&&(n.push([65513,1]),i.push([65513,0])),8&t&&(n.push([65507,1]),i.push([65507,0])),16&t&&(n.push([65511,1]),i.push([65511,0])),a[o]&&(o=a[o]),o>=65&&o<=90&&(o+=32),0!=o&&(n.push([o,1]),i.push([o,0])),i.reverse();for(var s=0;s<i.length;s++)n.push(i[s]);desktop.m.sendkey(n)}else{1&t&&(n.push([desktop.m.KeyAction.DOWN,16]),i.push([desktop.m.KeyAction.UP,16])),2&t&&(n.push([desktop.m.KeyAction.EXDOWN,18]),i.push([desktop.m.KeyAction.EXUP,18])),8&t&&(n.push([desktop.m.KeyAction.EXDOWN,17]),i.push([desktop.m.KeyAction.EXUP,17])),16&t&&(n.push([desktop.m.KeyAction.EXDOWN,91]),i.push([desktop.m.KeyAction.EXUP,91])),0!=o&&(n.push([desktop.m.KeyAction.DOWN,o]),i.push([desktop.m.KeyAction.UP,o])),i.reverse();for(s=0;s<i.length;s++)n.push(i[s]);desktop.m.SendKeyMsgKC(n)}}else desktop.m.sendcad();else deskCustomizeKeys()}function toggleMenu(e){xxdialogMode||(QV("deskButtonMenu",fullscreen&&!e&&1==currentDevicePanel),QV("termButtonMenu",fullscreen&&!e&&5==currentDevicePanel),QV("deskkeybutton3a",fullscreen&&e),QV("deskkeybutton3b",fullscreen&&!e))}function deskChangeMouseButton(e){xxdialogMode||null!=desktop&&(desktop.m.SwapMouse=!desktop.m.SwapMouse,QV("deskkeybutton4a",fullscreen&&!desktop.m.SwapMouse),QV("deskkeybutton4b",fullscreen&&desktop.m.SwapMouse))}function deskChangeFullscreenZoom(){if(!xxdialogMode){if(1==currentDevicePanel){if(null==desktop)return;fullscreenzoom=1==fullscreenzoom?.5:1,QV("deskkeybutton5a",fullscreen&&1==fullscreenzoom),QV("deskkeybutton5b",fullscreen&&1!=fullscreenzoom),QS("deskarea3").width=desktop.m.ScreenWidth*fullscreenzoom+"px",QS("deskarea3").height=desktop.m.ScreenHeight*fullscreenzoom+"px",deskAdjust()}if(5==currentDevicePanel){if(null==terminal)return;xterm.setOption("fontSize",15==xterm.getOption("fontSize")?10:15)}}}var terminalNode,filesNode,fullscreen=!1,fullscreenzoom=1;function deskToggleFull(){fullscreen=!fullscreen,QV("mastheadx",!fullscreen),QV("masthead",!fullscreen),QV("topbar",!fullscreen),QV("p11deviceNameHeader",!fullscreen),QV("footer",!fullscreen),QV("column_l_bottomgap",!fullscreen),QV("idx_deskFullBtn2",fullscreen),QV("deskFullBtn",!fullscreen),QV("p10deskTopTable",!fullscreen),QV("deskarea1",!fullscreen),QV("deskarea4",!fullscreen),QV("termarea1",!fullscreen),QV("termarea4",!fullscreen);var e=GetNodeRights(currentNode),t=!(8192&features2||14==currentNode.agent.id||4294967295!=e&&(!(8&e)||256&e||4096&e));QV("deskkeybutton1",fullscreen),1==currentDevicePanel&&(QS("deskkeybutton2a").top=QS("deskkeybutton2b").top="210px",QS("deskkeybutton5a").top=QS("deskkeybutton5b").top=t?"160px":"60px",QV("deskkeybutton2a",fullscreen&&t),QV("deskkeybutton2b",!1),QV("deskkeybutton3a",fullscreen&&t),QV("deskkeybutton3b",!1),QV("deskkeybutton4a",fullscreen&&t&&!desktop.m.SwapMouse),QV("deskkeybutton4b",fullscreen&&t&&desktop.m.SwapMouse),QV("deskkeybutton5a",fullscreen&&1==fullscreenzoom),QV("deskkeybutton5b",fullscreen&&1!=fullscreenzoom)),5==currentDevicePanel&&(QS("deskkeybutton2a").top=QS("deskkeybutton2b").top="110px",QV("deskkeybutton2a",fullscreen),QV("deskkeybutton2b",!1),QV("deskkeybutton3a",fullscreen),QV("deskkeybutton3b",!1),QV("deskkeybutton4a",!1),QV("deskkeybutton4b",!1),QV("deskkeybutton5a",!1),QV("deskkeybutton5a",!1)),fullscreen?(QS("DeskParent").height=null,QS("page_content").top="0px",QS("page_content").bottom="0px",1==currentDevicePanel&&(QS("p10desktop").top="0px",QS("p10desktop").overflow="scroll",QS("deskarea3").top="0px",QS("deskarea3").width=desktop.m.ScreenWidth*fullscreenzoom+"px",QS("deskarea3").height=desktop.m.ScreenHeight*fullscreenzoom+"px",QS("deskarea3")["padding-right"]="55px"),5==currentDevicePanel&&(QS("p10terminal").top="0px",QS("p10terminal").overflow="scroll",QS("termarea3").top="0px",QS("termarea3").bottom=null,QS("termarea3").right=null,QS("termarea3")["padding-right"]="55px",QS("termarea3").height="100%"),QS("body")["background-color"]="#000",QS("p10")["background-color"]="#000"):(QS("DeskParent").height="100%",QS("page_content").top="50px",QS("page_content").bottom="32px",1==currentDevicePanel&&(QS("p10desktop").top="55px",QS("p10desktop").overflow="hidden",QS("deskarea3").top="32px",QS("deskarea3").left=null,QS("deskarea3").width="100%",QS("deskarea3").height="calc(100% - 64px)",QS("deskarea3")["padding-right"]="",QS("DeskParent")["margin-top"]=null,QS("DeskParent")["margin-left"]=null),5==currentDevicePanel&&(QS("p10terminal").top="55px",QS("p10terminal").overflow="hidden",Q("p10terminal").scrollTop=0,Q("p10terminal").scrollLeft=0,QS("termarea3").top="32px",QS("termarea3").bottom="32px",QS("termarea3")["padding-right"]=null,QS("termarea3").height="calc(100% - 60px)"),QS("body")["background-color"]=nightMode?"#000":"#FFF",QS("p10")["background-color"]=null),1==currentDevicePanel&&deskAdjust()}function deskAdjust(){if(1==currentDevicePanel)if(fullscreen){QS("Desk")["margin-top"]=null,QS("Desk")["margin-bottom"]=null,QS("Desk").width="100%",QS("Desk").height="100%";var e=Q("p10desktop").clientHeight,t=Q("p10desktop").clientWidth,o=Q("deskarea3").clientHeight,n=Q("deskarea3").clientWidth-55;QS("deskarea3").top=e>o?(e-o)/2+"px":null,QS("deskarea3").left=t>n?(t-n)/2+"px":null}else{if((e=Q("DeskParent").clientHeight)/(t=Q("DeskParent").clientWidth)>(o=Q("Desk").height)/(n=Q("Desk").width)){var i=o*t/n+"px";QS("Desk").height=i,QS("Desk").width="100%"}else{var a=n*e/o+"px";QS("Desk").width=a,QS("Desk").height="100%"}QS("DeskParent").overflow="hidden";var s=(Q("DeskParent").clientHeight-Q("Desk").clientHeight)/2;QS("Desk")["margin-top"]=s+"px",QS("Desk")["margin-bottom"]=s+"px"}}function sendSpecialKeys(){xxdialogMode||null==desktop||3!=desktop.State||setDialogMode(3,"Teclas Especiales",3,deskSendKeys)}function deskSaveImage(){if(setSessionActivity(),!xxdialogMode&&null!=desktop&&3==desktop.State){var e=new Date,t="Desktop-"+currentNode.name+"-"+e.getFullYear()+"-"+("0"+(e.getMonth()+1)).slice(-2)+"-"+("0"+e.getDate()).slice(-2)+"-"+("0"+e.getHours()).slice(-2)+"-"+("0"+e.getMinutes()).slice(-2);Q("Desk").toBlob(function(e){saveAs(e,t+".png")})}}function deskSelectScreens(){if(!xxdialogMode&&null!=desktop&&3==desktop.State){var e="",t=desktop.m.displays;for(var o in t)e+="<option value="+o+" "+(desktop.m.selectedDisplay==o?" selected":"")+">"+t[o]+"</option>";setDialogMode(2,"Selección de Pantalla",3,deskSelectScreensEx,e=addHtmlValue4("Pantalla","<select style=width:100% id=deskdisplays>"+e+"</select>"))}}function deskSelectScreensEx(){null!=desktop&&3==desktop.State&&desktop.m.SetDisplay(parseInt(Q("deskdisplays").value))}function deskDisplayInfo(e,t,o,n){var i=0;for(var a in t)i++;QV("DeskScreens",i>1)}function dmousedown(e){setSessionActivity(),xxdialogMode||null==desktop||(fullscreen&&(e.addx=Q("p10desktop").scrollLeft*(1/fullscreenzoom),e.addy=Q("p10desktop").scrollTop*(1/fullscreenzoom)),desktop.m.mousedown(e))}function dmouseup(e){setSessionActivity(),xxdialogMode||null==desktop||(fullscreen&&(e.addx=Q("p10desktop").scrollLeft*(1/fullscreenzoom),e.addy=Q("p10desktop").scrollTop*(1/fullscreenzoom)),desktop.m.mouseup(e))}function dmousemove(e){setSessionActivity(),xxdialogMode||null==desktop||(fullscreen&&(e.addx=Q("p10desktop").scrollLeft*(1/fullscreenzoom),e.addy=Q("p10desktop").scrollTop*(1/fullscreenzoom)),desktop.m.mousemove(e))}function dmousewheel(e){return setSessionActivity(),!(xxdialogMode||null==desktop||!desktop.m.mousewheel)&&(fullscreen&&(e.addx=Q("p10desktop").scrollLeft*(1/fullscreenzoom),e.addy=Q("p10desktop").scrollTop*(1/fullscreenzoom)),desktop.m.mousewheel(e),haltEvent(e),!0)}function drotate(e){xxdialogMode||null==desktop||(desktop.m.setRotation(desktop.m.rotation+e),deskAdjust())}function setupTerminal(){terminalNode!=currentNode&&null!=terminal&&(terminal.Stop(),terminal=null),terminalNode=currentNode,updateTerminalButtons()}function updateTerminalButtons(){currentNode.agent;var e=null!=terminal&&0!=terminal.state;QE("termFullScreen",0!=e),3==terminalNode.mtype&&null!=terminalNode.agent&&terminalNode.agent.id>4&&512&features2&&(terminalNode.agent.caps=6),QV("disconnectbutton2span",1==e),QV("connectbutton2span",0==e&&null!=terminalNode.agent&&2&terminalNode.agent.caps&&3!=terminalNode.mtype),QV("connectbutton2sspan",0==e&&null!=terminalNode.agent&&2&terminalNode.agent.caps&&3!=terminalNode.agent.id);var t=!!(1&terminalNode.conn)||3==terminalNode.mtype;QE("connectbutton2",t),QE("connectbutton2s",t),QV("termActionsBtn",3!=terminalNode.mtype),QE("ctrlcbutton",e),QE("ctrlxbutton",e),QE("escbutton",e),1==e&&3!=terminal.contype||null==terminalNode.agent||3==terminalNode.agent.id||4==terminalNode.agent.id?QH("terminalCustomUpperRight",""):QH("terminalCustomUpperRight","<a style=cursor:pointer onclick=cmsshportaction(1,event)>"+format("Puerto SSH {0}",terminalNode.sshport?terminalNode.sshport:22)+"</a>")}function cmsshportaction(e){if(!xxdialogMode){setDialogMode(2,"Conexión SSH",3,function(){var e=Q("d10sshport").value.length>0?parseInt(Q("d10sshport").value):22;meshserver.send({action:"changedevice",nodeid:currentNode._id,sshport:e})},'Puerto de conexión remota SSH:<br /><br /><input type=text placeholder="22" inputmode="numeric" pattern="[0-9]*" onkeypress="return (event.keyCode == 8) || (event.charCode >= 48 && event.charCode <= 57)" maxlength=5 id=d10sshport type=text>',currentNode),Q("d10sshport").focus(),null!=currentNode.sshport&&(Q("d10sshport").value=currentNode.sshport)}}function onTerminalStateChange(e,t){var o=t;3==o&&2==e.contype&&o++;var n=StatusStrs[o];switch(1==terminal.webRtcActive&&(n+=", WebRTC"),QH("termstatus",n),t){case 0:xterm.dispose(),xterm=xtermfit=xtermimage=null,null!=terminal&&(terminal.Stop(),terminal=null);break;case 3:xterm.focus()}updateTerminalButtons()}function CreateRemoteTunnel(e,t){var o={protocol:1};return null!=t&&"number"==typeof t.protocol&&(o.protocol=t.protocol),o.onTunnelUpdate=e,o.xxStateChange=function(e){},o.ProcessBinaryData=function(e){o.onTunnelUpdate(e)},o.ProcessData=function(e){o.onTunnelUpdate(e)},o.terminalEmulation=1,o.fxEmulation=0,o.lineFeed="\r\n",o}function tunnelUpdate(e){null!=xterm&&(xterm.writeUtf8?"string"==typeof e?xterm.writeUtf8(e):xterm.writeUtf8(new Uint8Array(e)):"string"==typeof e?xterm.write(e):xterm.write(new Uint8Array(e)))}function sshTunnelAuthDialog(e,t){var o="";e.askkeypass?o+=addHtmlValue("Autenticación","<select id=dp2authmethod style=width:150px onchange=sshAuthUpdate(event)><option value=3 selected>Clave almacenada</option><option value=1>Usuario Contraseña</option><option value=2>Nombre de usuario y clave</option></select>"):o+=addHtmlValue("Autenticación","<select id=dp2authmethod style=width:150px onchange=sshAuthUpdate(event)><option value=1 selected>Usuario Contraseña</option><option value=2>Nombre de usuario y clave</option></select>"),o+="<div id=d2userauth style=display:none>",o+=addHtmlValue("Nombre de Usuario","<input id=dp2user style=width:150px maxlength=64 autocomplete=off onkeyup=sshAuthUpdate(event) />"),o+="</div>",o+="<div id=d2passauth style=display:none>",o+=addHtmlValue("Contraseña","<input type=password id=dp2pass style=width:150px maxlength=64 autocomplete=off onkeyup=sshAuthUpdate(event) />"),4194304&features2||(o+="<label><input id=dp2keep type=checkbox>Recuerda credenciales</label>"),o+="</div><div id=d2keyauth style=display:none>",o+=addHtmlValue("Archivo de clave","<input type=file id=dp2key style=width:150px maxlength=64 autocomplete=off onchange=sshAuthUpdate(event) /><div id=d2badkey style=font-size:x-small>El archivo de clave debe estar en formato OpenSSH.</div>"),o+=addHtmlValue("Contraseña clave","<input type=password id=dp2keypass style=width:150px maxlength=64 autocomplete=off onkeyup=sshAuthUpdate(event) />"),4194304&features2||(o+="<label><input id=dp2keep1 type=checkbox onchange=sshAuthUpdate(event)>Recordar usuario y clave</label><br/>",o+="<label><input id=dp2keep2 type=checkbox>Recordar contraseña</label>"),o+="</div>",e.askkeypass&&(o+="<div id=d2keyauth2 style=display:none>",o+=addHtmlValue("Contraseña","<input type=password id=dp2keypass2 style=width:150px maxlength=64 autocomplete=off onkeyup=sshAuthUpdate(event) />"),o+="</div>"),setDialogMode(2,"Autenticación",11,t,o,"ssh"),Q("dp2user").focus(),sshAuthUpdate(),setTimeout(sshAuthUpdate,50)}function sshTunnelUpdate(e){if("string"==typeof e)if("{"==e[0]){var t=JSON.parse(e);switch(t.action){case"sshauth":sshTunnelAuthDialog(t,sshConnectEx);break;case"sshautoauth":terminal.socket.send(JSON.stringify({action:"sshautoauth",cols:xterm.cols,rows:xterm.rows,width:Q("termarea3xdiv").offsetWidth,height:Q("termarea3xdiv").offsetHeight}));break;case"autherror":p12setConsoleMsg("Error de Autenticación",5e3);break;case"sessionerror":p12setConsoleMsg("Sesión expirada",5e3);break;case"sessiontimeout":p12setConsoleMsg("Hora de término de la sesión",5e3)}}else"~"==e[0]&&(xterm.writeUtf8?xterm.writeUtf8(e.substring(1)):xterm.write(e.substring(1)))}function sshAuthUpdate(e){if(QV("d2userauth",3!=Q("dp2authmethod").value),QV("d2passauth",1==Q("dp2authmethod").value),QV("d2keyauth",2==Q("dp2authmethod").value),QV("d2keyauth2",3==Q("dp2authmethod").value),1==Q("dp2authmethod").value)QE("idx_dlgOkButton",Q("dp2user").value.length>0&&Q("dp2pass").value.length>0);else if(3==Q("dp2authmethod").value)QE("idx_dlgOkButton",Q("dp2keypass2").value.length>0);else{if(QE("idx_dlgOkButton",!1),4194304&features2||QE("dp2keep2",Q("dp2keep1").checked),1==(Q("dp2user").value.length>0&&null!=Q("dp2key").files&&1==Q("dp2key").files.length&&Q("dp2key").files[0].size<8e3)){var t=new FileReader;t.onload=function(e){var t=e.target.result.indexOf("-----BEGIN OPENSSH PRIVATE KEY-----")>=0&&e.target.result.indexOf("-----END OPENSSH PRIVATE KEY-----")>=0||e.target.result.indexOf("-----BEGIN RSA PRIVATE KEY-----")>=0&&e.target.result.indexOf("-----END RSA PRIVATE KEY-----")>=0;QE("idx_dlgOkButton",t),QS("d2badkey").color=t?"#000":"#F00"},t.readAsText(Q("dp2key").files[0])}}e&&13==e.keyCode&&e.target&&1==Q("dp2authmethod").value&&("dp2user"==e.target.id&&Q("dp2pass").focus(),"dp2pass"==e.target.id&&dialogclose(1))}function sshConnectEx(e){if(0==e)null!=terminal&&connectTerminal();else{var t=0;if(1==Q("dp2authmethod").value)4194304&features2||(t=Q("dp2keep").checked?1:0),terminal.socket.send(JSON.stringify({action:"sshauth",username:Q("dp2user").value,password:Q("dp2pass").value,keep:t,cols:xterm.cols,rows:xterm.rows,width:Q("termarea3xdiv").offsetWidth,height:Q("termarea3xdiv").offsetHeight}));else if(3==Q("dp2authmethod").value)terminal.socket.send(JSON.stringify({action:"sshkeyauth",keypass:Q("dp2keypass2").value,cols:xterm.cols,rows:xterm.rows,width:Q("termarea3xdiv").offsetWidth,height:Q("termarea3xdiv").offsetHeight}));else{4194304&features2||1==(t=Q("dp2keep1").checked?1:0)&&(t+=Q("dp2keep2").checked?1:0);var o=new FileReader,n=Q("dp2user").value,i=Q("dp2keypass").value;o.onload=function(e){terminal.socket.send(JSON.stringify({action:"sshauth",username:n,keypass:i,key:e.target.result,keep:t,cols:xterm.cols,rows:xterm.rows,width:Q("termarea3xdiv").offsetWidth,height:Q("termarea3xdiv").offsetHeight}))},o.readAsText(Q("dp2key").files[0])}}}function xTermSendResize(){xtermResizeTimer=null,null!=xterm&&null!=terminal&&null!=terminal.sendCtrlMsg&&("sshterminalrelay.ashx"==terminal.urlname?terminal.socket.send(JSON.stringify({action:"resize",cols:xterm.cols,rows:xterm.rows,width:Q("termarea3xdiv").offsetWidth,height:Q("termarea3xdiv").offsetHeight})):terminal.sendCtrlMsg(JSON.stringify({ctrlChannel:"102938",type:"termsize",cols:xterm.cols,rows:xterm.rows})))}function connectTerminal(e,t,o){if(p12clearConsoleMsg(),terminal)terminal.Stop(),terminal=null,fullscreen&&deskToggleFull();else{var n={protocol:null!=o&&"number"==typeof o.protocol?o.protocol:1};o&&o.requireLogin&&(n.requireLogin=!0),null!=serverinfo.linuxshell&&currentNode.agent.id>4&&("root"==serverinfo.linuxshell&&(n.protocol=1,delete n.requireLogin),"user"==serverinfo.linuxshell&&(n.protocol=8,delete n.requireLogin),"login"==serverinfo.linuxshell&&(n.protocol=1,n.requireLogin=!0)),QV("termarea3xdiv",!0),null!=xterm&&xterm.dispose(),xterm=new Terminal({allowProposedApi:!0}),xtermfit=new FitAddon.FitAddon,xtermimage=new ImageAddon.ImageAddon,xtermfit&&xterm.loadAddon(xtermfit),xterm.loadAddon(xtermimage),xterm.open(Q("termarea3xdiv")),xterm.onData(function(e){"sshterminalrelay.ashx"==terminal.urlname?terminal.socket.send("~"+e):terminal.sendText(e)}),xtermfit&&xtermfit.fit(),xterm.onResize(function(e){xtermResizeTimer&&clearTimeout(xtermResizeTimer),xtermResizeTimer=setTimeout(xTermSendResize,200)}),document.getElementsByClassName("xterm-helper-textarea")[0].onfocus=()=>{xterm.blur(),fullscreen||toggleKeyboard()},document.getElementsByClassName("xterm-viewport")[0].style.overflow="hidden",terminal=CreateAgentRedirect(meshserver,CreateRemoteTunnel(3==t?sshTunnelUpdate:tunnelUpdate,n),serverPublicNamePort,authCookie,authRelayCookie,domainUrl),3==t&&(terminal.urlname="sshterminalrelay.ashx"),terminal.debugmode=debugmode,terminal.m.debugmode=debugmode,terminal.options=n,terminal.options={cols:xterm.cols,rows:xterm.rows},n.requireLogin&&(terminal.options.requireLogin=!0),terminal.Start(terminalNode._id),terminal.onStateChanged=onTerminalStateChange,terminal.contype=t,terminal.attemptWebRTC=!1,terminal.onConsoleMessageChange=function(){p12setConsoleMsg(terminal.consoleMessage?formatAgentConsoleMessage(terminal.consoleMessage,terminal.consoleMessageId,terminal.consoleMessageArgs):null,terminal.consoleMessageTimeout)}}Q("connectbutton2").blur()}function termSendKey(e,t){terminal&&!xxdialogMode&&(null!=xterm?("sshterminalrelay.ashx"==terminal.urlname?terminal.socket.send("~"+String.fromCharCode(e)):terminal.sendText?terminal.sendText(String.fromCharCode(e)):terminal.send(String.fromCharCode(e)),xterm.focus()):null!=terminal&&(terminal.m.TermSendKey(e),Q(t).blur()))}function updateTermShortcutKeys(){for(var e="",t=64;t<=95;t++)e+='<div class="menuButton" style="width:70px" onclick="termMenuButton('+t+')">Ctrl +'+String.fromCharCode(t)+"</div>";QH("termButtonMenu",e)}function termMenuButton(e){toggleMenu(!0),"sshterminalrelay.ashx"==terminal.urlname?terminal.socket.send("~"+String.fromCharCode(e-64)):terminal.sendText(String.fromCharCode(e-64))}function setupFiles(){var e=filesNode==currentNode,t=!!(1&(filesNode=currentNode).conn)||3==filesNode.mtype;QE("p13Connect",t),QE("p13Connects",t),QV("p13Connect",null==files&&2==filesNode.mtype),QV("p13Connects",null==files&&null!=filesNode.agent&&3!=filesNode.agent.id&&4!=filesNode.agent.id),QV("p13Disconnect",null!=files),0!=e&&0!=t||!files||(files.Stop(),files=null),p13setActions()}function onFilesStateChange(e,t){setSessionActivity(),QV("p13Connect",0==t&&2==filesNode.mtype),QV("p13Connects",0==t&&null!=filesNode.agent&&3!=filesNode.agent.id&&4!=filesNode.agent.id),QV("p13Disconnect",0!=t);var o=StatusStrs[t];switch(3==t&&(2==files.contype&&(o+=", SFTP"),1==files.webRtcActive&&(o+=", WebRTC")),Q("p13Status").textContent=o,t){case 0:QH("p13files",""),p13filetree=null,p13filetreelocation=[],QH("p13currentpath",""),QE("p13FolderUp",!1),p13setActions(),null!=files&&(files.Stop(),files=null),null!=uploadFile&&(p13uploadFileTransferDone(),uploadFile=null);break;case 3:if(p13filetreelocation=[],p13targetpath="",files){var n=[];try{n=JSON.parse(getstore("_devFilePaths","[]"))}catch(e){}for(var i=0;i<n.length;i++)n[i].n==currentNode._id&&(p13targetpath=n[i].p);p13filetreelocation=p13targetpath.split("/"),files.sendText({action:"ls",reqid:1,path:p13targetpath})}}}function CreateRemoteFiles(e){var t={protocol:5};return t.onFileUpdate=e,t.xxStateChange=function(e){},t.ProcessData=function(e){t.onFileUpdate(e)},t}var autoConnectFilesTimer=null;function autoConnectFiles(e){null==autoConnectFilesTimer?autoConnectFilesTimer=setInterval(connectFiles,100):(clearInterval(autoConnectFilesTimer),autoConnectFilesTimer=null)}function connectFiles(e,t){p13clearConsoleMsg(),files?(files.Stop(),files=null):(files=CreateAgentRedirect(meshserver,CreateRemoteFiles(p13gotFiles),serverPublicNamePort,authCookie,authRelayCookie,domainUrl),2==t&&(files.urlname="sshfilesrelay.ashx"),files.contype=t,files.attemptWebRTC=attemptWebRTC,files.webrtcconfig=webrtcconfiguration,files.onStateChanged=onFilesStateChange,files.onConsoleMessageChange=function(){files.consoleMessage?(Q("p13FilesConsoleMsg").innerHTML+=formatAgentConsoleMessage(files.consoleMessage,files.consoleMessageId,files.consoleMessageArgs),QV("p13FilesConsoleMsg",!0),null!=p13FilesConsoleMsgTimer&&clearTimeout(p13FilesConsoleMsgTimer),files.consoleMessageTimeout&&(p13FilesConsoleMsgTimer=setTimeout(p13clearConsoleMsg,1e3*files.consoleMessageTimeout))):p13clearConsoleMsg()},files.Start(filesNode._id)),p13clipboard=p13clipboardFolder=null,p13clipboardCut=0,p13updateClipview()}var p13sortorder,p13filetree=null,p13targetpath=null,p13filetreelocation=[];function p13gotFiles(e){if(e.length>0&&123!=e.charCodeAt(0))p13gotDownloadBinaryData(e);else{try{e=JSON.parse(decode_utf8(e))}catch(t){e=JSON.parse(e)}if("download"!=e.action){switch(e.action){case"sshauth":sshTunnelAuthDialog(e,p13sshConnectEx);break;case"autherror":return void p13setConsoleMsg("Error de Autenticación",5e3);case"connectionerror":return void p13setConsoleMsg("Error de Conexión",5e3);case"sessionerror":return void p13setConsoleMsg("Sesión expirada",5e3);case"sessiontimeout":return void p13setConsoleMsg("Hora de término de la sesión",5e3)}if(null!=e.action&&e.action.startsWith("upload"))p13gotUploadData(e);else if(null!=e.path)if(null==e.dir)""!=p13targetpath&&p13folderup();else if(e.path=e.path.replace(/\//g,"\\"),null!=p13filetree&&e.path==p13filetree.path){var t=p13getCheckedNames();p13filetree=e,p13updateFiles(t)}else{for(var o=e.path.replace(/\//g,"\\"),n=p13targetpath.replace(/\//g,"\\");o.length>0&&"\\"==o[0];)o=o.substring(1);for(;n.length>0&&"\\"==n[0];)n=n.substring(1);(o==n||"\\"==e.path&&""==p13targetpath)&&(p13filetree=e,p13updateFiles())}}else p13gotDownloadCommand(e)}}function p13sshConnectEx(e){if(0==e)null!=files&&connectFiles();else{var t=0;if(1==Q("dp2authmethod").value)4194304&features2||(t=Q("dp2keep").checked?1:0),files.socket.send(JSON.stringify({action:"sshauth",username:Q("dp2user").value,password:Q("dp2pass").value,keep:t}));else if(3==Q("dp2authmethod").value)files.socket.send(JSON.stringify({action:"sshkeyauth",keypass:Q("dp2keypass2").value}));else{4194304&features2||1==(t=Q("dp2keep1").checked?1:0)&&(t+=Q("dp2keep2").checked?1:0);var o=new FileReader,n=Q("dp2user").value,i=Q("dp2keypass").value;o.onload=function(e){files.socket.send(JSON.stringify({action:"sshauth",username:n,keypass:i,key:e.target.result,keep:t}))},o.readAsText(Q("dp2key").files[0])}}}function p13getCheckedNames(){for(var e=[],t=document.getElementsByName("fd"),o=0;o<t.length;o++)t[o].checked&&e.push(p13filetree.dir[t[o].value].n);return e}function p13updateFiles(e){var t="",o="",n="<a style=cursor:pointer;color:black onclick=p13folderup(0)>Raíz</a>",i=p13filetree.path.split("\\");for(var a in p13filetreelocation=[],i)""!=i[a]&&p13filetreelocation.push(i[a]);for(var a in p13filetreelocation)n+=" / <a style=cursor:pointer;color:black onclick=p13folderup("+(parseInt(a)+1)+")>"+EscapeHtml(p13filetreelocation[a])+"</a>";var s=p13filetreelocation.join("/"),r=p13sort_files(p13filetree.dir);for(var a in r){var l,d=r[a],c=d.n;l=EscapeHtml(c);var u="";null!=d.s&&(u=getFileSizeStr(d.s));var p="";if(d.t<3){p="<div class=filelist file=999><input file=999 style=float:left name=fd class=fcb type=checkbox onchange=p13setActions() value='"+d.nx+"'>&nbsp;<span style=float:right></span><span title=\""+l+'"><div class=fileIcon'+d.t+'></div><a style=cursor:pointer onclick=p13folderset("'+encodeURIComponent(d.nx)+'")>'+l+"</a></span></div>"}else{var m=l;d.s>0&&(m='<a rel="noreferrer noopener" target="_blank" style=cursor:pointer onclick="p13downloadfile(\''+encodeURIComponent(s+"/"+c)+"','"+encodeURIComponent(c)+"',"+d.s+')">'+l+"</a>"),p="<div class=filelist file=3><input file=3 style=float:left name=fd class=fcb type=checkbox onchange=p13setActions() value='"+d.nx+"'>&nbsp;<span style=float:right;padding-right:4px>"+u+'</span><span title="'+l+'"><div class=fileIcon'+d.t+"></div>"+m+"</span></div>"}d.t<3?t+=p:o+=p}if(QH("p13files",t+o),QH("p13currentpath",n),QE("p13FolderUp",0!=p13filetreelocation.length),null!=e){var g=document.getElementsByName("fd");for(a=0;a<g.length;a++)e.indexOf(p13filetree.dir[g[a].value].n)>=0&&(g[a].checked=!0)}p13setActions()}function p13folderset(e){p13targetpath=joinPaths(p13filetree.path,p13filetree.dir[e].n).split("\\").join("/"),files&&(p13storeCurrentPath(p13targetpath),files.sendText({action:"ls",reqid:1,path:p13targetpath}))}function p13folderup(e){if(null==e)p13filetreelocation.pop();else for(;p13filetreelocation.length>e;)p13filetreelocation.pop();p13targetpath=p13filetreelocation.join("/"),files&&(p13storeCurrentPath(p13targetpath),files.sendText({action:"ls",reqid:1,path:p13targetpath}))}function p13storeCurrentPath(e){var t=[],o=-1;try{t=JSON.parse(getstore("_devFilePaths","[]"))}catch(e){}for(var n=0;n<t.length;n++)t[n].n==currentNode._id&&(o=n);for(o>=0&&t.splice(o,1),t.push({n:currentNode._id,p:e});t.length>40;)t.shift();putstore("_devFilePaths",JSON.stringify(t))}function p13sort_filename(e,t){return e.ln>t.ln?1*p13sortorder:e.ln<t.ln?-1*p13sortorder:0}function p13sort_timestamp(e,t){return e.d>t.d?1*p13sortorder:e.d<t.d?-1*p13sortorder:0}function p13sort_bysize(e,t){return e.s==t.s?p13sort_filename(e,t):(e.s-t.s)*p13sortorder}function p13sort_files(e){var t=[],o=Q("p13sortdropdown").value;for(var n in e)e[n].nx=n,null==e[n].s&&(e[n].s=0),null==e[n].n&&(e[n].n=n),e[n].ln=e[n].n.toLowerCase(),t.push(e[n]);return p13sortorder=1,o>3&&(p13sortorder=-1,o-=3),1==o?t.sort(p13sort_filename):2==o?t.sort(p13sort_bysize):3==o&&t.sort(p13sort_timestamp),t}function p13setActions(){var e=currentNode.agent&&14!=currentNode.agent.id;if(null==p13filetree)QE("p13DeleteFileButton",!1),QE("p13NewFolderButton",!1),QE("p13UploadButton",!1),QE("p13RenameFileButton",!1),QE("p13SelectAllButton",!1),Q("p13SelectAllButton").value="Todos",QE("p13RefreshButton",!1),QE("p13CutButton",!1),QE("p13CopyButton",!1),QE("p13PasteButton",!1);else{var t=p13getFileSelCount(),o=p13getFileCount(),n=p13getFileSelCount(!1),i=isWindowsNode(currentNode);QE("p13DeleteFileButton",e&&t>0&&(p13filetreelocation.length>0||0==i)),QE("p13NewFolderButton",e&&(p13filetreelocation.length>0||0==i)),QE("p13UploadButton",e&&(p13filetreelocation.length>0||0==i)),QE("p13RenameFileButton",e&&1==t&&(p13filetreelocation.length>0||0==i)),QE("p13SelectAllButton",o>0),Q("p13SelectAllButton").value=t>0?"Ninguno":"Todos",QE("p13RefreshButton",!0),QE("p13CutButton",e&&t>0&&t==n&&3!=currentNode.mtype&&(p13filetreelocation.length>0||0==i)),QE("p13CopyButton",e&&t>0&&t==n&&3!=currentNode.mtype&&(p13filetreelocation.length>0||0==i)),QE("p13PasteButton",e&&3!=currentNode.mtype&&(p13filetreelocation.length>0||0==i)&&null!=p13clipboard&&p13clipboard.length>0)}1==(null!=files&&0!=files.state)&&2!=files.contype||null==filesNode.agent||3==filesNode.agent.id||4==filesNode.agent.id?QH("filesCustomUpperRight",""):QH("filesCustomUpperRight","<a style=cursor:pointer onclick=cmsshportaction(1,event)>"+format("Puerto SSH {0}",filesNode.sshport?filesNode.sshport:22)+"</a>"),QV("filesActionsBtn",3!=filesNode.mtype)}function p13getFileSelCount(e){for(var t=0,o=document.getElementsByName("fd"),n=0;n<o.length;n++)!o[n].checked||0==e&&"3"!=o[n].attributes.file.value||t++;return t}function p13getFileSelDirCount(){for(var e=0,t=document.getElementsByName("fd"),o=0;o<t.length;o++)t[o].checked&&"999"==t[o].attributes.file.value&&e++;return e}function p13getFileCount(){return document.getElementsByName("fd").length}function p13selectallfile(){for(var e=0==p13getFileSelCount(),t=document.getElementsByName("fd"),o=0;o<t.length;o++)t[o].checked=e;p13setActions()}function p13createfolder(){setDialogMode(2,"Nueva Carpeta",3,p13createfolderEx,"<input type=text id=p13renameinput maxlength=64 onkeyup=p13fileNameCheck(event) style=width:100% />"),focusTextBox("p13renameinput"),p13fileNameCheck()}function p13createfolderEx(){files.sendText({action:"mkdir",reqid:1,path:p13filetreelocation.join("/")+"/"+Q("p13renameinput").value}),p13folderup(999)}function p13deletefile(){var e=p13getFileSelCount(),t=p13getFileSelDirCount()>0?"<br /><br /><label><input type=checkbox id=p13recdeleteinput>Eliminado recursivo</label><br>":"<input type=checkbox id=p13recdeleteinput style='display:none'>";setDialogMode(2,"Eliminar",3,p13deletefileEx,e>1?format("¿Eliminar {0} elementos seleccionados?",e)+t:"¿Eliminar elemento seleccionado?"+t)}function p13deletefileEx(){for(var e=[],t=document.getElementsByName("fd"),o=0;o<t.length;o++)t[o].checked&&e.push(p13filetree.dir[t[o].value].n);files.sendText({action:"rm",reqid:1,path:p13filetreelocation.join("/"),delfiles:e,rec:Q("p13recdeleteinput").checked}),p13folderup(999)}function p13renamefile(){for(var e,t=document.getElementsByName("fd"),o=0;o<t.length;o++)t[o].checked&&(e=p13filetree.dir[t[o].value].n);setDialogMode(2,"Renombrar",3,p13renamefileEx,'<input type=text id=p13renameinput maxlength=64 onkeyup=p13fileNameCheck(event) style=width:100% value="'+e+'" />',{action:"rename",path:p13filetreelocation.join("/"),oldname:e}),focusTextBox("p13renameinput"),p13fileNameCheck()}function p13renamefileEx(e,t){t.newname=Q("p13renameinput").value,files.sendText(t),p13folderup(999)}function p13fileNameCheck(e){var t=isFilenameValid(Q("p13renameinput").value);QE("idx_dlgOkButton",t),1==t&&null!=e&&13==e.keyCode&&dialogclose(1)}function p13uploadFile(){setDialogMode(2,"Cargar Archivo",3,p13uploadFileEx,"<input type=file name=files id=p13uploadinput style=width:100% multiple=multiple onchange=\"updateUploadDialogOk('p13uploadinput')\" />"),updateUploadDialogOk("p13uploadinput")}function p13uploadFileEx(){p13doUploadFiles(Q("p13uploadinput").files)}function p13viewfile(){for(var e=document.getElementsByName("fd"),t=0;t<e.length;t++)if(e[t].checked){p13filetree.dir[e[t].value].s<=204800?p13downloadfile(encodeURIComponent(p13filetreelocation.join("/")+"/"+p13filetree.dir[e[t].value].n),encodeURIComponent(p13filetree.dir[e[t].value].n),p13filetree.dir[e[t].value].s,"viewer"):messagebox("Editor de Archivos","Solo se pueden editar archivos de menos de 200k.");break}}var downloadFile,uploadFile,p13clipboard=null,p13clipboardFolder=null,p13clipboardCut=0;function p13copyFile(e){var t=document.getElementsByName("fd");p13clipboard=[],p13clipboardCut=e,p13clipboardFolder=p13targetpath;for(var o=0;o<t.length;o++)t[o].checked&&"3"==t[o].attributes.file.value&&p13clipboard.push(p13filetree.dir[t[o].value].n);p13updateClipview()}function p13pasteFile(){var e="";null!=p13clipboard&&p13clipboard.length>0&&(e=0==p13clipboardCut?p13clipboard.length>1?format("¿Confirmar copia de {0} entradas a esta ubicación?",p13clipboard.length):format("¿Confirmar la copia de 1 entrada a esta ubicación?"):p13clipboard.length>1?format("¿Confirmar el movimiento de {0} entradas a esta ubicación?",p13clipboard.length):format("¿Confirmar el movimiento de 1 entrada a esta ubicación?")),setDialogMode(2,"Pegar",3,p13pasteFileEx,e)}function p13pasteFileEx(){files.sendText({action:0==p13clipboardCut?"copy":"move",reqid:1,scpath:p13clipboardFolder,dspath:p13targetpath,names:p13clipboard}),p13folderup(999),1==p13clipboardCut&&(p13clipboard=null,p13clipboardFolder=null,p13clipboardCut=0,p13updateClipview())}function p13updateClipview(){var e="";null!=p13clipboard&&p13clipboard.length>0&&(e=0==p13clipboardCut?p13clipboard.length>1?format('Manteniendo {0} entradas para copiar, <a href=# onclick="return p13clearClip()" style=cursor:pointer>Eliminar</a>.',p13clipboard.length):format('Manteniendo 1 entrada para copiar, <a href=# onclick="return p13clearClip()" style=cursor:pointer>Eliminar</a>.'):p13clipboard.length>1?format('Manteniendo {0} entradas para mover, <a href=# onclick="return p13clearClip()" style=cursor:pointer>Eliminar</a>.',p13clipboard.length):format('Manteniendo 1 entrada para mover, <a href=# onclick="return p13clearClip()" style=cursor:pointer>Eliminar</a>.')),QH("p13bottomstatus",e),p13setActions()}function p13clearClip(){return p13clipboard=null,p13clipboardFolder=null,p13clipboardCut=0,p13updateClipview(),!1}function updateUploadDialogOk(e){QE("idx_dlgOkButton",""!=Q(e).value)}function getFileSelCount(e){for(var t=0,o=document.getElementsByName("fc"),n=0;n<o.length;n++)!o[n].checked||0==e&&"3"!=o[n].attributes.file.value||t++;return t}function getFileCount(){return document.getElementsByName("fc").length}function p13downloadfile(e,t,o){xxdialogMode||downloadFile||!files||(downloadFile={path:decodeURIComponent(e),file:decodeURIComponent(t),size:o,tsize:0,data:"",state:0,id:Math.random()},files.sendText({action:"download",sub:"start",id:downloadFile.id,path:downloadFile.path}),setDialogMode(2,"Descargar Archivo",10,p13downloadFileCancel,"<div>"+EscapeHtml(downloadFile.file)+"</div><br /><progress id=d2progressBar style=width:100% value=0 max="+o+" />"))}function p13downloadFileCancel(){setDialogMode(0),files.sendText({action:"download",sub:"cancel",id:downloadFile.id}),downloadFile=null}function p13gotDownloadCommand(e){null!=downloadFile&&e.id==downloadFile.id&&("start"==e.sub?(downloadFile.state=1,files.sendText({action:"download",sub:"startack",id:downloadFile.id})):"cancel"==e.sub&&(downloadFile=null,setDialogMode(0)))}function p13gotDownloadBinaryData(e){downloadFile&&0!=downloadFile.state&&(e.length>4&&(downloadFile.tsize+=e.length-4,downloadFile.data+=e.substring(4),Q("d2progressBar").value=downloadFile.tsize),1&ReadInt(e,0)?(saveAs(data2blob(downloadFile.data),downloadFile.file),downloadFile=null,setDialogMode(0)):files.sendText({action:"download",sub:"ack",id:downloadFile.id}))}function p13doUploadFiles(e){if(!xxdialogMode){var t=isWindowsNode(currentNode),o=[],n=0;for(var i in p13filetree.dir)t?o.push(p13filetree.dir[i].n.toLowerCase()):o.push(p13filetree.dir[i].n);for(i=0;i<e.length;i++)t?o.indexOf(e[i].name.toLowerCase())>=0&&n++:o.indexOf(e[i].name)>=0&&n++;0==n?p13uploadFileContinue(1,e):setDialogMode(2,"Cargar Archivo",3,p13uploadFileContinue,format(1==n?"La carga sobrescribirá 1 archivo. ¿Continuar?":"La carga sobrescribirá {0} archivos. ¿Continuar?",n),e)}}function p13uploadFileContinue(e,t){(uploadFile={}).xpath=p13filetreelocation.join("/"),uploadFile.xfiles=t,uploadFile.xfilePtr=-1,setDialogMode(2,"Cargar Archivo",10,p13uploadFileCancel,"<div id=p13dfileName>Conectando....</div><br /><progress id=d2progressBar style=width:100% value=0 max=0 />"),p13uploadNextFile()}const byteToHex=[];for(var n=0;n<=255;++n){var hexOctet=n.toString(16).padStart(2,"0");byteToHex.push(hexOctet)}function arrayBufferToHex(e){return Array.prototype.map.call(new Uint8Array(e),e=>byteToHex[e]).join("")}function performHash(e,t){window.crypto.subtle.digest("SHA-384",e).then(function(e){t(arrayBufferToHex(e))},function(){t(null)})}function performHashOnFile(e,t){var o=new FileReader;o.onerror=function(e){t(null)},o.onload=function(){window.crypto.subtle.digest("SHA-384",o.result).then(function(e){t(arrayBufferToHex(e))},function(){t(null)})},o.readAsArrayBuffer(e)}function p13uploadNextFile(){if(uploadFile.xfilePtr++,uploadFile.xfiles.length>uploadFile.xfilePtr){uploadFile.xptr=0;var e=uploadFile.xfiles[uploadFile.xfilePtr];if(QH("p13dfileName",EscapeHtml(e.name)),Q("d2progressBar").max=e.size,Q("d2progressBar").value=0,null==e.xdata){uploadFile.xfile=e;var t=null;for(var o in p13filetree.dir)p13filetree.dir[o].n==e.name&&(t=p13filetree.dir[o]);null!=t&&t.s<=uploadFile.xfile.size?performHashOnFile(uploadFile.xfile,function(o){files.sendText(JSON.stringify({action:"uploadhash",reqid:uploadFile.xfilePtr,path:uploadFile.xpath,name:e.name,tag:{h:o.toUpperCase(),s:t.s,skip:t.s==uploadFile.xfile.size}}))}):files.sendText(JSON.stringify({action:"upload",reqid:uploadFile.xfilePtr,path:uploadFile.xpath,name:e.name,size:uploadFile.xfile.size}))}else uploadFile.xdata=e.xdata,files.sendText(JSON.stringify({action:"upload",reqid:uploadFile.xfilePtr,path:uploadFile.xpath,name:e.name,size:uploadFile.xdata.byteLength}))}else p13uploadFileTransferDone()}function p13uploadFileCancel(e,t){null!=uploadFile&&(files.sendText(JSON.stringify({action:"uploadcancel",reqid:uploadFile.xfilePtr})),uploadFile=null),p13uploadFileTransferDone()}function p13uploadFileTransferDone(){uploadFile=null,setDialogMode(0),p13folderup(9999)}function p13gotUploadData(e){if(null!=uploadFile&&parseInt(uploadFile.xfilePtr)==parseInt(e.reqid))switch(e.action){case"uploadstart":uploadFile.xdataPriming=8,p13uploadNextPart(!1);break;case"uploadack":p13uploadNextPart(!1);break;case"uploaddone":uploadFile.xfiles.length>uploadFile.xfilePtr+1?p13uploadNextFile():p13uploadFileTransferDone();break;case"uploaderror":p13uploadFileCancel();break;case"uploadhash":var t=uploadFile.xfiles[uploadFile.xfilePtr];t&&(e.tag.h===e.hash?e.tag.skip?p13uploadNextFile():(uploadFile.xptr=e.tag.s,files.sendText(JSON.stringify({action:"upload",reqid:uploadFile.xfilePtr,path:uploadFile.xpath,name:t.name,size:uploadFile.xfile.size,append:!0}))):files.sendText(JSON.stringify({action:"upload",reqid:uploadFile.xfilePtr,path:uploadFile.xpath,name:t.name,size:uploadFile.xfile.size,append:!1})))}}function p13uploadNextPart(e){if(uploadFile.xdata){var t=uploadFile.xdata,o=uploadFile.xptr;if(o>=t.byteLength)files.sendText(JSON.stringify({action:"uploaddone",reqid:uploadFile.xfilePtr}));else{if((a=uploadFile.xptr+(attemptWebRTC?16384:65536))>t.byteLength){if(1==e)return;a=t.byteLength}var n=new Uint8Array(t.slice(o,a));if(123==n[0]||0==n[0]){var i=new Uint8Array(a-o+1);i.set(n,1),files.send(i)}else files.send(n);uploadFile.xptr=a,Q("d2progressBar").value=a}}else if(uploadFile.xfile){if(null!=uploadFile.xreader)return;if(uploadFile.xptr>=uploadFile.xfile.size)return;var a;if((a=uploadFile.xptr+(attemptWebRTC?16384:65536))>uploadFile.xfile.size){if(1==e)return;a=uploadFile.xfile.size}uploadFile.xreader=new FileReader,uploadFile.xreader.onerror=function(e){console.log(e)},uploadFile.xreader.onload=function(){var e=uploadFile.xreader.result;if(delete uploadFile.xreader,null!=e){var t=new Uint8Array(e);if(123==t[0]||0==t[0]){var o=new Uint8Array(e.byteLength+1);o.set(t,1),files.send(o)}else files.send(t);uploadFile.xptr=a,Q("d2progressBar").value=a,uploadFile.xptr>=uploadFile.xfile.size?files.sendText(JSON.stringify({action:"uploaddone",reqid:uploadFile.xfilePtr})):uploadFile.xdataPriming>0&&(uploadFile.xdataPriming--,p13uploadNextPart(!0))}},uploadFile.xreader.readAsArrayBuffer(uploadFile.xfile.slice(uploadFile.xptr,a))}}var consoleNode,DeviceDetailsHardware=null,DeviceDetailsNetwork=null,DeviceDetailsNodeId=null;function updateDeviceDetails(e,t,o){if(null!=currentNode&&(null==e&&(e=currentNode),currentNode._id==e._id)){DeviceDetailsNodeId!=e._id&&(DeviceDetailsHardware=null,DeviceDetailsNetwork=null,DeviceDetailsNodeId=e._id),null!=t&&(DeviceDetailsHardware=t),null!=o&&(DeviceDetailsNetwork=o),null==(t=DeviceDetailsHardware)&&(t={}),null==(o=DeviceDetailsNetwork)&&(o={});var n=[],i={},a="";if(e.rname&&(a+=addDetailItem("Nombre",EscapeHtml(e.rname),i)),t.windows&&t.windows.osinfo&&t.windows.osinfo.Description&&(a+=addDetailItem("Descripción",EscapeHtml(t.windows.osinfo.Description),i)),e.osdesc&&(a+=addDetailItem("Versión",EscapeHtml(e.osdesc),i)),t.windows&&t.windows.osinfo){if((f=t.windows.osinfo).BuildRevision&&(a+=addDetailItem("Número de compilación",EscapeHtml(f.BuildRevision),i)),f.OSArchitecture&&(f.OSArchitecture.startsWith("32")?a+=addDetailItem("Arquitectura","32 bits",i):f.OSArchitecture.startsWith("64")?a+=addDetailItem("Arquitectura","64 bits",i):a+=addDetailItem("Arquitectura",EscapeHtml(f.OSArchitecture),i)),f.LastBootUpTime){var s={year:parseInt(f.LastBootUpTime.substring(0,4)),month:parseInt(f.LastBootUpTime.substring(4,6))-1,day:parseInt(f.LastBootUpTime.substring(6,8)),hours:parseInt(f.LastBootUpTime.substring(8,10)),minutes:parseInt(f.LastBootUpTime.substring(10,12)),seconds:parseInt(f.LastBootUpTime.substring(12,14))};a+=addDetailItem("Last Boot Up Time",printDateTime(new Date(s.year,s.month,s.day,s.hours,s.minutes,s.seconds)))}f.Domain&&(a+=addDetailItem(f.PartOfDomain?"Dominio":"Grupo de trabajo",EscapeHtml(f.Domain),i)),f.DomainState>0&&(a+=addDetailItem("Estado del dominio",domainStates[f.DomainState]?domainStates[f.DomainState]:"Desconocido",i))}if(t.linux&&t.linux.LastBootUpTime){s={year:(r=new Date(t.linux.LastBootUpTime)).getFullYear(),month:r.getMonth(),day:r.getDate(),hours:r.getHours(),minutes:r.getMinutes(),seconds:r.getSeconds()};a+=addDetailItem("Last Boot Up Time",printDateTime(new Date(s.year,s.month,s.day,s.hours,s.minutes,s.seconds)))}if(t.darwin&&t.darwin.LastBootUpTime){var r;s={year:(r=new Date(1e3*t.darwin.LastBootUpTime)).getFullYear(),month:r.getMonth(),day:r.getDate(),hours:r.getHours(),minutes:r.getMinutes(),seconds:r.getSeconds()};a+=addDetailItem("Last Boot Up Time",printDateTime(new Date(s.year,s.month,s.day,s.hours,s.minutes,s.seconds)))}if(e.wsc){var l=[];null!=e.wsc.antiVirus&&("OK"==e.wsc.antiVirus?l.push("AV - <span style=color:green>OK</span>"):l.push("AV - <span style=color:red>MALO</span>")),null!=e.wsc.autoUpdate&&("OK"==e.wsc.autoUpdate?l.push("Actualizar - <span style=color:green>OK</span>"):l.push("Actualizar - <span style=color:red>MALO</span>")),null!=e.wsc.firewall&&("OK"==e.wsc.firewall?l.push("Cortafuegos - <span style=color:green>OK</span>"):l.push("Cortafuegos - <span style=color:red>MALO</span>")),a+=addDetailItem("Seguridad de Windows",l.join(", "))}if(e.defender){l=[];null!=e.defender.RealTimeProtection&&(1==e.defender.RealTimeProtection?l.push("RealTimeProtection - <span style=color:green>On</span>"):l.push("RealTimeProtection - <span style=color:red>Apagado</span>")),null!=e.defender.TamperProtected&&(1==e.defender.TamperProtected?l.push("TamperProtection - <span style=color:green>On</span>"):l.push("TamperProtection - <span style=color:red>Apagado</span>")),null!=e.defender.AntivirusSignatureVersion&&l.push("Versión de firma - <span style=color:green>"+EscapeHtml(e.defender.AntivirusSignatureVersion)+"</span>"),l.length>0&&(a+=addDetailItem("Windows Defender",l.join(", ")))}if(e.av&&e.av.length>0){l=[];for(var d in e.av)if(e.av[d].product){var c=EscapeHtml(e.av[d].product);!0!==e.av[d].enabled&&(c+=" - <span style=color:red>Deshabilitado</span>"),!0!==e.av[d].updated&&(c+=" - <span style=color:red>Desactualizado</span>"),1==e.av[d].enabled&&1==e.av[d].updated&&(c+=" - <span style=color:green>OK</span>"),l.push(c)}a+=addDetailItem("Antivirus",l.join("<br />"))}if(e.users&&e.users.length>0){var u=e.users.map(function(t,o){var n=e.upnusers&&e.upnusers[o],i=2&features3?e.users&&null!=e.users[o]?EscapeHtml(e.users[o]):null:null!=n?EscapeHtml(n):null,a=EscapeHtml(2&features3&&null!=n?n:t);return e.lusers&&e.lusers.indexOf(t)>=0?addKeyLinkConditional(a,i?i+" - Bloqueada":"Bloqueada",!0):i?"<span style=cursor:default title='"+i+"'>"+a+"</span>":a}).join(", ");a+=addDetailItem(e.users.length>1?"Usuarios activos":"Usuario activo",u)}if(e.idletime&&-1!=e.idletime&&(a+=addDetailItem("Tiempo de inactividad",printTimer(e.idletime))),""!=a&&n.push({name:"Sistema Operativo",html:a,img:"software"}),e.agent){a="";if(null!=e.agent&&null!=e.agent.id&&null!=e.agent.ver){var p="";p=e.agent.id<=agentsStr.length?agentsStr[e.agent.id]:agentsStr[0],0!=e.agent.ver&&(p+=" v"+e.agent.ver),14==e.agent.id&&(p=e.agent.core),a+=addDetailItem("Agente Mesh",p)}if(e.firstconnect&&(a+=addDetailItem("Conexión del primer agente",printDateTime(new Date(e.firstconnect)))),1&e.conn?a+=addDetailItem("Última conexión del agente","Conectado ahora"):e.lastconnect&&(a+=addDetailItem("Última conexión del agente",printDateTime(new Date(e.lastconnect)))),e.lastaddr){var m=e.lastaddr.split(":");m.length>2?a+=addDetailItem("Última dirección IP del agente",e.lastaddr):isPrivateIP(e.lastaddr)?a+=addDetailItem("Última dirección IP del agente",m[0]):a+=addDetailItem("Última dirección IP del agente",'<a href="https://iplocation.com/?ip='+m[0]+'" rel="noreferrer noopener" target="MeshIPLoopup">'+m[0]+"</a>")}if(null!=t.agentvers&&t.agentvers.compileTime)try{var g=Date.parse(t.agentvers.compileTime);a+=addDetailItem("Fecha de compilación",printDateTime(new Date(g)))}catch(e){}null!=t.time&&(a+=addDetailItem("Última actualización de detalles",printDateTime(new Date(t.time)))),""!=a&&n.push({name:"Agente Mesh",html:a,img:"meshagent"})}if(t.mobile){a="";t.mobile.brand&&t.mobile.model&&(a+=addDetailItem("Modelo",EscapeHtml(t.mobile.brand+", "+t.mobile.model),i)),t.mobile.device&&(a+=addDetailItem("Dispositivo",EscapeHtml(t.mobile.device),i)),t.mobile.bootloader&&(a+=addDetailItem("Bootloader",EscapeHtml(t.mobile.bootloader),i)),t.mobile.id&&(a+=addDetailItem("Identificador",EscapeHtml(t.mobile.id),i)),t.mobile.host&&(a+=addDetailItem("Nombre de Host",EscapeHtml(t.mobile.host),i)),t.mobile.androidapi&&t.mobile.androidrelease&&(a+=addDetailItem("Android Version",EscapeHtml(t.mobile.androidrelease+", API Level "+t.mobile.androidapi),i)),""!=a&&n.push({name:"Dispositivo móvil",html:a,img:"mobile"})}if(null!=o.netif2){a="";for(var d in a+="<table style=width:100%>",o.netif2){var f=o.netif2[d];if(!(0==Array.isArray(f)||f.length<1||null==f[0]||"string"==typeof f[0].mac&&f[0].mac.startsWith("00:00:00:00"))){a+="<tr><td><div class=style10 style=border-radius:5px;padding:8px>",a+="<div style=margin-bottom:3px><b>"+EscapeHtml(d+(f[0].fqdn?", "+f[0].fqdn:""))+"</b></div>",f.desc&&(a+=addDetailItem("Descripción",EscapeHtml(f.desc).split("(R)").join("&reg;"))),"string"==typeof f[0].mac&&(f[0].gatewaymac?a+=addDetailItem("Capa MAC",format("MAC: {0}, Puerta de Enlace: {1}",EscapeHtml(f[0].mac),EscapeHtml(f[0].gatewaymac))):a+=addDetailItem("Capa MAC",format("MAC: {0}",EscapeHtml(f[0].mac)))),"number"==typeof f[0].speed&&0x8000000000000000!=f[0].speed&&f[0].speed>0&&(a+=addDetailItem("Velocidad de la interfaz",format("{0}",getNetworkSpeed(f[0].speed))));for(var h=0;h<f.length;h++){var v=f[h],k=[];v.address&&k.push(format("IP: {0}",EscapeHtml(v.address))),v.netmask&&k.push(format("Máscara: {0}",EscapeHtml(v.netmask))),v.gateway&&k.push(format("Puerta de enlace: {0}",EscapeHtml(v.gateway))),k.length>0&&("IPv4"==v.family&&(a+=addDetailItem("Capa IPv4",k.join(", "))),"IPv6"==v.family&&(a+=addDetailItem("Capa IPv6",k.join(", "))))}a+="</div></td></tr>"}}t.network&&t.network.dns&&(a+="<tr><td><div class=style10 style=border-radius:5px;padding:8px>",a+=addDetailItem("<b>DNS Servers</b>",t.network.dns.join(", ")),a+="</div></td></tr>"),""!=(a+="</table>")&&n.push({name:"Redes",html:a,img:"networking"})}if(null!=e.intelamt){a="";a+=addDetailItem("Versión",e.intelamt.ver?"v"+EscapeHtml(e.intelamt.ver):"<i>Desconocido</i>",i),a+=addDetailItem("Identificador",e.intelamt.uuid?EscapeHtml(e.intelamt.uuid):"<i>Desconocido</i>",i);var y={0:nobreak("No Activada (Pre)"),1:nobreak("No Activada (entrada)"),2:nobreak("Activado")},b="";2==e.intelamt.state&&e.intelamt.flags&&(2&e.intelamt.flags?b=", Modo de Control de Cliente (CCM)":4&e.intelamt.flags&&(b=", Modo de Control de Administrador (ACM)")),a+=addDetailItem("Estado de Aprovisionamiento",(e.intelamt.state?y[e.intelamt.state]:"<i>Desconocido</i>")+b,i),a+=addDetailItem("Seguridad",1==e.intelamt.tls?"Asergurado usando TLS":"TLS no esta configurado",i),""!=(a+=addDetailItem("Credenciales del Administrador",null==e.intelamt.user||""==e.intelamt.user||null!=e.intelamt.warn&&9&e.intelamt.warn?"No Conocido":"Conocido",i))&&("number"==typeof e.intelamt.sku&&16&e.intelamt.sku?n.push({name:"Capacidad de gestión estándar de Intel&reg; (Intel&reg; SM)",html:a,img:"amt"}):n.push({name:"Intel&reg; Active Management Technology (Intel&reg; AMT)",html:a,img:"amt"}))}if(t.identifiers){a="";var x=t.identifiers;if(x.bios_vendor&&(a+=addDetailItem("Fabricante",EscapeHtml(x.bios_vendor),i)),x.bios_version&&(a+=addDetailItem("Versión",EscapeHtml(x.bios_version),i)),x.bios_serial&&(a+=addDetailItem("Número de Serie",EscapeHtml(x.bios_serial),i)),x.bios_mode&&(a+=addDetailItem("Mode",EscapeHtml(x.bios_mode),i)),""!=a&&n.push({name:"BIOS",html:a,img:"chip"}),a="",x.board_vendor&&(a+=addDetailItem("Fabricante",EscapeHtml(x.board_vendor),i)),x.board_name&&(a+=addDetailItem("Nombre",EscapeHtml(x.board_name),i)),x.board_serial&&""!=x.board_serial&&(a+=addDetailItem("Número de Serie",EscapeHtml(x.board_serial),i)),x.board_version&&(a+=addDetailItem("Versión",EscapeHtml(x.board_version),i)),x.product_uuid&&(a+=addDetailItem("Identificador",EscapeHtml(x.product_uuid),i)),x.cpu_name&&(a+=addDetailItem("CPU",EscapeHtml(x.cpu_name).split("(TM)").join("&trade;").split("(R)").join("&reg;"),i)),x.gpu_name)for(var d in x.gpu_name)a+=addDetailItem("GPU",EscapeHtml(x.gpu_name[d]).split("(TM)").join("&trade;").split("(R)").join("&reg;"),i);""!=a&&n.push({name:"Placa Madre",html:a,img:"motherboard"}),a="",x.chassis_manufacturer&&(a+=addDetailItem("Fabricante",EscapeHtml(x.chassis_manufacturer),i)),x.product_name&&(a+=addDetailItem("Nombre del Producto",EscapeHtml(x.product_name),i)),x.chassis_serial&&(a+=addDetailItem("Número de Serie",EscapeHtml(x.chassis_serial),i)),x.chassis_assettag&&(a+=addDetailItem("Etiqueta de activo",EscapeHtml(x.chassis_assettag),i)),""!=a&&n.push({name:"Sistema",html:a,img:"system"})}if(t.tpm){a="";var w=t.tpm;w.SpecVersion&&(a+=addDetailItem("SpecVersion",parseFloat(EscapeHtml(w.SpecVersion)).toFixed(1),i)),w.ManufacturerId&&(a+=addDetailItem("Identificador",EscapeHtml(w.ManufacturerId),i)),w.ManufacturerVersion&&(a+=addDetailItem("Versión",EscapeHtml(w.ManufacturerVersion),i)),null!=w.IsActivated&&(a+=addDetailItem("Activado",w.IsActivated?"Yes":"No",i)),null!=w.IsEnabled&&(a+=addDetailItem("Habilitado",w.IsEnabled?"Yes":"No",i)),null!=w.IsOwned&&(a+=addDetailItem("Propiedad",w.IsOwned?"Yes":"No",i)),""!=a&&n.push({name:"TPM",html:a,img:"tpm"})}if(t.battery){a="";for(var d in a+="<table style=width:100%>",t.battery){var S=t.battery[d];a+="<tr><td><div class=style10 style=border-radius:5px;padding:8px>",a+="<div style=margin-bottom:3px><b>"+EscapeHtml(S.DeviceName?S.DeviceName:"Desconocido")+"</b></div>",S.CycleCount&&(a+=addDetailItem("Conteo de ciclos",EscapeHtml(S.CycleCount),i)),S.FullChargedCapacity&&(a+=addDetailItem("Capacidad de carga completa",format("{0} mWh",S.FullChargedCapacity),i)),S.EstimatedRuntime&&(a+=addDetailItem("Tiempo de ejecución estimado",format("{0} minutos",Math.floor(S.EstimatedRuntime/60)),i)),S.Chemistry&&(a+=addDetailItem("Química",EscapeHtml(S.Chemistry),i)),S.DesignedCapacity&&(a+=addDetailItem("Capacidad de diseño",format("{0} mWh",S.DesignedCapacity),i)),S.ManufactureDate&&(a+=addDetailItem("Fecha de fabricación",EscapeHtml(S.ManufactureDate),i)),S.ManufactureName&&(a+=addDetailItem("Nombre de fabricación",EscapeHtml(S.ManufactureName),i)),S.SerialNumber&&(a+=addDetailItem("Número de serie",EscapeHtml(S.SerialNumber),i)),S.ChargeRate&&(a+=addDetailItem("Tasa de carga",format("{0} mW",S.ChargeRate),i)),null!=S.Charging&&(a+=addDetailItem("Cargando",S.Charging?"Yes":"No",i)),S.DischargeRate&&(a+=addDetailItem("Tasa de descarga",format("{0} mW",S.DischargeRate),i)),null!=S.Discharging&&(a+=addDetailItem("Descarga",S.Discharging?"Yes":"No",i)),S.RemainingCapacity&&(a+=addDetailItem("Capacidad restante",format("{0} mWh",S.RemainingCapacity),i)),S.Voltage&&(a+=addDetailItem("Voltaje",format("{0} V",S.Voltage/1e3),i)),S.Health&&(a+=addDetailItem("Salud",format("{0} %",S.Health),i)),S.BatteryCharge&&(a+=addDetailItem("Carga de batería",format("{0} %",S.BatteryCharge),i)),a+="</div>"}""!=(a+="</table>")&&n.push({name:"Batería",html:a,img:"battery"})}if(t.windows&&t.windows.memory&&t.windows.memory.length>0){a="";for(var d in t.windows.memory.sort(function(e,t){return e.BankLabel>t.BankLabel?1:e.BankLabel<t.BankLabel?-1:0}),a+="<table style=width:100%>",t.windows.memory){f=t.windows.memory[d];a+="<tr><td><div class=style10 style=border-radius:5px;padding:8px>",a+="<div style=margin-bottom:3px><b>"+EscapeHtml(f.BankLabel?f.BankLabel:f.DeviceLocator?f.DeviceLocator:"Unknown")+"</b></div>",f.Capacity&&f.Speed?a+=addDetailItem("Capacidad / Velocidad",format("{0} Mb, {1} Mhz",f.Capacity/1024/1024,f.Speed),i):f.Capacity&&(a+=addDetailItem("Capacidad",format("{0} Mb",f.Capacity/1024/1024),i)),f.PartNumber&&(a+=addDetailItem("Numero de Parte",EscapeHtml(f.Manufacturer&&"Undefined"!=f.Manufacturer?f.Manufacturer+", ":"")+EscapeHtml(f.PartNumber),i)),a+="</div>"}""!=(a+="</table>")&&n.push({name:"Memoria",html:a,img:"ram"})}if(t.linux&&t.linux.memory&&t.linux.memory.Memory_Device.length>0){a="";for(var d in t.linux.memory.Memory_Device.sort(function(e,t){return e.Locator>t.Locator?1:e.Locator<t.Locator?-1:0}),a+="<table style=width:100%>",t.linux.memory.Memory_Device){(f=t.linux.memory.Memory_Device[d]).Size&&"No Module Installed"==f.Size||(a+="<tr><td><div class=style10 style=border-radius:5px;padding:8px>",a+="<div style=margin-bottom:3px><b>"+EscapeHtml(f.Locator?f.Locator:"Unknown")+"</b></div>",f.Size&&f.Speed?a+=addDetailItem("Capacidad / Velocidad",format("{0}, {1}",f.Size,f.Speed),i):f.Size&&(a+=addDetailItem("Capacidad",format("{0}",f.Size),i)),f.PartNumber&&(a+=addDetailItem("Numero de Parte",EscapeHtml(f.Manufacturer&&"Undefined"!=f.Manufacturer?f.Manufacturer+", ":"")+EscapeHtml(f.PartNumber),i)),a+="</div>")}""!=(a+="</table>")&&n.push({name:"Memoria",html:a,img:"ram"})}if(t.darwin&&t.darwin.memory&&t.darwin.memory.length>0){a="";for(var d in a+="<table style=width:100%>",t.darwin.memory){(f=t.darwin.memory[d]).Size&&"No Module Installed"==f.Size||(a+="<tr><td><div class=style10 style=border-radius:5px;padding:8px>",a+="<div style=margin-bottom:3px><b>"+EscapeHtml(f.DeviceLocator?f.DeviceLocator:"Unknown")+"</b></div>",f.Size&&f.Speed?a+=addDetailItem("Capacidad / Velocidad",format("{0}, {1}",f.Size,f.Speed),i):f.Size&&(a+=addDetailItem("Capacidad",format("{0}",f.Size),i)),f.PartNumber&&(a+=addDetailItem("Numero de Parte",EscapeHtml(f.Manufacturer&&""!=f.Manufacturer?f.Manufacturer+", ":"")+EscapeHtml(f.PartNumber),i)),a+="</div>")}""!=(a+="</table>")&&n.push({name:"Memoria",html:a,img:"ram"})}if(t.identifiers&&x.storage_devices){a="";for(var d in x.storage_devices.sort(function(e,t){return e.Caption>t.Caption?1:e.Caption<t.Caption?-1:0}),a+="<table style=width:100%>",x.storage_devices){if((f=x.storage_devices[d]).Size){if(a+="<tr><td><div class=style10 style=border-radius:5px;padding:8px>",a+="<div style=margin-bottom:3px><b>"+EscapeHtml(f.Caption)+"</b></div>",f.Model&&f.Model!=f.Caption&&(a+=addDetailItem("Modelo",EscapeHtml(f.Model),i)),f.Size&&("string"==typeof f.Size&&parseInt(f.Size)==f.Size&&(f.Size=parseInt(f.Size)),"number"==typeof f.Size&&(a+=addDetailItem("Capacidad",format("{0} Mb",Math.floor(f.Size/1024/1024)),i)),"string"==typeof f.Size&&(a+=addDetailItem("Capacidad",EscapeHtml(f.Size),i))),t.windows&&t.windows.drives&&f.Model){const e=t.windows.drives.find(e=>e.Model===f.Model);e&&(a+=addDetailItem("Estado",EscapeHtml(e.Status),i))}a+="</div>"}}""!=(a+="</table>")&&n.push({name:"Almacenamiento",html:a,img:"storage"})}if(t.windows&&t.windows.volumes){a="";for(var d in t.windows.volumes){if(a+="<tr><td><div class=style10 style=border-radius:5px;padding:8px>",a+="<div style=margin-bottom:3px><b>"+d+":"+(null==(f=t.windows.volumes[d]).name||""==f.name?"":" - "+EscapeHtml(f.name))+"</b></div>",f.size){var C=["Bytes","KB","MB","GB","TB"],D=0===(h=parseInt(Math.floor(Math.log(Math.abs(f.size))/Math.log(1024)),10))?`${f.size} ${C[h]}`:`${(f.size/1024**h).toFixed(2)} ${C[h]}`;a+=addDetailItem("Capacidad",EscapeHtml(D),i)}if(f.sizeremaining){C=["Bytes","KB","MB","GB","TB"],D=0===(h=parseInt(Math.floor(Math.log(Math.abs(f.sizeremaining))/Math.log(1024)),10))?`${f.sizeremaining} ${C[h]}`:`${(f.sizeremaining/1024**h).toFixed(2)} ${C[h]}`;a+=addDetailItem("Capacidad restante",EscapeHtml(D),i)}if(f.type)a+=addDetailItem("File System",(""!=(Q=1==f.removable?"Removable":1==f.cdrom?"CD-ROM":"")?Q+" / ":"")+("Unknown"==f.type?"Desconocido":EscapeHtml(f.type)),i);if(f.protectionStatus||f.volumeStatus){var M=[];f.protectionStatus&&M.push("Habilitado"),f.volumeStatus&&"FullyDecrypted"==f.volumeStatus&&M.push("Fully Decrypted"),f.volumeStatus&&"EncryptionInProgress"==f.volumeStatus&&M.push("Encryption In Progress"),f.volumeStatus&&"FullyEncrypted"==f.volumeStatus&&M.push("Fully Encrypted"),M=M.join(" - "),f.recoveryPassword&&(M+=addKeyLink("",'deviceDetailsShowBitlockerInfo("'+encodeURIComponentEx(d)+'","'+encodeURIComponentEx(f.identifier)+'","'+encodeURIComponentEx(f.recoveryPassword)+'")')),a+=addDetailItem("BitLocker",M,i)}a+="</div>"}""!=a&&n.push({name:"Storage Volumes",html:"<table style=width:100%>"+a+"</table>",img:"storage"})}if(t.linux&&t.linux.volumes){a="";for(var d in t.linux.volumes){if(!(f=t.linux.volumes[d]).mount_point.startsWith("/var/lib/docker/overlay2")){if(a+="<tr><td><div class=style10 style=border-radius:5px;padding:8px>",a+="<div style=margin-bottom:3px><b>"+f.mount_point+"</b></div>",f.size){C=["KB","MB","GB","TB"],D=0===(h=parseInt(Math.floor(Math.log(Math.abs(f.size))/Math.log(1024)),10))?`${f.size} ${C[h]}`:`${(f.size/1024**h).toFixed(2)} ${C[h]}`;a+=addDetailItem("Capacidad",EscapeHtml(D),i)}if(f.available){if(0==Math.abs(f.available))D="0 KB";else C=["KB","MB","GB","TB"],D=0===(h=parseInt(Math.floor(Math.log(Math.abs(f.available))/Math.log(1024)),10))?`${f.available} ${C[h]}`:`${(f.available/1024**h).toFixed(2)} ${C[h]}`;a+=addDetailItem("Capacidad restante",EscapeHtml(D),i)}if(f.type)a+=addDetailItem("File System",(""!=(Q=1==f.removable?"Removable":1==f.cdrom?"CD-ROM":"")?Q+" / ":"")+("Unknown"==f.type?"Desconocido":EscapeHtml(f.type)),i);a+="</div>"}}""!=a&&n.push({name:"Storage Volumes",html:"<table style=width:100%>"+a+"</table>",img:"storage"})}if(t.darwin&&t.darwin.volumes){a="";for(var d in t.darwin.volumes){if(!(f=t.darwin.volumes[d]).mount_point.startsWith("/var/lib/docker/overlay2")){var Q;if(a+="<tr><td><div class=style10 style=border-radius:5px;padding:8px>",a+="<div style=margin-bottom:3px><b>"+f.mount_point+"</b></div>",f.size&&(a+=addDetailItem("Capacidad",EscapeHtml(f.size),i)),f.available&&(a+=addDetailItem("Capacidad restante",EscapeHtml(f.available),i)),f.type)a+=addDetailItem("File System",(""!=(Q=1==f.removable?"Removable":1==f.cdrom?"CD-ROM":"")?Q+" / ":"")+("Unknown"==f.type?"Desconocido":EscapeHtml(f.type)),i);a+="</div>"}}""!=a&&n.push({name:"Storage Volumes",html:"<table style=width:100%>"+a+"</table>",img:"storage"})}a="";for(var d in n)null==n[d].img?a+="<div class=DevSt style=margin-bottom:3px;margin-left:4px><b>"+n[d].name+"</b></div><div style=margin-bottom:10px;margin-left:4px>"+n[d].html+"</div>":(a+="<table style=width:100%><tr>",a+="<td style=width:32px;vertical-align:top><img src=images/details/"+n[d].img+'32.png srcset="images/details/'+n[d].img+'64.png 2x" border=0 width=32 /></td>',a+="<td><div class=DevSt style=margin-bottom:3px;margin-left:4px><b>"+n[d].name+"</b></div><div style=margin-bottom:10px;margin-left:4px>"+n[d].html+"</div></td>",a+="</tr></table>");""==a?QH("p10detailshtml","No hay información para este dispositivo."):QH("p10detailshtml",a)}}function deviceDetailsShowBitlockerInfo(e,t,o){if(xxdialogMode)return!1;var n="<div><p>Identificador</p><p style=user-select:text;font-weight:bold>"+(t?decodeURIComponent(t):"Desconocido")+"</p>";n+="<p>Recovery Password</p><p style=user-select:text;font-weight:bold>"+(o?decodeURIComponent(o):"Desconocido")+"</p></div>",setDialogMode(2,decodeURIComponent(e)+": BitLocker Information",1,null,n,"")}function insertTextAtCursor(e,t){if(document.selection)e.focus(),sel=document.selection.createRange(),sel.text=t;else if(e.selectionStart||"0"==e.selectionStart){var o=e.selectionStart,n=e.selectionEnd;e.value=e.value.substring(0,o)+t+e.value.substring(n,e.value.length),e.setSelectionRange(n+1,n+1)}else e.value+=myValue}var consoleServerText="";function setupConsole(){var e=consoleNode==currentNode;meshes[(consoleNode=currentNode).meshid];if(16&GetNodeRights(currentNode)){null==consoleNode.consoleText&&(consoleNode.consoleText=""),0==e&&(QH("p15agentConsoleText",consoleNode.consoleText),Q("p15agentConsoleText").scrollTop=Q("p15agentConsoleText").scrollHeight);1&consoleNode.conn||consoleNode.conn;var t=1&consoleNode.conn?"El agente está en línea":"El agente está fuera de línea";16&consoleNode.conn&&(t+=", MQQT esta en línea"),QH("p15statetext",t),QE("p15uploadCore",!!(1&consoleNode.conn)),QV("p15outputselecttd",!!(16&consoleNode.conn)||1==currentNode.pmt&&!!(2&features2)),QV("p15outputselect2",!!(16&consoleNode.conn)),QV("p15outputselect3",1==currentNode.pmt&&!!(2&features2));var o=Q("p15outputselect").value;16&consoleNode.conn||2!=o||(o=1,Q("p15outputselect").value=1),1==currentNode.pmt&&2&features2||3!=o||(o=1,Q("p15outputselect").value=1);var n=!1;1&consoleNode.conn&&1==o&&(n=!0),16&consoleNode.conn&&2==o&&(n=!0),1==currentNode.pmt&&2&features2&&3==o&&(n=!0),QE("p15consoleText",n)}else QH("p15statetext","Acceso Denegado"),QE("p15consoleText",!1),QE("p15uploadCore",!1),QV("p15outputselecttd",!1);QV("devListToolbarViewIcons3",!!(1&consoleNode.conn))}function p15consoleClear(){QH("p15agentConsoleText",""),Q("id_p15consoleClear").blur(),consoleNode.consoleText=""}var currentMesh,consoleHistory=[];function p15consoleSend(e){if(!e||13==e.keyCode){var t=Q("p15consoleText").value,o="<div style=color:green>&gt; "+EscapeHtml(t)+"<br/></div>";if(16&consoleNode.conn&&2==Q("p15outputselect").value?(o="<div style=color:orange>MQTT&gt; "+EscapeHtml(t)+"<br/></div>",consoleNode.consoleText+=o,meshserver.send({action:"sendmqttmsg",topic:"console",nodeids:[consoleNode._id],msg:t})):1==consoleNode.pmt&&3==Q("p15outputselect").value&&2&features2?(o="<div style=color:violet>EMPUJAR&gt; "+EscapeHtml(t)+"<br/></div>",consoleNode.consoleText+=o,meshserver.send({action:"pushconsole",nodeid:consoleNode._id,console:t})):1&consoleNode.conn&&(consoleNode.consoleText+=o,meshserver.send({action:"msg",type:"console",nodeid:consoleNode._id,value:t})),Q("p15agentConsoleText").innerHTML+=o,Q("p15agentConsoleText").scrollTop=Q("p15agentConsoleText").scrollHeight,Q("p15consoleText").value="",t.length>0){var n=consoleHistory.indexOf(t);n>=0&&consoleHistory.splice(n,1),consoleHistory.unshift(t),consoleHistory.splice(10)}}}function p15consoleReceive(e,t,o){"serverconsole"===e?(t="<div>"+EscapeHtml(t)+"</div>",consoleServerText+=t,"server"==consoleNode&&(Q("p15agentConsoleText").innerHTML+=t,Q("p15agentConsoleText").scrollTop=Q("p15agentConsoleText").scrollHeight)):(t="MQTT"==o?"<div style=color:red>MQTT&gt; "+EscapeHtml(t)+"<br/></div>":"<div>"+EscapeHtml(t)+"</div>",null==e.consoleText?e.consoleText=t:e.consoleText+=t,consoleNode==e&&(Q("p15agentConsoleText").innerHTML+=t,Q("p15agentConsoleText").scrollTop=Q("p15agentConsoleText").scrollHeight))}function p15downloadConsoleText(){saveAs(new Blob([Q("p15agentConsoleText").innerText],{type:"application/octet-stream"}),"console.txt")}function p15uploadCore(e){if(!xxdialogMode)if(1==e.shiftKey)meshserver.send({action:"uploadagentcore",nodeid:consoleNode._id,type:"default"});else if(1==e.altKey)meshserver.send({action:"uploadagentcore",nodeid:consoleNode._id,type:"clear"});else if(1==e.ctrlKey)p15uploadCore2();else{setDialogMode(2,"Realizar Acción en el Agente",3,p15uploadCoreEx,addHtmlValue("Acción","<select id=d3coreMode style=width:230px><option value=1>Cargar el archivo de núcleo predeterminado</option><option value=2>Borrar el núcleo</option><option value=3>Cargar un archivo de núcleo</option><option value=4>Agente de desconexión por Soft</option><option value=5>Agente (Desconexión dura)</option><option value=6>Cargar núcleo de recuperación</option><option value=7>Sube un pequeño núcleo</option><option value=8>Restart agent service</option><option value=9>Forzar actualización del agente</option></select>"))}}function p15uploadCoreEx(){1==Q("d3coreMode").value?meshserver.send({action:"uploadagentcore",nodeid:consoleNode._id,type:"default"}):2==Q("d3coreMode").value?meshserver.send({action:"uploadagentcore",nodeid:consoleNode._id,type:"clear"}):3==Q("d3coreMode").value?p15uploadCore2():4==Q("d3coreMode").value?meshserver.send({action:"agentdisconnect",nodeid:consoleNode._id,disconnectMode:1}):5==Q("d3coreMode").value?meshserver.send({action:"agentdisconnect",nodeid:consoleNode._id,disconnectMode:2}):6==Q("d3coreMode").value?meshserver.send({action:"uploadagentcore",nodeid:consoleNode._id,type:"recovery"}):7==Q("d3coreMode").value?meshserver.send({action:"uploadagentcore",nodeid:consoleNode._id,type:"tiny"}):8==Q("d3coreMode").value?meshserver.send({action:"msg",type:"console",nodeid:consoleNode._id,value:"service restart"}):9==Q("d3coreMode").value&&meshserver.send({action:"updateAgents",nodeids:[consoleNode._id]})}function p15uploadCore2(){xxdialogMode||(Q("d3localmodeform").action="uploadmeshcorefile.ashx",Q("d3auth").value=authCookie,Q("d3attrib").value=currentNode._id,setDialogMode(4,"Cargar Núcleo de Agente Mesh",3,p15uploadCoreEx2),d3init())}function p15uploadCoreEx2(){if(1==Q("d3uploadMode").value)Q("d3submit").click();else{var e=d3getFileSel();1==e.length&&meshserver.send({action:"uploadagentcore",nodeid:consoleNode._id,type:"custom",path:d3filetreelocation.join("/")+"/"+e[0]})}}function p20updateMesh(){if(null!=currentMesh){QH("p20meshName",EscapeHtml(currentMesh.name));var e=format("#{0} desconocido",currentMesh.mtype),t=GetMeshRights(currentMesh);1==currentMesh.mtype&&(e="Sólo Intel&reg; AMT, sin agente"),2==currentMesh.mtype&&(e="Administrado usando un agente de software"),3==currentMesh.mtype&&(e=null==currentMesh.relayid?"Dispositivos locales, sin agente":"No hay dispositivos de agente retransmitidos a través del agente"),4==currentMesh.mtype&&(e=null==currentMesh.relayid?"Dispositivo IP-KVM":"Dispositivo IP-KVM retransmitido a través del agente",1==currentMesh.kvm.model&&(e+=", Raritan KX III"));var o="";if(o+=addHtmlValue("Nombre",addLinkConditional(EscapeHtml(currentMesh.name),"p20editmesh(1)",!!(1&t))),o+=addHtmlValue("Descripción",addLinkConditional(currentMesh.desc&&""!=currentMesh.desc?EscapeHtml(currentMesh.desc):"<i>Ninguno</i>","p20editmesh(2)",!!(1&t))),o+=addHtmlValue("Tipo",e),(3==currentMesh.mtype||4==currentMesh.mtype)&&null!=currentMesh.relayid){var n="<i>Desconocido</i>",i=getNodeFromId(currentMesh.relayid);null!=i&&(n=EscapeHtml(i.name)),o+=addHtmlValue("Dispositivo de Retransmisión",addLinkConditional(n,"p20editmeshrelay()",!!(1&t)))}4==currentMesh.mtype&&(o+=addHtmlValue("Nombre de Host",currentMesh.kvm.host),o+=addHtmlValue("Nombre de Usuario",currentMesh.kvm.user)),o+='<br><input type=button value="Notas" onclick=showNotes(false,"'+encodeURIComponent(currentMesh._id)+'") />',o+="<br style=clear:both><br>";var a=currentMesh.links[userinfo._id];a&&2&a.rights&&(o+="<div style=margin-bottom:6px;float:left;margin-right:10px><a onclick=p20showAddMeshUserDialog() style=cursor:pointer><img src=images/icon-addnew.png border=0 height=12 width=12> Agregar Usuario</a></div>"),navigator.userAgent.toLowerCase().indexOf("android")>=0&&(o+="<div style=margin-bottom:6px;float:left;margin-right:10px><a onclick=p20installAndroidDialog() style=cursor:pointer><img src=images/icon-addnew.png border=0 height=12 width=12> Instalar en este dispositivo</a></div>"),o+='<table style="color:black;background-color:#EEE;border-color:#AAA;border-width:1px;border-style:solid;border-collapse:collapse" border=0 cellpadding=2 cellspacing=0 width=100%><tbody><tr style=background-color:#AAAAAA;font-weight:bold><th scope=col style=text-align:left;width:430px>Autorizaciones de Usuario</th></tr>';var s=1,r=[];for(var l in currentMesh.links){var d=l.split("/")[2];currentMesh.links[l].name&&(d=currentMesh.links[l].name),l==userinfo._id&&(d=userinfo.name),null!=usergroups&&null!=usergroups[l]&&(d=usergroups[l].name),r.push({id:l,name:d,rights:currentMesh.links[l].rights})}for(var l in r.sort(function(e,t){return e.name>t.name?1:e.name<t.name?-1:0}),r){var c="",u="Permisos Parciales",p=r[l].rights,m=2;4294967295==p?u="Administrador Total":0==p&&(u="Sin Permisos"),l!=userinfo._id&&(4294967295==t||2&t)&&(c='<a onclick=p20deleteUser(event,"'+encodeURIComponent(r[l].id)+'") style=cursor:pointer><img src=images/trash.png border=0 height=10 width=10></a>'),r[l].id.startsWith("ugrp/")&&(m=4),o+='<tr onclick=p20viewuser("'+encodeURIComponent(r[l].id)+'") style=height:32px;cursor:pointer'+(s%2==0?";background-color:#DDD":"")+"><td>",o+="<div style=float:right>"+c+"</div><div style=float:right;padding-right:4px>"+u+"</div><div class=m"+m+"></div><div>&nbsp;"+EscapeHtml(decodeURIComponent(r[l].name))+"<div></div></div>",o+="</td></tr>",++s}o+="</tbody></table>",4294967295==t&&(o+="<div style=font-size:small;text-align:right;margin-top:6px><span><a onclick=p20showDeleteMeshDialog() style=cursor:pointer>Eliminar Grupo de Dispositivos</a></span></div>"),QH("p20info",o)}}function p20showDeleteMeshDialog(){if(xxdialogMode)return!1;var e=format("¿Estás seguro de que desea eliminar el grupo {0}? Al eliminar el grupo de dispositivos también se eliminará toda la información sobre los dispositivos dentro de este grupo.",EscapeHtml(currentMesh.name))+"<br /><br />";return setDialogMode(2,"Eliminar Grupo de Dispositivos",3,p20showDeleteMeshDialogEx,e+="<label><input id=p20check type=checkbox onchange=p20validateDeleteMeshDialog() />Confirmar</label>"),p20validateDeleteMeshDialog(),!1}function p20validateDeleteMeshDialog(){QE("idx_dlgOkButton",Q("p20check").checked)}function p20showDeleteMeshDialogEx(e,t){meshserver.send({action:"deletemesh",meshid:currentMesh._id,meshname:currentMesh.name})}function p20editmeshrelay(){if(!xxdialogMode){var e=[];if(!(2&features))for(var t in nodes){var o=nodes[t];2==o.mtype&&null!=o.agent&&4294967295==GetNodeRights(o)&&e.push(o)}if(e.sort(nameSort),0==e.length)setDialogMode(2,"Editar Grupo de Dispositivos",1,null,"No hay dispositivos de relé disponibles.");else{var n=[];for(var t in e)n.push('<option value="'+e[t]._id+'"'+(currentMesh.relayid==e[t]._id?" selected":"")+">"+EscapeHtml(e[t].name)+"</option>");setDialogMode(2,"Editar Grupo de Dispositivos",3,p20editmeshrelayEx,addHtmlValue("Dispositivo de Retransmisión","<div style=width:170px><select id=d2devrelay style=width:100%>"+n.join("")+"</select></div>"))}}}function p20editmeshrelayEx(){meshserver.send({action:"editmesh",meshid:currentMesh._id,relayid:Q("d2devrelay").value})}function p20editmesh(e){if(!xxdialogMode){var t=addHtmlValue("Nombre","<input id=dp20meshname style=width:170px maxlength=32 onchange=p20editmeshValidate() onkeyup=p20editmeshValidate() />");setDialogMode(2,"Editar Grupo de Dispositivos",3,p20editmeshEx,t+=addHtmlValue("Descripción","<input id=dp20meshdesc style=width:170px maxlength=1024 onkeyup=p20editmeshValidate() />")),Q("dp20meshname").value=currentMesh.name,currentMesh.desc&&(Q("dp20meshdesc").value=currentMesh.desc),p20editmeshValidate(),2==e?Q("dp20meshdesc").focus():Q("dp20meshname").focus()}}function p20editmeshEx(){meshserver.send({action:"editmesh",meshid:currentMesh._id,meshname:Q("dp20meshname").value,desc:Q("dp20meshdesc").value})}function p20editmeshValidate(){QE("idx_dlgOkButton",Q("dp20meshname").value.length>0)}function p20installAndroidDialog(){if(!xxdialogMode){var e="<div style=text-align:center><p>Instala el agente MeshCentral en su dispositivo Android. Una vez instalado, haga clic en el enlace de emparejamiento para conectar tu dispositivo a este servidor.</p>";e+='<p><a rel="noreferrer noopener" target=_blank href="https://play.google.com/store/apps/details?id=com.meshcentral.agent2"><img style=cursor:pointer src="images/google-play-140.png" width=140 srcset="images/google-play-280.png 2x" /></a></p>',e+='<p><a rel="noreferrer noopener" target=_blank href="https://www.amazon.co.uk/gp/product/B097Z4Q7SK/"><img style=cursor:pointer src="images/amazon-appstore-140.png"  width=140 srcset="images/amazon-appstore-280.png 2x" /></a></p>',e+='<p><a rel="noreferrer noopener" target=_blank href="meshagents?id=14'+(urlargs.key?"&key="+urlargs.key:"")+'" title="APK version of the MeshAgent">Android APK</a></p>',setDialogMode(2,"Instalación de Android",1,null,e+='<p><a href="'+serverinfo.magenturl+","+serverinfo.agentCertHash+","+currentMesh._id.split("/")[2]+'"><b>Enlace de emparejamiento de dispositivos</b></a></p></div>')}}function p20showAddMeshUserDialog(){if(!xxdialogMode){var e=addHtmlValue("User ID","<input id=dp20username style=width:170px maxlength=256 onchange=p20validateAddMeshUserDialog() onkeyup=p20validateAddMeshUserDialog() />");e+='<div style="border:2px groove gray;background-color:white;max-height:120px;overflow-y:scroll">',e+="<label><input type=checkbox onchange=p20validateAddMeshUserDialog() id=p20fulladmin>Administrador Total</label><br>",e+="<label><input type=checkbox onchange=p20validateAddMeshUserDialog() id=p20editmesh>Editar Grupo de Dispositivos</label><br>",e+="<label><input type=checkbox onchange=p20validateAddMeshUserDialog() id=p20manageusers>Administrar Usuarios del Grupo de Dispositivos</label><br>",e+="<label><input type=checkbox onchange=p20validateAddMeshUserDialog() id=p20managecomputers>Administrar Computadoras del Grupo de Dispositivos</label><br>",e+="<label><input type=checkbox onchange=p20validateAddMeshUserDialog() id=p20remotecontrol>Control Remoto</label><br>",e+="<label><input type=checkbox onchange=p20validateAddMeshUserDialog() id=p20remoteview style=margin-left:12px>Sólo Vista Remota</label><br>",e+="<label><input type=checkbox onchange=p20validateAddMeshUserDialog() id=p20remotelimitedinput style=margin-left:12px>Sólo Entrada Limitada</label><br>",e+="<label><input type=checkbox onchange=p20validateAddMeshUserDialog() id=p20noterminal style=margin-left:12px>Sin Acceso a la Terminal</label><br>",e+="<label><input type=checkbox onchange=p20validateAddMeshUserDialog() id=p20nofiles style=margin-left:12px>Sin Acceso a Archivos</label><br>",e+="<label><input type=checkbox onchange=p20validateAddMeshUserDialog() id=p20noamt style=margin-left:12px>Sin Intel&reg; AMT</label><br>",e+="<label><input type=checkbox onchange=p20validateAddMeshUserDialog() id=p20meshagentconsole>Consola del Agente Mesh</label><br>",e+="<label><input type=checkbox onchange=p20validateAddMeshUserDialog() id=p20meshserverfiles>Archivos del Servidor</label><br>",e+="<label><input type=checkbox onchange=p20validateAddMeshUserDialog() id=p20wakedevices>Despertar Dispositivos</label><br>",e+="<label><input type=checkbox onchange=p20validateAddMeshUserDialog() id=p20editnotes>Editar Notas del Dispositivo</label><br>",e+="<label><input type=checkbox onchange=p20validateAddMeshUserDialog() id=p20limitevents>Mostrar Solo Eventos Propios</label><br>",e+="<label><input type=checkbox onchange=p20validateAddMeshUserDialog() id=p20chatnotify>Chatear & Notificar</label><br>",e+="<label><input type=checkbox onchange=p20validateAddMeshUserDialog() id=p20uninstall>Desinstalar Agente</label><br>",e+="<label><input type=checkbox onchange=p20validateAddMeshUserDialog() id=p20commands>Comandos Remotos</label><br>",e+="<label><input type=checkbox onchange=p20validateAddMeshUserDialog() id=p20resetoff>Reiniciar / Apagar</label><br>",setDialogMode(2,"Agregar Usuario al Grupo de Dispositivos",3,p20showAddMeshUserDialogEx,e+="</div>"),p20validateAddMeshUserDialog(),Q("dp20username").focus()}}function p20validateAddMeshUserDialog(){var e=GetMeshRights(currentMesh),t=!Q("p20fulladmin").checked;QE("p20fulladmin",4294967295==e),QE("p20editmesh",t&&4294967295==e),QE("p20manageusers",t),QE("p20managecomputers",t),QE("p20remotecontrol",t),QE("p20meshagentconsole",t),QE("p20meshserverfiles",t),QE("p20wakedevices",t),QE("p20editnotes",t),QE("p20limitevents",t),QE("p20remoteview",t&&Q("p20remotecontrol").checked),QE("p20remotelimitedinput",t&&Q("p20remotecontrol").checked&&!Q("p20remoteview").checked),QE("p20noterminal",t&&Q("p20remotecontrol").checked),QE("p20nofiles",t&&Q("p20remotecontrol").checked),QE("p20noamt",t&&Q("p20remotecontrol").checked),QE("p20chatnotify",t),QE("p20uninstall",t),QE("p20commands",t),QE("p20resetoff",t)}function p20showAddMeshUserDialogEx(){var e=0;1==Q("p20fulladmin").checked?e=4294967295:(1==Q("p20editmesh").checked&&(e+=1),1==Q("p20manageusers").checked&&(e+=2),1==Q("p20managecomputers").checked&&(e+=4),1==Q("p20remotecontrol").checked&&(e+=8),1==Q("p20meshagentconsole").checked&&(e+=16),1==Q("p20meshserverfiles").checked&&(e+=32),1==Q("p20wakedevices").checked&&(e+=64),1==Q("p20editnotes").checked&&(e+=128),1==Q("p20remoteview").checked&&(e+=256),1==Q("p20noterminal").checked&&(e+=512),1==Q("p20nofiles").checked&&(e+=1024),1==Q("p20noamt").checked&&(e+=2048),1==Q("p20remotelimitedinput").checked&&(e+=4096),1==Q("p20limitevents").checked&&(e+=8192),1==Q("p20chatnotify").checked&&(e+=16384),1==Q("p20uninstall").checked&&(e+=32768),1==Q("p20commands").checked&&(e+=131072),1==Q("p20resetoff").checked&&(e+=262144));var t=Q("dp20username").value.split(","),o=[];for(var n in t)o.push(t[n].trim());meshserver.send({action:"addmeshuser",meshid:currentMesh._id,meshname:currentMesh.name,usernames:o,meshadmin:e})}function p20viewuser(e){if(!xxdialogMode){e=decodeURIComponent(e);var t=[],o=GetMeshRights(currentMesh),n=GetMeshRights(currentMesh,e);4294967295==n?t.push("Administrador Total"):(1&n&&t.push("Editar Grupo de Dispositivos"),2&n&&t.push("Administrar Usuarios del Grupo de Dispositivos"),4&n&&t.push("Administrar Computadoras del Grupo de Dispositivos"),8&n&&t.push("Control Remoto"),16&n&&t.push("Consola de Agente"),32&n&&t.push("Archivos del Servidor"),64&n&&t.push("Despertar Dispositivos"),128&n&&t.push("Editar Notas"),256&n&&t.push("Sólo Vista Remota"),512&n&&t.push("Sin Terminal"),1024&n&&t.push("Sin Archivos"),2048&n&&t.push("Sin Intel&reg; AMT"),8&n&&4096&n&&!(256&n)&&t.push("Entrada Limitada"),8192&n&&t.push("Sólo Eventos Propios"),16384&n&&t.push("Chatear & Notificar"),32768&n&&t.push("Desinstalar"),131072&n&&t.push("Comandos"),262144&n&&t.push("Reset/Apagado")),0==t.length&&t.push("Sin Permisos");var i=1,a=e.split("/")[2];currentMesh.links[e].name&&(a=currentMesh.links[e].name);var s=addHtmlValue("Nombre de Usuario",EscapeHtml(a));a!=e.split("/")[2]&&(s+=addHtmlValue("ID de Usuario",EscapeHtml(e.split("/")[2]))),s+=addHtmlValue("Permisos",t.join(", ")),userinfo._id!=e&&(4294967295==o||2&o&&4294967295!=n)&&(i+=4),setDialogMode(2,"Usuario de Grupo de Dispositivos",i,p20viewuserEx,s,e)}}function p20viewuserEx(e,t){if(2==e){var o=t.split("/")[2];users&&users[t]&&(o=users[t].name),usergroups&&usergroups[t]&&(o=usergroups[t].name),userinfo._id==t&&(o=userinfo.name),setDialogMode(2,"Usuario Mesh Remoto",3,p20viewuserEx2,format("¿Confirmar la eliminación del usuario {0}?",o),t)}}function p20deleteUser(e,t){haltEvent(e),p20viewuserEx(2,decodeURIComponent(t))}function p20viewuserEx2(e,t){meshserver.send({action:"removemeshuser",meshid:currentMesh._id,meshname:currentMesh.name,userid:t})}var notifications=[];function clickNotificationIcon(e){1==e?QV("notifiyBox",!0):0==e?QV("notifiyBox",!1):QV("notifiyBox","none"==QS("notifiyBox").display),drawNotifications()}function setNotificationCount(e){parseInt(Q("notificationCount").innerHTML)!=e&&(QH("notificationCount2",e),QV("notificationCount",e>0))}function drawNotifications(){var e=getstore("notifications",0),t="";if(0==notifications.length)t="<div style=margin:5px>Actualmente no hay notificaciones</div>";else for(var o in notifications){var n=notifications[o],i="",a=new Date(n.time),s=0;if(null!=n.title&&(i="<b>"+EscapeHtml(n.title)+"</b>: "),null!=n.nodeid){var r=getNodeFromId(n.nodeid);null!=r&&(s=r.icon,i=16&e?"<b>"+EscapeHtml(meshes[r.meshid].name)+" / "+EscapeHtml(r.name)+"</b>: ":"<b>"+EscapeHtml(r.name)+"</b>: ")}t+='<div title="'+format("Ocurrió en {0}",printDateTime(a))+'" id="notifyx'+n.id+'" class=notification style="cursor:pointer;border-top:1px solid '+(""==t?"transparent":"orange")+'">',s&&(t+="<div class=j"+s+' onclick="notificationSelected('+n.id+')" style=margin:5px;float:left></div>'),t+='<div onclick="notificationDelete('+n.id+')" class=unselectable title="Borrar esta notificación" style=margin:5px;float:right;color:orange><b>X</b></div><div onclick="notificationSelected('+n.id+')" style=margin:5px>'+i+EscapeHtml(n.text)+"</div><div style=margin-left:5px;margin-bottom:5px;color:gray;font-size:10px>"+printDateTime(a)+"</div></div>"}var l="";notifications.length>1&&(l='<div id="notifyRemoveAll" onclick="deleteAllNotifications()" style="cursor:pointer;border-top:1px solid orange;margin:5px;color:orange;text-align:right;padding-right:3px">Borrar todo</div>'),QH("notifiyBox",'<div class=customScroll style="max-height:170px;overflow-y:auto;margin:5px">'+t+l+"</div>")}function notificationSelected(e,t){var o=-1;for(var n in notifications)notifications[n].id==e&&(o=n);-1!=o&&(notificationSelectedEx(notifications[o],e),t&&notifications[o]&&(notifications[o].notification&&(notifications[o].notification.close(),delete notifications[o].notification),notificationDelete(e)))}function notificationSelectedEx(e,t){null!=e.nodeid?"desktop"==e.tag?gotoDevice(e.nodeid,12):"terminal"==e.tag?gotoDevice(e.nodeid,11):"files"==e.tag?gotoDevice(e.nodeid,13):"intelamt"==e.tag?gotoDevice(e.nodeid,14):"console"==e.tag?gotoDevice(e.nodeid,15):gotoDevice(e.nodeid,10):"backupcodes"!=e.tag||xxdialogMode?null!=e.tag&&e.tag.startsWith("meshmessenger/")?(safeNewWindow("/messenger?id="+e.tag+"&title="+encodeURIComponentEx(e.username),e.tag.split("/")[2]),notificationDelete(t)):null!=e.url&&(safeNewWindow(e.url),notificationDelete(t)):(account_manageOtp(0),notificationDelete(t))}function notificationDelete(e){var t=-1,o=Q("notifyx"+e);if(null!=o){for(var n in notifications)notifications[n].id==e&&(t=n);if(-1!=t&&(meshserver.send({action:"intersession",subaction:"removeNotify",id:e}),notifications[t].notification&&(notifications[t].notification.close(),delete notifications[t].notification),notifications.splice(t,1),o.parentNode.removeChild(o),setNotificationCount(notifications.length),0==notifications.length&&QV("notifiyBox",!1),1==notifications.length&&QV("notifyRemoveAll",!1),notifications.length>0&&0==t)){var i=notifications[0];QS("notifyx"+i.id)["border-top"]="1px solid transparent"}}}function addNotification(e){if("number"==typeof e.titleid)try{e.title=[null,"Nueva Cuenta","Límite del Servidor","Advertencia de Seguridad","Configuraciones de la cuenta","Grupo de Dispositivos","Códigos de Invitación"][e.titleid]}catch(e){}if("number"==typeof e.msgid)try{e.text=[null,"Permiso denegado","Nombre de usuario no válido","Contraseña no válida","Correo electrónico no válido","Dominio no válido","Permisos de sitio no válidos","El usuario ya existe","No se puede agregar un usuario en este modo","Excepción de validación","Límite de cuenta alcanzado.","Solicitud de Chat, haga clic aquí para aceptar.","Ha habido {0} intentos fallidos de inicio de sesión en esta cuenta desde el último inicio de sesión.","No se pudo cambiar la dirección de correo electrónico, otra cuenta ya usa: {0}.","Correo electrónico enviado.","Usuario {0} no encontrado.","Usuarios {0} no encontrados.","Error, no se puede cambiar a la contraseña utilizada anteriormente.","Error, no se puede cambiar a la contraseña de uso común.","Error, contraseña no cambiada.","Contraseña cambiada.","La contraseña actual no es correcta.",'Error, el código de invitación "{0}" ya está en uso.',"Puerta de enlace SMS no habilitada","Sin derechos de gestión de usuarios","Mensaje SMS no válido","No hay número de teléfono para este usuario","SMS enviados con éxito.","Error de SMS","Error de SMS: {0}",'El dominio de correo electrónico "{0}" no está permitido. Solo ({1}) están permitidos'][e.msgid],Array.isArray(e.args)&&(e.text=format(e.text,e.args[0],e.args[1],e.args[2],e.args[3],e.args[4],e.args[5]))}catch(e){}null==e.time&&(e.time=Date.now()),null==e.id&&(e.id=Math.random()),notifications.unshift(e),setNotificationCount(notifications.length),clickNotificationIcon(!0);var t=getstore("notifications",0);1&t&&Q("chimes").play();var o=null;if(Notification&&"granted"==Notification.permission){var n=e.text.split("&reg;").join("").split("<b>").join("").split("</b>").join("").split("<br />").join("\r\n");if(e.nodeid){var i=getNodeFromId(e.nodeid);i&&(o=16&t?new Notification(decodeURIComponent("{{{extitle}}}")+" - "+meshes[i.meshid].name+" - "+i.name,{tag:e.tag,body:n,icon:"/images/notify/icons128-"+i.icon+".png"}):new Notification(decodeURIComponent("{{{extitle}}}")+" - "+i.name,{tag:e.tag,body:n,icon:"/images/notify/icons128-"+i.icon+".png"}))}else{null==e.icon&&(e.icon=0);var a=e.title;a=null==a?"":" - "+e.title,o=new Notification(decodeURIComponent("{{{extitle}}}")+a,{tag:e.tag,body:n,icon:"/images/notify/icons128-"+e.icon+".png"})}o.id=e.id,o.xtag=e.tag,o.url=e.url,o.nodeid=e.nodeid,o.username=e.username,o.onclick=function(e){notificationSelected(e.target.id,!0)},e.notification=o}if("number"==typeof e.maxtime&&e.maxtime>0){var s=function e(){notificationDelete(e.xid)};s.xid=e.id,setTimeout(s,1e3*e.maxtime)}}function deleteAllNotifications(){notifications=[],setNotificationCount(0),drawNotifications(),QV("notifiyBox",!1)}var xxdialogMode,xxdialogFunc,xxdialogButtons,xxdialogTag,xxcurrentView=-1;function go(e){if(setSessionActivity(),!xxdialogMode&&xxcurrentView!=e){updateFooterMenu(),setDialogMode(0);for(var t=0;t<32;t++)QV("p"+t,t==e);xxcurrentView=e,updateCurrentUrl()}}function updateCurrentUrl(){if(!(268435456&features)&&xxcurrentView>0){var e="";for(var t in xxcurrentView>=10&&xxcurrentView<=19?null!=currentNode&&(e="?viewmode="+xxcurrentView+"&gotonode="+currentNode._id.split("/")[2]+(currentDevicePanel>0?"&panel="+currentDevicePanel:"")):xxcurrentView>=20&&xxcurrentView<=29?null!=currentMesh&&(e="?viewmode="+xxcurrentView+"&gotomesh="+currentMesh._id.split("/")[2]):xxcurrentView>1&&(e="?viewmode="+xxcurrentView),urlargs)e+=(""==e?"?":"&")+t+"="+urlargs[t];try{window.history.replaceState({},document.title,window.location.pathname+e)}catch(e){}}}function setDialogMode(e,t,o,n,i,a){setSessionActivity(),xxdialogMode=e,xxdialogFunc=n,xxdialogButtons=o,xxdialogTag=a,QE("idx_dlgOkButton",!0),QV("idx_dlgOkButton",1&o),QV("idx_dlgCancelButton",2&o),QV("id_dialogclose",2&o||8&o),QV("idx_dlgDeleteButton",4&o),QV("idx_dlgButtonBar",7&o),t&&QH("id_dialogtitle",t);for(var s=1;s<24;s++)QV("dialog"+s,s==e);QV("dialog",e),i&&(2==e?QH("id_dialogOptions",i):QH("id_dialogMessage",i))}function dialogclose(e){setSessionActivity();var t=xxdialogFunc,o=xxdialogButtons,n=xxdialogTag;setDialogMode(),(8&o||e)&&t&&t(e,n)}function removeUserRights(e,t){if(t!=userinfo._id||null==userinfo.removeRights)return e;var o=0,n=0;return 8&userinfo.removeRights&&(n+=8),65536&userinfo.removeRights&&(o+=65536),256&userinfo.removeRights&&(o+=256),512&userinfo.removeRights&&(o+=512),1024&userinfo.removeRights&&(o+=1024),16&userinfo.removeRights&&(n+=16),32768&userinfo.removeRights&&(n+=32768),131072&userinfo.removeRights&&(n+=131072),64&userinfo.removeRights&&(n+=64),262144&userinfo.removeRights&&(n+=262144),4294967295!=e?(e|=o,e&=4294967295-n):(e=2015471,e|=o,e&=4294967295-n),e}function GetMeshRights(e,t){if(null==e)return 0;if(null==t&&(t=userinfo._id),"string"==typeof e&&(e=meshes[e]),null==e||null==e.links)return 0;if(serverinfo.manageAllDeviceGroups&&t==userinfo._id)return removeUserRights(4294967295,t);var o=0,n=e.links[t];if(null!=n){if(4294967295==n.rights)return removeUserRights(4294967295,t);o=n.rights}var i=null;if(t==userinfo._id?i=userinfo:null!=users&&(i=users[t]),null!=i)for(var a in i.links)if(a.startsWith("ugrp/")&&null!=(n=e.links[a])){if(4294967295==n.rights)return removeUserRights(4294967295,t);o|=n.rights}return removeUserRights(o,t)}function IsMeshViewable(e,t){if(null==e)return!1;if(null==t&&(t=userinfo._id),"string"==typeof e&&(e=meshes[e]),null==e||null==e.links)return!1;if(null!=e.links[t])return!0;if(serverinfo.manageAllDeviceGroups&&t==userinfo._id)return!0;var o=null;if(t==userinfo._id?o=userinfo:null!=users&&(o=users[t]),null!=o)for(var n in o.links)if(n.startsWith("ugrp/")&&null!=e.links[n])return!0;return!1}function GetNodeRights(e,t){if(null==e)return 0;if(null==t&&(t=userinfo._id),"string"==typeof e&&null==(e=getNodeFromId(e)))return 0;var o=GetMeshRights(e.meshid,t);if(4294967295==o)return removeUserRights(o,t);if(null!=e.links&&null!=e.links[t]&&(o|=e.links[t].rights),null!=e.links&&null!=userinfo.links)for(var n in e.links)n.startsWith("ugrp/")&&null!=userinfo.links[n]&&null!=e.links[n].rights&&(o|=e.links[n].rights);return removeUserRights(o,t)}function IsNodeViewable(e,t){if(null==e)return!1;if(null==t&&(t=userinfo._id),"string"==typeof e&&null==(e=getNodeFromId(e)))return!1;if(IsMeshViewable(e.meshid,t))return!0;if(null!=e.links&&null!=e.links[t])return!0;if(null!=e.links&&null!=userinfo.links)for(var o in e.links)if(o.startsWith("ugrp/")&&null!=userinfo.links[o]&&null!=e.links[o].rights)return!0;return!1}function nameSort(e,t){var o=e.name.toLowerCase(),n=t.name.toLowerCase();return sortCollator.compare(o,n)}function getNodeAmtVersion(e){if(null==e||null==e.intelamt||"string"!=typeof e.intelamt.ver)return 0;var t=e.intelamt.ver.split(".");return t.length<2?0:parseInt(t[0])+parseInt(t[1])/100}function putstore(e,t){try{if("undefined"==typeof localStorage||localStorage.getItem(e)==t)return;null==t?localStorage.removeItem(e):localStorage.setItem(e,t)}catch(e){}if("_"!=e[0]){for(var o={},n=0,i=localStorage.length;n<i;++n){var a=localStorage.key(n);"_"!=a[0]&&(o[a]=localStorage.getItem(a))}meshserver.send({action:"userWebState",state:JSON.stringify(o)})}}function getstore(e,t){try{if("undefined"==typeof localStorage)return t;var o=localStorage.getItem(e);return null==o||null==o?t:o}catch(e){return t}}function center(){xtermfit&&xtermfit.fit(),onDevicesScroll(),QS("dialog").left=(getDocWidth()-300)/2+"px",deskAdjust(),null!=currentNode&&drawDeviceTimeline()}function messagebox(e,t){QH("id_dialogMessage",t),setDialogMode(1,e,1)}function statusbox(e,t){QH("id_dialogMessage",t),setDialogMode(1,e)}function getDocWidth(){return window.innerWidth?window.innerWidth:document.documentElement&&document.documentElement.clientWidth&&0!=document.documentElement.clientWidth?document.documentElement.clientWidth:document.getElementsByTagName("body")[0].clientWidth}function haltEvent(e){return e.preventDefault&&e.preventDefault(),e.stopPropagation&&e.stopPropagation(),!1}function haltReturn(e){13==e.keyCode&&haltEvent(e)}function validateEmail(e){return/^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/.test(e)}function reload(){window.location.href=window.location.href}function getNodeFromId(e){for(var t in nodes)if(nodes[t]._id==e)return nodes[t];return null}function addHtmlValue(e,t){return"<table><td style=width:120px>"+e+"<td><b>"+t+"</b></table>"}function addHtmlValue2(e,t){return"<div><div style=display:inline-block;float:right>"+t+"</div><div style=display:inline-block>"+e+"</div></div>"}function addHtmlValue4(e,t){return"<table style=width:100%><td style=width:120px>"+e+"<td style=text-align:right><b>"+t+"</b></table>"}function addLink(e,t){return"<a style=cursor:pointer;text-decoration:none onclick='"+t+"'>&diams; "+e+"</a>"}function addLinkConditional(e,t,o){return o?addLink(e,t):e}function addKeyLink(e,t){return"<span tabindex=0 style=cursor:pointer;text-decoration:none onclick="+t+" onkeypress=\"if (event.key=='Enter') { "+t+' } ">'+e+" <img class=hoverButton src=images/key16.png></span>"}function addKeyLinkConditional(e,t,o){return o?"<span title='"+t+"'>"+e+" <img class=hoverButton src=images/key16.png></span>":e}function passwordcheck(e){return/(?=.*\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[!@#$%^&*()]).{8,}/.test(e)}function getFileSizeStr(e){return"number"!=typeof e&&(e=0),1==e?"1 byte":format("{0} bytes",e)}function focusTextBox(e){setTimeout(function(){Q(e).selectionStart=Q(e).selectionEnd=65535,Q(e).focus()},0)}isFilenameValid=function(){var e=/^[^\\/:\*\?"<>\|]+$/,t=/^\./,o=/^(nul|prn|con|lpt[0-9]|com[0-9])(\.|$)/i;return function(n){return e.test(n)&&!t.test(n)&&!o.test(n)&&"."!=n[0]}}();function printDate(e){return e.toLocaleDateString(args.locale)}function printTime(e){return e.toLocaleTimeString(args.locale)}function printDateTime(e){return e.toLocaleString(args.locale)}function printTimer(e){return zeroPad(Math.floor(e/3600),2)+":"+zeroPad(Math.floor(e/60)%60,2)+":"+zeroPad(e%60,2)}function format(e){var t=Array.prototype.slice.call(arguments,1);return e.replace(/{(\d+)}/g,function(e,o){return void 0!==t[o]?t[o]:e})}function nobreak(e){return e.split(" ").join("&nbsp;")}function getUserName(e){var t=e.split("/"),o=t[0]+"/"+t[1]+"/"+t[2],n="";if(4==t.length&&t[3].startsWith("guest:")&&(n=" - "+decode_utf8(atob(t[3].substring(6)))),users&&null!=users[o])return null!=users[o].realname?users[o].realname+n:users[o].name+n;if(currentNode&&currentNode.links&&currentNode.links[e]&&null!=currentNode.links[e].name)return currentNode.links[e].name+n;if(e==userinfo._id)return userinfo.name+n;if(nodes)for(var i in nodes)if(nodes[i].links)for(var a in nodes[i].links)if(nodes[i].links[a].name&&a==e)return nodes[i].links[a].name+n;if(meshes)for(var i in meshes)if(meshes[i].links)for(var a in meshes[i].links)if(meshes[i].links[a].name&&a==e)return meshes[i].links[a].name+n;return t[2]+n}function addDetailItem(e,t,o){return"<table style=width:100%><td>"+nobreak(e)+"<td style=text-align:right>"+t+"</table>"}function isPrivateIP(e){return e.startsWith("10.")||e.startsWith("172.16.")||e.startsWith("192.168.")}function encodeURIComponentEx(e){return encodeURIComponent(e).replace(/'/g,"%27")}function safeNewWindow(e,t){var o=window.open(e,t,"noopener,noreferrer");o&&(o.opener=null)}function isWindowsNode(e){return 2==e.mtype&&null!=e.agent&&null!=e.agent.id&&[1,2,3,4,21,22,34,42,43].indexOf(e.agent.id)>=0}</script>