|
|
|
@ -1,5 +1,3 @@
|
|
|
|
import 'package:doctor_app_flutter/config/config.dart';
|
|
|
|
|
|
|
|
import 'package:doctor_app_flutter/config/shared_pref_kay.dart';
|
|
|
|
|
|
|
|
import 'package:doctor_app_flutter/config/size_config.dart';
|
|
|
|
import 'package:doctor_app_flutter/config/size_config.dart';
|
|
|
|
import 'package:doctor_app_flutter/core/enum/patient_type.dart';
|
|
|
|
import 'package:doctor_app_flutter/core/enum/patient_type.dart';
|
|
|
|
import 'package:doctor_app_flutter/core/model/PatientSearchRequestModel.dart';
|
|
|
|
import 'package:doctor_app_flutter/core/model/PatientSearchRequestModel.dart';
|
|
|
|
@ -7,28 +5,20 @@ import 'package:doctor_app_flutter/core/viewModel/PatientSearchViewModel.dart';
|
|
|
|
import 'package:doctor_app_flutter/core/viewModel/auth_view_model.dart';
|
|
|
|
import 'package:doctor_app_flutter/core/viewModel/auth_view_model.dart';
|
|
|
|
import 'package:doctor_app_flutter/core/viewModel/project_view_model.dart';
|
|
|
|
import 'package:doctor_app_flutter/core/viewModel/project_view_model.dart';
|
|
|
|
import 'package:doctor_app_flutter/icons_app/doctor_app_icons.dart';
|
|
|
|
import 'package:doctor_app_flutter/icons_app/doctor_app_icons.dart';
|
|
|
|
import 'package:doctor_app_flutter/models/doctor/doctor_profile_model.dart';
|
|
|
|
|
|
|
|
import 'package:doctor_app_flutter/models/doctor/profile_req_Model.dart';
|
|
|
|
|
|
|
|
import 'package:doctor_app_flutter/models/patient/patiant_info_model.dart';
|
|
|
|
import 'package:doctor_app_flutter/models/patient/patiant_info_model.dart';
|
|
|
|
import 'package:doctor_app_flutter/models/patient/patient_arrival/get_patient_arrival_list_request_model.dart';
|
|
|
|
|
|
|
|
import 'package:doctor_app_flutter/models/patient/patient_model.dart';
|
|
|
|
import 'package:doctor_app_flutter/models/patient/patient_model.dart';
|
|
|
|
import 'package:doctor_app_flutter/models/patient/topten_users_res_model.dart';
|
|
|
|
|
|
|
|
import 'package:doctor_app_flutter/routes.dart';
|
|
|
|
import 'package:doctor_app_flutter/routes.dart';
|
|
|
|
import 'package:doctor_app_flutter/screens/base/base_view.dart';
|
|
|
|
import 'package:doctor_app_flutter/screens/base/base_view.dart';
|
|
|
|
import 'package:doctor_app_flutter/screens/patients/patient_search/header.dart';
|
|
|
|
import 'package:doctor_app_flutter/screens/patients/patient_search/header.dart';
|
|
|
|
import 'package:doctor_app_flutter/util/helpers.dart';
|
|
|
|
|
|
|
|
import 'package:doctor_app_flutter/util/translations_delegate_base.dart';
|
|
|
|
import 'package:doctor_app_flutter/util/translations_delegate_base.dart';
|
|
|
|
import 'package:doctor_app_flutter/widgets/patients/PatientCard.dart';
|
|
|
|
import 'package:doctor_app_flutter/widgets/patients/PatientCard.dart';
|
|
|
|
import 'package:doctor_app_flutter/widgets/patients/clinic_list_dropdwon.dart';
|
|
|
|
|
|
|
|
import 'package:doctor_app_flutter/widgets/shared/app_scaffold_widget.dart';
|
|
|
|
import 'package:doctor_app_flutter/widgets/shared/app_scaffold_widget.dart';
|
|
|
|
import 'package:doctor_app_flutter/widgets/shared/app_texts_widget.dart';
|
|
|
|
import 'package:doctor_app_flutter/widgets/shared/app_texts_widget.dart';
|
|
|
|
import 'package:doctor_app_flutter/widgets/shared/dr_app_circular_progress_Indeicator.dart';
|
|
|
|
|
|
|
|
import 'package:doctor_app_flutter/widgets/shared/loader/gif_loader_dialog_utils.dart';
|
|
|
|
import 'package:doctor_app_flutter/widgets/shared/loader/gif_loader_dialog_utils.dart';
|
|
|
|
import 'package:doctor_app_flutter/widgets/shared/text_fields/app_text_form_field.dart';
|
|
|
|
import 'package:doctor_app_flutter/widgets/shared/text_fields/app_text_form_field.dart';
|
|
|
|
import 'package:doctor_app_flutter/widgets/shared/text_fields/text_fields_utils.dart';
|
|
|
|
import 'package:doctor_app_flutter/widgets/shared/text_fields/text_fields_utils.dart';
|
|
|
|
import 'package:flutter/material.dart';
|
|
|
|
import 'package:flutter/material.dart';
|
|
|
|
import 'package:hexcolor/hexcolor.dart';
|
|
|
|
import 'package:hexcolor/hexcolor.dart';
|
|
|
|
import 'package:intl/intl.dart';
|
|
|
|
|
|
|
|
import 'package:provider/provider.dart';
|
|
|
|
import 'package:provider/provider.dart';
|
|
|
|
|
|
|
|
|
|
|
|
// ignore: must_be_immutable
|
|
|
|
// ignore: must_be_immutable
|
|
|
|
@ -72,76 +62,19 @@ class _PatientsScreenNewState extends State<PatientsScreenNew> {
|
|
|
|
AuthViewModel authProvider;
|
|
|
|
AuthViewModel authProvider;
|
|
|
|
|
|
|
|
|
|
|
|
Color sideColor = Colors.black;
|
|
|
|
Color sideColor = Colors.black;
|
|
|
|
List<PatiantInformtion> responseModelList;
|
|
|
|
|
|
|
|
List<PatiantInformtion> responseModelList2;
|
|
|
|
|
|
|
|
final String url = "assets/images/";
|
|
|
|
|
|
|
|
final String avatarMale = "user_male.svg"; //'working_male.svg';//'user.svg';
|
|
|
|
|
|
|
|
final String avatarFemale = 'user_female.svg';
|
|
|
|
|
|
|
|
final String assetName = 'assets/image.svg';
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
List<String> _locations = []; //['All', 'Today', 'Tomorrow', 'Next Week'];
|
|
|
|
List<String> _locations = []; //['All', 'Today', 'Tomorrow', 'Next Week'];
|
|
|
|
|
|
|
|
|
|
|
|
int _activeLocation = 0;
|
|
|
|
int _activeLocation = 0;
|
|
|
|
String patientType;
|
|
|
|
String patientType;
|
|
|
|
String patientTypeTitle;
|
|
|
|
String patientTypeTitle;
|
|
|
|
var _isLoading = true;
|
|
|
|
|
|
|
|
var selectedFilter = 1;
|
|
|
|
var selectedFilter = 1;
|
|
|
|
bool _isError = false;
|
|
|
|
|
|
|
|
String error = "";
|
|
|
|
|
|
|
|
String arrivalType;
|
|
|
|
String arrivalType;
|
|
|
|
ProjectViewModel projectsProvider;
|
|
|
|
ProjectViewModel projectsProvider;
|
|
|
|
var isView;
|
|
|
|
var isView;
|
|
|
|
final _controller = TextEditingController();
|
|
|
|
final _controller = TextEditingController();
|
|
|
|
|
|
|
|
|
|
|
|
PatientModel patient;
|
|
|
|
PatientModel patient;
|
|
|
|
searchData(String str) {
|
|
|
|
|
|
|
|
this.responseModelList = this.responseModelList2;
|
|
|
|
|
|
|
|
var strExist = str.length > 0 ? true : false;
|
|
|
|
|
|
|
|
if (strExist) {
|
|
|
|
|
|
|
|
List<PatiantInformtion> filterData = [];
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
for (var i = 0; i < responseModelList2.length; i++) {
|
|
|
|
|
|
|
|
String firstName = responseModelList[i].firstName.toUpperCase();
|
|
|
|
|
|
|
|
String lastName = responseModelList[i].lastName.toUpperCase();
|
|
|
|
|
|
|
|
String mobile = responseModelList[i].mobileNumber.toUpperCase();
|
|
|
|
|
|
|
|
String patientID = responseModelList[i].patientId.toString();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (firstName.contains(str.toUpperCase()) ||
|
|
|
|
|
|
|
|
lastName.contains(str.toUpperCase()) ||
|
|
|
|
|
|
|
|
mobile.contains(str) ||
|
|
|
|
|
|
|
|
patientID.contains(str)) {
|
|
|
|
|
|
|
|
filterData.add(responseModelList[i]);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
setState(() {
|
|
|
|
|
|
|
|
this.responseModelList = filterData;
|
|
|
|
|
|
|
|
});
|
|
|
|
|
|
|
|
} else {
|
|
|
|
|
|
|
|
setState(() {
|
|
|
|
|
|
|
|
this.responseModelList = this.responseModelList2;
|
|
|
|
|
|
|
|
});
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
convertDateFormat(String str) {
|
|
|
|
|
|
|
|
String timeConvert;
|
|
|
|
|
|
|
|
const start = "/Date(";
|
|
|
|
|
|
|
|
const end = "+0300)";
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
final startIndex = str.indexOf(start);
|
|
|
|
|
|
|
|
final endIndex = str.indexOf(end, startIndex + start.length);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
var date = new DateTime.fromMillisecondsSinceEpoch(
|
|
|
|
|
|
|
|
int.parse(str.substring(startIndex + start.length, endIndex)));
|
|
|
|
|
|
|
|
String newDate = date.year.toString() +
|
|
|
|
|
|
|
|
"-" +
|
|
|
|
|
|
|
|
date.month.toString().padLeft(2, '0') +
|
|
|
|
|
|
|
|
"-" +
|
|
|
|
|
|
|
|
date.day.toString().padLeft(2, '0');
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
return newDate.toString();
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@override
|
|
|
|
@override
|
|
|
|
Widget build(BuildContext context) {
|
|
|
|
Widget build(BuildContext context) {
|
|
|
|
@ -151,38 +84,6 @@ class _PatientsScreenNewState extends State<PatientsScreenNew> {
|
|
|
|
TranslationBase.of(context).tomorrow,
|
|
|
|
TranslationBase.of(context).tomorrow,
|
|
|
|
TranslationBase.of(context).nextWeek,
|
|
|
|
TranslationBase.of(context).nextWeek,
|
|
|
|
];
|
|
|
|
];
|
|
|
|
//TranslationBase.of(context).all,
|
|
|
|
|
|
|
|
projectsProvider = Provider.of(context);
|
|
|
|
|
|
|
|
final routeArgs = ModalRoute.of(context).settings.arguments as Map;
|
|
|
|
|
|
|
|
int _activeTab = 0;
|
|
|
|
|
|
|
|
// patient = widget.patientSearchForm != null
|
|
|
|
|
|
|
|
// ? widget.patientSearchForm
|
|
|
|
|
|
|
|
// : routeArgs['patientSearchForm'];
|
|
|
|
|
|
|
|
//
|
|
|
|
|
|
|
|
// patientType = widget.selectedType != null
|
|
|
|
|
|
|
|
// ? widget.selectedType
|
|
|
|
|
|
|
|
// : routeArgs['selectedType'];
|
|
|
|
|
|
|
|
// arrivalType = widget.arrivalType != null
|
|
|
|
|
|
|
|
// ? widget.arrivalType
|
|
|
|
|
|
|
|
// : routeArgs['arrivalType'];
|
|
|
|
|
|
|
|
// if (routeArgs != null && routeArgs.containsKey("isSearch")) {
|
|
|
|
|
|
|
|
// isSearch = routeArgs['isSearch'];
|
|
|
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
// if (routeArgs != null && routeArgs.containsKey("isSearch")) {
|
|
|
|
|
|
|
|
// isView = routeArgs['isView'];
|
|
|
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
// if (routeArgs != null && routeArgs.containsKey('activeFilter')) {
|
|
|
|
|
|
|
|
// _activeLocation = routeArgs['activeFilter'];
|
|
|
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
// if (routeArgs != null && routeArgs.containsKey('isInpatient')) {
|
|
|
|
|
|
|
|
// isInpatient = routeArgs['isInpatient'];
|
|
|
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// if (!projectsProvider.isArabic)
|
|
|
|
|
|
|
|
// patientTypeTitle = SERVICES_PATIANT_HEADER[int.parse(patientType)];
|
|
|
|
|
|
|
|
// else
|
|
|
|
|
|
|
|
// patientTypeTitle = SERVICES_PATIANT_HEADER_AR[int.parse(patientType)];
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
List<String> _tabs = [
|
|
|
|
List<String> _tabs = [
|
|
|
|
TranslationBase.of(context).inPatientAll.toUpperCase(),
|
|
|
|
TranslationBase.of(context).inPatientAll.toUpperCase(),
|
|
|
|
TranslationBase.of(context).inPatient.toUpperCase(),
|
|
|
|
TranslationBase.of(context).inPatient.toUpperCase(),
|
|
|
|
@ -192,15 +93,12 @@ class _PatientsScreenNewState extends State<PatientsScreenNew> {
|
|
|
|
|
|
|
|
|
|
|
|
return BaseView<PatientSearchViewModel>(
|
|
|
|
return BaseView<PatientSearchViewModel>(
|
|
|
|
onModelReady: (model) async {
|
|
|
|
onModelReady: (model) async {
|
|
|
|
if(widget.isSearchWithKeyInfo) {
|
|
|
|
if(!widget.isSearchWithKeyInfo && widget.selectedPatientType == PatientType.OutPatient) {
|
|
|
|
await model.getPatientFileInformation(widget.patientSearchRequestModel);
|
|
|
|
await model.getOutPatient(widget.patientSearchRequestModel);
|
|
|
|
|
|
|
|
|
|
|
|
} else {
|
|
|
|
} else {
|
|
|
|
// ignore: unrelated_type_equality_checks
|
|
|
|
await model.getPatientFileInformation(widget.patientSearchRequestModel);
|
|
|
|
if(widget.selectedPatientType == PatientType.OutPatient) {
|
|
|
|
|
|
|
|
await model.getOutPatient(widget.patientSearchRequestModel);
|
|
|
|
|
|
|
|
} else {
|
|
|
|
|
|
|
|
// TODO handel inPatient case
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
},
|
|
|
|
},
|
|
|
|
builder: (_, model, w) => AppScaffold(
|
|
|
|
builder: (_, model, w) => AppScaffold(
|
|
|
|
@ -221,7 +119,7 @@ class _PatientsScreenNewState extends State<PatientsScreenNew> {
|
|
|
|
),
|
|
|
|
),
|
|
|
|
if(!widget.isSearch && !widget.isInpatient)
|
|
|
|
if(!widget.isSearch && !widget.isInpatient)
|
|
|
|
HeaderInSearch(
|
|
|
|
HeaderInSearch(
|
|
|
|
title: "Search for 1111",
|
|
|
|
title: "My Out patient",
|
|
|
|
),
|
|
|
|
),
|
|
|
|
if(!widget.isInpatient)
|
|
|
|
if(!widget.isInpatient)
|
|
|
|
Container(
|
|
|
|
Container(
|
|
|
|
@ -244,9 +142,6 @@ class _PatientsScreenNewState extends State<PatientsScreenNew> {
|
|
|
|
return Expanded(
|
|
|
|
return Expanded(
|
|
|
|
child: InkWell(
|
|
|
|
child: InkWell(
|
|
|
|
onTap: () async {
|
|
|
|
onTap: () async {
|
|
|
|
// setState(() {
|
|
|
|
|
|
|
|
// _activeTab = _locations.indexOf(item);
|
|
|
|
|
|
|
|
// });
|
|
|
|
|
|
|
|
setState(() {
|
|
|
|
setState(() {
|
|
|
|
_activeLocation = _locations.indexOf(item);
|
|
|
|
_activeLocation = _locations.indexOf(item);
|
|
|
|
});
|
|
|
|
});
|
|
|
|
@ -324,7 +219,7 @@ class _PatientsScreenNewState extends State<PatientsScreenNew> {
|
|
|
|
bottom: 30),
|
|
|
|
bottom: 30),
|
|
|
|
),
|
|
|
|
),
|
|
|
|
onChanged: (String str) {
|
|
|
|
onChanged: (String str) {
|
|
|
|
this.searchData(str);
|
|
|
|
// this.searchData(str);
|
|
|
|
}),
|
|
|
|
}),
|
|
|
|
])),
|
|
|
|
])),
|
|
|
|
SizedBox(
|
|
|
|
SizedBox(
|
|
|
|
@ -402,96 +297,4 @@ class _PatientsScreenNewState extends State<PatientsScreenNew> {
|
|
|
|
),
|
|
|
|
),
|
|
|
|
);
|
|
|
|
);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
changeClinic(clinicId, BuildContext context, model) async {
|
|
|
|
|
|
|
|
GifLoaderDialogUtils.showMyDialog(context);
|
|
|
|
|
|
|
|
Map profile = await sharedPref.getObj(DOCTOR_PROFILE);
|
|
|
|
|
|
|
|
DoctorProfileModel doctorProfile = new DoctorProfileModel.fromJson(profile);
|
|
|
|
|
|
|
|
ProfileReqModel docInfo = new ProfileReqModel(
|
|
|
|
|
|
|
|
doctorID: doctorProfile.doctorID,
|
|
|
|
|
|
|
|
clinicID: clinicId,
|
|
|
|
|
|
|
|
license: true,
|
|
|
|
|
|
|
|
projectID: doctorProfile.projectID,
|
|
|
|
|
|
|
|
tokenID: '',
|
|
|
|
|
|
|
|
languageID: 2);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
authProvider
|
|
|
|
|
|
|
|
.getDocProfiles(docInfo.toJson(), allowChangeProfile: false)
|
|
|
|
|
|
|
|
.then((profileList) async {
|
|
|
|
|
|
|
|
print(profileList['DoctorProfileList'][0]);
|
|
|
|
|
|
|
|
int val2 = int.parse(patientType);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
GetPatientArrivalListRequestModel getPatientArrivalListRequestModel =
|
|
|
|
|
|
|
|
GetPatientArrivalListRequestModel(
|
|
|
|
|
|
|
|
from: patient.From,
|
|
|
|
|
|
|
|
to: patient.To,
|
|
|
|
|
|
|
|
clinicID: profileList['DoctorProfileList'][0]['ClinicID'],
|
|
|
|
|
|
|
|
doctorID:
|
|
|
|
|
|
|
|
profileList['DoctorProfileList'][0]['DoctorID'].toString(),
|
|
|
|
|
|
|
|
patientMRN: patient.getPatientID,
|
|
|
|
|
|
|
|
pageIndex: 0,
|
|
|
|
|
|
|
|
pageSize: 0);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
model
|
|
|
|
|
|
|
|
.getPatientList(
|
|
|
|
|
|
|
|
getPatientArrivalListRequestModel.toJson(), patientType)
|
|
|
|
|
|
|
|
.then((res) {
|
|
|
|
|
|
|
|
setState(() {
|
|
|
|
|
|
|
|
if (res != null && res['MessageStatus'] == 1) {
|
|
|
|
|
|
|
|
if (val2 == 7) {
|
|
|
|
|
|
|
|
if (res[SERVICES_PATIANT2[val2]] == null) {
|
|
|
|
|
|
|
|
_isError = true;
|
|
|
|
|
|
|
|
_isLoading = false;
|
|
|
|
|
|
|
|
this.error = error.toString();
|
|
|
|
|
|
|
|
} else {
|
|
|
|
|
|
|
|
var localList = [];
|
|
|
|
|
|
|
|
if (res["patientArrivalList"]["entityList"] == null) {
|
|
|
|
|
|
|
|
res["patientArrivalList"]["entityList"] = [];
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
res["patientArrivalList"]["entityList"].forEach((v) {
|
|
|
|
|
|
|
|
Map<String, dynamic> mergedPatient = {
|
|
|
|
|
|
|
|
...v,
|
|
|
|
|
|
|
|
...v["patientDetails"]
|
|
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
localList.add(mergedPatient);
|
|
|
|
|
|
|
|
});
|
|
|
|
|
|
|
|
lItems = localList;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
parsed = lItems;
|
|
|
|
|
|
|
|
responseModelList = new ModelResponse.fromJson(parsed).list;
|
|
|
|
|
|
|
|
responseModelList.sort((a, b) {
|
|
|
|
|
|
|
|
DateTime now = DateTime.now();
|
|
|
|
|
|
|
|
DateFormat dateFormat = DateFormat("yyyy-MM-dd HH:mm");
|
|
|
|
|
|
|
|
String formattedDate =
|
|
|
|
|
|
|
|
DateFormat('yyyy-MM-dd ' + a.startTime).format(now);
|
|
|
|
|
|
|
|
DateTime dateTimeA = dateFormat.parse(formattedDate);
|
|
|
|
|
|
|
|
String formattedDateB =
|
|
|
|
|
|
|
|
DateFormat('yyyy-MM-dd ' + b.startTime).format(now);
|
|
|
|
|
|
|
|
DateTime dateTimeB = dateFormat.parse(formattedDateB);
|
|
|
|
|
|
|
|
var adate = dateTimeA; //a.startTime;
|
|
|
|
|
|
|
|
var bdate = dateTimeB;
|
|
|
|
|
|
|
|
return adate.compareTo(bdate);
|
|
|
|
|
|
|
|
});
|
|
|
|
|
|
|
|
responseModelList2 = responseModelList;
|
|
|
|
|
|
|
|
_isError = false;
|
|
|
|
|
|
|
|
} else {
|
|
|
|
|
|
|
|
_isError = true;
|
|
|
|
|
|
|
|
error = model.error ??
|
|
|
|
|
|
|
|
res['ErrorEndUserMessage'] ??
|
|
|
|
|
|
|
|
res['ErrorMessage'];
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
_isLoading = false;
|
|
|
|
|
|
|
|
});
|
|
|
|
|
|
|
|
GifLoaderDialogUtils.hideDialog(context);
|
|
|
|
|
|
|
|
}).catchError((error) {
|
|
|
|
|
|
|
|
Helpers.showErrorToast(error.toString());
|
|
|
|
|
|
|
|
GifLoaderDialogUtils.hideDialog(context);
|
|
|
|
|
|
|
|
});
|
|
|
|
|
|
|
|
}).catchError((err) {
|
|
|
|
|
|
|
|
GifLoaderDialogUtils.hideDialog(context);
|
|
|
|
|
|
|
|
Helpers.showErrorToast(err);
|
|
|
|
|
|
|
|
});
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|