From 156e91f6e3c411d180a31a9d82cc6f4a3e2d2a2b Mon Sep 17 00:00:00 2001 From: Kittapath Date: Mon, 11 Sep 2023 17:44:55 +0700 Subject: [PATCH 1/3] include posno insignia --- .../Repositories/InsigniaPeriodsRepository.cs | 12 +- .../Reports/InsigniaReportRepository.cs | 113 ++++++++++++++++++ .../Requests/InsigniaRequestItem.cs | 2 +- 3 files changed, 122 insertions(+), 5 deletions(-) diff --git a/BMA.EHR.Application/Repositories/InsigniaPeriodsRepository.cs b/BMA.EHR.Application/Repositories/InsigniaPeriodsRepository.cs index e8c2a907..2be181c9 100644 --- a/BMA.EHR.Application/Repositories/InsigniaPeriodsRepository.cs +++ b/BMA.EHR.Application/Repositories/InsigniaPeriodsRepository.cs @@ -4710,7 +4710,9 @@ namespace BMA.EHR.Application.Repositories } foreach (var r in type_coin) { - result_candidate.Add(r); + var old = result_candidate.FirstOrDefault(x => x.ProfileId == r.ProfileId); + if (old == null) + result_candidate.Add(r); } return result_candidate.OrderBy(x => x.Seq).ThenBy(x => x.Gender).ThenBy(x => x.ProfileId).ToList(); @@ -4968,6 +4970,8 @@ namespace BMA.EHR.Application.Repositories .Include(x => x.Profile) .ThenInclude(x => x.Position) .Include(x => x.Profile) + .ThenInclude(x => x.PositionEmployeePosition) + .Include(x => x.Profile) .ThenInclude(x => x.PosNo) .Include(x => x.Profile) .ThenInclude(x => x.PositionLevel) @@ -4990,9 +4994,9 @@ namespace BMA.EHR.Application.Repositories ProfileId = h.Profile.Id, ProfileType = h.Profile.ProfileType, FullName = $"{h.Profile.Prefix?.Name}{h.Profile.FirstName} {h.Profile.LastName}", - Position = h.Profile.Position.Name, - PosNo = h.Profile.PosNo.Id, - Rank = $"{h.Profile.PositionType.Name}/{h.Profile.PositionLevel.Name}", + Position = h.Profile.ProfileType == " officer" ? h.Profile.Position?.Name : h.Profile.PositionEmployeePosition?.Name, + PosNo = h.Profile.ProfileType == " officer" ? h.Profile.PosNo?.Name : h.Profile.PosNoEmployee, + Rank = h.Profile.ProfileType == " officer" ? $"{h.Profile.PositionType?.Name}/{h.Profile.PositionLevel?.Name}" : $"-", Salary = h.Salary.ToString(), LastInsignia = h.Profile.Insignias.Count == 0 ? "" : h.Profile.Insignias.OrderByDescending(x => x.Year).FirstOrDefault().Insignia.Name, RequestInsignia = h.RequestInsignia.Name, diff --git a/BMA.EHR.Application/Repositories/Reports/InsigniaReportRepository.cs b/BMA.EHR.Application/Repositories/Reports/InsigniaReportRepository.cs index 38567a88..abc7ad05 100644 --- a/BMA.EHR.Application/Repositories/Reports/InsigniaReportRepository.cs +++ b/BMA.EHR.Application/Repositories/Reports/InsigniaReportRepository.cs @@ -477,6 +477,7 @@ namespace BMA.EHR.Application.Repositories.Reports Male = 0, Female = 0, InsigniaId = ins.InsigniaId, + // OCName = "" OCName = tmpOC, SumMale = sumData.FirstOrDefault(x => x.InsigniaName == ins.InsigniaName) == null ? 0 : sumData.FirstOrDefault(x => x.InsigniaName == ins.InsigniaName)!.SumMale, SumFemale = sumData.FirstOrDefault(x => x.InsigniaName == ins.InsigniaName) == null ? 0 : sumData.FirstOrDefault(x => x.InsigniaName == ins.InsigniaName)!.SumFemale, @@ -484,8 +485,120 @@ namespace BMA.EHR.Application.Repositories.Reports ret.Add(p); } } + return ret; } + public async Task GetKhr3ReportV2(Guid id) + { + var period = await _dbContext.Set() + .FirstOrDefaultAsync(x => x.Id == id); + if (period == null) + throw new Exception(GlobalMessages.InsigniaPeriodNotFound); + + var data = (from r in await _dbContext.Set() + .Include(x => x.Profile) + .ThenInclude(x => x.Gender) + .Include(x => x.Profile) + .ThenInclude(x => x.Prefix) + .Include(x => x.Request) + .ThenInclude(x => x.Period) + .Include(x => x.Request) + .ThenInclude(x => x.Organization) + .Include(x => x.RequestInsignia) + .ThenInclude(x => x.InsigniaType) + .ToListAsync() + where r.Request.Period == period + && r.IsApprove == true + && r.RequestInsignia.InsigniaType != null + && r.RequestInsignia.InsigniaType.Name != "เหรียญบำเหน็จในราชการ" + select new + { + InsigniaInitial = r.RequestInsignia.ShortName, + InsigniaName = r.RequestInsignia.Name, + ProfileId = r.Profile.Id, + FullName = $"{r.Profile.Prefix?.Name}{r.Profile.FirstName} {r.Profile.LastName}", + Gender = r.Profile.Gender == null ? null : r.Profile.Gender.Name, + Male = r.Profile.Gender == null ? 0 : (r.Profile.Gender.Name == "ชาย" ? 1 : 0), + Female = r.Profile.Gender == null ? 0 : (r.Profile.Gender.Name == "หญิง" ? 1 : 0), + InsigniaId = r.RequestInsignia.Id, + OCName = _organizationCommonRepository.GetOrganizationNameFullPath(r.Request.Organization.Id, false, false) + }) + .Distinct() + .ToList(); + + // loop to add temp row with 50 rows per page + var insigniaList = data.Select(x => new { InsigniaId = x.InsigniaId, InsigniaInitial = x.InsigniaInitial, InsigniaName = x.InsigniaName }) + .Distinct().ToList(); + + // var tmpOC = data.First().OCName; + + // var sumData = (from x in data + // group x by x.InsigniaName into grp + // select new + // { + // InsigniaName = grp.Key, + // SumMale = grp.Sum(x => x.Male), + // SumFemale = grp.Sum(x => x.Female) + // }).ToList(); + + // var ret = new List(); + + // foreach (var item in data) + // { + // var p = new + // { + // InsigniaInitial = item.InsigniaInitial, + // InsigniaName = item.InsigniaName, + // ProfileId = item.ProfileId, + // FullName = item.FullName, + // Gender = item.Gender, + // Male = item.Male, + // Female = item.Female, + // InsigniaId = item.InsigniaId, + // OCName = item.OCName, + // SumMale = sumData.FirstOrDefault(x => x.InsigniaName == item.InsigniaName) == null ? 0 : sumData.FirstOrDefault(x => x.InsigniaName == item.InsigniaName)!.SumMale, + // SumFemale = sumData.FirstOrDefault(x => x.InsigniaName == item.InsigniaName) == null ? 0 : sumData.FirstOrDefault(x => x.InsigniaName == item.InsigniaName)!.SumFemale, + // }; + // ret.Add(p); + // } + + foreach (var ins in insigniaList) + { + var count = data.Where(x => x.InsigniaId == ins.InsigniaId).Count(); + var mod_val = count <= 50 ? 50 - count : count % 50.0; + for (int i = 0; i < mod_val; i++) + { + var p = new + { + InsigniaInitial = ins.InsigniaInitial, + InsigniaName = ins.InsigniaName, + ProfileId = Guid.Parse("00000000-0000-0000-0000-000000000000"), + FullName = "", + Gender = "", + Male = 0, + Female = 0, + InsigniaId = ins.InsigniaId, + OCName = "" + // OCName = tmpOC, + // SumMale = sumData.FirstOrDefault(x => x.InsigniaName == ins.InsigniaName) == null ? 0 : sumData.FirstOrDefault(x => x.InsigniaName == ins.InsigniaName)!.SumMale, + // SumFemale = sumData.FirstOrDefault(x => x.InsigniaName == ins.InsigniaName) == null ? 0 : sumData.FirstOrDefault(x => x.InsigniaName == ins.InsigniaName)!.SumFemale, + }; + data.Add(p); + } + } + + var sumData = (from x in data + group x by x.InsigniaName into grp + select new + { + InsigniaName = grp.Key, + SumMale = grp.Sum(x => x.Male), + SumFemale = grp.Sum(x => x.Female), + Data = grp.ToList(), + }).ToList(); + + return sumData; + } //42-แบบ ขร4 บัญชีแสดงคุณสมบัติของข้าราชการซึ่งเสนอขอเครื่องราชฯ public async Task GetKhr4Report(Guid id) diff --git a/BMA.EHR.Application/Requests/InsigniaRequestItem.cs b/BMA.EHR.Application/Requests/InsigniaRequestItem.cs index 6eec55f6..9a0d44e4 100644 --- a/BMA.EHR.Application/Requests/InsigniaRequestItem.cs +++ b/BMA.EHR.Application/Requests/InsigniaRequestItem.cs @@ -8,7 +8,7 @@ public Guid ProfileId { get; set; } public string FullName { get; set; } public string Position { get; set; } - public Guid PosNo { get; set; } + public string PosNo { get; set; } public string Rank { get; set; } public string Salary { get; set; } public string LastInsignia { get; set; } From 5f459855318a0d44f5bb991492d2a33ed00f1de5 Mon Sep 17 00:00:00 2001 From: Kittapath Date: Tue, 12 Sep 2023 11:59:29 +0700 Subject: [PATCH 2/3] =?UTF-8?q?api=20report=20probation=20=E0=B8=94?= =?UTF-8?q?=E0=B8=B4=E0=B8=87=E0=B8=88=E0=B8=B2=E0=B8=81env?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Reports/ProbationReportRepository.cs | 18 +++++++++++------- BMA.EHR.Report.Service/appsettings.json | 5 +++-- 2 files changed, 14 insertions(+), 9 deletions(-) diff --git a/BMA.EHR.Application/Repositories/Reports/ProbationReportRepository.cs b/BMA.EHR.Application/Repositories/Reports/ProbationReportRepository.cs index 180d63b8..ab751ce2 100644 --- a/BMA.EHR.Application/Repositories/Reports/ProbationReportRepository.cs +++ b/BMA.EHR.Application/Repositories/Reports/ProbationReportRepository.cs @@ -8,6 +8,7 @@ using Microsoft.EntityFrameworkCore; using System.Net.Http.Headers; using Newtonsoft.Json; using System.Globalization; +using Microsoft.Extensions.Configuration; namespace BMA.EHR.Application.Repositories.Reports { @@ -18,6 +19,7 @@ namespace BMA.EHR.Application.Repositories.Reports private readonly IApplicationDBContext _dbContext; private readonly IWebHostEnvironment _hostingEnvironment; private readonly NotificationRepository _repositoryNoti; + private readonly IConfiguration _configuration; #endregion @@ -25,11 +27,13 @@ namespace BMA.EHR.Application.Repositories.Reports public ProbationReportRepository(IApplicationDBContext dbContext, NotificationRepository repositoryNoti, - IWebHostEnvironment hostEnvironment) + IWebHostEnvironment hostEnvironment, + IConfiguration configuration) { _dbContext = dbContext; _hostingEnvironment = hostEnvironment; _repositoryNoti = repositoryNoti; + _configuration = configuration; } #endregion @@ -39,7 +43,7 @@ namespace BMA.EHR.Application.Repositories.Reports #region แบบมอบหมายงาน ฯ public async Task GetProbationAssignAsync(Guid assign_id, string token) { - var api_url = $"https://bma-ehr.frappet.synology.me/api/v1/probation/assign/probation-assign?assign_id={assign_id}"; + var api_url = $"{_configuration["APIPROBATION"]}assign/probation-assign?assign_id={assign_id}"; ProbationAssignResponse probation_assign; using (var client = new HttpClient()) { @@ -90,7 +94,7 @@ namespace BMA.EHR.Application.Repositories.Reports #region แบบบันทึกผล (ผู้ดูแล, ผู้บังคับบัญชา) public async Task GetEvaluateRecordAsync(Guid assign_id, string token) { - var api_url = $"https://bma-ehr.frappet.synology.me/api/v1/probation/report/form-record?id={assign_id}"; + var api_url = $"{_configuration["APIPROBATION"]}report/form-record?id={assign_id}"; EvaluateRecordAssignResponse evaluate_record; using (var client = new HttpClient()) { @@ -138,7 +142,7 @@ namespace BMA.EHR.Application.Repositories.Reports #region แบบประเมินผล(ผู้บังคับบัญชา) public async Task GetEvaluateAssignAsync(Guid id, string token) { - var api_url = $"https://bma-ehr.frappet.synology.me/api/v1/probation/report/evaluate-commander?id={id}"; + var api_url = $"{_configuration["APIPROBATION"]}report/evaluate-commander?id={id}"; EvaluateAssignResponse evaluate_assign; using (var client = new HttpClient()) { @@ -186,7 +190,7 @@ namespace BMA.EHR.Application.Repositories.Reports #region แบบประเมินผล(คณะกรรมการ) public async Task GetEvaluateChairmanAssignAsync(Guid id, string token) { - var api_url = $"https://bma-ehr.frappet.synology.me/api/v1/probation/report/evaluate-chairman?id={id}"; + var api_url = $"{_configuration["APIPROBATION"]}report/evaluate-chairman?id={id}"; EvaluateChairmanAssignResponse evaluate_assign; using (var client = new HttpClient()) { @@ -234,7 +238,7 @@ namespace BMA.EHR.Application.Repositories.Reports #region แบบรายงานการประเมินผล public async Task GetEvaluateResultAssignAsync(Guid id, string token) { - var api_url = $"https://bma-ehr.frappet.synology.me/api/v1/probation/evaluate-result?assign_id={id}"; + var api_url = $"{_configuration["APIPROBATION"]}evaluate-result?assign_id={id}"; EvaluateResultAssignResponse evaluate_assign; using (var client = new HttpClient()) { @@ -260,7 +264,7 @@ namespace BMA.EHR.Application.Repositories.Reports PassResult = evaluate_assign.data.evaluate.pass_result.ToString() == "1" ? "/" : " ", NotPassResult = evaluate_assign.data.evaluate.pass_result.ToString() == "0" ? "/" : " ", ExpandMonth = string.IsNullOrEmpty(evaluate_assign.data.evaluate.expand_month.ToString()) ? string.Empty : evaluate_assign.data.evaluate.expand_month.ToString().ToThaiNumber(), - ChairmanName = string.IsNullOrEmpty(evaluate_assign.data.chairman.name) ? string.Empty : evaluate_assign.data.chairman.name, + ChairmanName = string.IsNullOrEmpty(evaluate_assign.data.chairman.name) ? string.Empty : evaluate_assign.data.chairman.name, ChairmanPosition = string.IsNullOrEmpty(evaluate_assign.data.chairman.Position) ? string.Empty : evaluate_assign.data.chairman.Position, ChairmanDate = string.IsNullOrEmpty(evaluate_assign.data.evaluate.chairman_dated.ToString()) ? "วันที่ เดือน พ.ศ." : evaluate_assign.data.evaluate.chairman_dated.ToThaiFullDate().ToString().ToThaiNumber(), }; diff --git a/BMA.EHR.Report.Service/appsettings.json b/BMA.EHR.Report.Service/appsettings.json index 2d0fadb9..d6921d83 100644 --- a/BMA.EHR.Report.Service/appsettings.json +++ b/BMA.EHR.Report.Service/appsettings.json @@ -45,7 +45,7 @@ }, { "fontFamily": "TH SarabunPSK", - "path": "Fonts/THSarabunNew.ttf", + "path": "Fonts/THSarabunNew.ttf" }, { @@ -54,5 +54,6 @@ "fontStyle": "Bold" } ] - } + }, + "APIPROBATION": "https://bma-ehr.frappet.synology.me/api/v1/probation/" } \ No newline at end of file From 568468cf7267e503e462ba1a43fdf4a2d8c3a7d0 Mon Sep 17 00:00:00 2001 From: "Harid Promsri (Bright)" Date: Tue, 12 Sep 2023 12:05:48 +0700 Subject: [PATCH 3/3] =?UTF-8?q?=E0=B9=81=E0=B8=81=E0=B9=89=E0=B9=84?= =?UTF-8?q?=E0=B8=82=20err=2013-=E0=B9=81=E0=B8=9A=E0=B8=9A=E0=B8=A1?= =?UTF-8?q?=E0=B8=AD=E0=B8=9A=E0=B8=AB=E0=B8=A1=E0=B8=B2=E0=B8=A2=E0=B8=87?= =?UTF-8?q?=E0=B8=B2=E0=B8=99=E0=B8=81=E0=B8=B2=E0=B8=A3=E0=B8=97=E0=B8=94?= =?UTF-8?q?=E0=B8=A5=E0=B8=AD=E0=B8=87=E0=B8=9B=E0=B8=8F=E0=B8=B4=E0=B8=9A?= =?UTF-8?q?=E0=B8=B1=E0=B8=95=E0=B8=B4=E0=B8=AB=E0=B8=99=E0=B9=89=E0=B8=B2?= =?UTF-8?q?=E0=B8=97=E0=B8=B5=E0=B9=88=E0=B8=A3=E0=B8=B2=E0=B8=8A=E0=B8=81?= =?UTF-8?q?=E0=B8=B2=E0=B8=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Reports/ProbationReportRepository.cs | 6 +++--- .../Controllers/ProbationReportController.cs | 13 ++++++++----- ...แบบมอบหมายงานการทดลองปฏิบัติหน้าที่ราชการ-3.trdp | Bin 2514 -> 2616 bytes 3 files changed, 11 insertions(+), 8 deletions(-) diff --git a/BMA.EHR.Application/Repositories/Reports/ProbationReportRepository.cs b/BMA.EHR.Application/Repositories/Reports/ProbationReportRepository.cs index ab751ce2..fda75849 100644 --- a/BMA.EHR.Application/Repositories/Reports/ProbationReportRepository.cs +++ b/BMA.EHR.Application/Repositories/Reports/ProbationReportRepository.cs @@ -67,9 +67,9 @@ namespace BMA.EHR.Application.Repositories.Reports NameMentor1 = string.IsNullOrEmpty(probation_assign.data.mentors[0].name) ? string.Empty : probation_assign.data.mentors[0].name, DateMentor1 = string.IsNullOrEmpty(probation_assign.data.mentors[0].dated.ToString()) ? "วันที่ เดือน พ.ศ." : probation_assign.data.mentors[0].dated.ToThaiFullDate().ToString().ToThaiNumber(), PositionMentor1 = string.IsNullOrEmpty(probation_assign.data.mentors[0].Position) ? string.Empty : probation_assign.data.mentors[0].Position, - NameMentor2 = string.IsNullOrEmpty(probation_assign.data.mentors[1].name) ? string.Empty : probation_assign.data.mentors[1].name, - DateMentor2 = string.IsNullOrEmpty(probation_assign.data.mentors[1].dated.ToString()) ? "วันที่ เดือน พ.ศ." : probation_assign.data.mentors[1].dated.ToThaiFullDate().ToString().ToThaiNumber(), - PositionMentor2 = string.IsNullOrEmpty(probation_assign.data.mentors[1].Position) ? string.Empty : probation_assign.data.mentors[1].Position, + NameMentor2 = probation_assign.data.mentors.Count > 1 ? probation_assign.data.mentors[1].name : string.Empty, + DateMentor2 = probation_assign.data.mentors.Count > 1 ? probation_assign.data.mentors[1].dated.ToThaiFullDate().ToString().ToThaiNumber() : "วันที่ เดือน พ.ศ.", + PositionMentor2 = probation_assign.data.mentors.Count > 1 ? probation_assign.data.mentors[1].Position : string.Empty, NameCommander = string.IsNullOrEmpty(probation_assign.data.commander.name) ? string.Empty : probation_assign.data.commander.name, DateCommander = string.IsNullOrEmpty(probation_assign.data.commander.dated.ToString()) ? "วันที่ เดือน พ.ศ." : probation_assign.data.commander.dated.ToThaiFullDate().ToString().ToThaiNumber(), PositionCommander = string.IsNullOrEmpty(probation_assign.data.commander.Position) ? string.Empty : probation_assign.data.commander.Position, diff --git a/BMA.EHR.Report.Service/Controllers/ProbationReportController.cs b/BMA.EHR.Report.Service/Controllers/ProbationReportController.cs index 5e8d08d1..d4d672c5 100644 --- a/BMA.EHR.Report.Service/Controllers/ProbationReportController.cs +++ b/BMA.EHR.Report.Service/Controllers/ProbationReportController.cs @@ -112,10 +112,10 @@ namespace BMA.EHR.Report.Service.Controllers report.ReportParameters["DateStart"].Value = probation.GetType().GetProperty("DateStart").GetValue(probation); report.ReportParameters["DateFinish"].Value = probation.GetType().GetProperty("DateFinish").GetValue(probation); report.ReportParameters["NameMentor1"].Value = probation.GetType().GetProperty("NameMentor1").GetValue(probation); - report.ReportParameters["NameMentor2"].Value = probation.GetType().GetProperty("NameMentor2").GetValue(probation); report.ReportParameters["DateMentor1"].Value = probation.GetType().GetProperty("DateMentor1").GetValue(probation); - report.ReportParameters["DateMentor2"].Value = probation.GetType().GetProperty("DateMentor2").GetValue(probation); report.ReportParameters["PositionMentor1"].Value = probation.GetType().GetProperty("PositionMentor1").GetValue(probation); + report.ReportParameters["NameMentor2"].Value = probation.GetType().GetProperty("NameMentor2").GetValue(probation); + report.ReportParameters["DateMentor2"].Value = probation.GetType().GetProperty("DateMentor2").GetValue(probation); report.ReportParameters["PositionMentor2"].Value = probation.GetType().GetProperty("PositionMentor2").GetValue(probation); report.ReportParameters["OtherDesc"].Value = probation.GetType().GetProperty("OtherDesc").GetValue(probation); report2.ReportParameters["Other4Desc"].Value = probation.GetType().GetProperty("Other4Desc").GetValue(probation); @@ -130,6 +130,9 @@ namespace BMA.EHR.Report.Service.Controllers report3.ReportParameters["PositionCommander"].Value = probation.GetType().GetProperty("PositionCommander").GetValue(probation); report3.ReportParameters["DateCommander"].Value = probation.GetType().GetProperty("DateCommander").GetValue(probation); report3.ReportParameters["Other5No2Desc"].Value = probation.GetType().GetProperty("Other5No2Desc").GetValue(probation); + report3.ReportParameters["NameMentor2"].Value = probation.GetType().GetProperty("NameMentor2").GetValue(probation); + report3.ReportParameters["DateMentor2"].Value = probation.GetType().GetProperty("DateMentor2").GetValue(probation); + report3.ReportParameters["PositionMentor2"].Value = probation.GetType().GetProperty("PositionMentor2").GetValue(probation); report.ReportParameters["Behave"].Value = "ความประพฤติ\n" + @@ -241,7 +244,7 @@ namespace BMA.EHR.Report.Service.Controllers /// /// 14-แบบบันทึกผลการทดลองปฏิบัติหน้าที่ราชการ สำหรับผู้ดูแล และ ผู้บังคับบัญชา /// - /// id + /// evaluate id /// pdf, docx หรือ xlsx /// /// เมื่อทำการอ่านข้อมูลจาก Relational Database สำเร็จ @@ -673,7 +676,7 @@ namespace BMA.EHR.Report.Service.Controllers /// /// 16-แบบประเมินผลการทดลองปฏิบัติหน้าที่ราชการ สำหรับผู้บังคับบัญชา /// - /// id + /// evaluate id /// pdf, docx หรือ xlsx /// /// เมื่อทำการอ่านข้อมูลจาก Relational Database สำเร็จ @@ -895,7 +898,7 @@ namespace BMA.EHR.Report.Service.Controllers /// /// 17-แบบประเมินผลการทดลองปฏิบัติหน้าที่ราชการ สำหรับคณะกรรมการ /// - /// id + /// evaluate id /// pdf, docx หรือ xlsx /// /// เมื่อทำการอ่านข้อมูลจาก Relational Database สำเร็จ diff --git a/BMA.EHR.Report.Service/Reports/13-แบบมอบหมายงานการทดลองปฏิบัติหน้าที่ราชการ-3.trdp b/BMA.EHR.Report.Service/Reports/13-แบบมอบหมายงานการทดลองปฏิบัติหน้าที่ราชการ-3.trdp index 344a5175d7e0d6e6f0eefe6ff4a98125a11b9a97..5e9e771e08d836d4adb22674ac2536ba932e0d42 100644 GIT binary patch delta 2276 zcmV@6aWAK2mmu*ELYnlKahI}001gJkr*<6Yj4w582&zK|G~;6 z1VT8mol7%PP%mOk3|5h{efC<@L?m%>94Pxlpju0{3xk%frK;3s6&n>2_c{N@+ArBT z@A0vHPMp|j6IQ2!);@l7F3S(uei^41_;AsGyjRhLS#8OjsFWAb8mF|H zsTm0&>B;y z=RS1x7C*&QJOnbM+t;@B60Vz+*tByj_S|l-z=$nqTyvjtS_o9aN#(30i&8|bjCE*b z8H0tPYyv2+sWH2#Jp|By5&-o#pa(yYesmG=|3F`_pi|QF0d#dAB;gtl1B%6rIDjGl zq9(I{4(&ffOAF*5KyNFI)9Oc)%1CNb7Skzd5W2({=-DdqMfesA9fE@*IwL`WL!asu z+Z{1v;>{j`CMXFQ$rYb24}nIj(C2>Fz!7iFW%Bu8-6>+KQ+L6hkKpu(#@G+kxO~nJ zOSZrZE<-2umbk0{WuBMZJ zhBCG5js|_?*JxJ7hmoL}kmLjVEIwUG#Y&5rh*?~k$rp$X zY}3H82@a(hK?4!}TBiowc(H@|g5}rYqB$&`dl`v4BI$(WA0(e7Ex!=wcGSB< z#CeVqxmYnGYF?iq+ao_CFlGdmquJ+w0NHU=U5$;TuCg7r+j5dMcSpr*XBXgl0*~H; zI!J7DweS-1$t{{cxcxLm{GaTC-#Hqz);XB-v4Xirw%|c5W|>rugt~PBfO-Q|e@XM) zEp{*S8VqL(sP1~5JqkP0#bX!S9`TPuSc+F1ipu1iC^Ik7)C^BdBq_xC^W$h zyZzYn``woDq;na&Fm*C~lkSW5f}+l+T|nP1!dG}ZaLQvI1RHd~6<>9Y^G&S+con75O-Rn&5S(JE>wQ97<`;)3o2%9Boduq6OYzg4sHD1kB8 z4aSJ|#{pqG{DR5guytz1T}YbqPA-*h*oIW^e3HF?r3 z)Uh6f&G`w-+P!mVb-L4S2c1#jRRtbR$)S5T=i5ssB;$;XR_>U8XkA6i)(t5bw9q6y zo}h7d+dpVidbO(JB!|G}FUE&hZ0Mddo`_29@!Dyjub(q~uozL0GGZoxcAXTP(d%XW zZA-$gvqazw`NI<`^qUJY#VX6y$-AR9t(scVR1GrJR04#Lh8c)DbZgD(I?43X;Bbvv`={`-9OTl=qg`ha18HSwc z%UX|zVd(k%$-*#d!9-4pDe`sK|G8wM#Hq3unV~$oN8Pc?fjd@ZMDsfYTaJP4m>Hfj zqT2=;pG5`HD=f#8Bcv?Kh;H6xnfZ=$lngHtTqnAER7f&^Z$c)SS0SO*FHx9L7qp^g z;x{Vm!i>788CS|RH2y>yA&O#XeGav`)0sjmDAyW#qYk39oep+YH5SS>@4ZOcaKlj! zsO`G*wI(kW7iCD1CUw))tLPrzB;5u0J1r#r^Ce9HNwK79CjAJsTyOY*>Ns~s>z>DN ztkQ28VBqP0#PGH6RZkA{LQ$(AFm;1{{qx?UMjr_H2B{b+1_M2*@`?6`Nuh#n$s^LZ z&ZaC0Drlshqf2wU@5u7eNART)eV`I9%f%EIDqlzjaE&%z_zzG^0|XQR000O8 yGhZx|Y6#&DGhZxM+a*7cdk6pkDn6502`&ROUo4Y~2^#^!lcotK2BirA0001stx<~r delta 2191 zcmV;A2ypkf6w(tIP)h>@6aWAK2mpd!BUdND^rRIC002Takr*<6?QhdY82>(L|AUoD z2!wEAJ1@;hK`j;Q#9$RE+h?ym+GtMPIS!P4B2cZR+6#l0uBEEfW)&M167O^V8*6{b z?w<46zKfGMkTBee7W@3^DRL$yq1v1|U#TsOryBP4 zGh?aq=RW^Hnzb4z zCE>1X_3_lAZ7+SEPS@uaQB|+YHZqV^`Cgtgt7!{*#bc$_jH;y-SxMo+B&qbJjjDCH z#5YsO)+*6&F8L3>(TxV4k|dpxTxZ{P-nh<+ z>pXFtmvGy1ofodN<2t*p^V)SbTxZ>No{^UJUDw%mohC@Om?Xaao3ylVLnnvubjx*K zxy~wFZ!-{oY&z|1X#LR`kg4-BSn8r#v%QXHr=_xP>EAVKGv!N|+{%xH==_qMk|s?9 z6MRuO>L`pM^pJ*u!a$}yBzu6X$=P_|hM@iT_JPzDCj!!I01`K1x%LVHxqZ)VH;GVt zO@vF0g6kteN6E-)EO-Wj!N5jp|~MLDBEK|r7JO6-mr zGWBNnfC;7qoaAbV%Og;uHR$u8Yv4#WbGc$MnmbL-baEH%`6y2JSd4wcj4R~)h-3@A z;0koYZmBzL-vRax;NM%gJ_4ho=C;NH)&cZ?w!>~8vaq$zj0pWuQki6=YL}gFU;6+stPV4IO*Y+Z^a#u`s3f1T2 z8>CMG#e9-b#9H1X_w*sma?#&yZ^~}_p+xN83*H#6HmD&}YT|U(;pt=Mx|&`Z$|VPX z@QApTeU?@2LO;ID7U=jPb2RuPzs9pFF^ojbgeD)vXNl=TCQ&TrVrFq!E?=NFu)_k! z7C4k<3jp+x%YU zIT+41sJicU_8IJ$i~BydJ>s8$u#&7e6jzfAvdY0swK)=E9@!E29TD+FRksv>g)eWZ zvKAoj?O;5_$9To&K=#1FzW;Zr19Iw8C^=Y5{{- zzu#>c4?35z2UDlRH`%^uKPu{c*aZyiB0`0?L$5p*K(NUMTn$y%1n=Zm6=)~4p74b2 zKs%<4=Zv>S_eDENT1Bl8ucDTJk(Kv#O+wJU!}O$6J@^s;QNJ~|M>z^nvN}R{m#m_U z(oxON=A#`RCbGc!JAthhu(%)Pzy$u*fDgg2_F37$x0QFXp=8xE<$ONoVS&PxTtdbC z16JF|8taH?MAn~%u=s1Wd1M)t8e%7hLqQ|UdlamhMJ*N_68967XNkIhz3Q%~TSO~~ z*s2%b!mena>F$%zQ3*>#y&A_rp&_+M>B^tE8Ie9XFK@-e$aL_K8)v8W% z8VXz2+Pm6!N103j75?yy0ocnPPt%8|=zn4`IHoY=f2~NjB+5*j%iMzsaKdn&f)h2Am~h*wry7NJ-JDL`wIwnT1toKOPc_a@*+Yu z`v|mLZG?d8I2XX{o+obh_f?gw&@Ch3OT?hb^;0P2JP)h{{00000 R0ssO4eE