Esempio n. 1
0
        public static bool Update(ParkFeeRule model)
        {
            if (model == null)
            {
                throw new ArgumentNullException("model");
            }

            ParkArea parkArea = ParkAreaServices.QueryByRecordId(model.AreaID);

            if (parkArea == null)
            {
                throw new MyException("获取区域信息失败");
            }

            IParkFeeRule factory = ParkFeeRuleFactory.GetFactory();

            if (model.IsOffline)
            {
                List <ParkFeeRule> models = factory.QueryParkFeeRuleByParkingId(parkArea.PKID);
                if (models.Exists(p => p.IsOffline == true && p.FeeRuleID != model.FeeRuleID))
                {
                    throw new MyException("该车场已存在脱机收费规则了");
                }
            }
            model.ParkFeeRuleDetails.ForEach(p => { p.RuleDetailID = GuidGenerator.GetGuid().ToString(); p.RuleID = model.FeeRuleID; });
            bool result = factory.Update(model);

            if (result)
            {
                OperateLogServices.AddOperateLog <ParkFeeRule>(model, OperateType.Update);
            }
            return(result);
        }
        /// <summary>
        /// 获取停车区地图
        /// </summary>
        /// <param name="db"></param>
        /// <param name="parkArea"></param>
        /// <returns></returns>
        public static Bitmap GetMap(ParkContext db, ParkArea parkArea)
        {
            double scale  = 10;//设置倍率为10,即每0.5米用10个像素来表示
            Bitmap bitmap = new Bitmap((int)(parkArea.Length * scale), (int)(parkArea.Width * scale));

            using Graphics g   = Graphics.FromImage(bitmap);                //画板
            using Pen aislePan = new Pen(Brushes.Gray, (float)(2 * scale)); //通道笔
            using Pen wallPan  = new Pen(Brushes.Red, (float)(2 * scale));  //墙的笔

            foreach (var ps in parkArea.ParkingSpaces)
            {
                //对停车位应用旋转变换
                using Matrix m = new Matrix();
                Rectangle r = new Rectangle((int)(scale * ps.X), (int)(scale * ps.Y),
                                            (int)(scale * ps.Width), (int)(scale * ps.Height));
                m.RotateAt((float)ps.RotateAngle, new PointF(r.Left + (r.Width / 2),
                                                             r.Top + (r.Height / 2)));
                g.Transform = m;
                //根据停车位是否有车的状态设置不同的颜色
                g.FillRectangle(ps.HasCar ? Brushes.Orange : Brushes.Green, r);
                g.ResetTransform();
            }
            //画通道
            foreach (var a in parkArea.Aisles)
            {
                g.DrawLine(aislePan, (float)(scale * a.X1), (float)(scale * a.Y1), (float)(scale * a.X2), (float)(scale * a.Y2));
            }
            //画墙
            foreach (var w in parkArea.Walls)
            {
                g.DrawLine(wallPan, (float)(scale * w.X1), (float)(scale * w.Y1), (float)(scale * w.X2), (float)(scale * w.Y2));
            }
            return(bitmap);
        }
Esempio n. 3
0
        public JsonResult DownloadQRCode(string gateId, int size)
        {
            try
            {
                List <int> dics = new List <int>();
                dics.Add(258);
                dics.Add(344);
                dics.Add(430);
                dics.Add(860);
                dics.Add(1280);

                List <string> imgs = new List <string>();
                ParkGate      gate = ParkGateServices.QueryByRecordId(gateId);
                if (gate == null)
                {
                    throw new MyException("获取通道信息失败");
                }
                BaseCompany company = CompanyServices.QueryByBoxID(gate.BoxID);
                if (company == null)
                {
                    throw new MyException("获取单位信息失败");
                }

                ParkBox box = ParkBoxServices.QueryByRecordId(gate.BoxID);
                if (box == null)
                {
                    throw new MyException("获取岗亭信息失败");
                }

                ParkArea area = ParkAreaServices.QueryByRecordId(box.AreaID);
                if (area == null)
                {
                    throw new MyException("获取区域信息失败");
                }

                BaseParkinfo parking = ParkingServices.QueryParkingByParkingID(area.PKID);
                if (parking == null)
                {
                    throw new MyException("获取车场信息失败");
                }
                string content = string.Format("{0}/qrl/scio_ix_pid={1}^io={2}", SystemDefaultConfig.SystemDomain, parking.PKID, gate.GateID);
                foreach (var item in dics)
                {
                    string parkingName = string.Format("{0}_{1}_{2}_{3}_{4}", parking.PKName, area.AreaName, box.BoxName, gate.GateName, item);
                    string result      = QRCodeServices.GenerateQRCode(company.CPID, content, item, parkingName);
                    imgs.Add(item.ToString() + "|" + result);
                }

                return(Json(MyResult.Success("", imgs)));
            }
            catch (MyException ex)
            {
                return(Json(MyResult.Error(ex.Message)));
            }
            catch (Exception ex)
            {
                ExceptionsServices.AddExceptions(ex, "下载二维码失败");
                return(Json(MyResult.Error("下载二维码失败")));
            }
        }
Esempio n. 4
0
        public ParkFeeRuleView ToParkFeeRuleView(ParkFeeRule rule, List <ParkArea> areas, List <ParkCarType> carTyeps, List <ParkCarModel> carModels)
        {
            this.AreaID = rule.AreaID;
            ParkArea area = areas.FirstOrDefault(p => p.AreaID == rule.AreaID);

            if (area != null)
            {
                this.AreaName = area.AreaName;
            }
            this.CarTypeID = rule.CarTypeID;
            ParkCarType card = carTyeps.FirstOrDefault(p => p.CarTypeID == rule.CarTypeID);

            if (card != null)
            {
                this.CarTypeName = card.CarTypeName;
            }
            this.CarModelID = rule.CarModelID;
            ParkCarModel carModel = carModels.FirstOrDefault(p => p.CarModelID == rule.CarModelID);

            if (carModel != null)
            {
                this.CarModelName = carModel.CarModelName;
            }
            this.RuleName       = rule.RuleName;
            this.FeeRuleID      = rule.FeeRuleID;
            this.FeeType        = rule.FeeType;
            this.RuleText       = rule.RuleText;
            this.FeeTypeName    = ((FeeType)rule.FeeType).GetDescription();
            this.LastUpdateTime = rule.LastUpdateTime;
            this.IsOffline      = rule.IsOffline;
            FillParkFeeRuleDetail(rule.ParkFeeRuleDetails);
            return(this);
        }
Esempio n. 5
0
        public bool Update(ParkArea model)
        {
            using (DbOperator dbOperator = ConnectionManager.CreateConnection())
            {
                model.DataStatus     = DataStatus.Normal;
                model.LastUpdateTime = DateTime.Now;
                model.HaveUpdate     = SystemDefaultConfig.DataUpdateFlag;

                StringBuilder strSql = new StringBuilder();
                strSql.Append("update ParkArea set AreaName=@AreaName,MasterID=@MasterID,CarbitNum=@CarbitNum,NeedToll=@NeedToll,CameraWaitTime=@CameraWaitTime,TwoCameraWait=@TwoCameraWait");
                strSql.Append(",Remark=@Remark,LastUpdateTime=@LastUpdateTime,HaveUpdate=@HaveUpdate where AreaID=@AreaID");
                dbOperator.ClearParameters();
                dbOperator.AddParameter("AreaID", model.AreaID);
                dbOperator.AddParameter("AreaName", model.AreaName);
                dbOperator.AddParameter("MasterID", model.MasterID);
                dbOperator.AddParameter("CarbitNum", model.CarbitNum);
                dbOperator.AddParameter("NeedToll", (int)model.NeedToll);
                dbOperator.AddParameter("CameraWaitTime", (int)model.CameraWaitTime);
                dbOperator.AddParameter("TwoCameraWait", (int)model.TwoCameraWait);
                dbOperator.AddParameter("Remark", model.Remark);
                dbOperator.AddParameter("LastUpdateTime", model.LastUpdateTime);
                dbOperator.AddParameter("HaveUpdate", model.HaveUpdate);
                return(dbOperator.ExecuteNonQuery(strSql.ToString()) > 0);
            }
        }
