protected void btnConsultar_Click(object sender, EventArgs e) { if (ddlEmpleados.SelectedIndex > 0) { List <TDI_UbicacionDispositivo> Listcoordenadas = MngNegocioDispositivo.ObtieneCoordenadasDispositivo(int.Parse(ddlEmpleados.SelectedValue), DateTime.Now.ToString("dd/MM/yyyy"), DateTime.Now.ToString("dd/MM/yyyy")); DataTable dtCoor = new DataTable(); dtCoor.Columns.Add(new DataColumn("Coordenadas")); int ultimo = 0; TDI_UbicacionDispositivo ultimoRow = null; foreach (TDI_UbicacionDispositivo coordenada in Listcoordenadas) { if (ultimo == Listcoordenadas.Count - 1) { ultimoRow = coordenada; } ultimo++; } if (ultimoRow != null) { string script = " muestraPosicion('" + ultimoRow.Latitud + "','" + ultimoRow.Longitud + "','" + ultimoRow.IdDispositivo.NumerodelTelefono + "','" + ultimoRow.IdUsuario.UsuarioNombre + "','" + ultimoRow.IdUsuario.UsuarioFoto + "','" + ultimoRow.IdDispositivo.ImagenTelefono + "');"; ScriptManager.RegisterStartupScript(this, this.GetType(), "pinta_scripts", script, true); } else { string script = " showMessage_Info('No existen registros con la busqueda especificada');"; ScriptManager.RegisterStartupScript(this, this.GetType(), "err_cmp_scripts", script, true); } } else { string script = " showMessage_Info('Debe elegir un empleado a consultar');"; ScriptManager.RegisterStartupScript(this, this.GetType(), "err_cmp_scripts", script, true); } }
protected void Acepta_Evento(object sender, EventArgs e) { try { string Opcion = ViewState["Opcion"].ToString(); if (Opcion == "Elimina Dispositivo") { List <THE_Dispositivo> dispositivo = Session["datasource"] as List <THE_Dispositivo>; THE_Dispositivo dispo = dispositivo[int.Parse(ViewState["IDElimina"].ToString())] as THE_Dispositivo; dispo.DispositivoEstatus = 'B'; bool EliminaDispositivo = MngNegocioDispositivo.EliminaDispositivo(dispo); if (EliminaDispositivo) { ctrlMessageBox.AddMessage("Se Eliminado Correctamente el Dispositivo " + dispo.DispositivoDesc, MessageBox.enmMessageType.Success, true, false, "Elimina", "Elimina Dispositivo"); ViewState["Opcion"] = "Correcto"; GuardaLogTransacc("Se Elimino Dispositivo " + dispo.IdDispositivo, 12); } } if (Opcion == "Correcto") { CargaGrid(); } } catch (Exception ex) { EncuestasMoviles.Clases.Error.ManejadorErrores(ex, Session["UserName"].ToString(), Session["UserDomain"].ToString(), Session["userMachineName"].ToString(), Session["UserIP"].ToString(), "frmDispositivos", int.Parse(Session["numeroUsuario"].ToString())); } }
void CargaGrid() { try { List <THE_Dispositivo> Dispositivos = MngNegocioDispositivo.ObtieneTodosDispositivos(); for (int ini = 0; ini < Dispositivos.Count; ini++) { if (Dispositivos[ini].ImagenTelefono == null) { Dispositivos[ini].ImagenTelefono = "../images/no_foto.jpg"; } else { Dispositivos[ini].ImagenTelefono = "../Media/Dispositivos/" + Dispositivos[ini].IdDispositivo + "/" + Dispositivos[ini].ImagenTelefono; } } gvAltaDispositivo.DataSource = Dispositivos; Session["datasource"] = Dispositivos; gvAltaDispositivo.DataBind(); } catch (Exception ex) { EncuestasMoviles.Clases.Error.ManejadorErrores(ex, Session["UserName"].ToString(), Session["UserDomain"].ToString(), Session["userMachineName"].ToString(), Session["UserIP"].ToString(), "frmDispositivos", int.Parse(Session["numeroUsuario"].ToString())); } }
public Boolean ExisteTel_MEID_MED() { List <THE_Dispositivo> EncontreNumero = MngNegocioDispositivo.BusquedaDispositivoPorNumeroTel(txtNumeroTelefono.Text); List <THE_Dispositivo> EncontreMEID = MngNegocioDispositivo.BusquedaDispositivoPorMEID(txtMeidTelefono.Text); List <THE_Dispositivo> EncontreMDN = MngNegocioDispositivo.BusquedaDispositivoPorMDN(txtMdnTelefono.Text); if (EncontreNumero.Count > 0) { mpeAltaDispositivo.Show(); DivErrorres.InnerText = "Ya existe el numero telefonico: " + txtNumeroTelefono.Text; return(true); } if (EncontreMEID.Count > 0) { mpeAltaDispositivo.Show(); DivErrorres.InnerText = "Ya existe el MEID: " + txtMeidTelefono.Text; return(true); } if (EncontreMDN.Count > 0) { mpeAltaDispositivo.Show(); DivErrorres.InnerText = "Ya existe el MDN: " + txtMdnTelefono.Text; return(true); } return(false); }
protected void btnConsultar_Click1(object sender, EventArgs e) { arrayCoordenadas.Value = ""; arrayDatos.Value = ""; int c = 0; List <TDI_UbicacionDispositivo> Listcoordenadas = MngNegocioDispositivo.ObtieneCoordenadasDispositivo(int.Parse(ddlEmpleados.SelectedValue), Convert.ToDateTime(txtCalendario.SelectedDate).ToString("dd/MM/yyyy"), Convert.ToDateTime(txtFechaFinal.SelectedDate).ToString("dd/MM/yyyy")); DataTable dtCoor = new DataTable(); DataTable dtDatos = new DataTable(); dtCoor.Columns.Add(new DataColumn("Coordenadas")); dtDatos.Columns.Add(new DataColumn("Datos")); foreach (TDI_UbicacionDispositivo coordenada in Listcoordenadas) { DataRow row = dtCoor.NewRow(); DataRow row2 = dtDatos.NewRow(); row[0] = coordenada.Latitud + "," + coordenada.Longitud; row2[0] = coordenada.IdUsuario.UsuarioFoto + "," + coordenada.IdDispositivo.ImagenTelefono + "," + coordenada.IdUsuario.UsuarioLlavePrimaria + "," + coordenada.IdDispositivo.IdDispositivo + "," + coordenada.IdUsuario.UsuarioNombre + "," + coordenada.IdDispositivo.NumerodelTelefono.Substring(2); dtCoor.Rows.Add(row); dtDatos.Rows.Add(row2); } string[] arrIdAlias = ddlEmpleados.SelectedValue.Trim().ToUpper().Split('-'); string[] dt = ExtraeArrayCoordenadas(dtCoor).ToArray(); string[] data = ExtraeArrayCoordenadasDatos(dtDatos).ToArray(); if (dt != null && dt.Length > 0) { for (int cc = 0; cc < dt.Length; cc++) { if (c == dt.Length - 1) { arrayCoordenadas.Value += dt[cc].ToString(); arrayDatos.Value += data[cc].ToString(); } else { arrayCoordenadas.Value += dt[cc].ToString() + '&'; arrayDatos.Value += data[cc].ToString() + '&'; c++; } } } if (arrayCoordenadas.Value != "") { trExportar.Visible = false; string script = " pintaLineaMapa();"; ScriptManager.RegisterStartupScript(this, this.GetType(), "pinta_scripts", script, true); } else { script = " showMessage_Info('No existen registros con la busqueda especificada');"; ScriptManager.RegisterStartupScript(this, this.GetType(), "err_cmp_scripts", script, true); } }
protected void Page_Load(object sender, EventArgs e) { try { if (Session["UserName"] == null || Session["UserName"].ToString() == "") { Response.Redirect("~/Default.aspx"); } try { if (!IsPostBack) { TDI_LogPaginas logPaginas = new TDI_LogPaginas(); logPaginas.LogFecha = DateTime.Now; logPaginas.LogIp = Session["UserIP"].ToString(); logPaginas.LogUrlPagina = Request.RawUrl; logPaginas.EmpleadoLlavePrimaria = new THE_Empleado { EmpleadoLlavePrimaria = int.Parse(Session["numeroUsuario"].ToString()) }; MngNegocioLogPaginas.GuardarLogPaginas(logPaginas); } string IdUsuario = Request.QueryString["data"]; string IdDispositivo = Request.QueryString["guid"]; if (IdDispositivo != "NO") { List <THE_Dispositivo> dispo = MngNegocioDispositivo.ObtieneDispositivoPorID(int.Parse(IdDispositivo)); lblDispoDesc.Text = dispo[0].DispositivoDesc; lblDispoMarca.Text = dispo[0].Marca; lblDispoMdn.Text = dispo[0].DispositivoMdn; lblDispoMeid.Text = dispo[0].DispositivoMeid; lblDispoModelo.Text = dispo[0].Modelo; lblDispoNum.Text = dispo[0].NumerodelTelefono; } else { List <TDI_UsuarioDispositivo> usuDispo = MngNegocioUsuarioDispositivo.ObtieneDispositivoPorUsuario(int.Parse(IdUsuario)); if (usuDispo.Count > 0) { } else { } } } catch (Exception ex) { EncuestasMoviles.Clases.Error.ManejadorErrores(ex, Session["numeroUsuario"].ToString(), Session["UserDomain"].ToString(), Session["userMachineName"].ToString(), Session["UserIP"].ToString(), "DispositivoInfo", int.Parse(Session["numeroUsuario"].ToString())); } } catch (Exception ms) { } finally { } }
protected void btnBuscaDispo_Click(object sender, EventArgs e) { string idEstado = HiddenFieldSelect.Value.ToString(); string idMunicipio = HiddenFieldMuni.Value.ToString(); string[] IdCatalogo; if (hfIdCat.Value != "") { IdCatalogo = hfIdCat.Value.Remove(hfIdCat.Value.Length - 1, 1).ToString().Split('&'); } else { IdCatalogo = new string[0]; } List <THE_Dispositivo> BusquedaDispo = MngNegocioDispositivo.BuscaDispositivoFiltros(txtBusUsua.Text, txtBusNumTel.Text, idEstado, idMunicipio, IdCatalogo); if (BusquedaDispo.Count > 0 && BusquedaDispo.Count != null) { lvDispositivosEncu.DataSource = null; for (int ini = 0; ini < BusquedaDispo.Count; ini++) { BusquedaDispo[ini].EstatusCheck = ""; BusquedaDispo[ini].ChkEnabled = ""; BusquedaDispo[ini].ColorEstatus = "../Images/not.jpg"; BusquedaDispo[ini].StrColor = "Rojo"; if (BusquedaDispo[ini].ImagenTelefono == null) { BusquedaDispo[ini].ImagenTelefono = "../Images/no_foto.jpg"; } else { BusquedaDispo[ini].ImagenTelefono = "../Media/Dispositivos/" + BusquedaDispo[ini].IdDispositivo + "/" + BusquedaDispo[ini].ImagenTelefono; } } lvDispositivosEncu.DataSource = BusquedaDispo; lvDispositivosEncu.DataBind(); ListView1.DataSource = BusquedaDispo; ListView1.DataBind(); } else { lvDispositivosEncu.DataSource = null; lvDispositivosEncu.DataBind(); ListView1.DataSource = null; ListView1.DataBind(); } }
private void ObtieneDispoDisponiblesEncuesta(int IdEncuSel) { try { List <THE_Dispositivo> lstDispoEncu = new List <THE_Dispositivo>(); List <THE_Dispositivo> lstDispoDispo = MngNegocioDispositivo.ObtieneDispositivosAsignadosUsuario(); for (int ini = 0; ini < lstDispoDispo.Count; ini++) { if (lstDispoDispo[ini].ImagenTelefono == null) { lstDispoDispo[ini].ImagenTelefono = "../Images/no_foto.jpg"; } else { lstDispoDispo[ini].ImagenTelefono = "../Media/Dispositivos/" + lstDispoDispo[ini].IdDispositivo + "/" + lstDispoDispo[ini].ImagenTelefono; } } foreach (THE_Dispositivo itmDispo in lstDispoDispo) { List <TDI_EncuestaDispositivo> itmEncuDis = MngNegocioEncuestaDispositivo.ObtieneEstatusDispoEncu(itmDispo.IdDispositivo, IdEncuSel); if (itmEncuDis.Count > 0) { itmDispo.ColorEstatus = itmEncuDis[0].IdDispositivo.ColorEstatus; itmDispo.EstatusCheck = itmEncuDis[0].IdDispositivo.EstatusCheck; itmDispo.ChkEnabled = itmEncuDis[0].IdDispositivo.ChkEnabled; } else { itmDispo.ColorEstatus = "../Images/not.jpg"; itmDispo.EstatusCheck = ""; itmDispo.ChkEnabled = ""; itmDispo.StrColor = "Rojo"; } lstDispoEncu.Add(itmDispo); } lvDispositivosEncu.DataSource = null; lvDispositivosEncu.DataSource = lstDispoEncu; lvDispositivosEncu.DataBind(); ListView1.DataSource = lstDispoEncu; ListView1.DataBind(); } catch (Exception ex) { EncuestasMoviles.Clases.Error.ManejadorErrores(ex, Session["UserName"].ToString(), Session["UserDomain"].ToString(), Session["userMachineName"].ToString(), Session["UserIP"].ToString(), "frmDispoEncuesta", int.Parse(Session["numeroUsuario"].ToString())); } }
public bool GuardaCoordenadasDispositivo(double numeroTelDispositivo, string latitud, string longitud, string CercaDe) { string CredentialAccess = _ChyperRijndael.Transmute(ConfigurationManager.AppSettings["LlaveAccesoHTTPS"].ToString(), Azteca.Utility.Security.enmTransformType.intDecrypt); if (Credentials.UserName != CredentialAccess && Credentials.Password != CredentialAccess) { throw new SoapException("Unauthorized", SoapException.ClientFaultCode); } else { return(MngNegocioDispositivo.GuardaCoordenadasDispositivo(numeroTelDispositivo, latitud, longitud, CercaDe)); } }
public List <THE_Dispositivo> ObtenerDispositivoNumero(double NumeroTelefono) { string CredentialAccess = _ChyperRijndael.Transmute(ConfigurationManager.AppSettings["LlaveAccesoHTTPS"].ToString(), Azteca.Utility.Security.enmTransformType.intDecrypt); if (Credentials.UserName != CredentialAccess && Credentials.Password != CredentialAccess) { throw new SoapException("Unauthorized", SoapException.ClientFaultCode); } else { return((List <THE_Dispositivo>)MngNegocioDispositivo.ObtenerDispositivoNumero(NumeroTelefono)); } }
public bool ActualizaTokenDispositivo(double numTelefonico, string tokenTelefono) { string CredentialAccess = _ChyperRijndael.Transmute(ConfigurationManager.AppSettings["LlaveAccesoHTTPS"].ToString(), Azteca.Utility.Security.enmTransformType.intDecrypt); if (Credentials.UserName != CredentialAccess && Credentials.Password != CredentialAccess) { throw new SoapException("Unauthorized", SoapException.ClientFaultCode); } else { return(MngNegocioDispositivo.ActualizaTokenDispositivo(numTelefonico, tokenTelefono)); } }
void ctrlMsj_RegistroEliminado(object sender, EventArgs e) { try { if (((bool)sender) == true) { THE_Dispositivo elimiDispo = (THE_Dispositivo)ViewState["Dispositivo"]; elimiDispo.DispositivoEstatus = 'B'; bool Elimina = MngNegocioDispositivo.EliminaDispositivo(elimiDispo); if (Elimina) { CargaGrid(); } } } catch (Exception ex) { EncuestasMoviles.Clases.Error.ManejadorErrores(ex, Session["UserName"].ToString(), Session["UserDomain"].ToString(), Session["userMachineName"].ToString(), Session["UserIP"].ToString(), "frmDispositivos", int.Parse(Session["numeroUsuario"].ToString())); } }
public bool ActualizaVersionDispo(string NUM_TEL, int VERSION_CODE, string VER_NAME, string VER_DATE) { bool exito = false; string CredentialAccess = _ChyperRijndael.Transmute(ConfigurationManager.AppSettings["LlaveAccesoHTTPS"].ToString(), Azteca.Utility.Security.enmTransformType.intDecrypt); if (Credentials.UserName != CredentialAccess && Credentials.Password != CredentialAccess) { throw new SoapException("Unauthorized", SoapException.ClientFaultCode); } else { try { List <TDI_DispoApVersion> ExisteDispo = MngNegocioDispositivo.VerificaDispoIntoVersion(NUM_TEL); if (ExisteDispo.Count > 0) { ExisteDispo[0].NUM_TEL = NUM_TEL; ExisteDispo[0].NUMBER = VERSION_CODE; ExisteDispo[0].VER_NAME = VER_NAME; ExisteDispo[0].VER_DATE = DateTime.Now; exito = MngNegocioDispositivo.ActualizaVersionDispo(ExisteDispo[0]); } else { TDI_DispoApVersion ObjVersion = new TDI_DispoApVersion(); ObjVersion.NUM_TEL = NUM_TEL; ObjVersion.NUMBER = VERSION_CODE; ObjVersion.VER_NAME = VER_NAME; ObjVersion.VER_DATE = DateTime.Now; exito = MngNegocioDispositivo.GuardaVersionDispo(ObjVersion); } } catch (Exception ms) { } return(exito); } }
private void ObtieneTodosDispos() { try { List <THE_Dispositivo> lstDisposDisponi = MngNegocioDispositivo.ObtieneDispositivosAsignadosUsuario(); for (int ini = 0; ini < lstDisposDisponi.Count; ini++) { if (lstDisposDisponi[ini].ImagenTelefono == null) { lstDisposDisponi[ini].ImagenTelefono = "../Images/no_foto.jpg"; } else { lstDisposDisponi[ini].ImagenTelefono = "../Media/Dispositivos/" + lstDisposDisponi[ini].IdDispositivo + "/" + lstDisposDisponi[ini].ImagenTelefono; } } lvDispositivosEncu.DataSource = null; for (int ini = 0; ini < lstDisposDisponi.Count; ini++) { lstDisposDisponi[ini].EstatusCheck = ""; lstDisposDisponi[ini].ChkEnabled = ""; lstDisposDisponi[ini].ColorEstatus = "../Images/not.jpg"; lstDisposDisponi[ini].StrColor = "Rojo"; } lvDispositivosEncu.DataSource = lstDisposDisponi; lvDispositivosEncu.DataBind(); ListView1.DataSource = lstDisposDisponi; ListView1.DataBind(); } catch (Exception ex) { EncuestasMoviles.Clases.Error.ManejadorErrores(ex, Session["UserName"].ToString(), Session["UserDomain"].ToString(), Session["userMachineName"].ToString(), Session["UserIP"].ToString(), "frmDispoEncuesta", int.Parse(Session["numeroUsuario"].ToString())); } }
protected void btnGuardaAltaDispositivo_Click(object sender, EventArgs e) { try { THE_Dispositivo dispo = new THE_Dispositivo(); string fn = ""; if (btnGuardaAltaDispositivo.Text == "Guardar") { List <THE_Dispositivo> EncontreNumero = MngNegocioDispositivo.BusquedaDispositivoPorNumeroTel(txtNumeroTelefono.Text.Trim()); List <THE_Dispositivo> EncontreMEID = MngNegocioDispositivo.BusquedaDispositivoPorMEID(txtMeidTelefono.Text.Trim()); List <THE_Dispositivo> EncontreMDN = MngNegocioDispositivo.BusquedaDispositivoPorMDN(txtMdnTelefono.Text.Trim()); if (EncontreNumero.Count > 0) { mpeAltaDispositivo.Show(); DivErrorres.InnerText = "Ya existe el numero telefonico: " + txtNumeroTelefono.Text.Trim(); return; } if (EncontreMEID.Count > 0) { mpeAltaDispositivo.Show(); DivErrorres.InnerText = "Ya existe el MEID: " + txtMeidTelefono.Text.Trim(); return; } if (EncontreMDN.Count > 0) { mpeAltaDispositivo.Show(); DivErrorres.InnerText = "Ya existe el MDN: " + txtMdnTelefono.Text.Trim(); return; } } if (subeImagenTelefono.HasFile) { string fileExt = System.IO.Path.GetExtension(subeImagenTelefono.FileName); fileExt = fileExt.ToUpper(); if (fileExt != ".JPEG" && fileExt != ".JPG" && fileExt != ".GIF" && fileExt != ".PNG") { DivErrorres.InnerText = "Ingrese una imagen valida con extencion .jpeg| .jpg| .gif| .png "; mpeAltaDispositivo.Show(); return; } else { subeImagenTelefono.PostedFile.SaveAs(Server.MapPath("~/temporal/") + subeImagenTelefono.FileName); fn = subeImagenTelefono.FileName; } } int Lada = 52; dispo.DispositivoDesc = txtDescTelefono.Text.Trim(); dispo.DispositivoEstatus = 'A'; dispo.DispositivoMdn = txtMdnTelefono.Text.Trim(); dispo.DispositivoMeid = txtMeidTelefono.Text.Trim(); dispo.Marca = txtMarcaTelefono.Text.Trim(); dispo.Modelo = txtModeloTelefono.Text.Trim(); dispo.NumerodelTelefono = Lada + txtNumeroTelefono.Text.Trim(); dispo.IdDispositivo = 0; if (fn != "") { dispo.ImagenTelefono = fn; } if (btnGuardaAltaDispositivo.Text == "Guardar") { bool Guardado = MngNegocioDispositivo.GuardaAltaDispositivo(dispo); SubeImagen(dispo.IdDispositivo.ToString(), fn); ViewState["Opcion"] = "Correcto"; if (Guardado) { GuardaLogTransacc("Se Crea Dispositivo " + dispo.IdDispositivo, 10); ctrlMessageBox.AddMessage("Se ha Guardado Correctamente el Dispositivo " + dispo.DispositivoDesc, MessageBox.enmMessageType.Success, true, false, "Guarda", "Alta de Dispositivo"); } else { ctrlMessageBox.AddMessage("Erro al guardar dispositivo", MessageBox.enmMessageType.Error, true, false, "Error", "Erro de Insercion"); } } else { List <THE_Dispositivo> findNumero = MngNegocioDispositivo.BusquedaDispositivoPorNumeroTel(txtNumeroTelefono.Text.Trim(), int.Parse(txtIdDispo.Value)); List <THE_Dispositivo> findMEID = MngNegocioDispositivo.BusquedaDispositivoPorMEID(txtMeidTelefono.Text.Trim(), int.Parse(txtIdDispo.Value)); List <THE_Dispositivo> findMDN = MngNegocioDispositivo.BusquedaDispositivoPorMDN(txtMdnTelefono.Text.Trim(), int.Parse(txtIdDispo.Value)); if (findNumero.Count == 0) { List <THE_Dispositivo> findNumero2 = MngNegocioDispositivo.BusquedaDispositivoPorNumeroTel(txtNumeroTelefono.Text.Trim()); if (findNumero2.Count > 0) { mpeAltaDispositivo.Show(); DivErrorres.InnerText = "Ya existe el numero telefonico: " + txtNumeroTelefono.Text.Trim(); return; } } if (findMEID.Count == 0) { List <THE_Dispositivo> findMEID2 = MngNegocioDispositivo.BusquedaDispositivoPorMEID(txtMeidTelefono.Text.Trim()); if (findMEID2.Count > 0) { mpeAltaDispositivo.Show(); DivErrorres.InnerText = "Ya existe el MEID: " + txtMeidTelefono.Text.Trim(); return; } } if (findMDN.Count == 0) { List <THE_Dispositivo> findMDN2 = MngNegocioDispositivo.BusquedaDispositivoPorMDN(txtMdnTelefono.Text.Trim()); if (findMDN2.Count > 0) { mpeAltaDispositivo.Show(); DivErrorres.InnerText = "Ya existe el MDN: " + txtMdnTelefono.Text.Trim(); return; } } dispo.IdDispositivo = int.Parse(txtIdDispo.Value); bool Actualiza = MngNegocioDispositivo.ActualizaDispositivo(dispo); SubeImagen(dispo.IdDispositivo.ToString(), fn); if (Actualiza) { ctrlMessageBox.AddMessage("Se ha Actualizado Correctamente el Dispositivo " + dispo.DispositivoDesc, MessageBox.enmMessageType.Success, true, false, "Guarda", "Actualiza Dispositivo"); ViewState["Opcion"] = "Correcto"; GuardaLogTransacc("Se Actualizo el Dispositivo " + dispo.IdDispositivo, 11); } } LimpiaControles(); } catch (Exception ex) { EncuestasMoviles.Clases.Error.ManejadorErrores(ex, Session["UserName"].ToString(), Session["UserDomain"].ToString(), Session["userMachineName"].ToString(), Session["UserIP"].ToString(), "AltaDispositivo", int.Parse(Session["numeroUsuario"].ToString())); } }