同程有借 v1.0.0版本的 MD5 值为:e33397cdbab33543d0c134ec96d77fb8
以下内容为反编译后的 fr.java 源代码,内容仅作参考
package com.loc;
import android.content.Context;
import android.os.Bundle;
import android.text.TextUtils;
import com.amap.api.location.AMapLocation;
import com.amap.api.location.AMapLocationClientOption;
import com.amap.api.location.DPoint;
import com.loc.w;
import com.moture.lib.core.misc.logger.LogPermissionKeys;
import com.taobao.accs.common.Constants;
import java.util.HashMap;
import java.util.List;
import java.util.Locale;
import org.json.JSONObject;
public final class fr {
public static String f9989a = "5.3";
static String f10000l;
static HashMap<String, String> f10001m;
public static final String[] f9990b = {"5.1"};
static String f9991c = "http://apilocate.amap.com/mobile/binary";
static String f9992d = "http://dualstack-a.apilocate.amap.com/mobile/binary";
static String f9993e = "";
private static final String[] f10004p = {"com.amap.api.location", "com.loc", "com.amap.api.fence"};
static String f9994f = "11G;11K;13J;13S;15O;15U;17J;17Y;197";
public static String f9995g = null;
public static String f9996h = null;
public static int f9997i = 30000;
public static String f9998j = null;
public static String f9999k = null;
private static w f10005q = null;
private static boolean f10006r = false;
private static boolean f10007s = false;
static boolean f10002n = false;
static boolean f10003o = false;
public static Bundle a(AMapLocationClientOption aMapLocationClientOption) {
Bundle bundle = new Bundle();
if (aMapLocationClientOption == null) {
aMapLocationClientOption = new AMapLocationClientOption();
}
try {
bundle.putParcelable("opt", aMapLocationClientOption);
} catch (Throwable th) {
a(th, "CoreUtil", "getOptionBundle");
}
return bundle;
}
public static AMapLocation a(AMapLocation aMapLocation, AMapLocation aMapLocation2) {
if (aMapLocation2 == null) {
return aMapLocation;
}
try {
aMapLocation.setCountry(aMapLocation2.getCountry());
aMapLocation.setRoad(aMapLocation2.getRoad());
aMapLocation.setPoiName(aMapLocation2.getPoiName());
aMapLocation.setStreet(aMapLocation2.getStreet());
aMapLocation.setNumber(aMapLocation2.getStreetNum());
String cityCode = aMapLocation2.getCityCode();
String adCode = aMapLocation2.getAdCode();
aMapLocation.setCityCode(cityCode);
aMapLocation.setAdCode(adCode);
aMapLocation.setCity(aMapLocation2.getCity());
aMapLocation.setDistrict(aMapLocation2.getDistrict());
aMapLocation.setProvince(aMapLocation2.getProvince());
aMapLocation.setAoiName(aMapLocation2.getAoiName());
aMapLocation.setAddress(aMapLocation2.getAddress());
aMapLocation.setDescription(aMapLocation2.getDescription());
if (aMapLocation.getExtras() != null) {
aMapLocation.getExtras().putString("citycode", aMapLocation2.getCityCode());
aMapLocation.getExtras().putString("desc", aMapLocation2.getExtras().getString("desc"));
aMapLocation.getExtras().putString("adcode", aMapLocation2.getAdCode());
} else {
Bundle bundle = new Bundle();
bundle.putString("citycode", aMapLocation2.getCityCode());
bundle.putString("desc", aMapLocation2.getExtras().getString("desc"));
bundle.putString("adcode", aMapLocation2.getAdCode());
aMapLocation.setExtras(bundle);
}
} catch (Throwable unused) {
}
return aMapLocation;
}
public static AMapLocationClientOption a(Bundle bundle) {
AMapLocationClientOption aMapLocationClientOption = new AMapLocationClientOption();
if (bundle == null) {
return aMapLocationClientOption;
}
try {
bundle.setClassLoader(AMapLocationClientOption.class.getClassLoader());
return (AMapLocationClientOption) bundle.getParcelable("opt");
} catch (Throwable th) {
a(th, "CoreUtil", "getOptionFromBundle");
return aMapLocationClientOption;
}
}
public static String a() {
return f9991c;
}
public static void a(Context context) {
try {
if (x.b(context)) {
f9991c = "http://abroad.apilocate.amap.com/mobile/binary";
return;
}
f();
String a9 = fg.a(l.f(context));
f10000l = a9;
a(a9);
} catch (Throwable th) {
a(th, "CoreUtil", "checkUrl");
}
}
public static void a(AMapLocation aMapLocation, JSONObject jSONObject) {
String str;
if (jSONObject != null) {
try {
double optDouble = jSONObject.optDouble("lat", aMapLocation.getLatitude());
double optDouble2 = jSONObject.optDouble("lon", aMapLocation.getLongitude());
aMapLocation.setProvider(jSONObject.optString(com.umeng.analytics.pro.d.M, aMapLocation.getProvider()));
aMapLocation.setLatitude(optDouble);
aMapLocation.setLongitude(optDouble2);
aMapLocation.setAltitude(jSONObject.optDouble("altitude", aMapLocation.getAltitude()));
try {
String optString = jSONObject.optString("accuracy");
if (!TextUtils.isEmpty(optString)) {
aMapLocation.setAccuracy(Float.parseFloat(optString));
}
} catch (Throwable unused) {
}
try {
String optString2 = jSONObject.optString("speed");
if (!TextUtils.isEmpty(optString2)) {
aMapLocation.setSpeed(Float.parseFloat(optString2));
}
} catch (Throwable unused2) {
}
try {
String optString3 = jSONObject.optString("bearing");
if (!TextUtils.isEmpty(optString3)) {
aMapLocation.setBearing(Float.parseFloat(optString3));
}
} catch (Throwable unused3) {
}
aMapLocation.setAdCode(jSONObject.optString("adcode", aMapLocation.getAdCode()));
aMapLocation.setCityCode(jSONObject.optString("citycode", aMapLocation.getCityCode()));
aMapLocation.setAddress(jSONObject.optString("address", aMapLocation.getAddress()));
String optString4 = jSONObject.optString("desc", "");
aMapLocation.setCountry(jSONObject.optString(com.umeng.analytics.pro.bh.O, aMapLocation.getCountry()));
aMapLocation.setProvince(jSONObject.optString("province", aMapLocation.getProvince()));
aMapLocation.setCity(jSONObject.optString("city", aMapLocation.getCity()));
aMapLocation.setDistrict(jSONObject.optString("district", aMapLocation.getDistrict()));
aMapLocation.setRoad(jSONObject.optString("road", aMapLocation.getRoad()));
aMapLocation.setStreet(jSONObject.optString("street", aMapLocation.getStreet()));
aMapLocation.setNumber(jSONObject.optString("number", aMapLocation.getStreetNum()));
aMapLocation.setPoiName(jSONObject.optString("poiname", aMapLocation.getPoiName()));
aMapLocation.setAoiName(jSONObject.optString("aoiname", aMapLocation.getAoiName()));
aMapLocation.setErrorCode(jSONObject.optInt(Constants.KEY_ERROR_CODE, aMapLocation.getErrorCode()));
aMapLocation.setErrorInfo(jSONObject.optString("errorInfo", aMapLocation.getErrorInfo()));
aMapLocation.setLocationType(jSONObject.optInt("locationType", aMapLocation.getLocationType()));
aMapLocation.setLocationDetail(jSONObject.optString("locationDetail", aMapLocation.getLocationDetail()));
aMapLocation.setTime(jSONObject.optLong("time", aMapLocation.getTime()));
boolean optBoolean = jSONObject.optBoolean("isOffset", aMapLocation.isOffset());
aMapLocation.setOffset(optBoolean);
aMapLocation.setBuildingId(jSONObject.optString("poiid", aMapLocation.getBuildingId()));
aMapLocation.setFloor(jSONObject.optString("floor", aMapLocation.getFloor()));
aMapLocation.setDescription(jSONObject.optString(LogPermissionKeys.Description, aMapLocation.getDescription()));
if (jSONObject.has("coordType")) {
str = jSONObject.optString("coordType", "GCJ02");
} else if (a(optDouble, optDouble2) && optBoolean) {
aMapLocation.setCoordType("GCJ02");
Bundle bundle = new Bundle();
bundle.putString("citycode", aMapLocation.getCityCode());
bundle.putString("desc", optString4.toString());
bundle.putString("adcode", aMapLocation.getAdCode());
aMapLocation.setExtras(bundle);
} else {
str = "WGS84";
}
aMapLocation.setCoordType(str);
Bundle bundle2 = new Bundle();
bundle2.putString("citycode", aMapLocation.getCityCode());
bundle2.putString("desc", optString4.toString());
bundle2.putString("adcode", aMapLocation.getAdCode());
aMapLocation.setExtras(bundle2);
} catch (Throwable th) {
a(th, "CoreUtil", "transformLocation");
}
}
}
private static void a(String str) {
HashMap<String, String> hashMap;
if (str != null) {
try {
if (str.length() == 0 || (hashMap = f10001m) == null || !hashMap.containsKey(str)) {
return;
}
String str2 = f10001m.get(str);
String str3 = null;
if (str2 != null && str2.length() > 0) {
str3 = new String(fg.b(b(str2), str), "utf-8");
}
if (str3 == null || str3.length() <= 0 || !str3.contains("http:")) {
return;
}
f9993e = str3;
f9991c = str3;
} catch (Throwable th) {
a(th, "CoreUtil", "checkUrl");
}
}
}
public static void a(Throwable th, String str, String str2) {
if ("reportError".equals(str2) || (th instanceof k)) {
return;
}
try {
av.b(th, str, str2);
} catch (Throwable unused) {
}
}
public static boolean a(double d9, double d10) {
int i9 = (int) ((d10 - 73.0d) / 0.5d);
int i10 = (int) ((d9 - 3.5d) / 0.5d);
if (i10 < 0 || i10 >= 101 || i9 < 0 || i9 >= 124) {
return false;
}
try {
return "00000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001100000001011000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011101010111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000110111111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000111101111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000110111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001111111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011010111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001110011100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000110000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001010011100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000111100110001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011111000111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001111110011000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001111000000000111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000111100000000000010111110100000011000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000111110000000001111111111111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000111111111000000111111111111111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011111111111101111111111111111111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000011111111111111111111111111111111111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000101111111111111111111111111111111111111110000000000000000000000000000000000000000000000000000000000000000000000000000000000011111111111111111111111111111111111111111100000000000000000000000000000000000000000000000000000000000000000000000000000000001111111111111111111111111111111111111111111100000000000000000000000000000000000000000000000000000000000000000000000000000000111111111111111111111111111111111111111111111000000000000000000000000000000000000000000000000000000000000000000000000000000001111111111111111111111111111111111111111111100000000000000000000000000000000000000000000000000000000000000000000000000000000011111111111111111111111111111111111111111111100000000000000000000000000000000000000000000000000000000000000000011110000000001111111111111111111111111111111111111111111110000000000000000000000000000000000000000000000000000000000011000011111100000000111111111111111111111111111111111111111111111100000000000000000000000000000000000000000000000000001111111100111111111100110111111111111111111111111111111111111111111111110000000000000000000000000000000000000000000000000001111111111111111111111111111111111111111111111111111111111111111111111111100000000000000000000000000000000000000000000000011111111111111111111111111111111111111111111111111111111111111111111111111111000000000000000000000000000000000000000000000111111111111111111111111111111111111111111111111111111111111111111111111111111100000000000000000000000000000000000000000101111111111111111111111111111111111111111111111111111111111111111111111111111111111000000000000000000000000000000000000001111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000000000000000000000000000000000011111111111111111111111111111111111111111111111111111111111111111111111111111111111111110000000000000000000000000000000000011111111111111111111111111111111111111111111111111111111111111111111111111111111111111110000000000000000000000000000000000001111111111111111111111111111111111111111111111111111111111111111111111111111111111111110000000000000000000000000000000000001111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000000000000000000000000000000000000111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000000000000000000000000000000000000001111111111111111111111111111111111111111111111111111111111111111111111111111111111111000000000000000000000000000000000000000111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000000000000000000000000000000000000011111111111111111111111111111111111111111111111111111111111111111111111111111111111100000000000000000000000000000000000000011111111111111111111111111111111111111111111111111111111111111111111111111111111111100000000000000000000000000000000000000111111111111111111111111111111111111111111111111111111111111111111111111111111111111110000000000000000000000000000000000001111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110000000000000000000000000000000001111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000000000000000000000000000011111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110000000000000000000000000011111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000000000000000000000000000111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111011111000000000000000000000000000111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100100000000000000000000000000000111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100011100000000000000000000000000011111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000111110000000000000000000000001111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110011111110000000000000000000000111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110111111110000000000000000000000111011111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110000000000000000000000001111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000000000000000000000011111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000000000000000000000000011111111111111111111111111111111111111111111111100001111111111111111111111111111111111111111111111111010000000000000000000000111111111111111111111111111111111111111111110000000000000001111111111111111111111111111111111111111111100000000000000000000011111111111111111111111111111111100000000000000000000000000001111111111111111111111111111111111111111110000000000000000000001111111111111111111111111111111100000000000000000000000000000001111111111111111111111111111111111111111000000000000000000000111111111111111111111111111111110000000000000000000000000000001111111111111111111111111111111111111111100000000000000000000111111111111111111111111111111000000000000000000000000000000000111111111111111111111111111111111111111111000000000000000000001111111111111111111111111110000000000000000000000000000000000001110011111111111111111111111111111111111111100000000000000000000011111111111111111100000000000000000000000000000000000000000000000001111111111111111111111111111111111111000000000000000000001111111111111111111000000000000000000000000000000000000000000000000011111111111111111111111111111111111100000000000000000000011111111111111111100000000000000000000000000000000000000000000000000011111111111111111111111111111111111000000000000000000001111111111111111100000000000000000000000000000000000000000000000000000000111111111111111111111111111111110000000000000000000000000111111111100000000000000000000000000000000000000000000000000111111111111111111111111111111111111111000000000000000000000000011111111100000000000000000000000000000000000000000000000000011111111111111111111111111111110001111100000000000000000000000000111110000000000000000000000000000000000000000000000000000001111111111111111111111111111111000000000000000000000000000000000001110000000000000000000000000000000000000000000000000000000011111111111111111111111111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001111111111111111111111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000111111111111111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011111111111111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000111111111111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011111111111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011111111111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011111111111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001111111111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010110000000000000000000000".charAt((i10 * 124) + i9) == '1';
} catch (Throwable th) {
a(th, "CoreUtil", "isChina");
return true;
}
}
private static boolean a(double d9, double d10, double d11, double d12, double d13, double d14) {
return Math.abs(b(d9, d10, d11, d12, d13, d14)) < 1.0E-9d && (d9 - d11) * (d9 - d13) <= 0.0d && (d10 - d12) * (d10 - d14) <= 0.0d;
}
private static boolean a(double d9, double d10, double d11, double d12, double d13, double d14, double d15) {
double d16 = d11 - d9;
double d17 = d15 - d14;
double d18 = d12 - d10;
double d19 = 180.0d - d13;
double d20 = (d16 * d17) - (d18 * d19);
if (d20 != 0.0d) {
double d21 = d10 - d14;
double d22 = d9 - d13;
double d23 = ((d19 * d21) - (d17 * d22)) / d20;
double d24 = ((d21 * d16) - (d22 * d18)) / d20;
if (d23 >= 0.0d && d23 <= 1.0d && d24 >= 0.0d && d24 <= 1.0d) {
return true;
}
}
return false;
}
public static boolean a(DPoint dPoint, List<DPoint> list) {
int i9;
double longitude = dPoint.getLongitude();
double latitude = dPoint.getLatitude();
double latitude2 = dPoint.getLatitude();
if (!list.get(0).equals(list.get(list.size() - 1))) {
list.add(list.get(0));
}
int i10 = 0;
int i11 = 0;
while (i10 < list.size() - 1) {
double longitude2 = list.get(i10).getLongitude();
double latitude3 = list.get(i10).getLatitude();
int i12 = i10 + 1;
double longitude3 = list.get(i12).getLongitude();
double latitude4 = list.get(i12).getLatitude();
if (a(longitude, latitude, longitude2, latitude3, longitude3, latitude4)) {
return true;
}
if (Math.abs(latitude4 - latitude3) >= 1.0E-9d) {
if (!a(longitude2, latitude3, longitude, latitude, 180.0d, latitude2)) {
if (!a(longitude3, latitude4, longitude, latitude, 180.0d, latitude2)) {
i9 = i12;
if (a(longitude2, latitude3, longitude3, latitude4, longitude, latitude, latitude2)) {
i11++;
}
}
}
i10 = i9;
}
i9 = i12;
i10 = i9;
}
return i11 % 2 != 0;
}
private static double b(double d9, double d10, double d11, double d12, double d13, double d14) {
return ((d11 - d9) * (d14 - d10)) - ((d13 - d9) * (d12 - d10));
}
public static String b() {
return f9992d;
}
public static String b(Context context) {
return s.a(l.e(context));
}
private static byte[] b(String str) {
if (str == null || str.length() < 2) {
return new byte[0];
}
String lowerCase = str.toLowerCase(Locale.US);
int length = lowerCase.length() / 2;
byte[] bArr = new byte[length];
for (int i9 = 0; i9 < length; i9++) {
int i10 = i9 * 2;
bArr[i9] = (byte) (fy.f(lowerCase.substring(i10, i10 + 2)) & 255);
}
return bArr;
}
public static w c() {
try {
if (f10005q == null) {
f10005q = new w.a("loc", "6.2.0", "AMAP_Location_SDK_Android 6.2.0").a(e()).a("6.2.0").a();
}
} catch (Throwable th) {
a(th, "CoreUtil", "getSDKInfo");
}
return f10005q;
}
public static void c(Context context) {
try {
if (x.b(context)) {
f9991c = "http://abroad.apilocate.amap.com/mobile/binary";
f9992d = "http://abroad.apilocate.amap.com/mobile/binary";
return;
}
f9991c = "http://apilocate.amap.com/mobile/binary";
f9992d = "http://dualstack-a.apilocate.amap.com/mobile/binary";
} catch (Throwable th) {
a(th, "CoreUtil", "changeUrl");
}
}
public static String d() {
return f9994f;
}
private static String[] e() {
return (String[]) f10004p.clone();
}
private static void f() {
try {
if (f10001m == null) {
f10001m = new HashMap<>(16);
}
f10001m.clear();
f10001m.put("fe643c382e5c3b3962141f1a2e815a78", "FB923EE67A8B4032DAA517DD8CD7A26FF7C25B0C3663F92A0B61251C4FFFA858DF169D61321C3E7919CB67DF8EFEC827");
f10001m.put("9a571aa113ad987d626c0457828962e6", "D2FF99A88BEB04683D89470D4FA72B1749DA456AB0D0F1A476477CE5A6874F53A9106423D905F9D808C0FCE8E7F1E04AC642F01FE41D0C7D933971F45CBA72B7");
f10001m.put("668319f11506def6208d6afe320dfd52", "53E53D46011A6BBAEA4FAE5442E659E0577CDD336F930C28635C322FB3F51C3C63F7FBAC9EAE448DFA2E5E5D716C4807");
} catch (Throwable th) {
a(th, "CoreUtil", "initUrlHash");
}
}
}