Esempio n. 6
0
        public bool Add(ParkArea model)
        {
            using (DbOperator dbOperator = ConnectionManager.CreateConnection())
            {
                model.DataStatus     = DataStatus.Normal;
                model.LastUpdateTime = DateTime.Now;
                model.HaveUpdate     = SystemDefaultConfig.DataUpdateFlag;

                StringBuilder strSql = new StringBuilder();
                strSql.Append("insert into ParkArea(AreaID,AreaName,MasterID,PKID,CarbitNum,NeedToll,CameraWaitTime,TwoCameraWait,Remark,LastUpdateTime,HaveUpdate,DataStatus)");
                strSql.Append(" values(@AreaID,@AreaName,@MasterID,@PKID,@CarbitNum,@NeedToll,@CameraWaitTime,@TwoCameraWait,@Remark,@LastUpdateTime,@HaveUpdate,@DataStatus)");
                dbOperator.ClearParameters();
                dbOperator.AddParameter("AreaID", model.AreaID);
                dbOperator.AddParameter("AreaName", model.AreaName);
                dbOperator.AddParameter("MasterID", model.MasterID);
                dbOperator.AddParameter("PKID", model.PKID);
                dbOperator.AddParameter("CarbitNum", model.CarbitNum);
                dbOperator.AddParameter("NeedToll", (int)model.NeedToll);
                dbOperator.AddParameter("CameraWaitTime", (int)model.CameraWaitTime);
                dbOperator.AddParameter("TwoCameraWait", (int)model.TwoCameraWait);
                dbOperator.AddParameter("Remark", model.Remark);
                dbOperator.AddParameter("LastUpdateTime", model.LastUpdateTime);
                dbOperator.AddParameter("HaveUpdate", model.HaveUpdate);
                dbOperator.AddParameter("DataStatus", (int)model.DataStatus);
                return(dbOperator.ExecuteNonQuery(strSql.ToString()) > 0);
            }
        }
Esempio n. 7
0
 public JsonResult Edit(ParkArea model)
 {
     try
     {
         bool result = false;
         if (string.IsNullOrWhiteSpace(model.AreaID))
         {
             result = ParkAreaServices.Add(model);
         }
         else
         {
             result = ParkAreaServices.Update(model);
         }
         if (!result)
         {
             throw new MyException("保存区域失败");
         }
         return(Json(MyResult.Success()));
     }
     catch (MyException ex)
     {
         return(Json(MyResult.Error(ex.Message)));
     }
     catch (Exception ex)
     {
         ExceptionsServices.AddExceptions(ex, "保存区域信息失败");
         return(Json(MyResult.Error("保存失败")));
     }
 }
Esempio n. 8
0
        public static bool AddDefualt(ParkArea model)
        {
            if (model == null)
            {
                throw new ArgumentNullException("model");
            }
            IParkArea factory = ParkAreaFactory.GetFactory();
            bool      result  = factory.Add(model);

            if (result)
            {
                OperateLogServices.AddOperateLog <ParkArea>(model, OperateType.Add);
            }
            return(result);
        }
Esempio n. 9
0
        public ActionResult SaveBooking(string plateNo, string parkingId, string areaId, DateTime startTime, DateTime endTime)
        {
            try
            {
                WXReserveBitResult result = PkBitBookingServices.WXReservePKBit(WeiXinUser.AccountID, string.Empty, parkingId, areaId, plateNo, startTime, endTime);
                if (result.code == 0)
                {
                    if (parkingId != result.Order.PKID)
                    {
                        throw new MyException("车场编号不一致");
                    }

                    BaseParkinfo parking = ParkingServices.QueryParkingByParkingID(parkingId);
                    if (parking == null)
                    {
                        throw new MyException("获取车场信息失败");
                    }
                    ViewBag.ParkingName = parking.PKName;

                    ParkArea area = ParkAreaServices.QueryByRecordId(areaId);
                    if (area == null)
                    {
                        throw new MyException("获取区域信息失败");
                    }
                    ViewBag.AreaName  = area.AreaName;
                    ViewBag.PlateNo   = plateNo;
                    ViewBag.StartTime = startTime.ToString("yyyy-MM-dd HH:mm:ss");
                    ViewBag.EndTime   = endTime.ToString("yyyy-MM-dd HH:mm:ss");
                    ViewBag.AreaId    = areaId;
                    return(View(result));
                }
                if (result.code == 1)
                {
                    throw new MyException("您已经预约过了,请勿重复预约");
                }
                throw new MyException("预约失败[" + result.message + "]");
            }
            catch (MyException ex) {
                return(PageAlert("Index", "ParkBitBooking", new { RemindUserContent = ex.Message }));
            }
            catch (Exception ex)
            {
                ExceptionsServices.AddExceptionToDbAndTxt("WeiXinWeb", "预约失败", ex, LogFrom.WeiXin);
                return(PageAlert("Index", "ParkBitBooking", new { RemindUserContent = "预约失败!" }));
            }
        }
