Fix Mapa
This commit is contained in:
		| @@ -22,6 +22,29 @@ public class ResultadosController : ControllerBase | ||||
|         _configuration = configuration; | ||||
|     } | ||||
|  | ||||
|     private string? GetLogoUrl( | ||||
|         string agrupacionId, | ||||
|         int categoriaId, | ||||
|         int? ambitoId, | ||||
|         List<LogoAgrupacionCategoria> todosLosLogos) | ||||
|     { | ||||
|         // Prioridad 1: Buscar un logo específico para este partido, categoría Y ámbito. | ||||
|         var logoEspecifico = todosLosLogos.FirstOrDefault(l => | ||||
|             l.AgrupacionPoliticaId == agrupacionId && | ||||
|             l.CategoriaId == categoriaId && | ||||
|             l.AmbitoGeograficoId == ambitoId); | ||||
|  | ||||
|         if (logoEspecifico != null) return logoEspecifico.LogoUrl; | ||||
|  | ||||
|         // Prioridad 2: Si no hay uno específico, buscar un logo general (sin ámbito) para este partido y categoría. | ||||
|         var logoGeneral = todosLosLogos.FirstOrDefault(l => | ||||
|             l.AgrupacionPoliticaId == agrupacionId && | ||||
|             l.CategoriaId == categoriaId && | ||||
|             l.AmbitoGeograficoId == null); | ||||
|  | ||||
|         return logoGeneral?.LogoUrl; | ||||
|     } | ||||
|  | ||||
|     [HttpGet("partido/{municipioId}")] | ||||
|     public async Task<IActionResult> GetResultadosPorPartido(string municipioId, [FromQuery] int categoriaId) | ||||
|     { | ||||
| @@ -117,53 +140,55 @@ public class ResultadosController : ControllerBase | ||||
|             .Where(r => r.AmbitoGeografico.NivelId == 30) // Nivel 30 = Municipio | ||||
|             .ToListAsync(); | ||||
|  | ||||
|         var logos = await _dbContext.LogosAgrupacionesCategorias.AsNoTracking().ToListAsync(); | ||||
|         // Obtenemos TODOS los logos relevantes en una sola consulta | ||||
|         var todosLosLogos = await _dbContext.LogosAgrupacionesCategorias.AsNoTracking().ToListAsync(); | ||||
|  | ||||
|         // --- LÓGICA DE AGRUPACIÓN Y CÁLCULO CORREGIDA --- | ||||
|         var resultadosAgrupados = resultadosPorMunicipio | ||||
|             .GroupBy(r => r.CategoriaId) | ||||
|             .Select(g => new | ||||
|             { | ||||
|                 CategoriaId = g.Key, | ||||
|                 CategoriaNombre = estadosPorCategoria.ContainsKey(g.Key) ? estadosPorCategoria[g.Key].CategoriaElectoral.Nombre : "Desconocido", | ||||
|                 EstadoRecuento = estadosPorCategoria.GetValueOrDefault(g.Key), | ||||
|                 TotalVotosCategoria = g.Sum(r => r.CantidadVotos), | ||||
|                 // Agrupamos por el ID de la agrupación, no por el objeto, para evitar duplicados | ||||
|                 ResultadosAgrupados = g.GroupBy(r => r.AgrupacionPoliticaId) | ||||
|         .GroupBy(r => r.CategoriaId) | ||||
|         .Select(g => new | ||||
|         { | ||||
|             CategoriaId = g.Key, | ||||
|             CategoriaNombre = estadosPorCategoria.ContainsKey(g.Key) ? estadosPorCategoria[g.Key].CategoriaElectoral.Nombre : "Desconocido", | ||||
|             EstadoRecuento = estadosPorCategoria.GetValueOrDefault(g.Key), | ||||
|             TotalVotosCategoria = g.Sum(r => r.CantidadVotos), | ||||
|             // Agrupamos por el ID de la agrupación, no por el objeto, para evitar duplicados | ||||
|             ResultadosAgrupados = g.GroupBy(r => r.AgrupacionPoliticaId) | ||||
|                                        .Select(partidoGroup => new | ||||
|                                        { | ||||
|                                            Agrupacion = partidoGroup.First().AgrupacionPolitica, | ||||
|                                            Votos = partidoGroup.Sum(r => r.CantidadVotos) | ||||
|                                        }) | ||||
|                                        .ToList() | ||||
|             }) | ||||
|         }) | ||||
|             .Select(g => new | ||||
|             { | ||||
|                 g.CategoriaId, | ||||
|                 g.CategoriaNombre, | ||||
|                 g.EstadoRecuento, | ||||
|                 Resultados = g.ResultadosAgrupados | ||||
|                               .Select(r => | ||||
|                               { | ||||
|                                   var logoUrl = logos.FirstOrDefault(l => l.AgrupacionPoliticaId == r.Agrupacion.Id && l.CategoriaId == g.CategoriaId && l.AmbitoGeograficoId != null)?.LogoUrl | ||||
|                                              ?? logos.FirstOrDefault(l => l.AgrupacionPoliticaId == r.Agrupacion.Id && l.CategoriaId == g.CategoriaId && l.AmbitoGeograficoId == null)?.LogoUrl; | ||||
|                           .Select(r => | ||||
|                           { | ||||
|                               // --- USAMOS EL NUEVO MÉTODO HELPER --- | ||||
|                               // Para el resumen provincial, el ámbito es siempre el de la provincia. | ||||
|                               var logoUrl = GetLogoUrl(r.Agrupacion.Id, g.CategoriaId, provincia.Id, todosLosLogos); | ||||
|  | ||||
|                                   return new | ||||
|                                   { | ||||
|                                       Id = r.Agrupacion.Id, | ||||
|                                       r.Agrupacion.Nombre, | ||||
|                                       r.Agrupacion.NombreCorto, | ||||
|                                       r.Agrupacion.Color, | ||||
|                                       LogoUrl = logoUrl, | ||||
|                                       r.Votos, | ||||
|                                       Porcentaje = g.TotalVotosCategoria > 0 ? ((decimal)r.Votos * 100 / g.TotalVotosCategoria) : 0 | ||||
|                                   }; | ||||
|                               }) | ||||
|                               .OrderByDescending(r => r.Votos) | ||||
|                               .ToList() | ||||
|                               return new | ||||
|                               { | ||||
|                                   Id = r.Agrupacion.Id, | ||||
|                                   r.Agrupacion.Nombre, | ||||
|                                   r.Agrupacion.NombreCorto, | ||||
|                                   r.Agrupacion.Color, | ||||
|                                   LogoUrl = logoUrl, | ||||
|                                   r.Votos, | ||||
|                                   Porcentaje = g.TotalVotosCategoria > 0 ? ((decimal)r.Votos * 100 / g.TotalVotosCategoria) : 0 | ||||
|                               }; | ||||
|                           }) | ||||
|                           .OrderByDescending(r => r.Votos) | ||||
|                           .ToList() | ||||
|             }) | ||||
|             .OrderBy(c => c.CategoriaId) | ||||
|             .ToList(); | ||||
|         .OrderBy(c => c.CategoriaId) | ||||
|         .ToList(); | ||||
|  | ||||
|         return Ok(resultadosAgrupados); | ||||
|     } | ||||
| @@ -436,13 +461,33 @@ public class ResultadosController : ControllerBase | ||||
|  | ||||
|     private async Task<IActionResult> GetComposicionDesdeProyecciones(Dictionary<string, string> config) | ||||
|     { | ||||
|         // --- INICIO DE LA CORRECCIÓN --- | ||||
|         // 1. Obtenemos el ID del ámbito provincial para usarlo en el filtro. | ||||
|         var provincia = await _dbContext.AmbitosGeograficos.AsNoTracking() | ||||
|             .FirstOrDefaultAsync(a => a.NivelId == 10); | ||||
|  | ||||
|         if (provincia == null) | ||||
|         { | ||||
|             // Si no se encuentra la provincia, no podemos continuar. | ||||
|             // Devolvemos un objeto vacío para no romper el frontend. | ||||
|             return Ok(new | ||||
|             { | ||||
|                 Diputados = new { Partidos = new List<object>() }, | ||||
|                 Senadores = new { Partidos = new List<object>() } | ||||
|             }); | ||||
|         } | ||||
|         // --- FIN DE LA CORRECCIÓN --- | ||||
|  | ||||
|         var bancasPorAgrupacion = await _dbContext.ProyeccionesBancas | ||||
|             .AsNoTracking() | ||||
|             // --- CAMBIO CLAVE: Añadimos el filtro por AmbitoGeograficoId --- | ||||
|             .Where(p => p.AmbitoGeograficoId == provincia.Id) | ||||
|             .GroupBy(p => new { p.AgrupacionPoliticaId, p.CategoriaId }) | ||||
|             .Select(g => new | ||||
|             { | ||||
|                 AgrupacionId = g.Key.AgrupacionPoliticaId, | ||||
|                 CategoriaId = g.Key.CategoriaId, | ||||
|                 // Ahora la suma es correcta porque solo considera los registros a nivel provincial | ||||
|                 BancasTotales = g.Sum(p => p.NroBancas) | ||||
|             }) | ||||
|             .ToListAsync(); | ||||
| @@ -638,12 +683,20 @@ public class ResultadosController : ControllerBase | ||||
|             .GroupBy(r => r.AmbitoGeografico.SeccionProvincialId) | ||||
|             .Select(g => | ||||
|             { | ||||
|                 // --- INICIO DE LA CORRECCIÓN --- | ||||
|                 // Para cada sección, encontramos al partido con más votos. | ||||
|                 var ganador = g | ||||
|                     .GroupBy(r => r.AgrupacionPolitica) | ||||
|                     .Select(pg => new { Agrupacion = pg.Key, TotalVotos = pg.Sum(r => r.CantidadVotos) }) | ||||
|                     // CAMBIO CLAVE: Agrupamos por el ID de la agrupación, no por el objeto. | ||||
|                     .GroupBy(r => r.AgrupacionPolitica.Id) | ||||
|                     .Select(pg => new | ||||
|                     { | ||||
|                         // Obtenemos la entidad completa del primer elemento del grupo | ||||
|                         Agrupacion = pg.First().AgrupacionPolitica, | ||||
|                         TotalVotos = pg.Sum(r => r.CantidadVotos) | ||||
|                     }) | ||||
|                     .OrderByDescending(x => x.TotalVotos) | ||||
|                     .FirstOrDefault(); | ||||
|                 // --- FIN DE LA CORRECCIÓN --- | ||||
|  | ||||
|                 // Buscamos el nombre de la sección | ||||
|                 var seccionInfo = _dbContext.AmbitosGeograficos | ||||
| @@ -657,7 +710,7 @@ public class ResultadosController : ControllerBase | ||||
|                     ColorGanador = ganador?.Agrupacion.Color | ||||
|                 }; | ||||
|             }) | ||||
|             .Where(r => r.SeccionId != null) // Filtramos cualquier posible nulo | ||||
|             .Where(r => r.SeccionId != null) | ||||
|             .ToList(); | ||||
|  | ||||
|         return Ok(ganadoresPorSeccion); | ||||
|   | ||||
| @@ -14,7 +14,7 @@ using System.Reflection; | ||||
| [assembly: System.Reflection.AssemblyCompanyAttribute("Elecciones.Api")] | ||||
| [assembly: System.Reflection.AssemblyConfigurationAttribute("Debug")] | ||||
| [assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")] | ||||
| [assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+50d3c6bce97a03378e6af6bb8a833b8102fbc019")] | ||||
| [assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+7f49362e55449c7400f7099fc78a9c975e8268f1")] | ||||
| [assembly: System.Reflection.AssemblyProductAttribute("Elecciones.Api")] | ||||
| [assembly: System.Reflection.AssemblyTitleAttribute("Elecciones.Api")] | ||||
| [assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")] | ||||
|   | ||||
| @@ -1 +1 @@ | ||||
| {"GlobalPropertiesHash":"b5T/+ta4fUd8qpIzUTm3KyEwAYYUsU5ASo+CSFM3ByE=","FingerprintPatternsHash":"8ZRc1sGeVrPBx4lD717BgRaQekyh78QKV9SKsdt638U=","PropertyOverridesHash":"8ZRc1sGeVrPBx4lD717BgRaQekyh78QKV9SKsdt638U=","InputHashes":["TyIJk/eQMWjmB5LsDE\u002BZIJC9P9ciVxd7bnzRiTZsGt4=","t631p0kaOa0gMRIcaPzz1ZVPZ1kuq4pq4kYPWQgoPcM=","PA/Beu9jJpOBY5r5Y1CiSyqrARA2j7LHeWYUnEZpQO8=","E2ODTAlJxzsXY1iP1eB/02NIUK\u002BnQveGlWAOHY1cpgA=","6WTvWQ72AaZBYOVSmaxaci9tc1dW5p7IK9Kscjj2cb0=","vAy46VJ9Gp8QqG/Px4J1mj8jL6ws4/A01UKRmMYfYek=","cdgbHR/E4DJsddPc\u002BTpzoUMOVNaFJZm33Pw7AxU9Ees=","4r4JGR4hS5m4rsLfuCSZxzrknTBxKFkLQDXc\u002B2KbqTU=","yVoZ4UnBcSOapsJIi046hnn7ylD3jAcEBUxQ\u002Brkvj/4=","/GfbpJthEWmsuz0uFx1QLHM7gyM1wLLeQgAIl4SzUD4=","i5\u002B5LcfxQD8meRAkQbVf4wMvjxSE4\u002BjCd2/FdPtMpms=","AvSkxVPIg0GjnB1RJ4hDNyo9p9GONrzDs8uVuixH\u002BOE=","IgT9pOgRnK37qfILj2QcjFoBZ180HMt\u002BScgje2iYOo4=","ezUlOMzNZmyKDIe1wwXqvX\u002BvhwfB992xNVts7r2zcTc=","y2BV4WpkQuLfqQhfOQBtmuzh940c3s4LAopGKfztfTE=","lHTUEsMkDu8nqXtfTwl7FRfgocyyc7RI5O/edTHN1\u002B0=","A7nz7qgOtQ1CwZZLvNnr0b5QZB3fTi3y4i6y7rBIcxQ=","znnuRi2tsk7AACuYo4WSgj7NcLriG4PKVaF4L35SvDk=","GelE32odx/vTului267wqi6zL3abBnF9yvwC2Q66LoM=","TEsXImnzxFKTIq2f5fiDu7i6Ar/cbecW5MZ3z8Wb/a4=","5WogJu\u002BUPlF\u002BE5mq/ILtDXpVwqwmhHtsEB13nmT5JJk=","dcHQRkttjMjo2dvhL7hA9t4Pg\u002B7OnjZpkFmakT4QR9U=","Of8nTYw5l\u002BgiAJo7z6XYIntG2tUtCFcILzHbTiiXn\u002Bw=","PDy\u002BTiayvNAoXXBEgwC/kCojpgOOMI6RQOIoSXs3LJc=","/m4FR4iXKuwmkGwlGV8BC\u002BQlY1lNKwuFjn/swBxcJwY=","P8JRhYPpULTLMAydvl3Ky\u002B92/tYDIjui0l66En4aXuQ=","V6FZj7x4KC8RXM8C8gTLzOqvQTQl9FcMgsSBpQA/m8U="],"CachedAssets":{},"CachedCopyCandidates":{}} | ||||
| {"GlobalPropertiesHash":"b5T/+ta4fUd8qpIzUTm3KyEwAYYUsU5ASo+CSFM3ByE=","FingerprintPatternsHash":"8ZRc1sGeVrPBx4lD717BgRaQekyh78QKV9SKsdt638U=","PropertyOverridesHash":"8ZRc1sGeVrPBx4lD717BgRaQekyh78QKV9SKsdt638U=","InputHashes":["TyIJk/eQMWjmB5LsDE\u002BZIJC9P9ciVxd7bnzRiTZsGt4=","t631p0kaOa0gMRIcaPzz1ZVPZ1kuq4pq4kYPWQgoPcM=","PA/Beu9jJpOBY5r5Y1CiSyqrARA2j7LHeWYUnEZpQO8=","E2ODTAlJxzsXY1iP1eB/02NIUK\u002BnQveGlWAOHY1cpgA=","6WTvWQ72AaZBYOVSmaxaci9tc1dW5p7IK9Kscjj2cb0=","vAy46VJ9Gp8QqG/Px4J1mj8jL6ws4/A01UKRmMYfYek=","cdgbHR/E4DJsddPc\u002BTpzoUMOVNaFJZm33Pw7AxU9Ees=","4r4JGR4hS5m4rsLfuCSZxzrknTBxKFkLQDXc\u002B2KbqTU=","yVoZ4UnBcSOapsJIi046hnn7ylD3jAcEBUxQ\u002Brkvj/4=","/GfbpJthEWmsuz0uFx1QLHM7gyM1wLLeQgAIl4SzUD4=","i5\u002B5LcfxQD8meRAkQbVf4wMvjxSE4\u002BjCd2/FdPtMpms=","AvSkxVPIg0GjnB1RJ4hDNyo9p9GONrzDs8uVuixH\u002BOE=","IgT9pOgRnK37qfILj2QcjFoBZ180HMt\u002BScgje2iYOo4=","ezUlOMzNZmyKDIe1wwXqvX\u002BvhwfB992xNVts7r2zcTc=","y2BV4WpkQuLfqQhfOQBtmuzh940c3s4LAopGKfztfTE=","lHTUEsMkDu8nqXtfTwl7FRfgocyyc7RI5O/edTHN1\u002B0=","A7nz7qgOtQ1CwZZLvNnr0b5QZB3fTi3y4i6y7rBIcxQ=","znnuRi2tsk7AACuYo4WSgj7NcLriG4PKVaF4L35SvDk=","GelE32odx/vTului267wqi6zL3abBnF9yvwC2Q66LoM=","TEsXImnzxFKTIq2f5fiDu7i6Ar/cbecW5MZ3z8Wb/a4=","5WogJu\u002BUPlF\u002BE5mq/ILtDXpVwqwmhHtsEB13nmT5JJk=","dcHQRkttjMjo2dvhL7hA9t4Pg\u002B7OnjZpkFmakT4QR9U=","Of8nTYw5l\u002BgiAJo7z6XYIntG2tUtCFcILzHbTiiXn\u002Bw=","PDy\u002BTiayvNAoXXBEgwC/kCojpgOOMI6RQOIoSXs3LJc=","taDH73UT7ynWh85nq2etLidK9sPQF85kWam\u002BdE5RD8w=","P8JRhYPpULTLMAydvl3Ky\u002B92/tYDIjui0l66En4aXuQ=","wUbgaUpdwuF5YmyAUI1ZjPse4/SaT06idesVz21NM\u002Bk="],"CachedAssets":{},"CachedCopyCandidates":{}} | ||||
| @@ -1 +1 @@ | ||||
| {"GlobalPropertiesHash":"tJTBjV/i0Ihkc6XuOu69wxL8PBac9c9Kak6srMso4pU=","FingerprintPatternsHash":"8ZRc1sGeVrPBx4lD717BgRaQekyh78QKV9SKsdt638U=","PropertyOverridesHash":"8ZRc1sGeVrPBx4lD717BgRaQekyh78QKV9SKsdt638U=","InputHashes":["TyIJk/eQMWjmB5LsDE\u002BZIJC9P9ciVxd7bnzRiTZsGt4=","t631p0kaOa0gMRIcaPzz1ZVPZ1kuq4pq4kYPWQgoPcM=","PA/Beu9jJpOBY5r5Y1CiSyqrARA2j7LHeWYUnEZpQO8=","E2ODTAlJxzsXY1iP1eB/02NIUK\u002BnQveGlWAOHY1cpgA=","6WTvWQ72AaZBYOVSmaxaci9tc1dW5p7IK9Kscjj2cb0=","vAy46VJ9Gp8QqG/Px4J1mj8jL6ws4/A01UKRmMYfYek=","cdgbHR/E4DJsddPc\u002BTpzoUMOVNaFJZm33Pw7AxU9Ees=","4r4JGR4hS5m4rsLfuCSZxzrknTBxKFkLQDXc\u002B2KbqTU=","yVoZ4UnBcSOapsJIi046hnn7ylD3jAcEBUxQ\u002Brkvj/4=","/GfbpJthEWmsuz0uFx1QLHM7gyM1wLLeQgAIl4SzUD4=","i5\u002B5LcfxQD8meRAkQbVf4wMvjxSE4\u002BjCd2/FdPtMpms=","AvSkxVPIg0GjnB1RJ4hDNyo9p9GONrzDs8uVuixH\u002BOE=","IgT9pOgRnK37qfILj2QcjFoBZ180HMt\u002BScgje2iYOo4=","ezUlOMzNZmyKDIe1wwXqvX\u002BvhwfB992xNVts7r2zcTc=","y2BV4WpkQuLfqQhfOQBtmuzh940c3s4LAopGKfztfTE=","lHTUEsMkDu8nqXtfTwl7FRfgocyyc7RI5O/edTHN1\u002B0=","A7nz7qgOtQ1CwZZLvNnr0b5QZB3fTi3y4i6y7rBIcxQ=","znnuRi2tsk7AACuYo4WSgj7NcLriG4PKVaF4L35SvDk=","GelE32odx/vTului267wqi6zL3abBnF9yvwC2Q66LoM=","TEsXImnzxFKTIq2f5fiDu7i6Ar/cbecW5MZ3z8Wb/a4=","5WogJu\u002BUPlF\u002BE5mq/ILtDXpVwqwmhHtsEB13nmT5JJk=","dcHQRkttjMjo2dvhL7hA9t4Pg\u002B7OnjZpkFmakT4QR9U=","Of8nTYw5l\u002BgiAJo7z6XYIntG2tUtCFcILzHbTiiXn\u002Bw=","PDy\u002BTiayvNAoXXBEgwC/kCojpgOOMI6RQOIoSXs3LJc=","/m4FR4iXKuwmkGwlGV8BC\u002BQlY1lNKwuFjn/swBxcJwY=","P8JRhYPpULTLMAydvl3Ky\u002B92/tYDIjui0l66En4aXuQ=","V6FZj7x4KC8RXM8C8gTLzOqvQTQl9FcMgsSBpQA/m8U="],"CachedAssets":{},"CachedCopyCandidates":{}} | ||||
| {"GlobalPropertiesHash":"tJTBjV/i0Ihkc6XuOu69wxL8PBac9c9Kak6srMso4pU=","FingerprintPatternsHash":"8ZRc1sGeVrPBx4lD717BgRaQekyh78QKV9SKsdt638U=","PropertyOverridesHash":"8ZRc1sGeVrPBx4lD717BgRaQekyh78QKV9SKsdt638U=","InputHashes":["TyIJk/eQMWjmB5LsDE\u002BZIJC9P9ciVxd7bnzRiTZsGt4=","t631p0kaOa0gMRIcaPzz1ZVPZ1kuq4pq4kYPWQgoPcM=","PA/Beu9jJpOBY5r5Y1CiSyqrARA2j7LHeWYUnEZpQO8=","E2ODTAlJxzsXY1iP1eB/02NIUK\u002BnQveGlWAOHY1cpgA=","6WTvWQ72AaZBYOVSmaxaci9tc1dW5p7IK9Kscjj2cb0=","vAy46VJ9Gp8QqG/Px4J1mj8jL6ws4/A01UKRmMYfYek=","cdgbHR/E4DJsddPc\u002BTpzoUMOVNaFJZm33Pw7AxU9Ees=","4r4JGR4hS5m4rsLfuCSZxzrknTBxKFkLQDXc\u002B2KbqTU=","yVoZ4UnBcSOapsJIi046hnn7ylD3jAcEBUxQ\u002Brkvj/4=","/GfbpJthEWmsuz0uFx1QLHM7gyM1wLLeQgAIl4SzUD4=","i5\u002B5LcfxQD8meRAkQbVf4wMvjxSE4\u002BjCd2/FdPtMpms=","AvSkxVPIg0GjnB1RJ4hDNyo9p9GONrzDs8uVuixH\u002BOE=","IgT9pOgRnK37qfILj2QcjFoBZ180HMt\u002BScgje2iYOo4=","ezUlOMzNZmyKDIe1wwXqvX\u002BvhwfB992xNVts7r2zcTc=","y2BV4WpkQuLfqQhfOQBtmuzh940c3s4LAopGKfztfTE=","lHTUEsMkDu8nqXtfTwl7FRfgocyyc7RI5O/edTHN1\u002B0=","A7nz7qgOtQ1CwZZLvNnr0b5QZB3fTi3y4i6y7rBIcxQ=","znnuRi2tsk7AACuYo4WSgj7NcLriG4PKVaF4L35SvDk=","GelE32odx/vTului267wqi6zL3abBnF9yvwC2Q66LoM=","TEsXImnzxFKTIq2f5fiDu7i6Ar/cbecW5MZ3z8Wb/a4=","5WogJu\u002BUPlF\u002BE5mq/ILtDXpVwqwmhHtsEB13nmT5JJk=","dcHQRkttjMjo2dvhL7hA9t4Pg\u002B7OnjZpkFmakT4QR9U=","Of8nTYw5l\u002BgiAJo7z6XYIntG2tUtCFcILzHbTiiXn\u002Bw=","PDy\u002BTiayvNAoXXBEgwC/kCojpgOOMI6RQOIoSXs3LJc=","taDH73UT7ynWh85nq2etLidK9sPQF85kWam\u002BdE5RD8w=","P8JRhYPpULTLMAydvl3Ky\u002B92/tYDIjui0l66En4aXuQ=","wUbgaUpdwuF5YmyAUI1ZjPse4/SaT06idesVz21NM\u002Bk="],"CachedAssets":{},"CachedCopyCandidates":{}} | ||||
		Reference in New Issue
	
	Block a user