/// <summary> /// Lấy về danh sách và phần tử ở đầu /// </summary> /// <param name="groupcode"></param> /// <returns></returns> public JsonResult GetQuestion(string groupcode) { var ret = 0; //Khai báo lấy dữ liệu QUESTION_BUS bus = new QUESTION_BUS(); List <fieldpara> lipa = new List <fieldpara> { new fieldpara("QUESTIONGROUPCODE", groupcode, 0) }; //order by theorder, with pagesize and the page List <QUESTION_OBJ> data = bus.getAllBy2("CODEVIEW", lipa.ToArray()); QUESTION_OBJ firstquestion = null; if (data.Count > 0) { firstquestion = data[0]; } bus.CloseConnection(); //Chỉ số đầu tiên của trang hiện tại (đã trừ -1) var jsonResult = Json(new { firstquestion, data, //Danh sách ret //ok }, JsonRequestBehavior.AllowGet); jsonResult.MaxJsonLength = int.MaxValue; return(jsonResult); }
public JsonResult UpdateQuestionF(QUESTION_OBJ obj, string questiontypeCodeView, string contentAnswer) { QUESTION_BUS bus = new QUESTION_BUS(); int ret; int add = 0; ANSWER_BUS busAnswer = new ANSWER_BUS(); ANSWER_OBJ objAnswer = new ANSWER_OBJ(); //kiểm tra tồn tại cho trường hợp sửa var objTemp = !string.IsNullOrEmpty(obj.CODE) ? bus.GetByID(new QUESTION_OBJ.BusinessObjectID(obj.CODE)) : new QUESTION_OBJ(); //hết kiểm tra tồn tại bản ghi objTemp.CODEVIEW = obj.CODEVIEW; objTemp.NAME = obj.NAME; objTemp.CONTENTIMG = obj.CONTENTIMG; objTemp.MARK = obj.MARK; objTemp.ORD = obj.ORD; objTemp.LOCK = obj.LOCK; objTemp.CONTENT = obj.CONTENT; objTemp.QUESTIONGROUPCODE = obj.QUESTIONGROUPCODE; objTemp.ANSWERCODE = obj.ANSWERCODE; //Kiểm tra tình trạng sửa hay là thêm mới if (string.IsNullOrEmpty(obj.CODE)) { //Thêm mới add = 1; //Sinh mã objTemp.CODE = bus.genNextCode(obj); objAnswer.CODE = busAnswer.genNextCode(objAnswer); objTemp.ANSWERCODE = objAnswer.CODE; } if (add == 1) { ret = bus.insert(objTemp); //chỉ cần thêm mới chứ không cần cập nhật answer if (ret >= 0) { objAnswer.QUESTIONCODE = objTemp.CODE; objAnswer.QUESTIONGROUPCODE = obj.QUESTIONGROUPCODE; objAnswer.CODEVIEW = "1"; objAnswer.THEORDER = 1; objAnswer.NAME = objTemp.NAME; objAnswer.CONTENT = contentAnswer; objAnswer.TRUEANSWER = 1; ret = busAnswer.insert(objAnswer); } } else { //gán _ID để xác định bản ghi sẽ được cập nhật objTemp._ID.CODE = obj.CODE; ret = bus.update(objTemp); } bus.CloseConnection(); busAnswer.CloseConnection(); return(Json(new { code = objTemp.CODE, ret }, JsonRequestBehavior.AllowGet)); }
public JsonResult UpdateQuestion(QUESTION_OBJ obj, string typeQuestion) { int ret = 0; int add = 0; QUESTION_OBJ objTemp; string codeAnswer = ""; QUESTION_BUS bus = new QUESTION_BUS(); ANSWER_BUS ansbus = new ANSWER_BUS(); if (!string.IsNullOrEmpty(obj.CODE)) //edit { objTemp = bus.GetByID(new QUESTION_OBJ.BusinessObjectID(obj.CODE)); if (typeQuestion == "CO") { List <ANSWER_OBJ> libegin = ansbus.getAllBy2(" CODE ", new fieldpara("QUESTIONCODE", obj.CODE, 0) , new fieldpara("QUESTIONGROUPCODE", obj.QUESTIONGROUPCODE, 0)); if (obj.ANSWERCODE != null) { foreach (ANSWER_OBJ item in libegin) { if (item.CODEVIEW.Split('_')[1] == obj.ANSWERCODE) { codeAnswer = item.CODE; item.TRUEANSWER = 1; item._ID.CODE = item.CODE; ret = ansbus.update(item); } else { item.TRUEANSWER = 0; item._ID.CODE = item.CODE; ret = ansbus.update(item); } } } } } else //add { objTemp = new QUESTION_OBJ(); } if (ret < 0) { //đóng kết nối trước khi trả về bus.CloseConnection(); //ban ghi sửa đã bị xóa return(Json(new { ret }, JsonRequestBehavior.AllowGet)); } //hết kiểm tra tồn tại bản ghi objTemp.CODEVIEW = obj.CODEVIEW; objTemp.NAME = obj.NAME; objTemp.CONTENTIMG = obj.CONTENTIMG; objTemp.MARK = obj.MARK; objTemp.ORD = obj.ORD; objTemp.LOCK = obj.LOCK; objTemp.CONTENT = obj.CONTENT; objTemp.QUESTIONGROUPCODE = obj.QUESTIONGROUPCODE; //trong trường hợp là câu hỏi dạng CO thì cập nhật lại answercode bằng codeanswer không thì sẽ làm như bình thường objTemp.Answercode= obj.Answercode objTemp.ANSWERCODE = typeQuestion == "CO" ? codeAnswer : obj.ANSWERCODE; //Kiểm tra tình trạng sửa hay là thêm mới if (string.IsNullOrEmpty(obj.CODE)) { //Thêm mới add = 1; //Sinh mã objTemp.CODE = bus.genNextCode(obj); if (typeQuestion == "CO") { ANSWER_OBJ objAnser = new ANSWER_OBJ(); ANSWER_BUS busAnswer = new ANSWER_BUS(); string answerCode = busAnswer.genNextCode(objAnser); List <ANSWER_OBJ> listAnswer = new List <ANSWER_OBJ>(); List <string> listContentAnswer = new List <string> { "TRUE", "FALSE", "NOT GIVEN" }; //Tự động sinh ra câu hỏi và là 3 đáp án true, false, //Tự động sinh ra câu tra lời for (int i = 0; i < listContentAnswer.Count; i++) { ANSWER_OBJ answer = new ANSWER_OBJ { CODE = answerCode }; answerCode = busAnswer.GenNextCode(answer, answerCode); answer.QUESTIONCODE = objTemp.CODE; answer.QUESTIONGROUPCODE = obj.QUESTIONGROUPCODE; answer.CODEVIEW = "CO_" + i; answer.THEORDER = i + 1; answer.NAME = "CO" + (i + 1); answer.CONTENT = listContentAnswer[i]; if (int.Parse(obj.ANSWERCODE) == i) { objTemp.ANSWERCODE = answerCode; answer.TRUEANSWER = 1; } else { answer.TRUEANSWER = 0; } listAnswer.Add(answer); } busAnswer.BeginTransaction(); ret = busAnswer.InsertMultiItems(listAnswer); if (ret < 0) { busAnswer.RollbackTransaction(); } else { busAnswer.CommitTransaction(); } busAnswer.CloseConnection(); } } if (add == 1 && ret >= 0) { ret = bus.insert(objTemp); } else { //gán _ID để xác định bản ghi sẽ được cập nhật objTemp._ID.CODE = obj.CODE; ret = bus.update(objTemp); } bus.CloseConnection(); ansbus.CloseConnection(); return(Json(new { ret }, JsonRequestBehavior.AllowGet)); }
public JsonResult UpdateQgroup(QUESTIONGROUP_OBJ obj) { QUESTIONTYPE_BUS busQuestiontype = new QUESTIONTYPE_BUS(); QUESTIONTYPE_OBJ objQuestiontype = busQuestiontype.GetByID(new QUESTIONTYPE_OBJ.BusinessObjectID(obj.QUESTIONTYPECODE)); busQuestiontype.CloseConnection(); QUESTIONGROUP_BUS bus = new QUESTIONGROUP_BUS(); int ret = 0; int add = 0; //kiểm tra tồn tại cho trường hợp sửa var objTemp = !string.IsNullOrEmpty(obj.CODE) ? bus.GetByID(new QUESTIONGROUP_OBJ.BusinessObjectID(obj.CODE)) : new QUESTIONGROUP_OBJ(); //Lỗi phần dưới đưa lên if (ret < 0 || objQuestiontype == null) { //đóng kết nối trước khi trả về bus.CloseConnection(); //ban ghi sửa đã bị xóa return(Json(new { sussess = ret }, JsonRequestBehavior.AllowGet)); } //hết kiểm tra tồn tại bản ghi objTemp.EDITTIME = DateTime.Now; //Thời điểm sủa bản ghi objTemp.EDITUSER = _ses.loginCode; //Người sửa bản ghi objTemp.CODEVIEW = obj.CODEVIEW; objTemp.NAME = obj.NAME; objTemp.SUBJECTCODE = obj.SUBJECTCODE; objTemp.SUBJECTCONTENTCODE = obj.SUBJECTCONTENTCODE; objTemp.NOTE = obj.NOTE; objTemp.LOCK = obj.LOCK; objTemp.CONTENT = obj.CONTENT; objTemp.QUESTIONTYPECODE = obj.QUESTIONTYPECODE; objTemp.QUESTIONUSECODELIST = obj.QUESTIONUSECODELIST; objTemp.MARK = obj.MARK; List <string> listSourcePath = _ses.tSOURCEPATHSESSION; List <string> listDestinationPath = _ses.tDESTINATIONPATHSESSION; if (listDestinationPath != null) { for (int i = 0; i < listSourcePath.Count; i++) { if (objTemp.CONTENT.Contains((listSourcePath[i]))) { objTemp.CONTENT = objTemp.CONTENT.Replace(listSourcePath[i], listDestinationPath[i]); } } } QUESTION_BUS busQuestion = new QUESTION_BUS(); QUESTION_OBJ objQuestion = null; ANSWER_BUS busAnswer = new ANSWER_BUS(); ANSWER_OBJ objAnser = null; //Dành cho danh sách các phương pháp sử dụng // obj_temp.THEORDER = obj.THEORDER; //Kiểm tra tình trạng sửa hay là thêm mới if (string.IsNullOrEmpty(obj.CODE)) { //Thêm mới add = 1; //Sinh mã objTemp.CODE = bus.genNextCode(obj); objTemp.LOCKDATE = DateTime.Now; //Sinh tự động các bản ghi theo yêu cầu switch (objQuestiontype.CODEVIEW) { case "WR": //Tự động sinh ra câu hỏi objQuestion = new QUESTION_OBJ { QUESTIONGROUPCODE = objTemp.CODE }; objQuestion.CODE = busQuestion.genNextCode(objQuestion); objQuestion.NAME = "Câu hỏi cho:" + objTemp.NAME; objQuestion.MARK = objTemp.MARK; //Tự động sinh ra câu tra lời objAnser = new ANSWER_OBJ(); objAnser.CODE = busAnswer.genNextCode(objAnser); objAnser.QUESTIONCODE = objQuestion.CODE; objAnser.QUESTIONGROUPCODE = objTemp.CODE; objAnser.CODEVIEW = "1"; objAnser.THEORDER = 1; objAnser.NAME = objTemp.NAME; objAnser.CONTENT = ""; objAnser.TRUEANSWER = 1; break; case "LA": objQuestion = new QUESTION_OBJ { QUESTIONGROUPCODE = objTemp.CODE }; objQuestion.CODE = busQuestion.genNextCode(objQuestion); objQuestion.NAME = "Câu hỏi cho:" + objTemp.NAME; objQuestion.MARK = objTemp.MARK; //Tự động sinh ra câu tra lời objAnser = new ANSWER_OBJ(); objAnser.CODE = busAnswer.genNextCode(objAnser); objAnser.QUESTIONCODE = objQuestion.CODE; objAnser.QUESTIONGROUPCODE = objTemp.CODE; objAnser.CODEVIEW = "1"; objAnser.THEORDER = 1; objAnser.NAME = objTemp.NAME; objAnser.CONTENT = ""; objAnser.TRUEANSWER = 1; break; //trường hợp câu hỏi tổng hợp cần sinh ra 3 câu trả lời là true/false/not given, nếu muốn biết được câu trả lời nào là đúng thì cần case "MS": //Tự động sinh ra câu hỏi objQuestion = new QUESTION_OBJ { QUESTIONGROUPCODE = objTemp.CODE }; objQuestion.CODE = busQuestion.genNextCode(objQuestion); objQuestion.NAME = "Câu hỏi cho:" + objTemp.NAME; objQuestion.MARK = objTemp.MARK; break; } } List <QUESTIONGROUPUSE_OBJ> liQuestiongroupuse = new List <QUESTIONGROUPUSE_OBJ>(); QUESTIONGROUPUSE_BUS busQuestiongroupuse = new QUESTIONGROUPUSE_BUS(); string[] listUse = obj.QUESTIONUSECODELIST.Split(','); foreach (var item in listUse) { QUESTIONGROUPUSE_OBJ objQuestiongroupuse = new QUESTIONGROUPUSE_OBJ { LOCK = 0, LOCKDATE = DateTime.Now, QUESITONGROUPCODE = objTemp.CODE, QUESTIONUSECODE = item }; liQuestiongroupuse.Add(objQuestiongroupuse); } bus.BeginTransaction(); busQuestiongroupuse.setConnection(bus); busAnswer.setConnection(bus); busQuestion.setConnection(bus); if (add == 1) { ret = bus.insert(objTemp); } else { //gán _ID để xác định bản ghi sẽ được cập nhật objTemp._ID.CODE = obj.CODE; ret = bus.update(objTemp); } if (ret >= 0) { // ReSharper disable once PossiblyMistakenUseOfParamsMethod ret = busQuestiongroupuse.Delete(new fieldpara("QUESITONGROUPCODE", objTemp.CODE)); } if (ret >= 0) { ret = busQuestiongroupuse.InsertMultiItems(liQuestiongroupuse); } //Cập nhật câu hỏi nếu nó được sinh tự động if (objQuestion != null && ret >= 0) { ret = busQuestion.Insert(objQuestion); } //Cập nhật answer nếu được sinh tự động if (objAnser != null && ret >= 0) { ret = busAnswer.Insert(objAnser); } if (ret >= 0) { _ses.tSOURCEPATHSESSION?.Clear(); _ses.tDESTINATIONPATHSESSION?.Clear(); bus.CommitTransaction(); } else { bus.RollbackTransaction(); } int pagecount = 0; int currentpage = 0; string questiongroup = JsonConvert.SerializeObject(objTemp); bus.CloseConnection(); //some thing like that return(Json(new { add, ret, questiongroup, pagecount, currentpage, obj = objTemp }, JsonRequestBehavior.AllowGet)); }
/// <summary> /// lấy chi tiết 1 đề thi /// </summary> /// <param name="examformcode">mã đề thi</param> /// <returns></returns> public JsonResult Preview(string examformcode) { int ret = 0; int numberQuestion = 0; EXAMFORM_BUS busExamform = new EXAMFORM_BUS(); EXAMFORM_OBJ objExamform = busExamform.GetByID((new EXAMFORM_OBJ.BusinessObjectID(examformcode))); busExamform.CloseConnection(); if (objExamform == null) { ret = -2; } //Danh sachs cau truc EXAMFORMDETAIL_BUS busExamformdetail = new EXAMFORMDETAIL_BUS(); List <EXAMFORMDETAIL_OBJ> liExamformdetail = new List <EXAMFORMDETAIL_OBJ>(); if (ret >= 0) { if (objExamform != null) { liExamformdetail = busExamformdetail.getAllBy2("THEORDER", new fieldpara("EXAMFORMCODE", objExamform.CODE)); } busExamformdetail.CloseConnection(); if (liExamformdetail == null) { ret = -3; } } List <fieldpara> lipa = new List <fieldpara>(); List <jointable> lijoin = new List <jointable>(); //Lay danh sach cac nhom cau hoi QUESTIONGROUP_BUS busQuestiongroup = new QUESTIONGROUP_BUS(); List <QUESTIONGROUP_OBJ> liQuestiongroup = new List <QUESTIONGROUP_OBJ>(); if (ret >= 0) { if (objExamform != null) { lijoin.Add(new jointable(typeof(EXAMFORMDETAIL_OBJ), "CODE", "QUESTIONGROUPCODE", new fieldpara("EXAMFORMCODE", objExamform.CODE))); } liQuestiongroup = busQuestiongroup.getAllBy2("CODE", lipa, lijoin); if (liQuestiongroup == null) { ret = -4; } busQuestiongroup.CloseConnection(); } //Lay danh sach cau hoi QUESTION_BUS busQuestion = new QUESTION_BUS(); List <QUESTION_OBJ> listQuestionreturn = new List <QUESTION_OBJ>(); if (ret >= 0) { lijoin.Clear(); if (objExamform != null) { lijoin.Add(new jointable(typeof(EXAMFORMDETAIL_OBJ), "QUESTIONGROUPCODE", "QUESTIONGROUPCODE", new fieldpara("examformcode", objExamform.CODE))); } var liQuestion = busQuestion.getAllBy2("CODE", lipa, lijoin); if (liQuestion == null) { ret = -5; } else { foreach (var objQuestion in liQuestion) { QUESTION_OBJ objTemp = new QUESTION_OBJ(); objTemp.CODE = objQuestion.CODE; objTemp.ANSWERCODE = null; objTemp.CONTENT = objQuestion.CONTENT; objTemp.QUESTIONGROUPCODE = objQuestion.QUESTIONGROUPCODE; objTemp._QUESTIONGROUPCODE = objQuestion._QUESTIONGROUPCODE; objTemp._ID = objQuestion._ID; listQuestionreturn.Add(objTemp); } numberQuestion = liQuestion.Count; } busQuestion.CloseConnection(); } //Lay danh danh cac dap an ANSWER_BUS busAnswer = new ANSWER_BUS(); List <ANSWER_OBJ> liAnswer = new List <ANSWER_OBJ>(); if (ret >= 0) { lijoin.Clear(); if (objExamform != null) { lijoin.Add((new jointable(typeof(EXAMFORMDETAIL_OBJ), "QUESTIONGROUPCODE", "QUESTIONGROUPCODE", new fieldpara("examformcode", objExamform.CODE)))); } liAnswer = busAnswer.getAllBy2("CODE", lipa, lijoin); if (liAnswer == null) { ret = -6; } busAnswer.CloseConnection(); } var jsonResult = Json(new { numberQuestion, //so luong cau hoi ObjexamForm = objExamform, //examform liExamformDetail = liExamformdetail, //Danh sách examdetail liQuestiongroup, //danh sach nhom cau hoi li_question = listQuestionreturn, //danh sach cac cau hoi li_answer = liAnswer, //danh sach tat ca cac cau tra loi ret //ok }, JsonRequestBehavior.AllowGet); jsonResult.MaxJsonLength = int.MaxValue; return(jsonResult); }
/// <summary> /// Lấy ra chi tiết của một bài thi dựa vào mã sinh viên trong bảng điểm lớp môn học và mã học kì /// </summary> /// <param name="markcode">mã sinh viên trong lớp môn học</param> /// <param name="examtimecode">mã học kì </param> /// <returns></returns> public JsonResult GetDetailExam(string markcode, string examtimecode) { if (string.IsNullOrEmpty(markcode)) { markcode = "1708310001"; } int ret = 0; int numberQuestion = 0; MARK_BUS markbus = new MARK_BUS(); MARK_OBJ objmark = markbus.GetByID(new MARK_OBJ.BusinessObjectID(markcode));//markbus.GetByKey(new fieldpar("STUDENTCODE", _ses.loginCode, 0),new fieldpara("COURSECODE", courseCode, 0)); markbus.CloseConnection(); if (objmark == null) { ret = -7; } EXAMHALLSTUDENT_OBJ obj = new EXAMHALLSTUDENT_OBJ(); if (ret >= 0) { EXAMHALLSTUDENT_BUS bus = new EXAMHALLSTUDENT_BUS(); if (objmark != null) { obj = bus.GetByKey(new fieldpara("MARKCODE", objmark.CODE, 0), new fieldpara("examtimecode", examtimecode)); } bus.CloseConnection(); } //Lấy được một lần thi if (obj == null) { ret = -1; } EXAMFORM_BUS busExamform = new EXAMFORM_BUS(); EXAMFORM_OBJ objExamform = null; //Lấy đề thi if (ret >= 0) { if (obj != null) { objExamform = busExamform.GetByID((new EXAMFORM_OBJ.BusinessObjectID(obj.EXAMFORMCODE))); } busExamform.CloseConnection(); if (objExamform == null) { ret = -2; } } //Danh sachs cau truc EXAMFORMDETAIL_BUS busExamformdetail = new EXAMFORMDETAIL_BUS(); List <EXAMFORMDETAIL_OBJ> liExamformdetail = new List <EXAMFORMDETAIL_OBJ>(); if (ret >= 0) { if (objExamform != null) { liExamformdetail = busExamformdetail.getAllBy2("THEORDER", new fieldpara("EXAMFORMCODE", objExamform.CODE)); } busExamformdetail.CloseConnection(); if (liExamformdetail == null) { ret = -3; } } List <fieldpara> lipa = new List <fieldpara>(); List <jointable> lijoin = new List <jointable>(); //Lay danh sach cac nhom cau hoi QUESTIONGROUP_BUS busQuestiongroup = new QUESTIONGROUP_BUS(); List <QUESTIONGROUP_OBJ> liQuestiongroup = new List <QUESTIONGROUP_OBJ>(); if (ret >= 0) { if (objExamform != null) { lijoin.Add(new jointable(typeof(EXAMFORMDETAIL_OBJ), "CODE", "QUESTIONGROUPCODE", new fieldpara("EXAMFORMCODE", objExamform.CODE))); } liQuestiongroup = busQuestiongroup.getAllBy2("CODE", lipa, lijoin); if (liQuestiongroup == null) { ret = -4; } busQuestiongroup.CloseConnection(); } //Lay danh sach cau hoi QUESTION_BUS busQuestion = new QUESTION_BUS(); List <QUESTION_OBJ> listQuestionreturn = new List <QUESTION_OBJ>(); if (ret >= 0) { lijoin.Clear(); if (objExamform != null) { lijoin.Add(new jointable(typeof(EXAMFORMDETAIL_OBJ), "QUESTIONGROUPCODE", "QUESTIONGROUPCODE", new fieldpara("examformcode", objExamform.CODE))); } var liQuestion = busQuestion.getAllBy2("CODE", lipa, lijoin); if (liQuestion == null) { ret = -5; } else { foreach (var objQuestion in liQuestion) { QUESTION_OBJ objTemp = new QUESTION_OBJ(); objTemp.CODE = objQuestion.CODE; objTemp.ANSWERCODE = null; objTemp.CONTENT = objQuestion.CONTENT; objTemp.QUESTIONGROUPCODE = objQuestion.QUESTIONGROUPCODE; objTemp._QUESTIONGROUPCODE = objQuestion._QUESTIONGROUPCODE; objTemp._ID = objQuestion._ID; listQuestionreturn.Add(objTemp); } numberQuestion = liQuestion.Count; } busQuestion.CloseConnection(); } //Lay danh danh cac dap an ANSWER_BUS busAnswer = new ANSWER_BUS(); List <ANSWER_OBJ> liAnswer = new List <ANSWER_OBJ>(); if (ret >= 0) { lijoin.Clear(); if (objExamform != null) { lijoin.Add((new jointable(typeof(EXAMFORMDETAIL_OBJ), "QUESTIONGROUPCODE", "QUESTIONGROUPCODE", new fieldpara("examformcode", objExamform.CODE)))); } liAnswer = busAnswer.getAllBy2("CODE", lipa, lijoin); if (liAnswer == null) { ret = -6; } busAnswer.CloseConnection(); } //get list exam result in case student lost the internet EXAMRESULT_BUS busExamresult = new EXAMRESULT_BUS(); List <EXAMRESULT_OBJ> liExamresult = new List <EXAMRESULT_OBJ>(); if (ret >= 0) { if (obj != null) { liExamresult = busExamresult.getAllBy2(new fieldpara("examhallstudentcode", obj.CODE)); } busExamresult.CloseConnection(); } var jsonResult = Json(new { numberQuestion, //so luong cau hoi ObjexamHallstudent = obj, //examhallstudent code ObjexamForm = objExamform, //examform liExamformDetail = liExamformdetail, //Danh sách examdetail liQuestiongroup, //danh sach nhom cau hoi li_question = listQuestionreturn, //danh sach cac cau hoi li_answer = liAnswer, //danh sach tat ca cac cau tra loi liExamresult, //danh sach tat ca cac dap an da tra loi cu sinh vien ret //ok }, JsonRequestBehavior.AllowGet); jsonResult.MaxJsonLength = int.MaxValue; return(jsonResult); }