# Copyright (C) 2011 The Libphonenumber Authors

# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at

# http://www.apache.org/licenses/LICENSE-2.0

# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

# Generated from:
# http://www.itu.int/oth/T0202000033/en [2007-06-11]
# http://en.wikipedia.org/wiki/+53 [438962205]

5321|Guantánamo Province
5322|Santiago de Cuba Province
5323|Granma Province
5324|Holguín Province
5331|Las Tunas Province
5332|Camagüey Province
5333|Ciego de Ávila Province
5341|Sancti Spíritus Province
5342|Villa Clara Province
5343|Cienfuegos Province
5345|Matanzas Province
5346|Isle of Youth
5347|Havana Province
5348|Pinar del Río Province
537|Havana City