Esempio n. 10
0
        /// <summary>
        /// 增加停车区域
        /// </summary>
        /// <param name="PKID"></param>
        /// <returns></returns>
        public static ParkArea GetParkArea(string PKID)
        {
            ParkArea model = new ParkArea();

            model.AreaID         = GuidGenerator.GetGuidString();
            model.AreaName       = "停车区域";
            model.CameraWaitTime = 1;
            model.CarbitNum      = 1000;
            model.DataStatus     = DataStatus.Normal;
            model.HaveUpdate     = 3;
            model.LastUpdateTime = DateTime.Now;
            model.MasterID       = String.Empty;
            model.NeedToll       = YesOrNo.Yes;
            model.PKID           = PKID;
            model.TwoCameraWait  = YesOrNo.Yes;
            return(model);
        }
Esempio n. 11
0
        public static bool Add(ParkArea model)
        {
            if (model == null)
            {
                throw new ArgumentNullException("model");
            }

            model.AreaID = GuidGenerator.GetGuid().ToString();
            IParkArea factory = ParkAreaFactory.GetFactory();
            bool      result  = factory.Add(model);

            if (result)
            {
                OperateLogServices.AddOperateLog <ParkArea>(model, OperateType.Add);
            }
            return(result);
        }
Esempio n. 12
0
        private string GetParkingId(string pid, string bid, string gid)
        {
            try
            {
                if (!string.IsNullOrWhiteSpace(pid))
                {
                    return(pid);
                }
                if (!string.IsNullOrWhiteSpace(bid))
                {
                    ParkBox box = ParkBoxServices.QueryByRecordId(bid);
                    if (box != null)
                    {
                        ParkArea area = ParkAreaServices.QueryByRecordId(box.AreaID);
                        if (area != null)
                        {
                            return(area.PKID);
                        }
                    }
                }

                if (!string.IsNullOrWhiteSpace(gid))
                {
                    ParkGate gate = ParkGateServices.QueryByRecordId(gid);
                    if (gate != null)
                    {
                        ParkBox box = ParkBoxServices.QueryByRecordId(gate.BoxID);
                        if (box != null)
                        {
                            ParkArea area = ParkAreaServices.QueryByRecordId(box.AreaID);
                            if (area != null)
                            {
                                return(area.PKID);
                            }
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                ExceptionsServices.AddExceptionToDbAndTxt("QRCodeParkPayment", "GetParkingId方法处理异常", ex, LogFrom.WeiXin);
            }
            return(string.Empty);
        }
Esempio n. 13
0
        public async Task <IActionResult> ParkImageAsync(int id)
        {
            ParkArea park = await db.ParkAreas.Where(p => p.ID == id)
                            .Include(p => p.ParkingSpaces)
                            .Include(p => p.Walls)
                            .Include(p => p.Aisles)
                            .FirstOrDefaultAsync();

            if (park == null)
            {
                return(NotFound());
            }
            var image = ParkingSpaceService.GetMap(db, park);

            using MemoryStream ms = new MemoryStream();
            image.Save(ms, ImageFormat.Png);
            ActionResult result = Ok();

            return(File(ms.ToArray(), "image/png"));
        }
Esempio n. 14
0
        public int UpdateCarBit(string PKID)
        {
            try
            {
                using (DbOperator dbOperator = ConnectionManager.CreateConnection())
                {
                    int           CarBit = 0;
                    StringBuilder strSql = new StringBuilder();
                    strSql.Append("select * from ParkArea where PKID=@PKID and DataStatus!=2");
                    dbOperator.ClearParameters();
                    dbOperator.AddParameter("PKID", PKID);
                    using (DbDataReader reader = dbOperator.ExecuteReader(strSql.ToString()))
                    {
                        while (reader.Read())
                        {
                            ParkArea model = DataReaderToModel <ParkArea> .ToModel(reader);

                            CarBit += model.CarbitNum;
                        }
                    }

                    strSql = new StringBuilder();
                    strSql.Append("update BaseParkinfo set CarBitNum=@CarBitNum,LastUpdateTime=getdate(),HaveUpdate=3  where PKID=@PKID");
                    dbOperator.ClearParameters();
                    dbOperator.AddParameter("PKID", PKID);
                    dbOperator.AddParameter("CarBitNum", CarBit);
                    if (dbOperator.ExecuteNonQuery(strSql.ToString()) > 0)
                    {
                        return(CarBit);
                    }
                    else
                    {
                        return(-1);
                    }
                }
            }
            catch
            {
                return(-1);
            }
        }
Esempio n. 15
0
        private static bool AddDefaultParkDeviceParam(string gateId, string deviceId, string deviceNo, DbOperator dbOperator)
        {
            ParkGate        gate        = ParkGateServices.QueryByRecordId(gateId);
            ParkBox         box         = ParkBoxServices.QueryByRecordId(gate.BoxID);
            ParkArea        area        = ParkAreaServices.QueryByRecordId(box.AreaID);
            ParkDeviceParam param       = CreateDefualtParam(deviceId, int.Parse(deviceNo), area.CarbitNum, (int)gate.IoState);
            IParkDevice     factory     = ParkDeviceFactory.GetFactory();
            ParkDeviceParam deviceParam = factory.QueryParkDeviceParamByDevID(param.DevID);

            if (deviceParam != null)
            {
                throw new MyException("设备编号不能重复");
            }

            bool result = factory.AddParam(param, dbOperator);

            if (!result)
            {
                throw new MyException("添加设备默认参数失败");
            }
            return(result);
        }
Esempio n. 16
0
        /// <summary>
        /// 系统初始化默认单位CS
        /// </summary>
        public static bool InitSystemDefaultCompanyCS(string VName, string CPName, string userno, string pwd, string systemmodelpath)
        {
            try
            {
                ICompany factory = CompanyFactory.GetFactory();
                using (DbOperator dbOperator = ConnectionManager.CreateConnection())
                {
                    try
                    {
                        dbOperator.BeginTransaction();
                        BaseCompany compamy = GetCompanyModel();
                        compamy.CPName       = CPName;
                        compamy.UserAccount  = userno;
                        compamy.UserPassword = pwd;
                        bool result = factory.Add(compamy, dbOperator);
                        if (!result)
                        {
                            throw new MyException("添加默认单位失败");
                        }
                        BaseVillage village = GetVillage(compamy.CPID);
                        village.VName = VName;
                        result        = VillageServices.AddVillageDefaultUser(village, dbOperator);
                        if (!result)
                        {
                            throw new MyException("添加默认小区失败");
                        }
                        result = SysUserServices.AddCompanyDefaultUserCS(compamy, village, dbOperator, systemmodelpath);
                        if (!result)
                        {
                            throw new MyException("添加默认用户失败");
                        }

                        BaseParkinfo parkinfo = GetParkinfo(village.VID);
                        result = ParkingServices.AddParkinfoDefault(parkinfo, dbOperator);
                        if (!result)
                        {
                            throw new MyException("添加默认车场失败");
                        }
                        dbOperator.CommitTransaction();

                        ParkArea area = GetParkArea(parkinfo.PKID);
                        result = ParkAreaServices.AddDefualt(area);
                        if (result)
                        {
                            ParkBox box = GetParkBox(area.AreaID);
                            result = ParkBoxServices.AddDefault(box);
                            if (result)
                            {
                                result = ParkGateServices.AddDefault(GetParkGate(box.BoxID, 1));
                                result = ParkGateServices.AddDefault(GetParkGate(box.BoxID, 2));
                            }
                        }
                    }
                    catch (Exception ex)
                    {
                        dbOperator.RollbackTransaction();
                        throw;
                    }
                }
            }
            catch (Exception ex)
            {
                ExceptionsServices.AddExceptions(ex, "添加系统默认单用户失败");
                return(false);
            }
            return(true);
        }
Esempio n. 17
0
        internal async static Task <LeaveResult> LeaveAsync(ParkContext db, string licensePlate, ParkArea parkArea, DateTime time)
        {
            ParkRecord parkRecord = null;

            try
            {
                LeaveResult leave = new LeaveResult()
                {
                    CanLeave = true
                };
                Car car = await GetCarAsync(db, licensePlate, false);

                if (car == null)
                {
                    //找不到车,就直接放行,省得麻烦
                    return(leave);
                }
                //获取停车记录
                parkRecord = await db.ParkRecords
                             .OrderByDescending(p => p.EnterTime)
                             .FirstOrDefaultAsync(p => p.Car == car);

                if (parkRecord == null)
                {
                    //找不到记录,就直接放行,省得麻烦
                    return(leave);
                }
                leave.ParkRecord = parkRecord;
                //补全进出记录
                parkRecord.LeaveTime       = time;
                db.Entry(parkRecord).State = EntityState.Modified;
                CarOwner owner = car.CarOwner;
                //获取价格策略
                var priceStrategy = parkArea.PriceStrategy;
                if (priceStrategy == null)
                {
                    //免费停车场
                    return(leave);
                }

                switch (owner)
                {
                case CarOwner _ when owner.IsFree:
                    //免费用户
                    break;

                case CarOwner _:
                    if (await IsMonthlyCardValidAsync(db, owner.ID))
                    {
                        //月租用户,放行
                        break;
                    }
                    else
                    {
                        goto needPay;
                    }

                case null:
                    //没有注册
needPay:
                    //非会员或普通用户
                    double price = GetPrice(priceStrategy, parkRecord.EnterTime, time);
                    double balance = owner == null ? 0 : await GetBalanceAsync(db, owner.ID);

                    //计算价格
                    if (balance - price < 0)
                    {
                        //拒绝驶离,要求付费
                        leave.CanLeave  = false;
                        leave.NeedToPay = balance - price;
                        return(leave);
                    }
                    //新增扣费记录
                    TransactionRecord transaction = new TransactionRecord()
                    {
                        Time     = time,
                        Type     = TransactionType.Park,
                        Balance  = balance - price,
                        Value    = -price,
                        CarOwner = owner,
                    };
                    db.TransactionRecords.Add(transaction);
                    parkRecord.TransactionRecord = transaction;    //停车记录绑定交易记录
                    break;
                }
                return(leave);
            }
            finally
            {
                await db.SaveChangesAsync();
            }
        }
Esempio n. 18
0
 /// <summary>
 /// 离开停车场
 /// </summary>
 /// <param name="db">数据库上下文</param>
 /// <param name="licensePlate">识别到的车牌号</param>
 /// <param name="parkArea">停车区</param>
 /// <returns>离开结果</returns>
 public static Task <LeaveResult> LeaveAsync(ParkContext db, string licensePlate, ParkArea parkArea)
 {
     return(LeaveAsync(db, licensePlate, parkArea, DateTime.Now));
 }
Esempio n. 19
0
        internal async static Task <EnterResult> EnterAsync(ParkContext db, string licensePlate, ParkArea parkArea, DateTime time)
        {
            //检查是否有空位
            bool hasEmpty = await db.ParkingSpaces.AnyAsync(p => p.ParkArea == parkArea && !p.HasCar);

            //select from parkingspace join parkarea on parkingspace.parkareaid=parkarea.id and not parkingspace.hascar
            if (!hasEmpty)
            {
                return(new EnterResult(false, "停车场已满"));
            }
            //获取汽车
            Car car = await GetCarAsync(db, licensePlate, true);

            if (car != null && !car.Enabled)//是否被禁止进入
            {
                return(new EnterResult(false, "该车辆禁止进入"));
            }
            //新增进出记录
            ParkRecord parkRecord = new ParkRecord()
            {
                Car       = car,
                EnterTime = time,
                ParkArea  = parkArea
            };

            db.ParkRecords.Add(parkRecord);
            await db.SaveChangesAsync();

            return(new EnterResult(true));;
        }
Esempio n. 20
0
 /// <summary>
 /// 进入停车场
 /// </summary>
 /// <param name="db">数据库上下文</param>
 /// <param name="licensePlate">识别到的车牌号</param>
 /// <param name="parkArea">停车区</param>
 /// <returns>是否允许进入</returns>
 public static Task <EnterResult> EnterAsync(ParkContext db, string licensePlate, ParkArea parkArea)
 {
     return(EnterAsync(db, licensePlate, parkArea, DateTime.Now));
 }