Commit 6f73ac65 by tonihei Committed by Ian Baker

Add 5G-SA initial bitrate estimates to bandwidth meter.

PiperOrigin-RevId: 364810286
parent e2abc961
...@@ -44,30 +44,34 @@ public final class DefaultBandwidthMeter implements BandwidthMeter, TransferList ...@@ -44,30 +44,34 @@ public final class DefaultBandwidthMeter implements BandwidthMeter, TransferList
/** /**
* Country groups used to determine the default initial bitrate estimate. The group assignment for * Country groups used to determine the default initial bitrate estimate. The group assignment for
* each country is a list for [Wifi, 2G, 3G, 4G, 5G_NSA]. * each country is a list for [Wifi, 2G, 3G, 4G, 5G_NSA, 5G_SA].
*/ */
public static final ImmutableListMultimap<String, Integer> public static final ImmutableListMultimap<String, Integer>
DEFAULT_INITIAL_BITRATE_COUNTRY_GROUPS = createInitialBitrateCountryGroupAssignment(); DEFAULT_INITIAL_BITRATE_COUNTRY_GROUPS = createInitialBitrateCountryGroupAssignment();
/** Default initial Wifi bitrate estimate in bits per second. */ /** Default initial Wifi bitrate estimate in bits per second. */
public static final ImmutableList<Long> DEFAULT_INITIAL_BITRATE_ESTIMATES_WIFI = public static final ImmutableList<Long> DEFAULT_INITIAL_BITRATE_ESTIMATES_WIFI =
ImmutableList.of(6_100_000L, 3_900_000L, 2_300_000L, 1_300_000L, 600_000L); ImmutableList.of(6_200_000L, 3_900_000L, 2_300_000L, 1_300_000L, 620_000L);
/** Default initial 2G bitrate estimates in bits per second. */ /** Default initial 2G bitrate estimates in bits per second. */
public static final ImmutableList<Long> DEFAULT_INITIAL_BITRATE_ESTIMATES_2G = public static final ImmutableList<Long> DEFAULT_INITIAL_BITRATE_ESTIMATES_2G =
ImmutableList.of(230_000L, 159_000L, 142_000L, 127_000L, 112_000L); ImmutableList.of(248_000L, 160_000L, 142_000L, 127_000L, 113_000L);
/** Default initial 3G bitrate estimates in bits per second. */ /** Default initial 3G bitrate estimates in bits per second. */
public static final ImmutableList<Long> DEFAULT_INITIAL_BITRATE_ESTIMATES_3G = public static final ImmutableList<Long> DEFAULT_INITIAL_BITRATE_ESTIMATES_3G =
ImmutableList.of(2_200_000L, 1_300_000L, 940_000L, 760_000L, 520_000L); ImmutableList.of(2_200_000L, 1_300_000L, 950_000L, 760_000L, 520_000L);
/** Default initial 4G bitrate estimates in bits per second. */ /** Default initial 4G bitrate estimates in bits per second. */
public static final ImmutableList<Long> DEFAULT_INITIAL_BITRATE_ESTIMATES_4G = public static final ImmutableList<Long> DEFAULT_INITIAL_BITRATE_ESTIMATES_4G =
ImmutableList.of(4_400_000L, 2_300_000L, 1_500_000L, 1_100_000L, 660_000L); ImmutableList.of(4_400_000L, 2_300_000L, 1_500_000L, 1_100_000L, 640_000L);
/** Default initial 5G-NSA bitrate estimates in bits per second. */ /** Default initial 5G-NSA bitrate estimates in bits per second. */
public static final ImmutableList<Long> DEFAULT_INITIAL_BITRATE_ESTIMATES_5G_NSA = public static final ImmutableList<Long> DEFAULT_INITIAL_BITRATE_ESTIMATES_5G_NSA =
ImmutableList.of(13_000_000L, 9_100_000L, 6_300_000L, 4_000_000L, 2_000_000L); ImmutableList.of(10_000_000L, 7_200_000L, 5_000_000L, 2_700_000L, 1_600_000L);
/** Default initial 5G-SA bitrate estimates in bits per second. */
public static final ImmutableList<Long> DEFAULT_INITIAL_BITRATE_ESTIMATES_5G_SA =
ImmutableList.of(2_600_000L, 2_200_000L, 2_000_000L, 1_500_000L, 470_000L);
/** /**
* Default initial bitrate estimate used when the device is offline or the network type cannot be * Default initial bitrate estimate used when the device is offline or the network type cannot be
...@@ -88,6 +92,8 @@ public final class DefaultBandwidthMeter implements BandwidthMeter, TransferList ...@@ -88,6 +92,8 @@ public final class DefaultBandwidthMeter implements BandwidthMeter, TransferList
private static final int COUNTRY_GROUP_INDEX_4G = 3; private static final int COUNTRY_GROUP_INDEX_4G = 3;
/** Index for the 5G-NSA group index in {@link #DEFAULT_INITIAL_BITRATE_COUNTRY_GROUPS}. */ /** Index for the 5G-NSA group index in {@link #DEFAULT_INITIAL_BITRATE_COUNTRY_GROUPS}. */
private static final int COUNTRY_GROUP_INDEX_5G_NSA = 4; private static final int COUNTRY_GROUP_INDEX_5G_NSA = 4;
/** Index for the 5G-SA group index in {@link #DEFAULT_INITIAL_BITRATE_COUNTRY_GROUPS}. */
private static final int COUNTRY_GROUP_INDEX_5G_SA = 5;
@Nullable private static DefaultBandwidthMeter singletonInstance; @Nullable private static DefaultBandwidthMeter singletonInstance;
...@@ -227,9 +233,7 @@ public final class DefaultBandwidthMeter implements BandwidthMeter, TransferList ...@@ -227,9 +233,7 @@ public final class DefaultBandwidthMeter implements BandwidthMeter, TransferList
groupIndices.get(COUNTRY_GROUP_INDEX_5G_NSA))); groupIndices.get(COUNTRY_GROUP_INDEX_5G_NSA)));
result.put( result.put(
C.NETWORK_TYPE_5G_SA, C.NETWORK_TYPE_5G_SA,
// TODO: Retrieve actual 5G-SA estimates. DEFAULT_INITIAL_BITRATE_ESTIMATES_5G_SA.get(groupIndices.get(COUNTRY_GROUP_INDEX_5G_SA)));
DEFAULT_INITIAL_BITRATE_ESTIMATES_5G_NSA.get(
groupIndices.get(COUNTRY_GROUP_INDEX_5G_NSA)));
// Assume default Wifi speed for Ethernet to prevent using the slower fallback. // Assume default Wifi speed for Ethernet to prevent using the slower fallback.
result.put( result.put(
C.NETWORK_TYPE_ETHERNET, C.NETWORK_TYPE_ETHERNET,
...@@ -240,7 +244,7 @@ public final class DefaultBandwidthMeter implements BandwidthMeter, TransferList ...@@ -240,7 +244,7 @@ public final class DefaultBandwidthMeter implements BandwidthMeter, TransferList
private static ImmutableList<Integer> getCountryGroupIndices(String countryCode) { private static ImmutableList<Integer> getCountryGroupIndices(String countryCode) {
ImmutableList<Integer> groupIndices = DEFAULT_INITIAL_BITRATE_COUNTRY_GROUPS.get(countryCode); ImmutableList<Integer> groupIndices = DEFAULT_INITIAL_BITRATE_COUNTRY_GROUPS.get(countryCode);
// Assume median group if not found. // Assume median group if not found.
return groupIndices.isEmpty() ? ImmutableList.of(2, 2, 2, 2, 2) : groupIndices; return groupIndices.isEmpty() ? ImmutableList.of(2, 2, 2, 2, 2, 2) : groupIndices;
} }
} }
...@@ -459,247 +463,246 @@ public final class DefaultBandwidthMeter implements BandwidthMeter, TransferList ...@@ -459,247 +463,246 @@ public final class DefaultBandwidthMeter implements BandwidthMeter, TransferList
private static ImmutableListMultimap<String, Integer> private static ImmutableListMultimap<String, Integer>
createInitialBitrateCountryGroupAssignment() { createInitialBitrateCountryGroupAssignment() {
ImmutableListMultimap.Builder<String, Integer> countryGroupAssignment = return ImmutableListMultimap.<String, Integer>builder()
ImmutableListMultimap.builder(); .putAll("AD", 1, 2, 0, 0, 2, 2)
countryGroupAssignment.putAll("AD", 1, 2, 0, 0, 2); .putAll("AE", 1, 4, 4, 4, 2, 2)
countryGroupAssignment.putAll("AE", 1, 4, 4, 4, 2); .putAll("AF", 4, 4, 3, 4, 2, 2)
countryGroupAssignment.putAll("AF", 4, 4, 4, 4, 2); .putAll("AG", 4, 2, 1, 4, 2, 2)
countryGroupAssignment.putAll("AG", 4, 2, 1, 4, 2); .putAll("AI", 1, 2, 2, 2, 2, 2)
countryGroupAssignment.putAll("AI", 1, 2, 2, 2, 2); .putAll("AL", 1, 1, 1, 1, 2, 2)
countryGroupAssignment.putAll("AL", 1, 1, 1, 1, 2); .putAll("AM", 2, 2, 1, 3, 2, 2)
countryGroupAssignment.putAll("AM", 2, 2, 1, 3, 2); .putAll("AO", 3, 4, 3, 1, 2, 2)
countryGroupAssignment.putAll("AO", 3, 4, 3, 1, 2); .putAll("AR", 2, 4, 2, 1, 2, 2)
countryGroupAssignment.putAll("AR", 2, 4, 2, 1, 2); .putAll("AS", 2, 2, 3, 3, 2, 2)
countryGroupAssignment.putAll("AS", 2, 2, 3, 3, 2); .putAll("AT", 0, 1, 0, 0, 0, 2)
countryGroupAssignment.putAll("AT", 0, 2, 0, 0, 0); .putAll("AU", 0, 2, 0, 1, 1, 2)
countryGroupAssignment.putAll("AU", 0, 2, 0, 1, 1); .putAll("AW", 1, 2, 0, 4, 2, 2)
countryGroupAssignment.putAll("AW", 1, 2, 0, 4, 2); .putAll("AX", 0, 2, 2, 2, 2, 2)
countryGroupAssignment.putAll("AX", 0, 2, 2, 2, 2); .putAll("AZ", 3, 3, 3, 4, 4, 2)
countryGroupAssignment.putAll("AZ", 3, 3, 3, 4, 2); .putAll("BA", 1, 1, 0, 1, 2, 2)
countryGroupAssignment.putAll("BA", 1, 1, 0, 1, 2); .putAll("BB", 0, 2, 0, 0, 2, 2)
countryGroupAssignment.putAll("BB", 0, 2, 0, 0, 2); .putAll("BD", 2, 0, 3, 3, 2, 2)
countryGroupAssignment.putAll("BD", 2, 0, 3, 3, 2); .putAll("BE", 0, 0, 2, 3, 2, 2)
countryGroupAssignment.putAll("BE", 0, 0, 2, 3, 2); .putAll("BF", 4, 4, 4, 2, 2, 2)
countryGroupAssignment.putAll("BF", 4, 4, 4, 2, 2); .putAll("BG", 0, 1, 0, 0, 2, 2)
countryGroupAssignment.putAll("BG", 0, 1, 0, 0, 2); .putAll("BH", 1, 0, 2, 4, 2, 2)
countryGroupAssignment.putAll("BH", 1, 0, 2, 4, 3); .putAll("BI", 4, 4, 4, 4, 2, 2)
countryGroupAssignment.putAll("BI", 4, 4, 4, 4, 2); .putAll("BJ", 4, 4, 4, 4, 2, 2)
countryGroupAssignment.putAll("BJ", 4, 4, 4, 4, 2); .putAll("BL", 1, 2, 2, 2, 2, 2)
countryGroupAssignment.putAll("BL", 1, 2, 2, 2, 2); .putAll("BM", 0, 2, 0, 0, 2, 2)
countryGroupAssignment.putAll("BM", 0, 2, 0, 0, 2); .putAll("BN", 3, 2, 1, 0, 2, 2)
countryGroupAssignment.putAll("BN", 3, 2, 1, 0, 2); .putAll("BO", 1, 2, 4, 2, 2, 2)
countryGroupAssignment.putAll("BO", 1, 2, 4, 2, 2); .putAll("BQ", 1, 2, 1, 2, 2, 2)
countryGroupAssignment.putAll("BQ", 1, 2, 1, 3, 2); .putAll("BR", 2, 4, 3, 2, 2, 2)
countryGroupAssignment.putAll("BR", 2, 4, 2, 2, 3); .putAll("BS", 2, 2, 1, 3, 2, 2)
countryGroupAssignment.putAll("BS", 2, 2, 1, 3, 2); .putAll("BT", 3, 0, 3, 2, 2, 2)
countryGroupAssignment.putAll("BT", 3, 0, 3, 2, 2); .putAll("BW", 3, 4, 1, 1, 2, 2)
countryGroupAssignment.putAll("BW", 3, 4, 1, 1, 2); .putAll("BY", 1, 1, 1, 2, 2, 2)
countryGroupAssignment.putAll("BY", 1, 1, 1, 2, 2); .putAll("BZ", 2, 2, 2, 2, 2, 2)
countryGroupAssignment.putAll("BZ", 2, 2, 2, 2, 2); .putAll("CA", 0, 3, 1, 2, 4, 2)
countryGroupAssignment.putAll("CA", 0, 3, 1, 2, 4); .putAll("CD", 4, 2, 2, 1, 2, 2)
countryGroupAssignment.putAll("CD", 4, 3, 2, 1, 2); .putAll("CF", 4, 2, 3, 2, 2, 2)
countryGroupAssignment.putAll("CF", 4, 2, 3, 2, 2); .putAll("CG", 3, 4, 2, 2, 2, 2)
countryGroupAssignment.putAll("CG", 3, 4, 2, 2, 2); .putAll("CH", 0, 0, 0, 0, 1, 2)
countryGroupAssignment.putAll("CH", 0, 0, 0, 0, 2); .putAll("CI", 3, 3, 3, 3, 2, 2)
countryGroupAssignment.putAll("CI", 3, 3, 3, 3, 2); .putAll("CK", 2, 2, 3, 0, 2, 2)
countryGroupAssignment.putAll("CK", 2, 2, 3, 0, 2); .putAll("CL", 1, 1, 2, 2, 2, 2)
countryGroupAssignment.putAll("CL", 1, 1, 2, 2, 2); .putAll("CM", 3, 4, 3, 2, 2, 2)
countryGroupAssignment.putAll("CM", 3, 4, 3, 3, 2); .putAll("CN", 2, 2, 2, 1, 3, 2)
countryGroupAssignment.putAll("CN", 2, 2, 2, 1, 4); .putAll("CO", 2, 3, 4, 2, 2, 2)
countryGroupAssignment.putAll("CO", 2, 3, 4, 2, 2); .putAll("CR", 2, 3, 4, 4, 2, 2)
countryGroupAssignment.putAll("CR", 2, 3, 4, 4, 2); .putAll("CU", 4, 4, 2, 2, 2, 2)
countryGroupAssignment.putAll("CU", 4, 4, 2, 2, 2); .putAll("CV", 2, 3, 1, 0, 2, 2)
countryGroupAssignment.putAll("CV", 2, 3, 1, 0, 2); .putAll("CW", 1, 2, 0, 0, 2, 2)
countryGroupAssignment.putAll("CW", 1, 2, 0, 0, 2); .putAll("CY", 1, 1, 0, 0, 2, 2)
countryGroupAssignment.putAll("CY", 1, 1, 0, 0, 2); .putAll("CZ", 0, 1, 0, 0, 1, 2)
countryGroupAssignment.putAll("CZ", 0, 1, 0, 0, 1); .putAll("DE", 0, 0, 1, 1, 0, 2)
countryGroupAssignment.putAll("DE", 0, 0, 1, 1, 0); .putAll("DJ", 4, 0, 4, 4, 2, 2)
countryGroupAssignment.putAll("DJ", 4, 0, 4, 4, 2); .putAll("DK", 0, 0, 1, 0, 0, 2)
countryGroupAssignment.putAll("DK", 0, 0, 1, 0, 0); .putAll("DM", 1, 2, 2, 2, 2, 2)
countryGroupAssignment.putAll("DM", 1, 2, 2, 2, 2); .putAll("DO", 3, 4, 4, 4, 2, 2)
countryGroupAssignment.putAll("DO", 3, 4, 4, 4, 2); .putAll("DZ", 3, 3, 4, 4, 2, 4)
countryGroupAssignment.putAll("DZ", 3, 3, 4, 4, 2); .putAll("EC", 2, 4, 3, 1, 2, 2)
countryGroupAssignment.putAll("EC", 2, 4, 3, 2, 2); .putAll("EE", 0, 1, 0, 0, 2, 2)
countryGroupAssignment.putAll("EE", 0, 1, 0, 0, 2); .putAll("EG", 3, 4, 3, 3, 2, 2)
countryGroupAssignment.putAll("EG", 3, 4, 3, 3, 2); .putAll("EH", 2, 2, 2, 2, 2, 2)
countryGroupAssignment.putAll("EH", 2, 2, 2, 2, 2); .putAll("ER", 4, 2, 2, 2, 2, 2)
countryGroupAssignment.putAll("ER", 4, 2, 2, 2, 2); .putAll("ES", 0, 1, 1, 1, 2, 2)
countryGroupAssignment.putAll("ES", 0, 1, 1, 1, 2); .putAll("ET", 4, 4, 4, 1, 2, 2)
countryGroupAssignment.putAll("ET", 4, 4, 4, 1, 2); .putAll("FI", 0, 0, 0, 0, 0, 2)
countryGroupAssignment.putAll("FI", 0, 0, 0, 0, 0); .putAll("FJ", 3, 0, 2, 3, 2, 2)
countryGroupAssignment.putAll("FJ", 3, 0, 2, 2, 2); .putAll("FK", 4, 2, 2, 2, 2, 2)
countryGroupAssignment.putAll("FK", 4, 2, 2, 2, 2); .putAll("FM", 3, 2, 4, 4, 2, 2)
countryGroupAssignment.putAll("FM", 3, 2, 4, 4, 2); .putAll("FO", 1, 2, 0, 1, 2, 2)
countryGroupAssignment.putAll("FO", 1, 2, 0, 1, 2); .putAll("FR", 1, 1, 2, 0, 1, 2)
countryGroupAssignment.putAll("FR", 1, 1, 2, 0, 1); .putAll("GA", 3, 4, 1, 1, 2, 2)
countryGroupAssignment.putAll("GA", 3, 4, 1, 1, 2); .putAll("GB", 0, 0, 1, 1, 1, 2)
countryGroupAssignment.putAll("GB", 0, 0, 1, 1, 1); .putAll("GD", 1, 2, 2, 2, 2, 2)
countryGroupAssignment.putAll("GD", 1, 2, 2, 2, 2); .putAll("GE", 1, 1, 1, 2, 2, 2)
countryGroupAssignment.putAll("GE", 1, 1, 1, 3, 2); .putAll("GF", 2, 2, 2, 3, 2, 2)
countryGroupAssignment.putAll("GF", 2, 2, 2, 3, 2); .putAll("GG", 1, 2, 0, 0, 2, 2)
countryGroupAssignment.putAll("GG", 1, 2, 0, 0, 2); .putAll("GH", 3, 1, 3, 2, 2, 2)
countryGroupAssignment.putAll("GH", 3, 1, 3, 2, 2); .putAll("GI", 0, 2, 0, 0, 2, 2)
countryGroupAssignment.putAll("GI", 0, 2, 2, 0, 2); .putAll("GL", 1, 2, 0, 0, 2, 2)
countryGroupAssignment.putAll("GL", 1, 2, 0, 0, 2); .putAll("GM", 4, 3, 2, 4, 2, 2)
countryGroupAssignment.putAll("GM", 4, 3, 2, 4, 2); .putAll("GN", 4, 3, 4, 2, 2, 2)
countryGroupAssignment.putAll("GN", 3, 3, 4, 2, 2); .putAll("GP", 2, 1, 2, 3, 2, 2)
countryGroupAssignment.putAll("GP", 2, 1, 2, 3, 2); .putAll("GQ", 4, 2, 2, 4, 2, 2)
countryGroupAssignment.putAll("GQ", 4, 2, 2, 4, 2); .putAll("GR", 1, 2, 0, 0, 2, 2)
countryGroupAssignment.putAll("GR", 1, 2, 0, 1, 2); .putAll("GT", 3, 2, 3, 1, 2, 2)
countryGroupAssignment.putAll("GT", 3, 2, 2, 1, 2); .putAll("GU", 1, 2, 3, 4, 2, 2)
countryGroupAssignment.putAll("GU", 1, 2, 3, 4, 2); .putAll("GW", 4, 4, 4, 4, 2, 2)
countryGroupAssignment.putAll("GW", 4, 4, 4, 4, 2); .putAll("GY", 3, 3, 3, 4, 2, 2)
countryGroupAssignment.putAll("GY", 3, 3, 3, 4, 2); .putAll("HK", 0, 1, 2, 3, 2, 0)
countryGroupAssignment.putAll("HK", 0, 1, 2, 3, 2); .putAll("HN", 3, 1, 3, 3, 2, 2)
countryGroupAssignment.putAll("HN", 3, 1, 3, 3, 2); .putAll("HR", 1, 1, 0, 0, 3, 2)
countryGroupAssignment.putAll("HR", 1, 1, 0, 0, 3); .putAll("HT", 4, 4, 4, 4, 2, 2)
countryGroupAssignment.putAll("HT", 4, 4, 4, 4, 2); .putAll("HU", 0, 0, 0, 0, 0, 2)
countryGroupAssignment.putAll("HU", 0, 0, 0, 0, 1); .putAll("ID", 3, 2, 3, 3, 2, 2)
countryGroupAssignment.putAll("ID", 3, 2, 3, 3, 2); .putAll("IE", 0, 0, 1, 1, 3, 2)
countryGroupAssignment.putAll("IE", 0, 0, 1, 1, 3); .putAll("IL", 1, 0, 2, 3, 4, 2)
countryGroupAssignment.putAll("IL", 1, 0, 2, 3, 4); .putAll("IM", 0, 2, 0, 1, 2, 2)
countryGroupAssignment.putAll("IM", 0, 2, 0, 1, 2); .putAll("IN", 2, 1, 3, 3, 2, 2)
countryGroupAssignment.putAll("IN", 2, 1, 3, 3, 2); .putAll("IO", 4, 2, 2, 4, 2, 2)
countryGroupAssignment.putAll("IO", 4, 2, 2, 4, 2); .putAll("IQ", 3, 3, 4, 4, 2, 2)
countryGroupAssignment.putAll("IQ", 3, 3, 4, 4, 2); .putAll("IR", 3, 2, 3, 2, 2, 2)
countryGroupAssignment.putAll("IR", 3, 2, 3, 2, 2); .putAll("IS", 0, 2, 0, 0, 2, 2)
countryGroupAssignment.putAll("IS", 0, 2, 0, 0, 2); .putAll("IT", 0, 4, 0, 1, 2, 2)
countryGroupAssignment.putAll("IT", 0, 4, 1, 1, 2); .putAll("JE", 2, 2, 1, 2, 2, 2)
countryGroupAssignment.putAll("JE", 2, 2, 1, 2, 2); .putAll("JM", 3, 3, 4, 4, 2, 2)
countryGroupAssignment.putAll("JM", 3, 3, 4, 4, 2); .putAll("JO", 2, 2, 1, 1, 2, 2)
countryGroupAssignment.putAll("JO", 2, 2, 1, 1, 2); .putAll("JP", 0, 0, 0, 0, 2, 1)
countryGroupAssignment.putAll("JP", 0, 0, 0, 0, 3); .putAll("KE", 3, 4, 2, 2, 2, 2)
countryGroupAssignment.putAll("KE", 3, 4, 2, 2, 2); .putAll("KG", 2, 0, 1, 1, 2, 2)
countryGroupAssignment.putAll("KG", 2, 0, 1, 1, 2); .putAll("KH", 1, 0, 4, 3, 2, 2)
countryGroupAssignment.putAll("KH", 1, 0, 4, 3, 2); .putAll("KI", 4, 2, 4, 3, 2, 2)
countryGroupAssignment.putAll("KI", 4, 2, 4, 3, 2); .putAll("KM", 4, 3, 2, 3, 2, 2)
countryGroupAssignment.putAll("KM", 4, 3, 3, 3, 2); .putAll("KN", 1, 2, 2, 2, 2, 2)
countryGroupAssignment.putAll("KN", 1, 2, 2, 2, 2); .putAll("KP", 4, 2, 2, 2, 2, 2)
countryGroupAssignment.putAll("KP", 4, 2, 2, 2, 2); .putAll("KR", 0, 0, 1, 3, 1, 2)
countryGroupAssignment.putAll("KR", 0, 0, 1, 3, 1); .putAll("KW", 1, 3, 1, 1, 1, 2)
countryGroupAssignment.putAll("KW", 1, 3, 0, 0, 0); .putAll("KY", 1, 2, 0, 2, 2, 2)
countryGroupAssignment.putAll("KY", 1, 2, 0, 2, 2); .putAll("KZ", 2, 2, 2, 3, 2, 2)
countryGroupAssignment.putAll("KZ", 2, 2, 2, 3, 2); .putAll("LA", 1, 2, 1, 1, 2, 2)
countryGroupAssignment.putAll("LA", 2, 2, 1, 1, 2); .putAll("LB", 3, 2, 0, 0, 2, 2)
countryGroupAssignment.putAll("LB", 3, 2, 0, 0, 2); .putAll("LC", 1, 2, 0, 0, 2, 2)
countryGroupAssignment.putAll("LC", 1, 2, 0, 1, 2); .putAll("LI", 0, 2, 2, 2, 2, 2)
countryGroupAssignment.putAll("LI", 0, 2, 2, 2, 2); .putAll("LK", 2, 0, 2, 3, 2, 2)
countryGroupAssignment.putAll("LK", 2, 0, 2, 3, 2); .putAll("LR", 3, 4, 4, 3, 2, 2)
countryGroupAssignment.putAll("LR", 3, 4, 4, 3, 2); .putAll("LS", 3, 3, 2, 3, 2, 2)
countryGroupAssignment.putAll("LS", 3, 3, 2, 3, 2); .putAll("LT", 0, 0, 0, 0, 2, 2)
countryGroupAssignment.putAll("LT", 0, 0, 0, 0, 2); .putAll("LU", 1, 0, 1, 1, 2, 2)
countryGroupAssignment.putAll("LU", 1, 0, 1, 1, 2); .putAll("LV", 0, 0, 0, 0, 2, 2)
countryGroupAssignment.putAll("LV", 0, 0, 0, 0, 2); .putAll("LY", 4, 2, 4, 3, 2, 2)
countryGroupAssignment.putAll("LY", 4, 2, 4, 4, 2); .putAll("MA", 3, 2, 2, 1, 2, 2)
countryGroupAssignment.putAll("MA", 3, 2, 2, 1, 2); .putAll("MC", 0, 2, 0, 0, 2, 2)
countryGroupAssignment.putAll("MC", 0, 2, 0, 0, 2); .putAll("MD", 1, 2, 0, 0, 2, 2)
countryGroupAssignment.putAll("MD", 1, 2, 0, 0, 2); .putAll("ME", 1, 2, 0, 1, 2, 2)
countryGroupAssignment.putAll("ME", 1, 2, 0, 1, 2); .putAll("MF", 2, 2, 1, 1, 2, 2)
countryGroupAssignment.putAll("MF", 1, 2, 1, 1, 2); .putAll("MG", 3, 4, 2, 2, 2, 2)
countryGroupAssignment.putAll("MG", 3, 4, 2, 2, 2); .putAll("MH", 4, 2, 2, 4, 2, 2)
countryGroupAssignment.putAll("MH", 4, 2, 2, 4, 2); .putAll("MK", 1, 1, 0, 0, 2, 2)
countryGroupAssignment.putAll("MK", 1, 1, 0, 0, 2); .putAll("ML", 4, 4, 2, 2, 2, 2)
countryGroupAssignment.putAll("ML", 4, 4, 2, 2, 2); .putAll("MM", 2, 3, 3, 3, 2, 2)
countryGroupAssignment.putAll("MM", 2, 3, 3, 3, 2); .putAll("MN", 2, 4, 2, 2, 2, 2)
countryGroupAssignment.putAll("MN", 2, 4, 1, 2, 2); .putAll("MO", 0, 2, 4, 4, 2, 2)
countryGroupAssignment.putAll("MO", 0, 2, 4, 4, 2); .putAll("MP", 0, 2, 2, 2, 2, 2)
countryGroupAssignment.putAll("MP", 0, 2, 2, 2, 2); .putAll("MQ", 2, 2, 2, 3, 2, 2)
countryGroupAssignment.putAll("MQ", 2, 2, 2, 3, 2); .putAll("MR", 3, 0, 4, 3, 2, 2)
countryGroupAssignment.putAll("MR", 3, 0, 4, 3, 2); .putAll("MS", 1, 2, 2, 2, 2, 2)
countryGroupAssignment.putAll("MS", 1, 2, 2, 2, 2); .putAll("MT", 0, 2, 0, 0, 2, 2)
countryGroupAssignment.putAll("MT", 0, 2, 0, 0, 2); .putAll("MU", 2, 1, 1, 2, 2, 2)
countryGroupAssignment.putAll("MU", 3, 1, 1, 2, 2); .putAll("MV", 4, 3, 2, 4, 2, 2)
countryGroupAssignment.putAll("MV", 4, 3, 3, 4, 2); .putAll("MW", 4, 2, 1, 0, 2, 2)
countryGroupAssignment.putAll("MW", 4, 2, 1, 0, 2); .putAll("MX", 2, 4, 4, 4, 4, 2)
countryGroupAssignment.putAll("MX", 2, 4, 3, 4, 2); .putAll("MY", 1, 0, 3, 2, 2, 2)
countryGroupAssignment.putAll("MY", 1, 0, 3, 2, 2); .putAll("MZ", 3, 3, 2, 1, 2, 2)
countryGroupAssignment.putAll("MZ", 3, 3, 2, 1, 2); .putAll("NA", 4, 3, 3, 2, 2, 2)
countryGroupAssignment.putAll("NA", 4, 3, 3, 2, 2); .putAll("NC", 3, 0, 4, 4, 2, 2)
countryGroupAssignment.putAll("NC", 2, 0, 3, 4, 2); .putAll("NE", 4, 4, 4, 4, 2, 2)
countryGroupAssignment.putAll("NE", 4, 4, 4, 4, 2); .putAll("NF", 2, 2, 2, 2, 2, 2)
countryGroupAssignment.putAll("NF", 2, 2, 2, 2, 2); .putAll("NG", 3, 3, 2, 3, 2, 2)
countryGroupAssignment.putAll("NG", 3, 3, 2, 2, 2); .putAll("NI", 2, 1, 4, 4, 2, 2)
countryGroupAssignment.putAll("NI", 2, 1, 4, 4, 2); .putAll("NL", 0, 2, 3, 2, 0, 2)
countryGroupAssignment.putAll("NL", 0, 2, 3, 2, 0); .putAll("NO", 0, 1, 2, 0, 0, 2)
countryGroupAssignment.putAll("NO", 0, 1, 2, 0, 0); .putAll("NP", 2, 0, 4, 2, 2, 2)
countryGroupAssignment.putAll("NP", 2, 0, 4, 2, 2); .putAll("NR", 3, 2, 3, 1, 2, 2)
countryGroupAssignment.putAll("NR", 3, 2, 2, 1, 2); .putAll("NU", 4, 2, 2, 2, 2, 2)
countryGroupAssignment.putAll("NU", 4, 2, 2, 2, 2); .putAll("NZ", 0, 2, 1, 2, 4, 2)
countryGroupAssignment.putAll("NZ", 0, 2, 1, 2, 4); .putAll("OM", 2, 2, 1, 3, 3, 2)
countryGroupAssignment.putAll("OM", 2, 2, 1, 3, 2); .putAll("PA", 1, 3, 3, 3, 2, 2)
countryGroupAssignment.putAll("PA", 1, 3, 3, 3, 2); .putAll("PE", 2, 3, 4, 4, 2, 2)
countryGroupAssignment.putAll("PE", 2, 3, 4, 4, 2); .putAll("PF", 2, 2, 2, 1, 2, 2)
countryGroupAssignment.putAll("PF", 2, 2, 2, 1, 2); .putAll("PG", 4, 4, 3, 2, 2, 2)
countryGroupAssignment.putAll("PG", 4, 4, 3, 2, 2); .putAll("PH", 2, 1, 3, 3, 3, 2)
countryGroupAssignment.putAll("PH", 2, 1, 3, 3, 4); .putAll("PK", 3, 2, 3, 3, 2, 2)
countryGroupAssignment.putAll("PK", 3, 2, 3, 3, 2); .putAll("PL", 1, 0, 1, 2, 3, 2)
countryGroupAssignment.putAll("PL", 1, 0, 1, 2, 3); .putAll("PM", 0, 2, 2, 2, 2, 2)
countryGroupAssignment.putAll("PM", 0, 2, 2, 2, 2); .putAll("PR", 2, 1, 2, 2, 4, 3)
countryGroupAssignment.putAll("PR", 2, 1, 2, 2, 4); .putAll("PS", 3, 3, 2, 2, 2, 2)
countryGroupAssignment.putAll("PS", 3, 3, 2, 2, 2); .putAll("PT", 0, 1, 1, 0, 2, 2)
countryGroupAssignment.putAll("PT", 0, 1, 1, 0, 2); .putAll("PW", 1, 2, 4, 1, 2, 2)
countryGroupAssignment.putAll("PW", 1, 2, 4, 0, 2); .putAll("PY", 2, 0, 3, 2, 2, 2)
countryGroupAssignment.putAll("PY", 2, 0, 3, 2, 2); .putAll("QA", 2, 3, 1, 2, 3, 2)
countryGroupAssignment.putAll("QA", 2, 3, 1, 2, 3); .putAll("RE", 1, 0, 2, 2, 2, 2)
countryGroupAssignment.putAll("RE", 1, 0, 2, 2, 2); .putAll("RO", 0, 1, 0, 1, 0, 2)
countryGroupAssignment.putAll("RO", 0, 1, 0, 1, 1); .putAll("RS", 1, 2, 0, 0, 2, 2)
countryGroupAssignment.putAll("RS", 1, 2, 0, 0, 2); .putAll("RU", 0, 1, 0, 1, 4, 2)
countryGroupAssignment.putAll("RU", 0, 1, 0, 1, 2); .putAll("RW", 3, 3, 3, 1, 2, 2)
countryGroupAssignment.putAll("RW", 3, 3, 4, 1, 2); .putAll("SA", 2, 2, 2, 1, 1, 2)
countryGroupAssignment.putAll("SA", 2, 2, 2, 1, 2); .putAll("SB", 4, 2, 3, 2, 2, 2)
countryGroupAssignment.putAll("SB", 4, 2, 3, 2, 2); .putAll("SC", 4, 2, 1, 3, 2, 2)
countryGroupAssignment.putAll("SC", 4, 1, 1, 3, 2); .putAll("SD", 4, 4, 4, 4, 2, 2)
countryGroupAssignment.putAll("SD", 4, 4, 4, 4, 2); .putAll("SE", 0, 0, 0, 0, 0, 2)
countryGroupAssignment.putAll("SE", 0, 0, 0, 0, 0); .putAll("SG", 1, 0, 1, 2, 3, 2)
countryGroupAssignment.putAll("SG", 1, 0, 1, 2, 3); .putAll("SH", 4, 2, 2, 2, 2, 2)
countryGroupAssignment.putAll("SH", 4, 2, 2, 2, 2); .putAll("SI", 0, 0, 0, 0, 2, 2)
countryGroupAssignment.putAll("SI", 0, 0, 0, 0, 2); .putAll("SJ", 2, 2, 2, 2, 2, 2)
countryGroupAssignment.putAll("SJ", 2, 2, 2, 2, 2); .putAll("SK", 0, 1, 0, 0, 2, 2)
countryGroupAssignment.putAll("SK", 0, 1, 0, 0, 2); .putAll("SL", 4, 3, 4, 0, 2, 2)
countryGroupAssignment.putAll("SL", 4, 3, 4, 0, 2); .putAll("SM", 0, 2, 2, 2, 2, 2)
countryGroupAssignment.putAll("SM", 0, 2, 2, 2, 2); .putAll("SN", 4, 4, 4, 4, 2, 2)
countryGroupAssignment.putAll("SN", 4, 4, 4, 4, 2); .putAll("SO", 3, 3, 3, 4, 2, 2)
countryGroupAssignment.putAll("SO", 3, 3, 3, 4, 2); .putAll("SR", 3, 2, 2, 2, 2, 2)
countryGroupAssignment.putAll("SR", 3, 2, 2, 2, 2); .putAll("SS", 4, 4, 3, 3, 2, 2)
countryGroupAssignment.putAll("SS", 4, 4, 3, 3, 2); .putAll("ST", 2, 2, 1, 2, 2, 2)
countryGroupAssignment.putAll("ST", 2, 2, 1, 2, 2); .putAll("SV", 2, 1, 4, 3, 2, 2)
countryGroupAssignment.putAll("SV", 2, 1, 4, 3, 2); .putAll("SX", 2, 2, 1, 0, 2, 2)
countryGroupAssignment.putAll("SX", 2, 2, 1, 0, 2); .putAll("SY", 4, 3, 3, 2, 2, 2)
countryGroupAssignment.putAll("SY", 4, 3, 3, 2, 2); .putAll("SZ", 3, 3, 2, 4, 2, 2)
countryGroupAssignment.putAll("SZ", 4, 3, 2, 4, 2); .putAll("TC", 2, 2, 2, 0, 2, 2)
countryGroupAssignment.putAll("TC", 2, 2, 2, 0, 2); .putAll("TD", 4, 3, 4, 4, 2, 2)
countryGroupAssignment.putAll("TD", 4, 3, 4, 4, 2); .putAll("TG", 3, 2, 2, 4, 2, 2)
countryGroupAssignment.putAll("TG", 3, 2, 2, 4, 2); .putAll("TH", 0, 3, 2, 3, 2, 2)
countryGroupAssignment.putAll("TH", 0, 3, 2, 3, 2); .putAll("TJ", 4, 4, 4, 4, 2, 2)
countryGroupAssignment.putAll("TJ", 4, 4, 4, 4, 2); .putAll("TL", 4, 0, 4, 4, 2, 2)
countryGroupAssignment.putAll("TL", 4, 0, 4, 4, 2); .putAll("TM", 4, 2, 4, 3, 2, 2)
countryGroupAssignment.putAll("TM", 4, 2, 4, 3, 2); .putAll("TN", 2, 1, 1, 2, 2, 2)
countryGroupAssignment.putAll("TN", 2, 2, 1, 2, 2); .putAll("TO", 3, 3, 4, 3, 2, 2)
countryGroupAssignment.putAll("TO", 3, 2, 4, 3, 2); .putAll("TR", 1, 2, 1, 1, 2, 2)
countryGroupAssignment.putAll("TR", 1, 2, 0, 1, 2); .putAll("TT", 1, 4, 0, 1, 2, 2)
countryGroupAssignment.putAll("TT", 1, 4, 0, 1, 2); .putAll("TV", 3, 2, 2, 4, 2, 2)
countryGroupAssignment.putAll("TV", 3, 2, 2, 4, 2); .putAll("TW", 0, 0, 0, 0, 1, 0)
countryGroupAssignment.putAll("TW", 0, 0, 0, 0, 1); .putAll("TZ", 3, 3, 3, 2, 2, 2)
countryGroupAssignment.putAll("TZ", 3, 3, 3, 2, 2); .putAll("UA", 0, 3, 1, 1, 2, 2)
countryGroupAssignment.putAll("UA", 0, 3, 1, 1, 2); .putAll("UG", 3, 2, 3, 3, 2, 2)
countryGroupAssignment.putAll("UG", 3, 2, 3, 3, 2); .putAll("US", 1, 1, 2, 2, 4, 2)
countryGroupAssignment.putAll("US", 1, 1, 2, 2, 4); .putAll("UY", 2, 2, 1, 1, 2, 2)
countryGroupAssignment.putAll("UY", 2, 1, 1, 1, 2); .putAll("UZ", 2, 1, 3, 4, 2, 2)
countryGroupAssignment.putAll("UZ", 2, 1, 3, 4, 2); .putAll("VC", 1, 2, 2, 2, 2, 2)
countryGroupAssignment.putAll("VC", 1, 2, 2, 2, 2); .putAll("VE", 4, 4, 4, 4, 2, 2)
countryGroupAssignment.putAll("VE", 4, 4, 4, 4, 2); .putAll("VG", 2, 2, 1, 1, 2, 2)
countryGroupAssignment.putAll("VG", 2, 2, 1, 1, 2); .putAll("VI", 1, 2, 1, 2, 2, 2)
countryGroupAssignment.putAll("VI", 1, 2, 1, 2, 2); .putAll("VN", 0, 1, 3, 4, 2, 2)
countryGroupAssignment.putAll("VN", 0, 1, 3, 4, 2); .putAll("VU", 4, 0, 3, 1, 2, 2)
countryGroupAssignment.putAll("VU", 4, 0, 3, 1, 2); .putAll("WF", 4, 2, 2, 4, 2, 2)
countryGroupAssignment.putAll("WF", 4, 2, 2, 2, 2); .putAll("WS", 3, 1, 3, 1, 2, 2)
countryGroupAssignment.putAll("WS", 3, 1, 3, 1, 2); .putAll("XK", 0, 1, 1, 0, 2, 2)
countryGroupAssignment.putAll("XK", 0, 1, 1, 1, 2); .putAll("YE", 4, 4, 4, 3, 2, 2)
countryGroupAssignment.putAll("YE", 4, 4, 4, 3, 2); .putAll("YT", 4, 2, 2, 3, 2, 2)
countryGroupAssignment.putAll("YT", 4, 2, 2, 3, 2); .putAll("ZA", 3, 3, 2, 1, 2, 2)
countryGroupAssignment.putAll("ZA", 3, 3, 2, 1, 2); .putAll("ZM", 3, 2, 3, 3, 2, 2)
countryGroupAssignment.putAll("ZM", 3, 2, 3, 3, 2); .putAll("ZW", 3, 2, 4, 3, 2, 2)
countryGroupAssignment.putAll("ZW", 3, 2, 4, 3, 2); .build();
return countryGroupAssignment.build();
} }
} }
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or sign in to comment