Skip to content
Toggle navigation
P
Projects
G
Groups
S
Snippets
Help
SDK
/
exoplayer
This project
Loading...
Sign in
Toggle navigation
Go to a project
Project
Repository
Issues
0
Merge Requests
0
Pipelines
Wiki
Snippets
Settings
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Commit
6f73ac65
authored
Mar 24, 2021
by
tonihei
Committed by
Ian Baker
Mar 24, 2021
Browse files
Options
_('Browse Files')
Download
Email Patches
Plain Diff
Add 5G-SA initial bitrate estimates to bandwidth meter.
PiperOrigin-RevId: 364810286
parent
e2abc961
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
255 additions
and
252 deletions
library/core/src/main/java/com/google/android/exoplayer2/upstream/DefaultBandwidthMeter.java
library/core/src/main/java/com/google/android/exoplayer2/upstream/DefaultBandwidthMeter.java
View file @
6f73ac65
...
@@ -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
,
60
0_000L
);
ImmutableList
.
of
(
6_
200_000L
,
3_900_000L
,
2_300_000L
,
1_300_000L
,
62
0_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
(
2
30_000L
,
159_000L
,
142_000L
,
127_000L
,
112
_000L
);
ImmutableList
.
of
(
2
48_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
,
9
4
0_000L
,
760_000L
,
520_000L
);
ImmutableList
.
of
(
2_200_000L
,
1_300_000L
,
9
5
0_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
,
6
6
0_000L
);
ImmutableList
.
of
(
4_400_000L
,
2_300_000L
,
1_500_000L
,
1_100_000L
,
6
4
0_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
();
}
}
}
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment