# /**********************************************************************************************
# * Key Format: 
# * 
# * 	 For level 1 data, the key is the ISO3166-2 code. An ISO3166-2 code is composed as follows: 
# * a two letter country code followed by up to three alphanumeric characters for the level 1 administration.
# *
# * 	 For level 2 data, the key is the ISO3166-2 code followed by six digits. The leftmost two digits indicate
# * the level 1 container of a level 2 administration (i.e. California is a level 1 container for Orange County
# * which is a level 2 administration).  The two digits were taken from a lexicographic sorting of all the
# * level 1 administrations within a country. Similarly, the four leftmost digits indicate a level 2 administration.
# * Again, these four digits are an index into the lexicographic sorting of all level 2 administrations within 
# * a level 1 administration. 
# ************************************************************************************************/

# MOROCCO_names.properties # Level 0
MAR = Morocco

# Level 1 (admin 1 = e.g., state)
MA-C = Centre      
MA-CEN = Centre Nord
MA-CES = Centre Sud
MA-N = Nord Ouest  
MA-OR = Oriental   
MA-S = Sud         
MA-TE = Tensift    

# Level 2 (admin 2 = e.g., country)
# Generated Key Details :  Level 1 ( MA-N = NORD OUEST ). Level 2 ( 390010 = TETOUAN ). 
MA-N-G390010 = Tetouan          
# Generated Key Details :  Level 1 ( MA-N = NORD OUEST ). Level 2 ( 390009 = TANGER ). 
MA-N-G390009 = Tanger           
# Generated Key Details :  Level 1 ( MA-N = NORD OUEST ). Level 2 ( 390004 = LARACHE ). 
MA-N-G390004 = Larache          
# Generated Key Details :  Level 1 ( MA-OR = ORIENTAL ). Level 2 ( 400002 = NADOR ). 
MA-OR-G400002 = Nador           
# Generated Key Details :  Level 1 ( MA-N = NORD OUEST ). Level 2 ( 390001 = CHEFCHAOUENE ). 
MA-N-G390001 = Chefchaouene     
# Generated Key Details :  Level 1 ( MA-CEN = CENTRE NORD ). Level 2 ( 150001 = AL HOCEIMA ). 
MA-CEN-G150001 = Al Hoceima     
# Generated Key Details :  Level 1 ( MA-OR = ORIENTAL ). Level 2 ( 400003 = OUJDA ). 
MA-OR-G400003 = Oujda           
# Generated Key Details :  Level 1 ( MA-N = NORD OUEST ). Level 2 ( 390002 = KENITRA ). 
MA-N-G390002 = Kenitra          
# Generated Key Details :  Level 1 ( MA-N = NORD OUEST ). Level 2 ( 390007 = SIDI KACEM ). 
MA-N-G390007 = Sidi Kacem       
# Generated Key Details :  Level 1 ( MA-CEN = CENTRE NORD ). Level 2 ( 150005 = TAZA ). 
MA-CEN-G150005 = Taza           
# Generated Key Details :  Level 1 ( MA-CEN = CENTRE NORD ). Level 2 ( 150004 = TAOUNATE ). 
MA-CEN-G150004 = Taounate       
# Generated Key Details :  Level 1 ( MA-CEN = CENTRE NORD ). Level 2 ( 150003 = FES ). 
MA-CEN-G150003 = Fes            
# Generated Key Details :  Level 1 ( MA-CES = CENTRE SUD ). Level 2 ( 160004 = MEKNES ). 
MA-CES-G160004 = Meknes         
# Generated Key Details :  Level 1 ( MA-N = NORD OUEST ). Level 2 ( 390003 = KHEMISSET ). 
MA-N-G390003 = Khemisset        
# Generated Key Details :  Level 1 ( MA-N = NORD OUEST ). Level 2 ( 390006 = SALE ). 
MA-N-G390006 = Sale             
# Generated Key Details :  Level 1 ( MA-N = NORD OUEST ). Level 2 ( 390005 = RABAT ). 
MA-N-G390005 = Rabat            
# Generated Key Details :  Level 1 ( MA-N = NORD OUEST ). Level 2 ( 390008 = SKHIRATE TEMARA ). 
MA-N-G390008 = Skhirate Temara  
# Generated Key Details :  Level 1 ( MA-CEN = CENTRE NORD ). Level 2 ( 150002 = BOULMANE ). 
MA-CEN-G150002 = Boulmane       
# Generated Key Details :  Level 1 ( MA-C = CENTRE ). Level 2 ( 140005 = BEN SLIMANE ). 
MA-C-G140005 = Ben Slimane      
# Generated Key Details :  Level 1 ( MA-CES = CENTRE SUD ). Level 2 ( 160002 = IFRANE ). 
MA-CES-G160002 = Ifrane         
# Generated Key Details :  Level 1 ( MA-C = CENTRE ). Level 2 ( 140012 = SIDI BERN./MOHAM.-ZNATA ). 
MA-C-G140012 = Sidi Bern./moham.-ZNATA
# Generated Key Details :  Level 1 ( MA-OR = ORIENTAL ). Level 2 ( 400001 = FIGUIG ). 
MA-OR-G400001 = Figuig          
# Generated Key Details :  Level 1 ( MA-C = CENTRE ). Level 2 ( 140002 = AIN SEBAA/HAY M. ). 
MA-C-G140002 = Ain Sebaa/hay M. 
# Generated Key Details :  Level 1 ( MA-C = CENTRE ). Level 2 ( 140008 = CASA-ANFA ). 
MA-C-G140008 = Casa-Anfa        
# Generated Key Details :  Level 1 ( MA-C = CENTRE ). Level 2 ( 140003 = AL FIDA/DERB SUL ). 
MA-C-G140003 = Al Fida/derb Sul 
# Generated Key Details :  Level 1 ( MA-C = CENTRE ). Level 2 ( 140006 = BEN-MSICK/OTHMAN ). 
MA-C-G140006 = Ben-Msick/othman 
# Generated Key Details :  Level 1 ( MA-C = CENTRE ). Level 2 ( 140001 = AIN CHOCK ). 
MA-C-G140001 = Ain Chock        
# Generated Key Details :  Level 1 ( MA-C = CENTRE ). Level 2 ( 140011 = SETTAT ). 
MA-C-G140011 = Settat           
# Generated Key Details :  Level 1 ( MA-C = CENTRE ). Level 2 ( 140009 = EL JADIDA ). 
MA-C-G140009 = El Jadida        
# Generated Key Details :  Level 1 ( MA-CES = CENTRE SUD ). Level 2 ( 160003 = KHENIFRA ). 
MA-CES-G160003 = Khenifra       
# Generated Key Details :  Level 1 ( MA-C = CENTRE ). Level 2 ( 140010 = KHOURIBGA ). 
MA-C-G140010 = Khouribga        
# Generated Key Details :  Level 1 ( MA-TE = TENSIFT ). Level 2 ( 560001 = EL KELAA ). 
MA-TE-G560001 = El Kelaa        
# Generated Key Details :  Level 1 ( MA-C = CENTRE ). Level 2 ( 140007 = BENI MELLAL ). 
MA-C-G140007 = Beni Mellal      
# Generated Key Details :  Level 1 ( MA-TE = TENSIFT ). Level 2 ( 560004 = SAFI ). 
MA-TE-G560004 = Safi            
# Generated Key Details :  Level 1 ( MA-CES = CENTRE SUD ). Level 2 ( 160001 = ERRACHIDIA ). 
MA-CES-G160001 = Errachidia     
# Generated Key Details :  Level 1 ( MA-C = CENTRE ). Level 2 ( 140004 = AZILAL ). 
MA-C-G140004 = Azilal           
# Generated Key Details :  Level 1 ( MA-TE = TENSIFT ). Level 2 ( 560003 = MARRAKESH ). 
MA-TE-G560003 = Marrakesh       
# Generated Key Details :  Level 1 ( MA-S = SUD ). Level 2 ( 490006 = OUARZAZATE ). 
MA-S-G490006 = Ouarzazate       
# Generated Key Details :  Level 1 ( MA-TE = TENSIFT ). Level 2 ( 560002 = ESSAOUIRA ). 
MA-TE-G560002 = Essaouira       
# Generated Key Details :  Level 1 ( MA-S = SUD ). Level 2 ( 490009 = TAROUDANT ). 
MA-S-G490009 = Taroudant        
# Generated Key Details :  Level 1 ( MA-S = SUD ). Level 2 ( 490001 = AGADIR ). 
MA-S-G490001 = Agadir           
# Generated Key Details :  Level 1 ( MA-S = SUD ). Level 2 ( 490010 = TATA ). 
MA-S-G490010 = Tata             
# Generated Key Details :  Level 1 ( MA-S = SUD ). Level 2 ( 490011 = TIZNIT ). 
MA-S-G490011 = Tiznit           
# Generated Key Details :  Level 1 ( MA-S = SUD ). Level 2 ( 490004 = GUELMIN ). 
MA-S-G490004 = Guelmin          
# Generated Key Details :  Level 1 ( MA-S = SUD ). Level 2 ( 490008 = TAN-TAN ). 
MA-S-G490008 = Tan-Tan          
# Generated Key Details :  Level 1 ( MA-S = SUD ). Level 2 ( 490005 = LAAYOUNE ). 
MA-S-G490005 = Laayoune         
# Generated Key Details :  Level 1 ( MA-S = SUD ). Level 2 ( 490003 = ES-SEMARA ). 
MA-S-G490003 = Es-Semara        
# Generated Key Details :  Level 1 ( MA-S = SUD ). Level 2 ( 490002 = BOUJDOUR ). 
MA-S-G490002 = Boujdour         
# Generated Key Details :  Level 1 ( MA-S = SUD ). Level 2 ( 490007 = OUED ED DAHAB ). 
MA-S-G490007 = Oued Ed Dahab    
                                